使用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
相关产品推荐
相关产品推荐

