如何解释树状图高度以通过相关性进行聚类

机器算法验证 r 相关性 层次聚类
2022-03-01 00:40:28

给定以下数据框:

df <- data.frame(x1 = c(26, 28, 19, 27, 23, 31, 22, 1, 2, 1, 1, 1),
                 x2 = c(5, 5, 7, 5, 7, 4, 2, 0, 0, 0, 0, 1),
                 x3 = c(8, 6, 5, 7, 5, 9, 5, 1, 0, 1, 0, 1),
                 x4 = c(8, 5, 3, 8, 1, 3, 4, 0, 0, 1, 0, 0),
                 x5 = c(1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0),
                 x6 = c(2, 3, 1, 0, 1, 1, 3, 37, 49, 39, 28, 30))

这样

> df
   x1 x2 x3 x4 x5 x6
1  26  5  8  8  1  2
2  28  5  6  5  1  3
3  19  7  5  3  1  1
4  27  5  7  8  1  0
5  23  7  5  1  1  1
6  31  4  9  3  0  1
7  22  2  5  4  1  3
8   1  0  1  0  0 37
9   2  0  0  0  0 49
10  1  0  1  1  0 39
11  1  0  0  0  0 28
12  1  1  1  0  0 30

我想使用层次聚类对这 12 个人进行分组,并使用相关性作为距离度量。所以这就是我所做的:

clus <- hcluster(df, method = 'corr')

这是情节clus

树状图

df实际上是我正在对其进行聚类分析的 69 个案例之一。为了得出一个截止点,我查看了几个树状图并使用了h参数,cutree直到我对大多数情况下有意义的结果感到满意为止。那个数字是k = .5所以这是我们后来得到的分组:

> data.frame(df, cluster = cutree(clus, h = .5))
   x1 x2 x3 x4 x5 x6 cluster
1  26  5  8  8  1  2       1
2  28  5  6  5  1  3       1
3  19  7  5  3  1  1       1
4  27  5  7  8  1  0       1
5  23  7  5  1  1  1       1
6  31  4  9  3  0  1       1
7  22  2  5  4  1  3       1
8   1  0  1  0  0 37       2
9   2  0  0  0  0 49       2
10  1  0  1  1  0 39       2
11  1  0  0  0  0 28       2
12  1  1  1  0  0 30       2

但是,在这种情况下,我无法解释 0.5 的截止值。我浏览了 Internet,包括帮助页面?hcluster但没有成功。我对这个过程的理解最远的是这样做:?hclust?cutree

首先,我看一下合并是如何进行的:

> clus$merge
      [,1] [,2]
 [1,]   -9  -11
 [2,]   -8  -10
 [3,]    1    2
 [4,]  -12    3
 [5,]   -1   -4
 [6,]   -3   -5
 [7,]   -2   -7
 [8,]   -6    7
 [9,]    5    8
[10,]    6    9
[11,]    4   10

这意味着一切都是从连接观察 9 和 11 开始,然后是观察 8 和 10,然后是步骤 1 和 2(即连接 9、11、8 和 10)等。阅读有关 的mergehcluster有助于理解上面的矩阵。

现在我来看看每一步的高度:

> clus$height
[1] 1.284794e-05 3.423587e-04 7.856873e-04 1.107160e-03 3.186764e-03 6.463286e-03 
6.746793e-03 1.539053e-02 3.060367e-02 6.125852e-02 1.381041e+00
> clus$height > .5
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

这意味着聚类仅在最后一步停止,当高度最终超过 0.5 时(正如 Dendogram 已经指出的那样,顺便说一句)。

现在,这是我的问题:我如何解释高度?是“相关系数的余数”吗(请不要心脏病发作)?我可以像这样重现第一步(观察 9 和 11 的连接)的高度:

> 1 - cor(as.numeric(df[9, ]), as.numeric(df[11, ]))
[1] 1.284794e-05

并且对于以下步骤,它加入了观察 8 和 10:

> 1 - cor(as.numeric(df[8, ]), as.numeric(df[10, ]))
[1] 0.0003423587

但下一步涉及加入这 4 个观察结果,我不知道:

  1. 计算这一步高度的正确方法
  2. 这些高度中的每一个实际上意味着什么。
1个回答

回想一下,在层次聚类中,您必须定义聚类之间的距离度量。例如,在分层平均链接聚类(可能是最流行的选项)中,聚类之间的距离被定义为所有聚类间对之间的平均距离。还必须定义对之间的距离,例如,可以是欧几里得距离(或您的情况下的相关距离)。所以簇间的距离是一种泛化对间距离的方法。

在树状图中,y 轴只是集群之间距离度量的值。例如,如果您看到两个集群在高度处合并,这意味着这些集群之间的距离为xx