pheatmap 聚类顺序

问题描述 投票:0回答:1

我有这个数据集:

> dput(mdata2)
structure(list(EE = c(3.3221428469822, 3.62699732299098, 1.75430154205983, 
0.809228977410138, 1.24117055233438, 2.93403148663873, 4.01630566539058, 
1.5334176884274, 0.598331636908125, 0.793972781447563), MI = c(3.20812756072619, 
3.73729312689288, 2.32268411219261, 1.16578395871478, 2.02899881030574, 
2.43723772029964, 3.98855299963887, 1.76088057576795, 0.684310806612439, 
1.512739619069), PI = c(2.97858874003521, 3.77000551572515, 2.82873533944253, 
2.17460752133963, 2.81526651451227, 2.31001492452861, 4.0325069645006, 
2.35155407135517, 1.41519706213454, 2.62939873195416)), row.names = c("A", 
"B", "C", "D", "E", "F", "G", "H", "I", "J"), class = "data.frame")

列是 PI、MI 和 EE。 我正在尝试创建一个热图,为此我执行以下操作:

pheatmap(mdata2, cluster_cols = TRUE, clustering_method = "ward.D")

这将创建此图像:

heatmap

我的问题是,其中一列的位置对我来说没有意义。 如果我看看 EE 和 MI 之间的几何距离,我会得到

sum((mdata2[, "EE"] - mdata2[,"MI"])^2)
1.91936

然后在EE和PI之间

sum((mdata2[, "EE"] - mdata2[,"PI"])^2)
10.72999

最后在 MI 和 PI 之间

sum((mdata2[, "MI"] - mdata2[,"PI"])^2)
4.093923

因此,聚类将 EE 和 MI 放在一起是正确的,因为它们的距离也是最小的。 但为什么它会放在左边的 PI 上呢? 既然它们的距离比 PI 和 MI 之间的距离小,那么它不应该靠近 MI 吗? 我想保留列的聚类,但同时让 MI 和 PI 靠近,因为它们的距离很短。 请记住,我需要将其应用于其他数据,因此我需要一个通用答案,而不是仅针对此示例的“临时”答案。 谢谢。

r statistics cluster-analysis pheatmap
1个回答
0
投票

原来这里已经有人问过类似的问题了: pheatmap:手动重新排序树状图中的叶子

对我来说这有效:

callback = function(hc, mat){
  sv = svd(t(mat))$v[,c(2)]
  dend = reorder(as.dendrogram(hc), wts = sv)
  as.hclust(dend)
}

pheatmap(mdata2, clustering_callback = callback)
© www.soinside.com 2019 - 2024. All rights reserved.