Rの樹形図でヒートマップを作成する2つの方法を比較しています。1つは_made4
_のheatplot
を使用し、もう1つは_heatmap.2
_のgplots
を使用します。適切な結果は分析によって異なりますが、デフォルトが非常に異なる理由と、両方の関数を取得して同じ結果(または非常に類似した結果)を得る方法を理解しようとしているので、行くすべての「ブラックボックス」パラメータを理解しますこれに。
これはデータとパッケージの例です:
_require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])
_
Heatmap.2を使用してデータをクラスタリングすると、以下が得られます。
_heatmap.2(data, trace="none")
_
heatplot
を使用すると、以下が得られます。
_heatplot(data)
_
最初は非常に異なる結果とスケーリングです。この場合heatplot
の結果はより合理的に見えるので、_heatmap.2
_には他の利点/機能があるので、_heatmap.2
_に入力するパラメーターを理解して同じ結果を得たいと思います。不足している成分を理解したいので、使用したいと思います。
heatplot
は相関距離を持つ平均リンケージを使用するので、それを_heatmap.2
_に入力して、同様のクラスタリングが使用されるようにします(ベース: https://stat.ethz.ch/pipermail/bioconductor /2010-August/034757.html )
_dist.pear <- function(x) as.dist(1-cor(t(x)))
hclust.ave <- function(x) hclust(x, method="average")
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave)
_
その結果:
これにより、行側の樹形図はより似たように見えますが、列は依然として異なり、縮尺も異なります。 heatplot
はデフォルトで何らかの形で列をスケーリングするように見えますが、_heatmap.2
_はデフォルトでそれを行いません。ヒートマップに行スケーリングを追加すると、次のようになります:
_heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave,scale="row")
_
まだ同一ではありませんが、近いです。 _heatmap.2
_でheatplot
の結果を再現するにはどうすればよいですか?違いは何ですか?
edit2:主な違いは、heatplot
が以下を使用して行と列の両方でデータを再スケールすることです。
_if (dualScale) {
print(paste("Data (original) range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
data <- t(scale(t(data)))
print(paste("Data (scale) range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
data <- pmin(pmax(data, zlim[1]), zlim[2])
print(paste("Data scaled to range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
}
_
これは、_heatmap.2
_への呼び出しにインポートしようとしているものです。私が好きな理由は、zlim
を_heatmap.2
_に渡すだけで無視されるのに対して、低値と高値の間のコントラストが大きくなるためです。列に沿ったクラスタリングを維持しながら、この「デュアルスケーリング」を使用するにはどうすればよいですか?私が欲しいのは、あなたが得るコントラストの増加です:
heatplot(..., dualScale=TRUE, scale="none")
あなたが得る低コントラストと比較して:
heatplot(..., dualScale=FALSE, scale="row")
これに関するアイデアはありますか?
_heatmap.2
_関数とheatplot
関数の主な違いは次のとおりです。
heatmap.2は、デフォルトとしてeuclideanメジャーを使用して距離行列を取得し、completeクラスタリングのための凝集法、ヒートプロットはcorrelation、およびaverage凝集を使用メソッド。
heatmap.2は距離行列を計算し、スケーリングの前にクラスタリングアルゴリズムを実行しますが、heatplot(_dualScale=TRUE
_の場合)は既にデータをスケーリングします。
heatmap.2は、 here のように、行と列の平均値に基づいて樹状図を並べ替えます。
デフォルト設定(p。1)は、カスタムdistfun
およびhclustfun
引数を指定することにより、heatmap.2内で簡単に変更できます。しかし、p。 2と3は、ソースコードを変更しないと簡単に対処できません。したがって、heatplot
関数はheatmap.2のラッパーとして機能します。まず、必要な変換をデータに適用し、距離マトリックスを計算し、データをクラスター化し、heatmap.2機能を使用して、上記のパラメーターでヒートマップをプロットします。
ヒートプロット関数の_dualScale=TRUE
_引数は、行ベースのセンタリングとスケーリング( 説明 )のみを適用します。次に、スケーリングされたデータの極値( description )をzlim
値に再割り当てします。
_z <- t(scale(t(data)))
zlim <- c(-3,3)
z <- pmin(pmax(z, zlim[1]), zlim[2])
_
ヒートプロット関数からの出力を一致させるために、2つの解決策を提案したいと思います。
I-ソースコードに新しい機能を追加_-> heatmap.3
_
コードは here にあります。リビジョンを自由に参照して、heatmap.2関数に加えられた変更を確認してください。要約すると、次のオプションを導入しました。
scale=c("row","column")
zlim=c(-3,3)
reorder=FALSE
_例:
_# require(gtools)
# require(RColorBrewer)
cols <- colorRampPalette(brewer.pal(10, "RdBu"))(256)
distCor <- function(x) as.dist(1-cor(t(x)))
hclustAvg <- function(x) hclust(x, method="average")
heatmap.3(data, trace="none", scale="row", zlim=c(-3,3), reorder=FALSE,
distfun=distCor, hclustfun=hclustAvg, col=rev(cols), symbreak=FALSE)
_
II-_heatmap.2
_に必要なすべての引数を提供する関数を定義する
元のヒートマップ2を使用する場合、zClust
関数(下)はヒートプロットによって実行されるすべてのステップを再現します。スケーリングされたデータ行列、行および列の樹状図を(リスト形式で)提供します。これらは、heatmap.2関数への入力として使用できます。
_# depending on the analysis, the data can be centered and scaled by row or column.
# default parameters correspond to the ones in the heatplot function.
distCor <- function(x) as.dist(1-cor(x))
zClust <- function(x, scale="row", zlim=c(-3,3), method="average") {
if (scale=="row") z <- t(scale(t(x)))
if (scale=="col") z <- scale(x)
z <- pmin(pmax(z, zlim[1]), zlim[2])
hcl_row <- hclust(distCor(t(z)), method=method)
hcl_col <- hclust(distCor(z), method=method)
return(list(data=z, Rowv=as.dendrogram(hcl_row), Colv=as.dendrogram(hcl_col)))
}
z <- zClust(data)
# require(RColorBrewer)
cols <- colorRampPalette(brewer.pal(10, "RdBu"))(256)
heatmap.2(z$data, trace='none', col=rev(cols), Rowv=z$Rowv, Colv=z$Colv)
_
heatmap.2(3)
機能に関する追加コメント:
symbreak=TRUE
_は、スケーリングが適用されるときに推奨されます。カラースケールを調整するので、0付近で壊れます。現在の例では、負の値=青、正の値=赤です。col=bluered(256)
は代替のカラーリングソリューションを提供する場合があり、RColorBrewerライブラリを必要としません。