gpt4 book ai didi

r - R中热图/聚类默认值的差异(热图与热图.2)?

转载 作者:行者123 更新时间:2023-12-03 10:13:40 24 4
gpt4 key购买 nike

我正在比较在 R 中使用树状图创建热图的两种方法,一种使用 made4heatplot和一个 gplotsheatmap.2 .适当的结果取决于分析,但我试图理解为什么默认值如此不同,以及如何让两个函数给出相同的结果(或高度相似的结果),以便我理解所有的“黑盒”参数进入这个。

这是示例数据和包:

require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])

使用 heatmap.2 聚类数据给出:
heatmap.2(data, trace="none")

enter image description here

使用 heatplot给出:
heatplot(data)

enter image description here

最初的结果和比例非常不同。 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)

导致:
enter image description here

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

enter image description here

这仍然不相同,但更接近。如何重现 heatplot的结果与 heatmap.2 ?有什么区别?

编辑2:似乎一个关键区别在于 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 的调用中的内容.我喜欢它的原因是因为它使低值和高值之间的对比度更大,而只是通过 zlimheatmap.2被简单地忽略。如何在保留沿列的聚类的同时使用这种“双重缩放”?我想要的只是您获得的对比度增加:
heatplot(..., dualScale=TRUE, scale="none")
与您获得的低对比度相比:
heatplot(..., dualScale=FALSE, scale="row")
对此有何想法?

最佳答案

heatmap.2之间的主要区别和 heatplot功能如下:

  • heatmap.2,默认使用 欧几里得测量以获得距离矩阵和 完整 聚类的聚集方法,而热图使用 相关性 , 和 平均 分别是凝聚法。
  • heatmap.2 在缩放之前计算距离矩阵并运行聚类算法,而 heatplot(当 dualScale=TRUE 时)聚类已经缩放的数据。
  • heatmap.2 根据行和列的平均值对树状图重新排序,如 here 所述.

  • 通过提供自定义 distfun,可以在 heatmap.2 中简单地更改默认设置(第 1 页)。和 hclustfun论据。然而 p。如果不更改源代码,则无法轻松解决 2 和 3。因此 heatplot函数充当 heatmap.2 的包装器。首先,它对数据进行必要的变换,计算距离矩阵,对数据进行聚类,然后使用 heatmap.2 功能仅绘制具有上述参数的热图。
    dualScale=TRUE heatplot 函数中的参数,仅应用基于行的居中和缩放 ( description )。然后,它将缩放数据的极值 ( description ) 重新分配给 zlim值(value)观:
    z <- t(scale(t(data)))
    zlim <- c(-3,3)
    z <- pmin(pmax(z, zlim[1]), zlim[2])

    为了匹配heatplot函数的输出,我想提出两种解决方案:

    I - 向源代码添加新功能 -> heatmap.3

    代码可以在 here中找到.随意浏览修订以查看对 heatmap.2 函数所做的更改。总之,我介绍了以下选项:
  • z-score 变换在聚类之前执行: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)

    enter image description here

    II - 定义一个函数,为 heatmap.2 提供所有必需的参数

    如果您更喜欢使用原始 heatmap.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 库。
  • 关于r - R中热图/聚类默认值的差异(热图与热图.2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924828/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com