Contexto

El conjunto de datos representa los indicadores relacionados con la pobreza respecto a cada estado de México con información proveniente del INEGI.

Los datos a utilizar para el análisis de clusters son los siguientes:
* Porcentaje de la población de 12 a 29 años de edad con ingreso inferior a la línea de bienestar.
* Porcentaje de la población en pobreza.
* Porcentaje de la población en pobreza extrema.
* Mediana del ingreso nominal de la población ocupada de 15 a 29 años.
* Satisfacción con la vida.

Paso 1. Instalar paquetes y llamar librerías

# install.packages("cluster") # Análisis de Agrupamiento
library(cluster) 
# install.packages("ggplot2") # Graficar
library(ggplot2)
# install.packages("data.table") # Manejo de muchos datos
library(data.table)
# install.packages("factoextra") # Gráfica optimización de número de clusters
library(factoextra)
library(dplyr)

Paso 2. Obtener los datos

df1 <- read.csv("C:\\Users\\Adrián\\Downloads\\Pobreza_Mexico.csv")

Paso 3. Entender los datos

summary(df1)
##    Entidad          Inferior_LineaBienestar    Pobreza      Pobreza_Extrema 
##  Length:32          Min.   :29.60           Min.   :13.30   Min.   : 0.800  
##  Class :character   1st Qu.:37.85           1st Qu.:21.70   1st Qu.: 1.800  
##  Mode  :character   Median :50.00           Median :33.65   Median : 5.350  
##                     Mean   :51.08           Mean   :34.53   Mean   : 6.531  
##                     3rd Qu.:60.48           3rd Qu.:44.42   3rd Qu.: 7.425  
##                     Max.   :80.70           Max.   :67.40   Max.   :28.200  
##  Mediana_Ingreso  Satisfacción      Cluster     
##  Min.   :3870    Min.   :8.200   Min.   :1.000  
##  1st Qu.:4450    1st Qu.:8.300   1st Qu.:2.000  
##  Median :5353    Median :8.500   Median :4.000  
##  Mean   :5347    Mean   :8.481   Mean   :3.781  
##  3rd Qu.:6000    3rd Qu.:8.600   3rd Qu.:6.000  
##  Max.   :7740    Max.   :8.800   Max.   :7.000
str(df1)
## 'data.frame':    32 obs. of  7 variables:
##  $ Entidad                : chr  "Aguascalientes" "Baja California" "Baja California Sur" "Campeche" ...
##  $ Inferior_LineaBienestar: num  36.9 29.6 35.8 60.3 39.6 34.2 80.7 37.4 48.2 50.4 ...
##  $ Pobreza                : num  23.7 13.4 13.3 45.1 18.2 20.5 67.4 17.6 24 34.3 ...
##  $ Pobreza_Extrema        : num  1.8 1.3 0.8 9.6 1.8 1.2 28.2 2.1 1.7 6.3 ...
##  $ Mediana_Ingreso        : int  5800 7740 7180 4500 6450 6000 3870 6020 5546 5160 ...
##  $ Satisfacción           : num  8.6 8.7 8.6 8.3 8.8 8.8 8.5 8.7 8.2 8.5 ...
##  $ Cluster                : int  4 5 5 1 3 3 2 3 6 6 ...

Paso 4. Escalar los datos

# Excluir columna "Entidad" de ser escalamiento
df_escalado <- scale(df1[, !(names(df1) %in% "Entidad")])
# Reinsertar "Entidad" en datos escalados
df_escalado <- as.data.frame(df_escalado)
df_escalado <- cbind(Entidad = df1$Entidad, df_escalado)

Paso 5. Determinar el número de grupos

grupos1 <- 4

Paso 6. Generar los grupos

set.seed(123)
clusters1 <- kmeans(df_escalado[ , !(names(df_escalado) %in% "Entidad")], grupos1)
clusters1
## K-means clustering with 4 clusters of sizes 10, 10, 3, 9
## 
## Cluster means:
##   Inferior_LineaBienestar     Pobreza Pobreza_Extrema Mediana_Ingreso
## 1              0.06069275  0.03586558      -0.1818763      -0.1100141
## 2              1.13110906  1.15678008       1.0685471      -1.1146047
## 3             -1.30080167 -1.35936272      -0.8343154       1.9975124
## 4             -0.89062368 -0.87204094      -0.7070847       0.6948500
##   Satisfacción    Cluster
## 1   -0.2264383  1.1525691
## 2   -0.9400620 -1.2333422
## 3    1.2008091  0.6057978
## 4    0.8958417 -0.1121848
## 
## Clustering vector:
##  [1] 4 3 3 2 4 4 2 4 1 1 1 2 2 4 1 1 2 1 3 2 2 4 1 1 4 4 2 4 2 2 1 1
## 
## Within cluster sum of squares by cluster:
## [1]  9.934210 21.167187  1.064731  5.200920
##  (between_SS / total_SS =  79.9 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Paso 7. Optimizar el número de grupos

optimizacion1 <- clusGap(df_escalado[, !(names(df_escalado) %in% "Entidad")], FUN=kmeans, nstart =1, K.max=10)
plot(optimizacion1, xlab="Número de clusters k" ,main="Optimización de clusters")

Paso 8. Ajustar número de clusters

