Использование 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)