【问题标题】:How to manually create a dendrogram matrix for heatmap.2 in R?如何在 R 中为 heatmap.2 手动创建树状图矩阵?
【发布时间】:2014-03-19 01:51:46
【问题描述】:

这是我由gplots::heatmap.2创建的热图示例:

df<-data.frame(x1=rnorm(100),x2=rnorm(100,2,3),x3=rnorm(100,10,1),
           y1=rnorm(100,5,1),y2=rnorm(100,20,5),y3=rnorm(100,30,2))
cor<-cor(df)

require(gplots)
heatmap.2(cor,trace="none",col=bluered)#fig1
heatmap.2(cor,Rowv=F,Colv=F,dendrogram="none",trace="none",col=bluered)#fig2

我想在 fig2 中创建一个树状图,其中 X 和 Y 被手动分组在一起,以便我可以将相关图与 fig1 进行比较,其中树状图是使用距离计算的。有人知道怎么做吗?

【问题讨论】:

    标签: r cluster-analysis


    【解决方案1】:

    您可以手动创建一个树状图对象,但对我来说,这个问题让我有点不清楚为什么在图 2 中需要此信息。如果一个将所有 x 和 y 聚集在一起作为单独组的树状图是添加到图 2 中,树状图的分​​支将相互交叉,使树状图(使用真实的分支长度或高度)不可读。如果添加了使用一些合适高度的树状图,树状图的分​​支长度没有意义(它们与真实的相关系数不对应),但树状图仍然告诉树的分支顺序。

    无论如何,这是技术上的解决方法(另请参阅Aniko's answer 的类似问题,那里提供详细信息)。

    一个使用“真实”的 hclust 对象 (a)(我计算得很快,所以它们可能不完全正确,如果需要,请使用具有平均链接的层次聚类算法来检查)分支长度可以通过以下方式生成手:

    a<-list()
    a$merge<-matrix(c(-1, -2,
                      -4, -5,
                      -3, 1,
                      -6, 2,
                      3, 4), ncol=2, byrow=TRUE)
    a$height<-c(0.1, 0.12, 0.12, 0.045, 0.1)
    a$order<-1:6
    a$labels<-c("x1", "x2", "x3", "y1", "y2", "y3")
    class(a)<-"hclust"
    

    或者通过使用一些合适的分支长度来获得树状图:

    b<-list()
    b$merge<-matrix(c(-1, -2,
                      -4, -5,
                      -3, 1,
                      -6, 2,
                      3, 4), ncol=2, byrow=TRUE)
    b$height<-c(0.1, 0.1, 0.1, 0.1, 0.2)
    b$order<-1:6
    b$labels<-c("x1", "x2", "x3", "y1", "y2", "y3")
    class(b)<-"hclust"
    

    之后,最终的情节可以生成为:

    heatmap.2(cor,Rowv=as.dendrogram(a),Colv=as.dendrogram(a),trace="none",col=bluered)#fig2
    

    或:

    heatmap.2(cor,Rowv=as.dendrogram(b),Colv=as.dendrogram(b),trace="none",col=bluered)#fig2
    

    【讨论】:

      猜你喜欢
      • 2018-01-24
      • 2019-09-09
      • 2014-03-25
      • 2014-01-29
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多