Выбор кластеров ниже определенной высоты на дендрограмме R, но только если кластер больше единицы

Я хочу написать простой код, который будет выбирать для определенных кластеров ниже пороговой высоты и выделять их (либо прямоугольником, либо цветом). До сих пор я использовал cutree, который выбирает кластеры, которые я ищу, но также выбирает все кластеры размера 1.

Изображение всех выбранных кластеров

Мне удалось использовать это, чтобы выбрать кластеры, которые мне действительно нужны, но поскольку это только очень маленький раздел данных, которые у меня есть, я не хочу, чтобы их выбирали вручную. Есть ли способ разрезать дерево, но выбрать только кластеры больше одного?

Изображение желаемых кластеров выбрано

Это код, который я использую сейчас:

plot(hClust,hang = -1,cex=0.5)
abline(h= 0.0018,col = 'blue')

ct <- cutree(hClust, h = 0.0018)
clust <- rect.hclust(hClust, h=0.0018, which = c(1,2,4,8,23))

person Kate Bamford    schedule 01.04.2018    source источник


Ответы (1)


Вы не предоставляете свои данные, поэтому я проиллюстрирую их встроенными mtcars данными. Конечно, высота другая, чем у вас. Та же настройка, что и ваша проблема:

hClust =hclust(dist(mtcars))
plot(hClust,hang = -1, cex=0.8)
abline(h= 28,col = 'blue')

Первая отсечка

Теперь мы можем вызвать rect.hclust без печати (border=0), чтобы получить кластеры, пронумерованные как rect.hclust, чтобы увидеть их. Затем мы можем выбрать кластеры с более чем одной точкой и обвести их рамками.

clust <- rect.hclust(hClust, h=28, border=0)
NumMemb = sapply(clust, length)
clust <- rect.hclust(hClust, h=28, which=which(NumMemb>1))

Дерево в штучной упаковке

person G5W    schedule 01.04.2018