Разрезание дендрограммы на n деревьев с минимальным размером кластера в R
Я пытаюсь использовать наемную археологическую кластеризацию (конкретноhclust
) разбить набор данных на 10 групп с размерами 100 членов или менее, и ни в одной группе не должно быть более 40% от общей численности населения. Единственный метод, который я знаю в настоящее время, состоит в том, чтобы повторно использоватьcut()
и выбирайте непрерывно более низкие уровни h, пока я не буду доволен дисперсией разрезов. Однако это вынуждает меня вернуться назад и повторно объединить группы, которые я обрезал, чтобы объединить их в 100 групп участников, что может занять очень много времени.
Я экспериментировал с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
количество деревьев вместо.