R のデンドログラムを使用してヒートマップを作成する 2 つの方法を比較しています。1 つは で、made4
もうheatplot
1 つはgplots
ofheatmap.2
です。適切な結果は分析によって異なりますが、デフォルトが非常に異なる理由と、両方の関数が同じ結果 (または非常に類似した結果) を与える方法を理解しようとしています。これに。
これはデータとパッケージの例です:
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
相関距離との平均リンケージを使用するため、同様のクラスタリングが使用されるようにフィードできます( https://stat.ethz.ch/pipermail/bioconductor/2010-August/034757.htmlheatmap.2
に基づく) 。
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 に追加すると、次のようになります。
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave,scale="row")
これはまだ同一ではありませんが、より近いものです。heatplot
で の結果を再現するにはどうすればよいheatmap.2
ですか? 違いは何ですか?
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")
これに関するアイデアはありますか?