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 Q1
en 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.
fuente
Respuestas:
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
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.μj j xi i Cj
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 :)
fuente
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).mydata
, eso es lo que realmente ve en la trama. La forma de los puntos se traza usandofit$cluster
el segundo parámetro declusplot()
. Tal vez deberías echar un vistazo más profundo a PCA. Avíseme si esto le ayudó, o si tiene más referencias.fit$cluster
relaciona 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.fit$cluster
no está relacionado con PCA. Lo queclusplot()
hace es trazar los puntos usando las coordenadas "nuevas" y etiquetarlas usandofit$cluster
. Obtuve '+' para el grupo 3, 'o' para el grupo 1 y un triángulo para el grupo 2. La funciónclusplot()
es útil para visualizar la agrupación.fit$cluster