【问题标题】:how to transform the following similarity matrix to distance matrix for performing hclust?如何将以下相似度矩阵转换为距离矩阵以执行 hclust?
【发布时间】:2015-01-16 06:22:27
【问题描述】:

我正在尝试使用 hclust 对图形的节点(C1、C2、C3...)进行聚类,而我的相似度指标是节点之间的链接数。

我有类似的数据

c = matrix( c(0,1,3,1,0,5,3,5,0), nrow=3, ncol=3)

基本上这是一个相似度矩阵

    C1  C2  C3
C1  0   1   3
C2  1   0   5
C3  3   5   0

这是一个无向图,其中 C1 和 C3 之间的相似度为 3 个链接。我需要将此数据转换为合适的 dist.matrix,例如

    C1  C2
C2  1
C3  1/3   1/5

格式基于我的相似性指标(两个节点之间的#links)。我该怎么做?

【问题讨论】:

  • 1/c 让您亲近。 (顺便说一句,调用其他对象c 不是一个好习惯,因为它是一个 R 函数)
  • as.dist(1/c) 在您的问题中产生结果,但我建议 igraph 用于聚类图(请参阅答案)。

标签: r cluster-analysis hierarchical-clustering hclust


【解决方案1】:

【讨论】:

    【解决方案2】:

    您似乎想使用基于边缘中间性的层次聚类。您可以直接在igraph 中执行此操作。

    library(igraph)
    c  <- matrix( c(0,1,3,1,0,5,3,5,0), nc=3)
    g  <- graph.adjacency(c,mode="undirected")
    bc <- edge.betweenness.community(g)
    par(mfrow=c(1,2))
    plot(g)
    plot(as.dendrogram(bc))
    

    c  <- matrix(c(0,0,0,4,0, 
                   0,0,0,1,0, 
                   0,0,0,4,1, 
                   4,1,4,0,3, 
                   0,0,1,3,0),nc=5)
    g  <- graph.adjacency(c,mode="undirected")
    bc <- edge.betweenness.community(g)
    plot(g)
    plot(as.dendrogram(bc))
    

    【讨论】:

    • 但是如何为树状图添加标签?像将 x 轴上的数字替换为某些标签? V(g)$name
    • 没关系!知道了。我必须在 bc
    • 或者在创建图表之前设置colnames(c)
    猜你喜欢
    • 2021-05-19
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多