Использование cluster.stats с hclust

У меня проблема с использованием cluster.stats на двух разных кластерах hclust. Это не возможно?

У меня версия 0.99.491 - © 2009-2015 RStudio, Inc. с установленными ниже пакетами:

mylib <- "/Users/Klaus/R Packages/"; mylib
install.packages("NbClust",lib=mylib)
install.packages("modeltools",lib=mylib)
install.packages("flexclust",lib=mylib)
install.packages("RTextTools",lib=mylib) # Amazon's default machine image uses the Atlas BLAS. R points to that when installed with all defaults, but RTextTools expects the ordinary BLAS. 
install.packages("mclust",lib=mylib)
install.packages("fpc",lib=mylib)

library("NbClust",lib=mylib)
library("modeltools",lib=mylib)
library("flexclust",lib=mylib)
library("cluster",lib=mylib)
library("mclust",lib=mylib)
library("fpc",lib=mylib)

Я создаю эти кластеры:

data(nutrient, package="flexclust")
row.names(nutrient) <- tolower(row.names(nutrient))
nutrient.scaled <- scale(nutrient)
d_eucli <- dist(nutrient.scaled,"euclidean")
fit.single <- hclust(d_eucli, method="single")
fit.average <- hclust(d_eucli, method="average")

Но при использовании cluster.stats на них я получаю ошибку:

cluster.stats(d_eucli, fit.single$cluster, fit.average$cluster)

Ошибка (в датской настройке):

Fejl i `[<-`(`*tmp*`, j, i, value = Inf) : subscript out of bounds
In addition: Advarselsbeskeder:
1: I max(clustering) : no non-missing arguments to max; returning -Inf
2: I cluster.stats(d_eucli, fit.single$cluster, fit.average$cluster) :
  clustering renumbered because maximum != number of clusters
3: I min(bv) : no non-missing arguments to min; returning Inf
4: I min(sij) : no non-missing arguments to min; returning Inf

Что мне не хватает?

2 ответа

hclust будет вычислять дендрограмму, а не разделение.

Чтобы сделать этот последний шаг, используйте cutree, Тогда вы сможете продолжить.

Следующий код должен работать, я попробовал сам:

fit.single <- hclust(d_eucli, method="single")

fit.average <- hclust(d_eucli, method="average")

cut.single <- cutree(fit.single, k=3) 

Вы должны указать номер кластера (K), если вы знаете его или на основании других проверочных тестов

cut.average <- cutree(fit.average, k=3)

cluster.stats(d_eucli, cut.single, cut.average)
Другие вопросы по тегам