使用ComplexHeatmap进行不一致的聚类?

时间:2018-06-13 04:32:53

标签: r heatmap bioconductor

所以我尝试使用Bioconductor的ComplexHeatmap包为我的数据生成热图,但是我得到的结果略有不同,这取决于我是自己制作树形图,还是告诉热图制作它。

的软件包:

require(ComplexHeatmap)
require(dendextend)

数据:

a=rnorm(400,1)
b=as.matrix(a)
dim(b)=c(80,5)

如果我自己制作树形图:

d=dist(b,method="euclidean")
d=as.dist(d)
h=hclust(d,method="ward.D")
dend=as.dendrogram(h)

Heatmap(b,
    cluster_columns=FALSE,
    cluster_rows = dend)

让Heatmap进行聚类:

Heatmap(b,
    cluster_columns=FALSE,
    clustering_distance_rows = "euclidean",
    clustering_method_rows = "ward.D") 

它们看起来非常相似,但它们会略有不同。

这对我的数据非常重要。热图的聚类最终会以更好的方式组织我的数据,但是,我还希望通过cutree()提取聚类项目列表,但我不认为我可以从热图中提取它#39 ; s群集。

有谁知道发生了什么?

1 个答案:

答案 0 :(得分:1)

树状图是相同的。唯一改变的是排序。您可以使用以下方法进行验证:

hmap1 <- Heatmap(b,
                 cluster_columns=FALSE,
                 cluster_rows = dend)

hmap2 <- Heatmap(b,
                 cluster_columns=FALSE,
                 clustering_distance_rows = "euclidean",
                 clustering_method_rows = "ward.D") 

#Reorder both row dendrograms using the same weights:
rowdend1 <- reorder(row_dend(hmap1)[[1]], 1:80)
rowdend2 <- reorder(row_dend(hmap2)[[1]], 1:80)

#check that they are identical:
identical( rowdend1, rowdend2)
## [1] TRUE

ComplexHeatmap::Heatmap函数具有一个自变量row_dend_reorder,应检查其默认值TRUE