我試圖使用僱主聚類(特別是hclust
)將數據集劃分爲10個組,其大小爲100個或更少,且沒有組超過40個佔總人口的百分比。我目前唯一知道的方法是反覆使用cut()
並選擇不斷降低的h值,直到我對切割的分散感到滿意爲止。然而,這迫使我回去重新組合我修剪的小組,將它們聚合爲100個成員組,這可能非常耗時。將樹狀圖切割爲最小簇大小爲n的樹
我已經試用了dynamicTreeCut
包,但無法弄清楚如何輸入這些(相對簡單)的限制。我使用deepSplit
作爲指定分組數量的方式,但按照文檔,這將最大數量限制爲4.對於下面的練習,我所要做的就是將集羣分成5組,每組3個或者更多的人(我可以自己處理最大尺寸限制,但如果你想嘗試解決這個問題,這將會有所幫助!)。
這是我的例子,使用Orange
數據集。
library(dynamicTreeCut)
library(reshape2)
##creating 14 individuals from Orange's original 5
Orange1<-Orange
Orange1$Tree<-as.numeric(as.character(Orange1$Tree))
Orange2<-Orange1
Orange3<-Orange1
Orange2$Tree=Orange2$Tree+6
Orange3$Tree=Orange3$Tree+11
combOr<-rbind(Orange1, Orange2[1:28,], Orange3)
####casting the data to make a correlation matrix, and then running
#### a hierarchical cluster
castOrange<-dcast(combOr, age~Tree, mean, fill=0)
castOrange[,16]<-c(1,34,5,35,34,35,21)
castOrange[,17]<-c(1,34,5,35,34,35,21)
orangeCorr<-cor(castOrange[, -1])
orangeClust<-hclust(dist(orangeCorr))
###running the dynamic tree cut
dynamicCut<-cutreeDynamic(orangeClust, minClusterSize=3, method="tree", deepSplit=4)
dynamicCut
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
正如您所看到的,它只能指定兩個羣集。對於我的練習,我想避免使用明確的高度項來切割樹,因爲我想要樹的數量爲k
。
這是一箇舊帖子,但要小心,0表示「未聚集」而不是「#0簇」!在這個例子中,只有一個羣集。 –