You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ComplexHeatmap时相同聚类方法得到不同层次聚类的问题

为什么ComplexHeatmap两种聚类方式结果不一致?

核心原因1:聚类树的自动重排序

ComplexHeatmap的Heatmap()函数默认开启column_dend_reorder = TRUE(列聚类树重排序),这个参数会根据热图的行数据(方法1中是基因表达值)调整列聚类树的分支顺序,让相似样本组在视觉上更紧凑。但当你手动传入cluster_columns = hc时,该重排序会被自动忽略,直接使用hclust()生成的原始树结构,这就会导致分支顺序出现反转或局部调整,但聚类的分组逻辑是完全一致的。

核心原因2:输入矩阵的本质差异

方法1的输入是基因×样本的表达矩阵,聚类基于样本的表达向量计算距离;方法2的输入是样本×样本的相关矩阵,虽然聚类用的是相同的样本距离矩阵,但热图展示的内容完全不同——方法1展示基因表达,方法2展示样本间相关性,这会让你在视觉上误以为聚类结果有差异,但实际上样本的聚类分组是一致的。

验证聚类结构一致性的方法

你可以用以下代码验证两个聚类树的结构是否一致:

# 获取方法1的列聚类树
p1 <- Heatmap(lung,
          top_annotation = column_ha,
          clustering_distance_columns = "pearson",
          clustering_method_columns = "ward.D",
          cluster_rows = F,
          show_column_names = F,
          show_row_names = F, 
          show_row_dend = F)
hc_method1 <- column_dend(p1)[[1]]

# 方法2的聚类树
cor_matrix <- cor(lung, method = "pearson")
cor_distance <- as.dist(1 - cor_matrix)
hc_method2 <- hclust(cor_distance, method = "ward.D")

# 用dendextend包验证树的相似性
library(dendextend)
cor_cophenetic(hc_method1, hc_method2)

如果cor_cophenetic的结果接近1,说明两个聚类树的结构几乎完全一致,只是展示顺序不同。

让两种方法展示顺序一致的解决方案

若想让方法1的聚类顺序和方法2完全一致,只需关闭列树重排序:

Heatmap(lung,
        top_annotation = column_ha,
        clustering_distance_columns = "pearson",
        clustering_method_columns = "ward.D",
        cluster_rows = F,
        show_column_names = F,
        show_row_names = F, 
        show_row_dend = F,
        column_dend_reorder = FALSE)

内容的提问来源于stack exchange,提问作者An Ignorant Wanderer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:43:19