27 r cluster-analysis hierarchical-clustering heatmap bioconductor
我比较R中树状图,一个与创建热图的两个方面made4的heatplot,一个用gplots的heatmap.2.适当的结果取决于分析,但我试图理解为什么默认值是如此不同,以及如何让两个函数给出相同的结果(或高度相似的结果),以便我理解所有'blackbox'参数进入这个.
这是示例数据和包:
require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])
Run Code Online (Sandbox Code Playgroud)
使用heatmap.2对数据进行聚类得出:
heatmap.2(data, trace="none")
Run Code Online (Sandbox Code Playgroud)

使用heatplot给出:
heatplot(data)
Run Code Online (Sandbox Code Playgroud)

最初的结果和缩放非常不同.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)
Run Code Online (Sandbox Code Playgroud)
导致:

这使得行侧树状图看起来更相似但是列仍然不同,因此比例也是如此.看来,heatplot默认情况下,以某种方式缩放列,默认情况下heatmap.2不会这样做.如果我向heatmap.2添加行缩放,我得到:
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave,scale="row")
Run Code Online (Sandbox Code Playgroud)

它仍然不相同但更接近.我怎样才能重现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 = "")
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图导入我的电话heatmap.2.我喜欢它的原因是因为它使低值和高值之间较大的反差,而只是路过zlim,以heatmap.2被简单地忽略.如何在保留沿列的聚类的同时使用这种"双重缩放"?我想要的是增加对比度:
heatplot(..., dualScale=TRUE, scale="none")
与你得到的低对比度相比:
heatplot(..., dualScale=FALSE, scale="row")
有什么想法吗?
TWL*_*TWL 40
heatmap.2和heatplot功能之间的主要区别如下:
heatmap.2,默认使用欧几里德测度来获得距离矩阵并完成聚类的聚集方法,而热图分别使用相关性和平均聚集方法.
heatmap.2计算距离矩阵并在缩放之前运行聚类算法,而热图(何时dualScale=TRUE)聚类已经缩放数据.
heatmap.2重新排序基于行和列的平均值树状图,描述在这里.
通过提供自定义distfun和hclustfun参数,可以在heatmap.2中简单地更改默认设置(第1页).然而p.在不更改源代码的情况下,无法轻松解决2和3问题.因此,heatplot函数充当heatmap的包装器.首先,它对数据进行必要的转换,计算距离矩阵,对数据进行聚类,然后仅使用heatmap.2功能绘制具有上述参数的热图.
热图dualScale=TRUE函数中的参数仅适用于基于行的居中和缩放(描述).然后,它将缩放数据的极值(描述)重新分配给zlim值:
z <- t(scale(t(data)))
zlim <- c(-3,3)
z <- pmin(pmax(z, zlim[1]), zlim[2])
Run Code Online (Sandbox Code Playgroud)
为了匹配heatplot函数的输出,我想提出两个解决方案:
我 - 在源代码中添加新功能 -> heatmap.3
代码可以在这里找到.随意浏览修订版以查看对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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)
关于heatmap.2(3)功能的其他评论很少:
symbreak=TRUE应用缩放时建议使用.它将调整色标,因此它在0左右突破.在当前示例中,负值=蓝色,而正值=红色.col=bluered(256) 可以提供替代的着色解决方案,它不需要RColorBrewer库.