Saltar al contenido principal
Documentos
Gestión de datos en RGráficos en RR DocumentaciónInterfaz REstadística en RIntroducción de datos en R

Análisis de conglomerados en R

R ofrece una amplia gama de funciones para análisis de conglomerados</a >, incluidos los enfoques jerárquico aglomerativo, de partición y basado en modelos. Aunque no existe una solución definitiva para determinar el número óptimo de conglomerados a extraer, hay varios enfoques disponibles.

Preparación de datos

Antes de agrupar los datos, quizá quieras eliminar o estimar los datos que faltan y reescalar las variables para que sean comparables.

# Prepare Data
mydata <- na.omit(mydata) # listwise deletion of missing
mydata <- scale(mydata) # standardize variables

Partición

La agrupación de K-means es el método de partición más popular. Requiere que el analista especifique el número de conglomerados a extraer. Un gráfico de la suma de cuadrados dentro de los grupos según el número de conglomerados extraídos puede ayudar a determinar el número adecuado de conglomerados. El analista busca una curvatura en el gráfico similar a la prueba scree en el análisis factorial.

# Determine number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata,
   centers=i)$withinss)
plot(1:15, wss, type="b", xlab="Number of Clusters",
  ylab="Within groups sum of squares")
# K-Means Cluster Analysis
fit <- kmeans(mydata, 5) # 5 cluster solution
# get cluster means
aggregate(mydata,by=list(fit$cluster),FUN=mean)
# append cluster assignment
mydata <- data.frame(mydata, fit$cluster)

Se puede invocar una versión robusta de K-means basada en mediods utilizando pam( ) en lugar de kmeans( ). La función pamk( ) del paquete fpc</a ></strong > es una envoltura de pam que también imprime el número sugerido de conglomerados basándose en la anchura media óptima de la silueta.

Aglomerativo jerárquico

Existe una amplia gama de enfoques de agrupación jerárquica. He tenido buena suerte con el método de Ward que se describe a continuación.

# Ward Hierarchical Clustering
d <- dist(mydata,
method = "euclidean") # distance matrix
fit <- hclust(d, method="ward")

plot(fit) # display dendogram
groups <- cutree(fit, k=5) # cut tree into 5 clusters
# draw dendogram with red borders around the 5 clusters
rect.hclust(fit, k=5, border="red")

dendogram

La función pvclust( ) del paquete pvclust</a > proporciona valores p para la agrupación jerárquica basada en el remuestreo bootstrap multiescala. Los conglomerados muy apoyados por los datos tendrán valores p grandes. Ten en cuenta que pvclust</a > agrupa columnas, no filas. Transpón tus datos antes de utilizarlos.

# Ward Hierarchical Clustering with Bootstrapped p values
library(pvclust)
fit <-
pvclust(mydata, method.hclust="ward",
   method.dist="euclidean")
plot(fit) # dendogram with p values
# add rectangles around groups highly supported by the data
pvrect(fit, alpha=.95)

agrupación con valores p

Basado en modelos

Los enfoques basados en modelos asumen una variedad de modelos de datos y aplican la estimación de máxima verosimilitud y los criterios de Bayes para identificar el modelo más probable y el número de conglomerados. En concreto, la función Mclust( ) del paquete mclust selecciona el modelo óptimo según el BIC para EM inicializado por agrupación jerárquica para modelos de mezcla gaussiana parametrizados. (¡uf!). Se elige el modelo y el número de conglomerados con el mayor BIC. Consulta help(mclustModelNames)</a > para conocer los detalles sobre el modelo elegido como mejor.

# Model Based Clustering
library(mclust)
fit <- Mclust(mydata)
plot(fit) # plot results

summary(fit) # display the best model

agrupación basada en modelos gráficos de dispersión de conglomerados

Trazado de soluciones de conglomerados

Siempre es una buena idea mirar los resultados del grupo.

# K-Means Clustering with 5 clusters
fit <- kmeans(mydata, 5)

# Cluster Plot against 1st 2 principal components

# vary parameters for most readable graph
library(cluster)

clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE,
   labels=2, lines=0)

# Centroid Plot against 1st 2 discriminant functions
library(fpc)
plotcluster(mydata, fit$cluster)

clusplot diagrama discriminante

Validar las soluciones de clúster

La función cluster.stats() del paquete fpc proporciona un mecanismo para comparar la similitud de dos soluciones de conglomerados utilizando diversos criterios de validación (el coeficiente gamma de Hubert, el índice de Dunn y el índice rand corregido)

# comparing 2 cluster solutions
library(fpc)
cluster.stats(d, fit1$cluster, fit2$cluster)

donde d es una matriz de distancias entre objetos, y fit1$cluster y fit$cluste r son vectores enteros que contienen los resultados de la clasificación de dos agrupaciones diferentes de los mismos datos.

Practicar

Prueba el ejercicio de agrupación en este curso de introducción al aprendizaje automático.</a >

Aprende lo esencial de R

Domina los fundamentos del análisis de datos en R, incluyendo vectores, listas y marcos de datos, y practica R con conjuntos de datos reales.
Empieza a aprender R gratis