给定以下数据框:
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)等。阅读有关 的merge
值hcluster
有助于理解上面的矩阵。
现在我来看看每一步的高度:
> 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 个观察结果,我不知道:
- 计算这一步高度的正确方法
- 这些高度中的每一个实际上意味着什么。