#r #cluster-analysis #hierarchical-clustering
#r #кластерный анализ #иерархическая кластеризация
Вопрос:
Не могли бы вы помочь мне найти идеальное количество кластеров с помощью clusGap
функции? В этой ссылке есть аналогичный пример: https://www.rdocumentation.org/packages/factoextra/versions/1.0.7/topics/fviz_nbclust
Но я хотел бы сделать это для моего случая. Мой код приведен ниже:
library(cluster)
df <- structure(
list(Propertie = c(1,2,3,4,5,6,7,8), Latitude = c(-24.779225, -24.789635, -24.763461, -24.794394, -24.747102,-24.781307,-24.761081,-24.761084),
Longitude = c(-49.934816, -49.922324, -49.911616, -49.906262, -49.890796,-49.8875254,-49.8875254,-49.922244),
waste = c(526, 350, 526, 469, 285, 433, 456,825)),class = "data.frame", row.names = c(NA, -8L))
df<-scale(df)
hcluster = clusGap(df, FUN = hcut, K.max = 100, B = 50)
Clustering k = 1,2,..., K.max (= 100): .. Error in sil.obj[, 1:3] : incorrect number of dimensions
Ответ №1:
Проблема здесь в том, что вы указали K.max
значение 100, однако в вашем наборе данных всего восемь наблюдений. Как указано в clusGap
документации, K.max
максимальное количество кластеров для рассмотрения, следовательно, в вашем случае K.max
не может быть больше семи.
Мне неясно, подходит ли кластеризация для набора данных такого небольшого размера. Тем не менее, пожалуйста, смотрите Ниже рабочую реализацию. Я изменил plot_clusgap
функцию из пакета R / Bioconductor phyloseq
для визуализации результатов.
library(data.table)
library(cluster)
library(factoextra) # for hcut function
df <- data.table(properties = c(1,2,3,4,5,6,7,8),
latitude = c(-24.779225, -24.789635, -24.763461, -24.794394, -24.747102,-24.781307,-24.761081,-24.761084),
longitude = c(-49.934816, -49.922324, -49.911616, -49.906262, -49.890796,-49.8875254,-49.8875254,-49.922244),
waste = c(526, 350, 526, 469, 285, 433, 456,825))
df <- scale(df)
# perform clustering, B = 500 is recommended
hcluster = clusGap(df, FUN = hcut, K.max = 7, B = 500)
# extract results
dat <- data.table(hcluster$Tab)
dat[, k := .I]
# visualize gap statistic
p <- ggplot(dat, aes(k, gap)) geom_line() geom_point(size = 3)
geom_errorbar(aes(ymax = gap SE.sim, ymin = gap - SE.sim), width = 0.25)
ggtitle("Clustering Results")
labs(x = "Number of Clusters", y = "Gap Statistic")
theme(plot.title = element_text(size = 16, hjust = 0.5, face = "bold"),
axis.title = element_text(size = 12, face = "bold"))
Вот результирующая цифра:
Я должен отметить, что все значения статистики разрыва отрицательны. Это указывает на то, что оптимальное количество кластеров равно k = 1 (т. Е. Без кластеризации).