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

     2023-02-18     253

关键词:

【中文标题】R 中热图/聚类默认值的差异(热图与热图.2)?【英文标题】:differences in heatmap/clustering defaults in R (heatplot versus heatmap.2)? 【发布时间】:2013-07-29 06:57:11 【问题描述】:

我正在比较两种在 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")

使用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 添加行缩放,我得到:

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")

对此有什么想法吗?

【问题讨论】:

在最后一个命令中,尝试添加symbreaks=FALSE 以获得与heatplot 相似的颜色。列树状图仍然需要工作。 @rmk 谢谢,但我不确定我是否理解symbreaks 的作用。关于col dendrogram差异的任何想法? symbreaks=FALSE 使颜色不对称,如 heatplot 中所示,其中 0 值不是白色(仍然有点蓝色)。至于树状图,我认为heatamap.2 可能是正确的。请注意,在 heatmap.2 中,EWS.T1 和 EWS.T6 是并排的,而在 heatplot 中,它的 EWS.T4 和 EWS.T6 是并排的。前者的距离为 0.2,而后者的距离为 0.5。 @rmk: 那么这是heatplot 中的错误吗? @rmk: 可以用heatplot 内部使用的distEisen 函数来解释差异吗?不幸的是,我想不出一种方法来传递heatplot 相关距离,因为它只需要dist() 的参数,而dist() 没有相关距离。如果heatplot() 有一个相关距离是可能的 【参考方案1】:

heatmap.2heatplot 函数的主要区别如下:

    heatmap.2,默认使用euclidean度量来获取距离矩阵和完整聚类方法,而heatplot使用correlation平均聚集法。

    heatmap.2 计算距离矩阵并在缩放之前运行聚类算法,而 heatplot(当 dualScale=TRUE 时)聚类已经缩放的数据。

    heatmap.2 根据行和列的平均值对树状图重新排序,如 here 所述。

通过提供自定义distfunhclustfun 参数,可以在heatmap.2 中简单地更改默认设置(第1 页)。然而 p。如果不更改源代码,则无法轻松解决 2 和 3 问题。因此heatplot 函数充当 heatmap.2 的包装器。首先,它对数据进行必要的转换,计算距离矩阵,对数据进行聚类,然后使用 heatmap.2 功能仅使用上述参数绘制热图。

heatplot 函数中的 dualScale=TRUE 参数仅适用于基于行的居中和缩放 (description)。然后,它将缩放数据的极值 (description) 重新分配给 zlim 值:

z <- t(scale(t(data)))
zlim <- c(-3,3)
z <- pmin(pmax(z, zlim[1]), zlim[2])

为了匹配热图函数的输出,我想提出两个解决方案:

我 - 为源代码添加新功能-&gt; 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) 


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

如果您更喜欢使用原始 heatmap.2,zClust 函数(如下)会重现 heatplot 执行的所有步骤。它提供(以列表格式)缩放的数据矩阵、行和列树状图。这些可以用作 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) 功能的一些额外的 cmets:

应用缩放时建议使用symbreak=TRUE。它将调整色阶,因此它会在 0 附近中断。在当前示例中,负值 = 蓝色,而正值 = 红色。 col=bluered(256) 可能会提供另一种着色解决方案,它不需要 RColorBrewer 库。

【讨论】:

伟大而完整的答案。正是我需要的。非常感谢! 我将其作为教程编写,并将 TWL 的 zClust 的扩展版本添加到包中:stanstrup.github.io/heatmaps

r聚类热图-数据的标准化

...技术A最近一直在学习转录组分析,在绘制差异表达基因热图的时候遇到了个坑?我发现的做出来的热图和别人不一样。如下图所示,图1是我的,图2是别人家的。怎么解决呢?直接取对数吗?如果对表达量去一下log10,发现10000... 查看详情

r数据可视化5:热图heatmap

