4

タンパク質 DNA 相互作用データセットをクラスター化し、R パッケージ gplots の heatmap.2 を使用してヒートマップを描画しようとしています。私のマトリックスは対称です。ピアソンを介して実行した後に使用しているデータセット
のコピーを次に示します。

これらのグラフを生成するために私が行っている完全なプロセスは次のとおりです。私の場合、ピアソンでいくつかの相関関係を使用して距離行列を生成し、その行列を取得して R に渡し、次のコードを実行します。

library(RColorBrewer);
library(gplots);
library(MASS);
args <- commandArgs(TRUE);
matrix_a <- read.table(args[1], sep='\t', header=T, row.names=1);
mtscaled <- as.matrix(scale(matrix_a))
# location <- args[2];
# setwd(args[2]);
pdf("result.pdf", pointsize = 15, width = 18, height = 18)
mycol <- c("blue","white","red")
my.breaks <- c(seq(-5, -.6, length.out=6),seq(-.5999999, .1, length.out=4),seq(.100009,5, length.out=7))
#colors <- colorpanel(75,"midnightblue","mediumseagreen","yellow") 
result <- heatmap.2(mtscaled, Rowv=T, scale='none', dendrogram="row", symm = T, col=bluered(16), breaks=my.breaks)
dev.off() 

私が抱えている問題は、ブレークを使用して色分解を制御すると、ヒートマップが対称に見えなくなることです。

ヒートマップが対称に見えることがわかるように、ブレークを使用する前のヒートマップを次に示します。 休憩なし

休憩を使用した場合のヒートマップは次のとおりです。 休憩あり

たとえば、あるシーケンスが別のシーケンスの開始位置で正確に終了しないように、シーケンスのカットオフを試しましたが、この問題を解決できません。クラスターをさらに引き出すために、ブレークを使用したいと思います。

これは、どのように見えるべきかの例です。この画像は、クラスター メーカーを使用して作成されました。 ここに画像の説明を入力

それと同じように見えるとは思いませんが、ヒートマップがより対称的で、クラスターに関してより良い定義があればいいのにと思います。画像は同じデータを使用して作成されました。

4

2 に答える 2

2

いくつかの調査の結果、ヒートマップまたはヒートマップ 2 を介してマトリックスを実行した後、値が変化していることに気付きました。たとえば、提供されたデータセットから得られた相互作用

Pacdh-2 と pegg-2

マトリックスがヒートマップに送信される前に、0.0250313 の値を与えました。
その後、result$carpet を使用してマトリックス値を調べたところ、値は次のようになりました

-0.224333135 -1.09805379

2 つの相互作用

そこで、値が同じになるように、クラスター化されたマトリックスのデンドログラムに基づいて元のマトリックスを並べ替えることにしました。ヘルプとして、次のスタック オーバーフローの質問を使用しました: ヒートマップの行の順序?

そのために使用されるコードは次のとおりです。

rowInd <- rev(order.dendrogram(result$rowDendrogram))
colInd <- rowInd
data_ordered <- matrix_a[rowInd, colInd]

次に、別のプログラム「matrix2png」を使用してヒートマップを描画しました。 ここに画像の説明を入力

私はまだ色をいじる必要がありますが、少なくとも今ではヒートマップは対称的でクラスター化されています.

さらに調べてみるとscale(matrix_a)、コードを変更してmtscaled <- as.matrix(matrix_a)結果が対称的に見えるようになったときに実行していたことが問題のようです。

于 2012-10-02T14:14:28.963 に答える
1

私は確かに、それを適切に読み取るコードなしで、その奇妙なデータオブジェクトからこれを再現してテストしようとする人ではありませんが、ここにアイデアがあります:

  ..., col=bluered(20)[4:20], ...

上記の戦略では返されない赤の完全なランドを返す必要がある別の例を次に示します。

 shift.BR<- colorRamp(c("blue","white", "red"), bias=0.5 )((1:16)/16)
 heatmap.2( ...., col=rgb(shift.BR, maxColorValue=255), .... )

または、次のベクトルを使用できます。

> rgb(shift.BR, maxColorValue=255)
 [1] "#1616FF" "#2D2DFF" "#4343FF" "#5A5AFF" "#7070FF" "#8787FF" "#9D9DFF" "#B4B4FF" "#CACAFF" "#E1E1FF" "#F7F7FF"
[12] "#FFD9D9" "#FFA3A3" "#FF6C6C" "#FF3636" "#FF0000"

白を中心に -1 から 3 までの一連の値に対して、青から赤への解決策を求める (今日も) やや似た質問がありました。これは、その質問のコードと出力です。

test <- seq(-1,3, len=20)
shift.BR <- colorRamp(c("blue","white", "red"), bias=2)((1:20)/20)
tpal <- rgb(shift.BR, maxColorValue=255)
barplot(test,col = tpal)

ここに画像の説明を入力

(しかし、それはあなたの状況の偏りにとって間違った方向に思われるでしょう。)

于 2012-09-28T22:33:44.217 に答える