1

使用 hclust 函数在 R 中执行层次聚类时。你怎么知道最终合并的高度?

因此,用一些 R 默认数据来澄清:

hc <- hclust(dist(USArrests))
dendrogram1 = as.dendrogram(hc)
plot(hc)

将产生一个包含所有聚类信息的变量 hc。

R聚类输出

和树状图:

R树状图

正如您在树状图上看到的,最终合并发生在高度 > 200(约 300)处。但是树状图是怎么知道的呢?此信息不在 hc.height 变量中,也不在 dendrogram1 变量中。提到的最高合并是 169。

变量树状图1

如果 dendrogram1 变量不包含此信息,绘图函数如何知道合并必须发生在 300 的高度?

树状图 R 顶部合并

我问这个是因为我需要这个数字 (+- 300) 用于其他应用程序,并且从图中读取它是完全不切实际的。

提前感谢任何愿意提供帮助的人!

4

2 回答 2

6

这些值可以用 计算stats::cophenetic()

已聚类的两个观测值之间的共同距离被定义为两个观测值首次组合成一个聚类时的组间差异。

这将为您的示例生成以下内容:

sort(unique(cophenetic(hc)))
#  [1]   2.291   3.834   3.929   6.237   6.638   7.355   8.027   8.538  10.860
# [10]  11.456  12.425  12.614  12.775  13.045  13.297  13.349  13.896  14.501
# [19]  15.408  15.454  15.630  15.890  16.977  18.265  19.438  19.904  21.167
# [28]  22.366  22.767  24.894  25.093  28.635  29.251  31.477  31.620  32.719
# [37]  36.735  36.848  38.528  41.488  48.725  53.593  57.271  64.994  68.762
# [46]  87.326 102.862 168.611 293.623
于 2014-09-04T12:24:16.953 回答
3

@rcs 答案是正确的。

我将提供另一种方法来解决它,通过使用dendextend包中的get_nodes_attr函数:

# install.packages("dendextend")
library(dendextend)

dend <- as.dendrogram(hclust(dist(USArrests[1:5,])))
# Like: 
# dend <- USArrests[1:5,] %>% dist %>% hclust %>% as.dendrogram

# The height for all nodes:
get_nodes_attr(dend, "height")

我们可以很容易地看到每个节点的高度:

> get_nodes_attr(dend, "height")
[1] 108.85192   0.00000  63.00833  23.19418   0.00000   0.00000  37.17701   0.00000   0.00000

有关包装的更多详细信息,您可以查看它的小插图

于 2015-01-31T09:53:38.090 回答