grupos1 <- 7
set.seed(123)
clusters1 <- kmeans(df_escalado[ , !(names(df_escalado) %in% "Entidad")], grupos1)
clusters1
## K-means clustering with 7 clusters of sizes 7, 3, 4, 5, 3, 9, 1
## 
## Cluster means:
##   Inferior_LineaBienestar     Pobreza Pobreza_Extrema Mediana_Ingreso
## 1               0.9396456  0.86244197      0.41399964      -1.0094531
## 2               1.5778571  1.84356899      2.59582453      -1.3599583
## 3              -1.0549420 -1.00837944     -0.73380311       0.7851868
## 4              -0.7591690 -0.76297014     -0.68570990       0.6225806
## 5              -1.3008017 -1.35936272     -0.83431537       1.9975124
## 6               0.1760038  0.07879454     -0.19985824      -0.1010201
## 7              -0.9771070 -0.35049503     -0.02003884      -0.1909604
##   Satisfacción    Cluster
## 1   -0.9165360 -1.3824616
## 2   -0.9949561 -0.8853968
## 3    1.4752798 -0.3883319
## 4    0.4322913  0.1087329
## 5    1.2008091  0.6057978
## 6   -0.3240279  1.1028627
## 7    0.6518678  1.5999275
## 
## Clustering vector:
##  [1] 4 5 5 1 3 3 2 3 6 6 6 2 1 4 6 6 1 7 5 2 1 4 6 6 3 4 1 4 1 1 6 6
## 
## Within cluster sum of squares by cluster:
## [1] 3.8364820 3.6673470 0.5969227 1.2454201 1.0647315 7.4557686 0.0000000
##  (between_SS / total_SS =  90.4 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Paso 9. Graficar los grupos

fviz_cluster(clusters1, df_escalado[, !(names(df_escalado) %in% "Entidad")])

Paso 10. Agregar Clusters a la base de Datos

df1_clusters <- cbind(df1,cluster = clusters1$cluster)
df1_clusters <- df1_clusters %>% arrange(cluster)
df1_clusters
##                Entidad Inferior_LineaBienestar Pobreza Pobreza_Extrema
## 1             Campeche                    60.3    45.1             9.6
## 2              Hidalgo                    56.6    41.0             6.8
## 3              Morelos                    60.7    41.1             5.8
## 4               Puebla                    71.1    54.0            11.4
## 5              Tabasco                    60.4    46.5            11.2
## 6             Tlaxcala                    69.8    52.5             6.8
## 7            Veracruz                     67.4    51.7            13.1
## 8              Chiapas                    80.7    67.4            28.2
## 9             Guerrero                    71.9    60.4            22.2
## 10              Oaxaca                    64.5    58.4            20.2
## 11           Coahuila                     39.6    18.2             1.8
## 12              Colima                    34.2    20.5             1.2
## 13           Chihuahua                    37.4    17.6             2.1
## 14             Sinaloa                    36.2    21.6             1.8
## 15      Aguascalientes                    36.9    23.7             1.8
## 16             Jalisco                    42.2    21.8             2.1
## 17           Querétaro                    37.7    21.7             1.7
## 18              Sonora                    39.9    21.7             1.7
## 19          Tamaulipas                    47.5    26.8             2.9
## 20     Baja California                    29.6    13.4             1.3
## 21 Baja California Sur                    35.8    13.3             0.8
## 22          Nuevo León                    35.2    16.0             1.1
## 23    Ciudad de México                    48.2    24.0             1.7
## 24             Durango                    50.4    34.3             6.3
## 25          Guanajuato                    50.6    33.0             3.2
## 26              México                    63.8    42.9             6.0
## 27          Michoacán                     47.8    41.7             7.5
## 28        Quintana Roo                    56.5    27.0             4.2
## 29     San Luis Potosí                    49.6    35.5             7.4
## 30             Yucatán                    59.3    38.8             5.6
## 31           Zacatecas                    54.9    44.2             5.1
## 32             Nayarit                    37.9    29.3             6.4
##    Mediana_Ingreso Satisfacción Cluster cluster
## 1             4500          8.3       1       1
## 2             4300          8.4       1       1
## 3             4300          8.4       1       1
## 4             4300          8.2       1       1
## 5             4300          8.3       1       1
## 6             4300          8.3       1       1
## 7             4500          8.3       1       1
## 8             3870          8.5       2       2
## 9             4300          8.2       2       2
## 10            3870          8.2       2       2
## 11            6450          8.8       3       3
## 12            6000          8.8       3       3
## 13            6020          8.7       3       3
## 14            6000          8.7       3       3
## 15            5800          8.6       4       4
## 16            6400          8.6       4       4
## 17            6000          8.5       4       4
## 18            5590          8.5       4       4
## 19            6000          8.6       4       4
## 20            7740          8.7       5       5
## 21            7180          8.6       5       5
## 22            7000          8.8       5       5
## 23            5546          8.2       6       6
## 24            5160          8.5       6       6
## 25            5546          8.5       6       6
## 26            5546          8.5       6       6
## 27            5160          8.4       6       6
## 28            5546          8.4       6       6
## 29            5000          8.3       6       6
## 30            5000          8.5       6       6
## 31            4730          8.5       6       6
## 32            5160          8.6       7       7

Conclusiones

Mediante la creación de clusters es posible identificar grupos con características comunes y como resultado tener una mayor comprensión de como los problemas dentro de un país, afectan de forma distinta a los diferentes estados.