Usando el paquete de estadísticas en R para kmeans clustering


10

Tengo dificultades para comprender uno o dos aspectos del paquete de clúster. Estoy siguiendo de cerca el ejemplo de Quick-R , pero no entiendo uno o dos aspectos del análisis. He incluido el código que estoy usando para este ejemplo en particular.

## Libraries
library(stats)
library(fpc) 

## Data
mydata = structure(list(a = c(461.4210925, 1549.524107, 936.42856, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131.4349206, 0, 762.6110846, 
3837.850406), b = c(19578.64174, 2233.308842, 4714.514274, 0, 
2760.510002, 1225.392118, 3706.428246, 2693.353714, 2674.126613, 
592.7384164, 1820.976961, 1318.654162, 1075.854792, 1211.248996, 
1851.363623, 3245.540062, 1711.817955, 2127.285272, 2186.671242
), c = c(1101.899095, 3.166506463, 0, 0, 0, 1130.890295, 0, 654.5054857, 
100.9491289, 0, 0, 0, 0, 0, 789.091922, 0, 0, 0, 0), d = c(33184.53871, 
11777.47447, 15961.71874, 10951.32402, 12840.14983, 13305.26424, 
12193.16597, 14873.26461, 11129.10269, 11642.93146, 9684.238583, 
15946.48195, 11025.08607, 11686.32213, 10608.82649, 8635.844964, 
10837.96219, 10772.53223, 14844.76478), e = c(13252.50358, 2509.5037, 
1418.364947, 2217.952853, 166.92007, 3585.488983, 1776.410835, 
3445.14319, 1675.722506, 1902.396338, 945.5376228, 1205.456943, 
2048.880329, 2883.497101, 1253.020175, 1507.442736, 0, 1686.548559, 
5662.704559), f = c(44.24828759, 0, 485.9617601, 372.108855, 
0, 509.4916263, 0, 0, 0, 212.9541122, 80.62920455, 0, 0, 30.16525587, 
135.0501384, 68.38023073, 0, 21.9317122, 65.09052886), g = c(415.8909649, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637.2629479, 0, 0, 
0), h = c(583.2213618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), i = c(68206.47387, 18072.97762, 23516.98828, 
13541.38572, 15767.5799, 19756.52726, 17676.00505, 21666.267, 
15579.90094, 14351.02033, 12531.38237, 18470.59306, 14149.82119, 
15811.23348, 14637.35235, 13588.64291, 12549.78014, 15370.90886, 
26597.08152)), .Names = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i"), row.names = c(NA, -19L), class = "data.frame")

Luego estandarizo las variables:

# standardize variables
mydata <- scale(mydata) 

## K-means Clustering 

# 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)
# Q1
plot(1:15, wss, type="b", xlab="Number of Clusters",  ylab="Within groups sum of squares") 

# K-Means Cluster Analysis
fit <- kmeans(mydata, 3) # number of values in cluster solution

# get cluster means 
aggregate(mydata,by=list(fit$cluster),FUN=mean)

# append cluster assignment
mydata <- data.frame(mydata, cluster = fit$cluster)

# Cluster Plot against 1st 2 principal components - vary parameters for most readable graph
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0) # Q2

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

Mi pregunta es, ¿cómo puede relacionarse el gráfico que muestra el número de grupos (marcado Q1en mi código) con los valores reales (número de grupo y nombre de la variable)?

Actualización: ahora entiendo que la clusplot()función es un gráfico bivariado, con PCA1 y PCA2. Sin embargo, no entiendo el vínculo entre los componentes de PCA y los grupos de clúster. ¿Cuál es la relación entre los valores de PCA y los grupos de agrupamiento? He leído en otra parte sobre el vínculo entre kmeans y PCA, pero todavía no entiendo cómo se pueden mostrar en el mismo gráfico bivariado.


disculpas si he hecho demasiadas preguntas sobre la agrupación en los últimos días. Estoy tratando de familiarizarme con este campo rápidamente (también
publiqué

Está bien, esto no es TCS.SE (-;

# Determine el número de grupos ¿Podría explicar por qué estamos usando esta fórmula (mydata, 2, var) y por qué 2:15?

Respuestas:


8

No entendí la pregunta 1 por completo, pero intentaré una respuesta. La gráfica de Q1 muestra cómo cambia la suma interna de cuadrados (wss) a medida que cambia el número de clúster. En este tipo de parcelas, debe buscar los pliegues en el gráfico, un pliegue en 5 indica que es una buena idea usar 5 grupos.

WSS tiene una relación con sus variables en el siguiente sentido, la fórmula para WSS es

jxiCj||xiμj||2

donde es el punto medio para el grupo y es la -ésima observación. Denotamos el grupo j como . WSS a veces se interpreta como "cuán similares son los puntos dentro de cada grupo". Esta similitud se refiere a las variables.μjjxiiCj

La respuesta a la pregunta 2 es esta. Lo que realmente estás viendo en el clusplot()es el diagrama de tus observaciones en el plano principal. Lo que está haciendo esta función es calcular el puntaje del componente principal para cada una de sus observaciones, trazar esos puntajes y colorearlos por grupo.

El análisis de componentes principales (PCA) es una técnica de reducción de dimensiones; "resume" la información de todas las variables en un par de "nuevas" variables llamadas componentes. Cada componente es responsable de explicar cierto porcentaje de la variabilidad total. En el ejemplo que lee "Estos dos componentes explican el 73.95% de la variabilidad total".

La función clusplot()se utiliza para identificar la efectividad de la agrupación. En caso de que tenga una agrupación exitosa, verá que las agrupaciones están claramente separadas en el plano principal. Por otro lado, verá los grupos fusionados en el plano principal cuando el agrupamiento no tiene éxito.

Para obtener más información sobre el análisis de componentes principales, puede leer wiki. si quieres un libro, te sugiero Modern Multivariate Techniques de Izenmann, allí encontrarás PCA y k-means.

Espero que esto ayude :)


1
Gracias por su respuesta. Tenía una pregunta más sobre la clusplot()función. ¿Cuál es la relación entre los valores de PCA y los grupos de agrupamiento? He leído en otra parte sobre el vínculo entre kmeans y PCA, pero todavía no entiendo cómo se pueden mostrar en el mismo gráfico bivariado. (Quizás esta debería ser una nueva pregunta en sí misma).
celenius

2
En realidad, los valores de PCA y los grupos de agrupamiento son independientes. PCA crea "nuevas" coordenadas para cada observación mydata, eso es lo que realmente ve en la trama. La forma de los puntos se traza usando fit$clusterel segundo parámetro de clusplot(). Tal vez deberías echar un vistazo más profundo a PCA. Avíseme si esto le ayudó, o si tiene más referencias.
deps_stats

1
Ayuda (en el sentido de que estoy afinando mi problema). ¿Cómo se fit$clusterrelaciona con las "coordenadas" de PCA? Creo que entiendo cómo funciona PCA, pero tal como lo entiendo, cada componente no se puede explicar utilizando variables de los datos originales (más bien es una combinación lineal de los datos sin procesar), por lo que no entiendo cómo puede ser relacionado con los grupos.
celenius

2
Casi lo tienes :) fit$clusterno está relacionado con PCA. Lo que clusplot()hace es trazar los puntos usando las coordenadas "nuevas" y etiquetarlas usando fit$cluster. Obtuve '+' para el grupo 3, 'o' para el grupo 1 y un triángulo para el grupo 2. La función clusplot()es útil para visualizar la agrupación.
deps_stats

1
Por "nuevas" coordenadas me refiero a PCA1 y PCA2. Tienes razón, no tienen fit$cluster
ninguna
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.