参考技术A热图是一个以颜色变化来显示数据的矩阵。ToussaintLoua在1873年就曾使用过热图来绘制对巴黎各区的社会学统计。生物学中热图经常用于展示多个基因在不同样本中的表达水平。然后可以通过聚类等方式查看不同组(如疾... 查看详情

热图展示单细胞转录组基因在不同组中表达阳性细胞差异

...-发的帖子,展示的内容是单细胞差异基因的图,是利用热图的形式展现的,在一个热图上可以展示不同cluster中不同组的基因表达阳性细胞比例,差别一目了然,可以同时展示很多的基因。首先构建作图数据,我们用最“笨”的... 查看详情

【r画图】环形热图

参考技术A热图(heatmap)在生信领域基本就是常规操作,基本技能,入门操作。能画热图的工具也有很多,我自己常用的R包是pheatmap。最近经常看见环状的热图,所以就搜了一下资料学习一下,测试一下。环状热图我也经常会在... 查看详情

扩增子图表解读3热图:差异菌otu及功能

热图是使用颜色来展示数值矩阵的图形。通常还会结合行、列的聚类分析,以表达实验数据多方面的结果。 热图在生物学领域应用广泛,尤其在高通量测序的结果展示中很流行,如样品-基因表达,样品-OTU相对丰度矩阵非常... 查看详情

绘制聚类热图(带树状图)/Python

】绘制聚类热图(带树状图)/Python【英文标题】:Plotlyclusteredheatmap(withdendrogram)/Python【发布时间】:2021-06-0709:11:21【问题描述】:我正在尝试在Python中使用plotly创建一个聚集的热图(带有树状图)。他们在他们的网站上制作的... 查看详情

r绘图pheatmap热图绘制——高阶篇

...据展示上往往都喜欢将感兴趣的功能或者通路基因绘制成热图形式,能够让读者一目了然的发现某功能是增强了?还是减弱了?在实际过程中,表型实验上已经证明了炎症反应的走向,从初期增强到后期减弱。但在对应的高通量... 查看详情

珍藏史上最全热图绘制工具及操作流程(一)

参考技术Aheatmap(热图)一词相信大家肯定不会陌生,在很多重量级科学论文中非常常见。使用heatmap可以容易展示多组分之间关系或相关性,也能展示基因表达前后差异。heatmap其实还蕴含不少分析的秘诀,这么高大上的heatmap是... 查看详情

热图3:热图行列分组信息注释

参考技术A久等了,接上一次内容。这次我们要让热图更加复杂化。实际上,有些情况下做热图可能只需要标注对照组、实验组即可。但是大多时候,可以在热图上体现更多信息,比如,除了分组,还有不同得处理、年龄、性别... 查看详情

R中的热图或密度图

】R中的热图或密度图【英文标题】:HeatmapordensitymapinR【发布时间】:2012-04-1719:57:19【问题描述】:我是R新手,正在尝试创建热图或密度图来显示我的结果。我有20个不同地点和20年的x数据。我试图在同一张地图中显示位置和年... 查看详情

r热图与数字(代码片段)

查看详情

每列中每个值的计数热图

】每列中每个值的计数热图【英文标题】:Heatmapofcountsofeveryvalueineverycolumn【发布时间】:2020-12-2416:39:03【问题描述】:我有一个这样的数据框:|A|B|C|D||---|---|----|---||1|3|10|4||2|3|1|5||1|7|9|3|其中ABCD是类别,值在[1,10]范围内(某些值... 查看详情

如何在分层热图树状图中添加聚类矩形

】如何在分层热图树状图中添加聚类矩形【英文标题】:Howtoaddclusteringrectangleinhierarchicalheatmapdendogram【发布时间】:2013-12-1906:21:48【问题描述】:以下代码创建1.树状图和2.带有树状图的热图mydata<-mtcarshclustfunc<-function(x)hclust(... 查看详情

deg聚类分析热图怎么看?

请问差异基因表达聚类图怎么看对于一般的统计分析,基于傻瓜式操作的SPSS(PASW)软件已经足够,但在涉及个性化要求很高的复杂数据处理时,SPSS就开始显得力不从心,这时必须依赖功能更为强大的SAS等软件。以前在自己的科... 查看详情

热图显示服务器上的文件系统差异?

】热图显示服务器上的文件系统差异?【英文标题】:HeatmaptoShowFilesystemdiffsonServer?【发布时间】:2011-03-1403:22:29【问题描述】:我的任务是创建一个简单的基于Python网络的应用程序,以图形方式表示各种服务器之间的“差异”... 查看详情

R热图:将颜色分配给值

】R热图:将颜色分配给值【英文标题】:Rheatmap:assigncolorstovalues【发布时间】:2021-09-1816:20:20【问题描述】:我在R图表库(https://www.r-graph-gallery.com/79-levelplot-with-ggplot2.html)中找到了以下R代码作为热图并稍作修改:#Librarylibrary(ggplo... 查看详情

pheatmap行标签顺序大调整

参考技术A在科学论文中,我们经常要用到热图。我们在热图在单细胞数据分析中的应用比较系统地介绍了热图的一般规则。但是在实际操作中还是会遇到一些细节问题,如标签顺序。我们知道一个好的热图,要能反映出数据规... 查看详情

更改绘图热图中的颜色条标签 (R)

】更改绘图热图中的颜色条标签(R)【英文标题】:Changingthecolorbarlabelsinaplotlyheatmap(R)【发布时间】:2020-12-2610:15:41【问题描述】:我正在处理调查数据,当被问及一个变量是否影响另一个变量时,一个人的回答从“不”到“绝对... 查看详情