R hclust最终合并的高度

时间:2014-09-04 11:58:42

标签: r dendrogram hclust dendextend

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

所以要澄清一些R默认数据:

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

将导致带有所有聚类信息的变量hc。

R clustering output

树形图:

R dendrogram

正如您在树形图上看到的那样,最终合并发生在高度&gt; 200(约300)。 但是树状图是如何知道的?此信息不在hc.height变量中,也不在dendrogram1变量中。提到的最高合并是169。

variable dendrogram1

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

dendrogram R top merge

我问这个是因为我需要这个号码(+ - 300)用于其他应用程序,从图中读取它是非常不切实际的。

提前感谢愿意帮助的人!

2 个答案:

答案 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