在R中,如何在聚类数据后绘制相似性矩阵(如块图)?

时间:2011-04-12 18:19:22

标签: r cluster-analysis

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

提前谢谢。

1 个答案:

答案 0 :(得分:12)

@Chase和@ bill_080评论中提出的一般解决方案需要一点点增强(部分)满足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)))

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

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线
  5. 以下是生成上述图表的代码

    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)
    

    在活动设备上生成此内容:

    plots of original and cophenetic distances

    然而,尽管如此,只有Shepard图显示了“聚类数据和[dis]相似性矩阵之间的相关性”,而这不是图像图(levelplot)。对于共生和原始[dis]相似性的所有成对比较,您如何计算两个数之间的相关性?