使用R中的cutree从距离矩阵中提取组

时间:2014-01-03 20:17:11

标签: r matrix distance

我从一系列爱好和人物开始,我想通过他们共同的爱好来聚集那些人。因此,我创建了一个距离矩阵,然后我应用了层次聚类和cutree将聚类分组到特定数量的聚类中。现在我有cutree矩阵,但我不知道如何从中提取簇。你能建议吗?

这是我的意思的一个例子。

距离矩阵:

       one    three   two
one     0      1.0    1.0
three   1      0.0    0.5
two     1      0.5    0.0

然后我使用了hclust和cutree并得到了这个结果:

hc <- hclust(dist, method="ward")
ct <- cutree(hc, k=1:3)
        1       2      3
one     1       1      1
three   1       2      2
two     1       2      3

如何获取属于同一群集的人员列表?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

ct是一个矩阵,因此您可以索引列以获取大小为1:3的组的成员资格。例如,

cp[, 2]

给出了将3个观察值分配给2组的非平凡解决方案。

要获得每个群集中的观察结果,请使用您的数据:

Dij <- matrix(c(0, 1.0, 1.0,
                1, 0.0, 0.5,
                1, 0.5, 0.0), ncol = 3, byrow = TRUE)
rownames(Dij) <- colnames(Dij) <- c("one", "two", "three")
hc <- hclust(as.dist(Dij), method="ward")
ct <- cutree(hc, k=1:3)

你可以使用split()函数来分割ct的行名(你是距离矩阵中的观察/样本标识符,Dij),由会员分解从您想要使用的ct列中选择的向量。 E.g。

> split(rownames(ct), ct[,2])
$`1`
[1] "one"

$`2`
[1] "two"   "three"

答案 1 :(得分:1)

您的k=1:3将为每个$ k = {1,2,3} $提供预测的群集。如果你想根据集群捆绑组,假设WLOG 2是你感兴趣的集群数,你只需要用矩阵列条目连接矩阵列的名称。

示例:

hc <- hclust(dist(USArrests))
memb <- cutree(hc, k = 1:5)
tapply(names(memb[, 3]), memb[, 3], c) ## say we're interested in 3 clusters