【问题标题】:In R, how can I plot a similarity matrix (like a block graph) after clustering data?在 R 中,如何在聚类数据后绘制相似度矩阵(如块图)?
【发布时间】:2011-04-12 18:19:22
【问题描述】:

我想生成一个图表,显示聚类数据和相似度矩阵之间的相关性。 我怎样才能在 R 中做到这一点? R中是否有任何函数可以像此链接中的图片一样创建图形? http://bp0.blogger.com/_VCI4AaOLs-A/SG5H_jm-f8I/AAAAAAAAAJQ/TeLzUEWbb08/s400/Similarity.gif(刚刚谷歌搜索并获得了显示我想要生成的图表的链接)

谢谢,提前。

【问题讨论】:

标签: r cluster-analysis


【解决方案1】:

@Chase 和 @bill_080 在 cmets 中建议的通用解决方案需要一点点改进才能(部分)满足 OP 的需求。

一个可重现的例子:

require(MASS)
set.seed(1)
dat <- data.frame(mvrnorm(100, mu = c(2,6,3), 
                          Sigma = matrix(c(10,   2,   4,
                                            2,   3, 0.5,
                                            4, 0.5,   2), ncol = 3)))

使用欧式距离计算标准化数据的相异矩阵

dij <- dist(scale(dat, center = TRUE, scale = TRUE))

然后使用组平均法计算这些数据的层次聚类

clust <- hclust(dij, method = "average")

接下来,我们根据从树状图中形成 3 ('k') 个组来计算样本的排序,但我们可以在这里选择其他东西。

ord <- order(cutree(clust, k = 3))

接下来根据树状图计算样本之间的差异,即相关距离:

coph <- cophenetic(clust)

这里有 3 个图像图:

  1. 根据聚类分析分组排序的原始相异矩阵,
  2. 共相距离,再次按上述排序
  3. 原始差异与共生距离之间的差异
  4. 比较原始距离和共生距离的 Shepard 式图;捕获原始距离的聚类效果越好,点越接近 1:1 线

这是生成上述图的代码

layout(matrix(1:4, ncol = 2))
image(as.matrix(dij)[ord, ord], main = "Original distances")
image(as.matrix(coph)[ord, ord], main = "Cophenetic distances")
image((as.matrix(coph) - as.matrix(dij))[ord, ord], 
      main = "Cophenetic - Original")
plot(coph ~ dij, ylab = "Cophenetic distances", xlab = "Original distances",
     main = "Shepard Plot")
abline(0,1, col = "red")
box()
layout(1)

这会在活动设备上产生:

话虽如此,但只有 Shepard 图显示了“聚类数据与 [dis] 相似性矩阵之间的相关性”,而这不是图像图(水平图)。您建议如何计算两个数字之间的相关性,以便对共同和原始 [dis] 相似性进行所有成对比较?

【讨论】:

  • 如何为图创建相似度矩阵?
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 2015-07-17
  • 2023-03-12
  • 2021-01-21
  • 2015-10-20
  • 1970-01-01
  • 2013-11-25
  • 2018-12-05
相关资源
最近更新 更多