繁体   English   中英

R 树状图父子聚类

[英]R Dendrogram Parent-Child Clusters

我试图找出如何检索哪些集群是“子/后代”到“父”集群。 让我用下面的图来说明这一点。

该图是具有不同聚类解决方案的正常树状图。 我想绘制的是较小集群和较大集群之间的路径。 我想这样做的原因是我有一个非常大的数据集,我有复杂的集群,我需要了解哪些集群从大集群“下降”(小集群)。

在此处输入图片说明

# Load data
data(USArrests)

# Compute distances and hierarchical clustering
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

par(mfrow = c(2,2))
# Plot the obtained dendrogram
plot(hc, cex = 0.6, hang = -1)
rect.hclust(hc, k = 2, border = 2:5)

plot(hc, cex = 0.6, hang = -1)
rect.hclust(hc, k = 4, border = 2:5)

plot(hc, cex = 0.6, hang = -1)
rect.hclust(hc, k = 8, border = 2:5)

plot(hc, cex = 0.6, hang = -1)
rect.hclust(hc, k = 12, border = 2:5)

例如,这里我有两个解决方案:2 个集群和 4 个集群。 我不清楚我如何知道哪些sub_grp2集群是从 2 个sub_grp1集群(等等)中划分出来的。

# Cut tree into 4 groups
sub_grp1 <- cutree(hc, k = 2)
sub_grp2 <- cutree(hc, k = 4)
sub_grp3 <- cutree(hc, k = 8)
sub_grp4 <- cutree(hc, k = 12)

USArrests$sub_grp1 = sub_grp1
USArrests$sub_grp2 = sub_grp2
USArrests$sub_grp3 = sub_grp3
USArrests$sub_grp4 = sub_grp4

我真正想要绘制或以任何方式检索的东西是这样的:

在此处输入图片说明

这真的会帮助我知道哪些较小的集群是从较大的集群“下降”的。

那有意义吗?

你可以试试clustree包。 顺序可能与树状图中的顺序不同,但您可以看到关系:

library(clustree)
data(USArrests)

# Compute distances and hierarchical clustering
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

Ks = c(1,2,4,6,8)
clus_results = sapply(Ks,function(i){
cutree(hc,i)
})

colnames(clus_results) = paste0("K",Ks)
clustree(clus_results, prefix = "K")

在此处输入图片说明

一种解决方案是将您的树状图转换为igraph图并使用 igraph 中可用的绘图工具。

所有 50 个州都有些拥挤,但您可以看到树状结构。

## Convert to a phylo,  then to igraph
library(ape)
PH = as.phylo(hc)
IG = as.igraph(PH)

## Make a nice layout
LO = layout_as_tree(IG)
LO2 = LO[,2:1]
LO2[,1] = LO2[,1]*6

## plot
plot(IG, layout=LO2, vertex.size=80, edge.arrow.size=0.5,
    rescale=F, vertex.label.cex = 0.8,
    xlim=range(LO2[,1]), ylim=range(LO2[,2]))

状态树状图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM