我比較於R,一個與made4
的heatplot
和一個與heatmap.2
gplots
樹狀創建熱圖的方法有兩種。合適的結果取決於分析,但我試圖理解爲什麼默認值如此不同,以及如何讓兩個函數得到相同的結果(或高度相似的結果),以便我理解所有的「黑盒子」參數進入這個。R中的熱圖/集羣默認值的差異(熱圖與熱圖2)?
這是數據包的例子:
require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])
聚類heatmap.2數據得出:使用heatplot
heatmap.2(data, trace="none")
給出:
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,我得到:
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=FALSE, scale="row")
上任何想法:
heatplot(..., dualScale=TRUE, scale="none")
與你得到的低對比度相比?
對於最後一個命令,嘗試添加'symbreaks = FALSE'來獲得類似於'heatplot'的着色。列樹狀圖仍然需要工作。 – harkmug
@rmk謝謝,不知道我明白'symbreaks'是幹什麼的。關於col樹狀圖差異的任何想法? – user248237dfsf
'symbreaks = FALSE'使着色在'heatplot'中看到的不對稱,其中0值不是白色(仍然是藍色)。至於樹狀圖,我認爲'heatamap.2'可能會正確。注意在'heatmap.2'中,EWS.T1和EWS.T6是並排的,而在'heatplot'中則是EWS.T4和EWS.T6。前者的dist爲0.2,後者爲0.5。 – harkmug