Es importante cambiar el idioma con el que se le pide al
R
que detecte y lea el contenido de los
data.frame
. Para cambiarlo a español se puede utilizar el
siguiente comando:
Sys.setlocale("LC_ALL", "en_US.UTF-8")
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/C"
Una alternativa es:
Sys.setenv(LANG = "spa")
Se utilizarán las librerías “readxl”, “tidyverse”, “pvclust”,
“mclust”, “cluster” y “fpc”. Debido a que se trata de varias librerías,
también se puede utilizar la librería easypackages()
para
hacerlo simultáneamente.
Para instalar dichas librerías, en caso de no contar con ellas
previamente, se utiliza el comando install.packages()
de la
siguiente manera:
install.packages("readxl")
install.packages("tidyverse")
install.packages("pvclust")
install.packages("mclust")
install.packages("cluster")
install.packages("fpc")
install.packages("esasypackages")
Ahora, para instalarlas simultáneamente:
library(easypackages) #activación de librería
paquetes <- c("readxl", "tidyverse", "pvclust", "mclust", "cluster", "fpc")
libraries(paquetes)
## Loading required package: readxl
## Loading required package: tidyverse
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.6 ✓ dplyr 1.0.8
## ✓ tidyr 1.2.0 ✓ stringr 1.4.0
## ✓ readr 2.1.2 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## Loading required package: pvclust
## Loading required package: mclust
## Package 'mclust' version 5.4.9
## Type 'citation("mclust")' for citing this R package in publications.
##
## Attaching package: 'mclust'
## The following object is masked from 'package:purrr':
##
## map
## Loading required package: cluster
## Loading required package: fpc
## All packages loaded successfully
En este tutorial se utilizará la base de datos del Índice de
Desarrollo Humano generada por el PNUD para el caso de México, agregado
a nivel municipal para los años 2000 y 2005.
Se puede descargar la base de datos se puede hacerlo desde este perfil de
GitHub
Una vez que se ha descargado y descomprimido la matriz de datos, esta
deberá cargarse en R Studio
:
datos_idh <- read.csv("~/Dropbox/R/idh_mpio_2000_2005.csv")
data.frame
Antes de avanzar a realizar cualquier trabajo con los datos
contenidos en la matriz, es importante revisar la estructura de las
variables del data frame con str()
para, así, identificar
la dimensión de la matriz de datos, la manera en que el software
identifica los nombres de las variables, así como el tipo de variable
con que reconoce a cada una y, además, un vistazo a los valores de cada
variable.
str(datos_idh)
## 'data.frame': 2454 obs. of 22 variables:
## $ id_mpio : int 9014 19019 20350 9016 9003 19046 8019 28009 15054 15020 ...
## $ entidad : chr "Distrito Federal" "Nuevo León" "Oaxaca" "Distrito Federal" ...
## $ mpio : chr "Benito Juárez" "San Pedro Garza García" "San Sebastián Tutla" "Miguel Hidalgo" ...
## $ clasificacion_2000 : int 1 2 16 4 3 6 13 21 9 20 ...
## $ grado_idh_2005 : chr "alto" "alto" "alto" "alto" ...
## $ idh_2000 : num 0.916 0.892 0.854 0.882 0.884 ...
## $ clasificacion_2005 : int 1 2 3 4 5 6 7 8 9 10 ...
## $ idh_2005 : num 0.951 0.95 0.92 0.919 0.917 ...
## $ tasa_moralidad_infantil_2000 : num 17.6 18.4 18 19.1 18.8 ...
## $ tasa_mortalidad_infantil_2005: num 3.02 3.19 5.28 7.3 6.96 ...
## $ tasa_alfabetizacion_2000 : num 98.9 97.9 97.3 97.9 97.5 ...
## $ tasa_alfabetizacion_2005 : num 97.7 98.3 98.5 97.9 97.9 ...
## $ tasa_asistencia_escolar_2000 : num 77.4 65.3 80.5 70.6 73.6 ...
## $ tasa_asistencia_escolar_2005 : num 78.7 67.4 81.8 73.1 75.1 ...
## $ usd_ppc_2000 : num 31182 27914 10349 21290 20911 ...
## $ usd_ppc_2005 : num 27824 33813 16441 21549 19724 ...
## $ indice_salud_2000 : num 0.874 0.868 0.871 0.862 0.864 ...
## $ indice_salud_2005 : num 1 0.998 0.98 0.963 0.966 ...
## $ indice_educacion_2000 : num 0.917 0.87 0.917 0.888 0.895 ...
## $ indice_educacion_2005 : num 0.914 0.88 0.929 0.897 0.903 ...
## $ indice_ingreso_2000 : num 0.958 0.94 0.774 0.895 0.892 ...
## $ indice_ingreso_2005 : num 0.939 0.972 0.852 0.897 0.882 ...
El análisis de conglomerados (o cluster
analysis) es una técnica estadística que permite la clasificación
de los casos, en la que se intenta agrupar a los casos con
características similares entre sí, mientras que se busca que los grupos
creados sean diferentes entre sí. Esto permite que objetos
(data.frames
o matrices de datos) grandes sean
“descompuestos” a su vez en objetos más pequeños cuidando, así, que los
casos contenidos dentro de cada grupo sean semejantes con respecto de
otros casos contenidos en otros subgrupos.
La integración de clusters se puede entender como una estrategia para resolver problemas de clasificación de los casos, a partir de tomar en cuenta un conjunto de variables comunes. Sin embargo, uno de los problemas comunes de esta técnica radica en la identificación de la cantidad de clusters en que se deben integrar los casos, pues existen distintas maneras para lograrlo y, no necesariamente, todas arriban al mismo resultado.
En este sentido, el análisis de conglomerados no consiste en
un algoritmo único que arroje un resultado común, sino que es una
estrategia de “resolución de problemas” que, además, abre la puerta para
la intervención de la subjetividad del analista.
Existe una gran cantidad de estrategias para implementar un análisis de conglomerados, las que dependen de los tipos de algoritmos para realizar dichos agrupamientos. Estos tipos se pueden caracterizar por los siguientes principios o criterios de análisis de los datos:
Modelos de conectividad: Estos modelos clasifican los casos en clusters basados en la distancia existente entre cada punto o caso. El principio básico que lo guía consiste en que los objetos más cercanos entre sí serán más similares respecto de otros objetos que se encuentren más alejados entre sí. A su vez, estos modelos tienen dos acercamientos a la construcción de los clusters:
Modelos basados en centroides: Estos se apoyan en algoritmos iterativos para generar agrupamientos o clusters. La noción de similaridad se deriva de la distancia de cada caso respecto de un centroide para cada uno de los clusters que se generan. Estos algoritmos requieren, de antemano, la especificación del número de clusters a implementar. Y con cada iteración, se corrige la posición del centroide de cada cluster, a la vez que se ajusta la clasificación y asignación de cada caso a los diversos clusters.
Modelos basados en distribuciones: Estos modelos difieren de otros tipos métodos de agrupamiento debido a que consideran la probabilidad de pertenencia de cada caso a cada cluster, en lugar de tomar en consideración las distancias entre datos. Estos modelos suelen sufrir de sobre-ajuste.
Modelos de densidad: Estos modelos consideran la densidad de los puntos o casos en diferentes partes del espacio para, así, crear clusters en los subespacios con densidades similares. Suelen aislar varios subespacios basado en la densidad de cada punto de información presente y asignan a los casos entre los clusters separados.
En este tutorial se revisarán 3 técnicas para el análisis de clusters, que integran a algunos de estos tipos de criterios de conglomeración:
El método de partición o k-medias (partitioning k-means) trabaja con la lógica de los modelos iterativos con centroides, y trabaja a partir de identificar el punto de máxima localidad en cada iteración bajo la siguiente lógica:
Primero se deben preparar los datos para el análisis, para ello se
deben excluir los casos perdidos con na.omit()
y, al final,
se integra un nuevo objeto que solo contenga a las variables o columnas
de interés, con el fin de contar con una matriz de datos
limpia.
En este ejercicio se seleccionaron 4 variables a comparar:
datos_idh <- na.omit(datos_idh) # borrado de casos perdidos
sub_idh <- datos_idh %>%
select(tasa_mortalidad_infantil_2005, #submuestra con las variables de interés solamente.
tasa_alfabetizacion_2005,
tasa_asistencia_escolar_2005,
usd_ppc_2005)
Posteriormente se debe revisar la distribución de las variables de
interés contenidas en la sub muestra, con el fin de identificar las
escalas de medición. Esto permitirá identificar si son comparables o si
requieren ajustar sus escalas. Para ello es útil revisarlo gráficamente
desde un boxplot()
.
boxplot(sub_idh)
En la gráfica generada se observa que no todas las variables se
encuentra en escalas comparables. Pareciera que las 3 primeras variables
están en escalas homogéneas entre sí pero difieren demasiado de la
variable que mide al ingreso per cápita.
Para resolver este problema en la estructura de datos se transforman
las escalas de medición mediante el método de la estandarización,
utilizando el comando scale()
. Posteriormente se vuelve a
solicitar una gráfica de caja para revisar la distribución de las
variables.
sub_idh_z <- scale(sub_idh) # standardize variables
boxplot(sub_idh_z)
Ahora se observa que las variables cuentan con escalas homogéneas que, después, permiten su comparación y, así, agrupamiento posterior.
El proceso de determinación del número de clusters pertinentes es un trabajo que requiere de la decisión del analista. En este método, la definición de la cantidad de clusters se apoya en un proceso gráfico en el que el analista debe identificar un “codo” en la curva de distribución de la suma de cuadrados agregados por el número de clusters que se pueden calcular.
Al identificar dicho “codo” sobre el eje horizontal, se está identificando también el número óptimo de clusters a incluir en el análisis.
wss <- (nrow(sub_idh_z) - 1) * sum(apply(sub_idh_z, 2, var)) # cálculo de la suma de cuadrados de las varianzas
for (i in 2:15) wss[i] <- sum(kmeans(sub_idh_z,
centers = i) $ withinss)
plot(1:15, wss,
type = "b",
xlab = "Cantidad de Clusters",
ylab="Suma de cuadrados dentro de grupos") #gráfico para la búsqueda del codo
En el caso de la gráfica generada, el codo de la distribución no es
completamente evidente pero se puede asumir que se encuentra entre el
cluster 2 y el 3.
Una vez definido la cantidad de clusters que permitirán agregar a los
casos del data frame, será importante asignar a cada uno de los casos a
cada uno de los cluster. Para ello se utiliza el comando
kmeans()
, donde se define la cantidad de clusters a
implementar.
Esto se puede guardar como un objeto, del tipo “lista”, y contendrá la asignación de cada caso a cada cluster.
fit1 <- kmeans(sub_idh_z, 3) # ajustar 3 clusters a los casos
sub_idh_z <- data.frame(sub_idh_z,
fit1 $ cluster) #añadir el cluster al data frame
aggregate(sub_idh, #selección de las variables originales
by = list(sub_idh_z $fit1.cluster), #selección de la columna con clusters `k means`
FUN = mean) # calcular las medias de las variables agregadas por cada cluster
## Group.1 tasa_mortalidad_infantil_2005 tasa_alfabetizacion_2005
## 1 1 32.39373 68.45623
## 2 2 22.43107 85.61483
## 3 3 14.27039 93.66232
## tasa_asistencia_escolar_2005 usd_ppc_2005
## 1 63.05581 3402.335
## 2 63.33614 5460.570
## 3 67.89601 10049.120
Una vez que se ha realizado la asignación previa, es posible
caracterizar a cada cluster mediante el cálculo de sus valores
descriptivos para cada variable original incorporada. En este caso se
generó una tabla con los promedios de cada variable original para cada
uno de los clusters calculados. Esto nos permite dar una idea de las
diferencias existentes entre los clusters, así como de las
características de los casos contenidos en cada agrupamiento.
Finalmente también es posible incorporar una columna, que contiene al
cluster de asignación de cada caso, al data frame original par, así,
utilizarlo en análisis posteriores.
Inicialmente se puede revisar la cantidad de casos que fueron
asignados a cada cluster, mediante una tabla de frecuencias con el
comanto table()
:
table(sub_idh_z $ fit1.cluster)
##
## 1 2 3
## 578 1298 542
Se identificaron que 870 fueron asignados al cluster 1, 662 al
cluster 2 y 886 al cluster 3.
A partir de la creación de los clusters, también se puede utilizar
esta última variable fit1.cluster
para avanzar en el
análisis de los casos y las variables orignales.
Por ejemplo, se puede analizar el comportamiento de una variable,
como el ingreso per cápita (usd_ppc_2005
)
desagregado entre los 3 grupos o clusters generados previamente.
sub_idh_z %>%
ggplot(aes(y = usd_ppc_2005, x = as.factor(fit1.cluster))) +
geom_boxplot()
A partir de esta distribución, se puede saber que el grupo 2 es el
que tiene menor variación del ingreso, pero también es el que registra
el menor ingreso promedio. Mientras que el grupo 3 es el caso con mayor
variación interna y que, además, registra el mayor promedio de
ingreso.
Por otro lado, también es posible conocer la manera en que interactúa
el agrupamiento con la distribución de dos variables, simultáneamente.
Por ejemplo, si se observa la asociación existente entre el ingreso
per cápita (usd_ppc_2005
) con respecto a la tasa
de mortalidad infantil para el año 2005
(tasa_mortalidad_infantil_2005
), y su vinculación con los
clusters (k = 3) generados, se obtiene lo siguiente:
sub_idh_z %>%
ggplot(aes(usd_ppc_2005, tasa_mortalidad_infantil_2005)) +
geom_point(aes(color = as.factor(fit1.cluster)))
En la gráfica se puede observar que existe una asociación indirecta o
negativa entre la tasa de mortalidad infantil y el ingreso per
cápita donde, además, el cluster permite identificar variaciones
internas en dicha asociación. Se puede identificar que el grupo 2 es el
de menor ingreso y mayor mortandad, mientras que en el extremo opuesto
se encuentra el grupo 3, de mayor ingreso y menor mortandad.
El método jerárquico trabaja con el criterio de las distancias
existentes entre los casos para, así, ir agrupando la los casos más
cercanos entre sí mientras que separa a los casos más distantes entre
sí.
El método visual en el que este se apoya consiste en una gráfica de
“árbol” o dendograma, y que permite identificar dichas
distancias entre los casos.
En un primer momento se deben calcular las distancias existentes entre los casos para, posteriormente, arribar a la generación del dendograma a partir de estas mediciones.
Para el cálculo de las distancias se utiliza el comando
dist()
, en donde se especifican que éstas se medirán
mediante unidades “euclidianas”, y que se guardará como una matriz de
distancias.
Esta matriz de distancias deberá ser tratada, posteriormente, con el
comando hclust()
, que permite aplicar el método del
agrupamiento jerárquico, y en donde se define el criterio para generar
los clusters.
En este caso se aplica el criterio de “ward.D”, que permite agregar a los casos más estrechos entre sí, así como separar a los casos más distantes entre sí.
d <- dist(sub_idh_z[, 1:4], #uso del data fame estandarizado
method = "euclidean") # genera una matriz de distancias
fit2 <- hclust(d, #aplicación del método jerárquico
method = "ward.D") #criterio de agregación
En gran medida, la meta analítica del análisis jerárquico consiste en
la construcción de la gráfica de árbol a partir de las distancias entre
los casos.
Para elaborar dicho dendograma se utiliza el comando
plot()
, y en su interior se ubica al objeto tipo lista
generado tras la aplicación del método jerárquico de agrupamiento.
También se utiliza el comando rect.hclust()
, que permite
añadir una capa que consiste en las rectas de color, y que ayudan a
identificar los casos contenidos dentro de cada cluster.
plot(fit2) # crear dendograma
rect.hclust(fit2,
k = 3, #definición de la cantidad de cluster a mapear en el dendograma
border = "red") #definición del color de las rectas que separan a los clusters
Esta gráfica denominada dendograma se integra por dos
dimensiones. Una horizontal, en la que se ubican a los casos, y están
ordenados según las distancias existentes entre cada uno. De manera que
los casos posicionados uno al lado del otro indica que son casos muy
próximos entre sí, mientras que dos casos muy separados, o inclusive
posicionados en los extremos, indica que son muy distantes entre
sí.
Las líneas de conexión existentes entre los casos, y que se integran
desde la base hacia el tope superior de la gráfica, son las que
gráficamente señalan los agrupamientos o clusters posibles a integrar,
así como los casos dentro de cada cluster.
El eje vertical de la gráfica, o la altura de las líneas de conexión
representa la distancia entre clusters. De manera que dichas líneas de
conexión verticales representan clusters mismos. Por lo que líneas con
distancias amplias entre ellas, por ejemplo, las alturas más amplias en
un mismo nivel de clusters nos proporcionan el número de clusters que
mejor representa a nuestros datos.
En el ejemplo que estamos revisando, la mayor distancia o altura
entre las líneas de conexión vertical se encuentra en el número de
clusters entre 2 y 3.
Una vez que se ha identificado la cantidad de clusters
pertinentes a partir del dendograma, es importante avanzar en
la revisión visual de la integración de dichos agrupamientos.
Para ello, primero, es importante generar un objeto en el que cada
grupo sea asignado a cada cluster, para lo que se utiliza el comando
cutree()
, a partir del objeto lista previamente elaborado
y, además, se define la cantidad de clusters a integrar con
k =
. Con ello se crea un objeto que, posteriormente, puede
se integrado al data frame original.
grupos_j <- cutree(fit2,
k = 3) # se distribuyen los casos a partir de los clusters definidos
sub_idh_z <- data.frame(sub_idh_z,
grupos_j) # se añaden las clasificaciones jerárquicas al data frame original
table(sub_idh_z $ grupos_j)
##
## 1 2 3
## 984 801 633
Así se puede identificar que 984 casos fueron agregados en el cluster 1, 801 casos fueron asignados al cluster 2 y 633 casos fueron integrados al cluster 3*.
A partir de la creación de los clusters jerárquicos, también se pueden analizar los estadísticos descriptivos para identificar las características internas de cada grupo. Por ejemplo:
aggregate(sub_idh, #selección de variables originales
by = list(sub_idh_z $ grupos_j), #selección de columna con clusters jerárquicos
FUN = mean) # calcular las medias de las variables agregadas por cada cluster
## Group.1 tasa_mortalidad_infantil_2005 tasa_alfabetizacion_2005
## 1 1 16.85636 91.86677
## 2 2 25.60008 83.55517
## 3 3 29.19642 69.72532
## tasa_asistencia_escolar_2005 usd_ppc_2005
## 1 66.84040 8171.740
## 2 59.99688 5246.445
## 3 65.76266 3566.505
Este método para calcular la cantidad ideal de clusters
asume una variedad de modelos sobre los datos, aplicando estimaciones de
máxima verosimilitud, así como modelos basado en criterios de Bayes
para, así, identificar el modelo ideal y el número óptimo de
clusters.
Este procesamiento de los datos se apoya en el comando
Mclust()
que está contenido en la librería Mclust()
,
que calcula diversos modelos de acuerdo modelos BIC, EM, agrupamientos
jerárquicos para diversos modelos gaussianos, entre otros más.
Usualmente se suele seleccionar al modelo y cantidad de cluster que
refieran al valor más elevado de BIC. Y mediante la “ayuda” de R Studio
se pueden consultar los detalles sobre los diversos modelos calculados
por la librería (help(mclustModelNames)
).
La manera de iniciar el análisis consiste en utilizar el comando
mclustBIC()
sobre el data frame que contiene solo a las
variables de interés, por ello se retoma el objeto estandarizado
sub_idh_z
. A partir de esto se elaboran los diversos
modelos que se compararán en la construcción de los clusters.
Posteriormente se solicita que se grafiquen los resultados con
plot()
.
library(mclust)
BIC <- mclustBIC(sub_idh_z[, 1:4]) # selección de las variables estandarizadas
plot(BIC)
Este tipo de análisis se apoya, así como los anteriores, en la
revisión de resultados gráficos. El gráfico generado muestra los
diversos modelos de ajuste de los datos que se corrió con el comando
mclustBIC()
.
En el plano horizontal de la gráfica BIC se observa el número de componentes o clusters evaluados, mientras que en el eje vertical se muestra el puntaje BIC. Dentro de la gráfica se muestran los puntajes BIC de los distintos modelos evaluados (sus siglas se muestran en el recuadro de texto dentro de la gráfica).
Y esto permite identificar visualmente el modelo así como la cantidad
óptima de clusters a integrar. Esto se define mediante la identificación
del modelo que registra el nivel más alto en puntaje BIC, así como su
posición sobre el eje horizontal, en la que se define la cantidad de
clusters.
La manera para confirmar esta decisión visual consiste en solicitar
un summary()
, a partir de calcular los estadísticos de cada
uno de los modelos evaluados. Para ello primero se debe aplicar el
comando Mclust(..., x = BIC)
, que permite generar los
estadísticos de los modelos, así como la cantidad óptima de
clusters. Estos resultados se guardan como objeto para,
posteriormente, solicitar la presentación de los resultados.
mod1 <- Mclust(sub_idh, x = BIC)
summary(mod1, parameters = TRUE)
## ----------------------------------------------------
## Gaussian finite mixture model fitted by EM algorithm
## ----------------------------------------------------
##
## Mclust VVV (ellipsoidal, varying volume, shape, and orientation) model with 7
## components:
##
## log-likelihood n df BIC ICL
## -44512.97 2418 104 -89836.17 -91641.12
##
## Clustering table:
## 1 2 3 4 5 6 7
## 392 501 513 462 28 216 306
##
## Mixing probabilities:
## 1 2 3 4 5 6 7
## 0.16909848 0.21018115 0.19886297 0.17425947 0.01296132 0.09860479 0.13603182
##
## Means:
## [,1] [,2] [,3] [,4]
## tasa_mortalidad_infantil_2005 21.15282 29.97466 22.15743 15.72477
## tasa_alfabetizacion_2005 79.83458 69.77325 87.57275 92.40990
## tasa_asistencia_escolar_2005 65.32984 65.10350 62.53432 66.42835
## usd_ppc_2005 5231.49521 3297.75920 6134.87364 8056.08202
## [,5] [,6] [,7]
## tasa_mortalidad_infantil_2005 46.25611 15.03013 28.50974
## tasa_alfabetizacion_2005 66.50453 95.47120 83.49500
## tasa_asistencia_escolar_2005 59.08343 66.76366 60.27991
## usd_ppc_2005 5411.29702 11218.83401 4551.29616
##
## Variances:
## [,,1]
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 11.654741
## tasa_alfabetizacion_2005 -13.541922
## tasa_asistencia_escolar_2005 -7.462194
## usd_ppc_2005 -2365.829205
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -13.541922
## tasa_alfabetizacion_2005 41.661716
## tasa_asistencia_escolar_2005 5.288128
## usd_ppc_2005 4214.901596
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 -7.462194 -2365.82921
## tasa_alfabetizacion_2005 5.288128 4214.90160
## tasa_asistencia_escolar_2005 33.408161 -49.85967
## usd_ppc_2005 -49.859674 1843836.26032
## [,,2]
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 38.89631
## tasa_alfabetizacion_2005 -32.28219
## tasa_asistencia_escolar_2005 -12.09764
## usd_ppc_2005 -2161.49273
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -32.28219
## tasa_alfabetizacion_2005 104.63028
## tasa_asistencia_escolar_2005 25.12460
## usd_ppc_2005 2729.49197
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 -12.09764 -2161.4927
## tasa_alfabetizacion_2005 25.12460 2729.4920
## tasa_asistencia_escolar_2005 42.67613 289.5635
## usd_ppc_2005 289.56354 562936.9876
## [,,3]
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 13.8664019
## tasa_alfabetizacion_2005 -1.3834079
## tasa_asistencia_escolar_2005 0.7142234
## usd_ppc_2005 -880.8831499
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -1.3834079
## tasa_alfabetizacion_2005 18.0569715
## tasa_asistencia_escolar_2005 0.0178863
## usd_ppc_2005 2523.4009039
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 0.7142234 -880.8831
## tasa_alfabetizacion_2005 0.0178863 2523.4009
## tasa_asistencia_escolar_2005 17.0474412 -1141.2293
## usd_ppc_2005 -1141.2293496 2138724.3563
## [,,4]
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 11.192216
## tasa_alfabetizacion_2005 -3.615167
## tasa_asistencia_escolar_2005 -5.199677
## usd_ppc_2005 -4070.760034
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -3.615167
## tasa_alfabetizacion_2005 7.802156
## tasa_asistencia_escolar_2005 0.375693
## usd_ppc_2005 2366.472151
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 -5.199677 -4070.760
## tasa_alfabetizacion_2005 0.375693 2366.472
## tasa_asistencia_escolar_2005 14.231692 1577.270
## usd_ppc_2005 1577.270250 5014279.483
## [,,5]
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 263.90592
## tasa_alfabetizacion_2005 -90.07249
## tasa_asistencia_escolar_2005 -95.05444
## usd_ppc_2005 -34865.88393
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -90.07249
## tasa_alfabetizacion_2005 304.16991
## tasa_asistencia_escolar_2005 49.22604
## usd_ppc_2005 35446.13500
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 -95.05444 -34865.88
## tasa_alfabetizacion_2005 49.22604 35446.14
## tasa_asistencia_escolar_2005 77.78131 10767.90
## usd_ppc_2005 10767.89696 8262904.07
## [,,6]
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 33.847947
## tasa_alfabetizacion_2005 -7.095209
## tasa_asistencia_escolar_2005 -17.613196
## usd_ppc_2005 -14374.537300
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -7.095209
## tasa_alfabetizacion_2005 2.386335
## tasa_asistencia_escolar_2005 5.110534
## usd_ppc_2005 2967.638511
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 -17.613196 -14374.537
## tasa_alfabetizacion_2005 5.110534 2967.639
## tasa_asistencia_escolar_2005 33.073828 3541.202
## usd_ppc_2005 3541.202103 19237383.658
## [,,7]
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 39.224376
## tasa_alfabetizacion_2005 -9.498475
## tasa_asistencia_escolar_2005 2.207506
## usd_ppc_2005 -1118.456909
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -9.498475
## tasa_alfabetizacion_2005 28.682170
## tasa_asistencia_escolar_2005 -1.938547
## usd_ppc_2005 1164.518113
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 2.207506 -1118.4569
## tasa_alfabetizacion_2005 -1.938547 1164.5181
## tasa_asistencia_escolar_2005 20.391738 221.3026
## usd_ppc_2005 221.302598 836655.8201
A partir de los resultados presentados es importante observar la tabla de agrupamiento (o clustering table), en donde se define la cantidad óptima de clusters. En el ejercicio realizado con los datos del IDH se identifican 6 clusters como óptimos.
Finalmente, este agrupamiento se puede revisar visualmente en una
gráfica de dispersión en la que, a su vez, se solicite que los casos
sean representados dentro de cada cluster mediante el comando
plot(..., what = "classification")
.
plot(mod1, what = "classification")
De esta manera se han identificado una mayor cantidad de clusters, y que permite una clasificación más “fina” del comportamiento de los datos en comparación del trabajo mismo que elaboró el PNUD para el caso mexicano, en donde agrupó a los casos en 3 categorías (IDH alto, medio y bajo).