R Дендрограмма Родитель-Дочерние Кластеры - PullRequest
2 голосов
/ 21 января 2020

Я пытаюсь выяснить, как я могу получить информацию о том, какие кластеры являются «дочерними / потомственными» для «родительских» кластеров. Позвольте мне проиллюстрировать это следующим сюжетом.

Этот график представляет собой обычную дендрограмму с различными решениями для кластеризации. То, что я хотел бы нарисовать, это путь между меньшими кластерами и большими кластерами. Причина, по которой я хочу это сделать, заключается в том, что у меня очень большой набор данных, и у меня есть сложные кластеры, и мне нужно понять, какие кластеры «спускаются» (маленькие кластеры) из больших кластеров.

enter image description here

# 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

Что я действительно хотел бы нарисовать или извлечь в любом Кстати, это что-то вроде:

enter image description here

Это действительно помогло бы мне узнать, какие из меньших кластеров «спускаются» из более крупных.

Имеет ли это смысл?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Одним из решений будет преобразование вашей дендрограммы в график 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]))

Dendrogram of states

2 голосов
/ 21 января 2020

Вы можете попробовать пакет 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")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...