使用hclust函数在R中执行层次聚类时。 你怎么知道最终合并的高度?
所以要澄清一些R默认数据:
hc <- hclust(dist(USArrests))
dendrogram1 = as.dendrogram(hc)
plot(hc)
将导致带有所有聚类信息的变量hc。
树形图:
正如您在树形图上看到的那样,最终合并发生在高度&gt; 200(约300)。 但是树状图是如何知道的?此信息不在hc.height变量中,也不在dendrogram1变量中。提到的最高合并是169。
如果dendrogram1变量不包含此信息,则绘图函数如何知道合并必须在300的高度发生?
我问这个是因为我需要这个号码(+ - 300)用于其他应用程序,从图中读取它是非常不切实际的。
提前感谢愿意帮助的人!
答案 0 :(得分:5)
可以使用stats::cophenetic()
计算这些值:
两次观察之间的共生距离 clustered被定义为intergroup不相似性 首先将两个观测结果合并为一个集群。
这为您的示例提供了以下内容:
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
答案 1 :(得分: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
有关该软件包的更多详细信息,您可以查看at its vignette。