Я мог бы использовать некоторые рекомендации по методам в R, чтобы определить оптимальное количество кластеров, а затем описать кластеры с различными статистическими критериями. Я новичок в R с базовыми знаниями о статистических основах кластерного анализа.
-
Методы определения количества кластеров: В литературе одним из распространенных методов является так называемый "критерий локтя", который сравнивает сумму квадратов разностей (SSD) для различных кластерных решений. Поэтому SSD рассчитывается против числа кластеров в анализе, и оптимальное количество кластеров определяется путем определения "локтя" на графике (например, здесь: https://en.wikipedia.org/wiki/File:DataClustering_ElbowCriterion.JPG) Этот метод является первым подходом к получению субъективного впечатления. Поэтому Id нравится реализовывать его в R. Информация в Интернете по этому поводу разрежена. Здесь есть один хороший пример: http://www.mattpeeples.net/kmeans.html, где автор также сделал интересный итеративный подход, чтобы увидеть, как локоть как-то стабилен после нескольких повторений процесса кластеризации (тем не менее, для разбиения кластерных методов не на иерархические). Другие методы в литературе содержат так называемые "правила остановки". МИЛЛИГАН и КУПЕР сравнили 30 из этих правил остановки в своей статье "Рассмотрение процедур определения количества кластеров в наборе данных" (см. Здесь http://link.springer.com/article/10.1007%2FBF02294245), установив, что правило остановки от Калинского и Харабаша обеспечило наилучшие результаты в оценке Монте-Карло. Информация о реализации этого в R еще реже. Поэтому, если кто-либо когда-либо выполнял это или другое правило остановки (или другой метод), некоторые советы были бы очень полезными.
-
Статистически описывать кластеры. Для описания кластеров я думал об использовании среднего и своего рода вариационного критерия. Мои данные касаются сельскохозяйственного землепользования и показывают количество производства различных культур в каждом муниципалитете. Моя цель - найти аналогичные модели землепользования в моем наборе данных.
Я создал script для подмножества объектов для выполнения первого тестового прогона. Это выглядит так (пояснения по шагам в script, ниже).
#Clusteranalysis agriculture
#Load data
agriculture <-read.table ("C:\\Users\\etc...", header=T,sep=";")
attach(agriculture)
#Define Dataframe to work with
df<-data.frame(agriculture)
#Define a Subset of objects to first test the script
a<-df[1,]
b<-df[2,]
c<-df[3,]
d<-df[4,]
e<-df[5,]
f<-df[6,]
g<-df[7,]
h<-df[8,]
i<-df[9,]
j<-df[10,]
k<-df[11,]
#Bind the objects
aTOk<-rbind(a,b,c,d,e,f,g,h,i,j,k)
#Calculate euclidian distances including only the columns 4 to 24
dist.euklid<-dist(aTOk[,4:24],method="euclidean",diag=TRUE,upper=FALSE, p=2)
print(dist.euklid)
#Cluster with Ward
cluster.ward<-hclust(dist.euklid,method="ward")
#Plot the dendogramm. define Labels with labels=df$Geocode didn't work
plot(cluster.ward, hang = -0.01, cex = 0.7)
#here are missing methods to determine the optimal number of clusters
#Calculate different solutions with different number of clusters
n.cluster<-sapply(2:5, function(n.cluster)table(cutree(cluster.ward,n.cluster)))
n.cluster
#Show the objects within clusters for the three cluster solution
three.cluster<-cutree(cluster.ward,3)
sapply(unique(three.cluster), function(g)aTOk$Geocode[three.cluster==g])
#Calculate some statistics to describe the clusters
three.cluster.median<-aggregate(aTOk[,4:24],list(three.cluster),median)
three.cluster.median
three.cluster.min<-aggregate(aTOk[,4:24],list(three.cluster),min)
three.cluster.min
three.cluster.max<-aggregate(aTOk[,4:24],list(three.cluster),max)
three.cluster.max
#Summary statistics for one variable
three.cluster.summary<-aggregate(aTOk[,4],list(three.cluster),summary)
three.cluster.summary
detach(agriculture)
Источники