Contexto

Durante 2022, en 31 entidades federativas, la sequía fue el principal factor de pérdida para las unidades de producción agropecuaria activas del país.

Los datos presentados a continuacón son un recopilación de data sets públicos ofrecidos por el Inegi en su portal de Información de Gobierno, Seguridad Pública e Impartición de Justicia.

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)

Paso 2. Obtener los datos

df_sequias <- read.csv("C:\\Users\\Salvador\\Desktop\\concentración IA\\Agua\\sequias.csv")
df_sequias_num <- df_sequias[,c("poblacion","perdidas_sequias", "perdidas_inundaciones", "temp_prom")]

Paso 3. Entender los datos

summary(df_sequias) #pata ver datos raros, na's, 
##     estado            poblacion        perdidas_sequias perdidas_inundaciones
##  Length:32          Min.   :  731391   Min.   :22.89    Min.   : 1.480       
##  Class :character   1st Qu.: 1851651   1st Qu.:65.33    1st Qu.: 4.697       
##  Mode  :character   Median : 3054892   Median :81.47    Median :10.485       
##                     Mean   : 3937938   Mean   :75.67    Mean   :13.869       
##                     3rd Qu.: 4947592   3rd Qu.:91.50    3rd Qu.:18.163       
##                     Max.   :16992418   Max.   :97.24    Max.   :78.670       
##    temp_prom    
##  Min.   :14.50  
##  1st Qu.:18.00  
##  Median :21.50  
##  Mean   :21.48  
##  3rd Qu.:25.25  
##  Max.   :27.50
str(df_sequias) #ver que sean numericos los datos del df
## 'data.frame':    32 obs. of  5 variables:
##  $ estado               : chr  "Aguascalientes" "Baja California" "Baja California Sur" "Campeche" ...
##  $ poblacion            : int  1425607 3769020 798447 928363 3146771 731391 5543828 3741869 9209944 1832650 ...
##  $ perdidas_sequias     : num  94.1 74.4 83.6 81.3 92.7 ...
##  $ perdidas_inundaciones: num  2.34 7.06 8.92 28.87 3.72 ...
##  $ temp_prom            : num  18 19.5 24 26.5 25 18 16 19.5 27 17 ...

Paso 4. Escalar los datos

datos_escalados <- scale(df_sequias_num)

Paso 5. Determinar número de grupos

# Siempre es un valor inicial "cualquiera", luego se optimiza.
# plot(df1$x, df1$y) #$ sirve para separarlo, especificar columnas
grupos1 <- 5

Paso 6. Generar los grupos

set.seed(123)
clusters1 <- kmeans(datos_escalados,grupos1)
clusters1
## K-means clustering with 5 clusters of sizes 1, 3, 9, 7, 12
## 
## Cluster means:
##     poblacion perdidas_sequias perdidas_inundaciones  temp_prom
## 1 -0.46837584       -0.7401937             4.4249515  1.4990149
## 2  2.28300427       -0.1718144            -0.2409606  0.6268608
## 3 -0.12054493        0.7819926            -0.6573472 -0.8682606
## 4  0.04017474       -1.2225127             0.5536814 -0.8504615
## 5 -0.46474632        0.2312743            -0.1384762  0.8656649
## 
## Clustering vector:
##  [1] 3 3 5 5 5 4 4 4 2 4 3 4 5 4 2 4 5 5 3 5 3 3 5 3 5 5 1 5 3 2 5 3
## 
## Within cluster sum of squares by cluster:
## [1]  0.000000  6.488079  7.209087 12.189991 11.993841
##  (between_SS / total_SS =  69.5 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Paso 7. Optimizar el número de grupos

set.seed(123)
optimización <- clusGap(datos_escalados,FUN=kmeans,nstart=1,K.max=10)
#El K.max normalmente es 10, en este ejercicio al ser 8 datos se dejó en 7.
plot(optimización,xlab="Número de clusters k")

# Se selecciona como óptimo el primer número de cluster más alto.

Paso 8. Graficar los grupos

fviz_cluster(clusters1, data=datos_escalados)

Paso 9. Agregar clusters obtenidos a la base de datos

df1clusters <- cbind(df_sequias,cluster = clusters1$cluster)
head(df1clusters)
##                estado poblacion perdidas_sequias perdidas_inundaciones
## 1      Aguascalientes   1425607            94.13                  2.34
## 2     Baja California   3769020            74.41                  7.06
## 3 Baja California Sur    798447            83.58                  8.92
## 4            Campeche    928363            81.28                 28.87
## 5            Coahuila   3146771            92.65                  3.72
## 6              Colima    731391            37.78                 22.97
##   temp_prom cluster
## 1      18.0       3
## 2      19.5       3
## 3      24.0       5
## 4      26.5       5
## 5      25.0       5
## 6      18.0       4

Conclusiones

Los clusters permiten identificar segmentos claros en la población y sus condiciones de vulnerabilidad frente a la sequía, especialmente en los estados más afectados y que presentan mayores pérdidas por estos fenómenos naturales, lo cual puede ser utilizado para el diseño y mejora de políticas públicas de gestión hídrica, prevención de riesgos y mitigación de impactos

LS0tDQp0aXRsZTogIlNlcXXDrWFzIGVuIE3DqXhpY28iDQphdXRob3I6ICJTYWx2YWRvciBOYXJ2YWV6IEEwMDU3MTg0OCINCmRhdGU6ICIyMDI1LTA4LTE5Ig0Kb3V0cHV0OiANCiAgICBodG1sX2RvY3VtZW50Og0KICAgICAgdG9jOiBUUlVFDQogICAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICAgIHRoZW1lOiByZWFkYWJsZQ0KLS0tDQoNCjxjZW50ZXI+DQohW10oaHR0cHM6Ly9tZW5kb3phdG9kYXkuY29tLmFyL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIyLzExL1NlcXVpYS5naWYpDQo8L2NlbnRlcj4NCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGU7Ij4gQ29udGV4dG8gPC9zcGFuPg0KDQpEdXJhbnRlIDIwMjIsIGVuIDMxIGVudGlkYWRlcyBmZWRlcmF0aXZhcywgbGEgc2VxdcOtYSBmdWUgZWwgcHJpbmNpcGFsIGZhY3RvciBkZSBww6lyZGlkYSBwYXJhIGxhcyB1bmlkYWRlcyBkZSBwcm9kdWNjacOzbiBhZ3JvcGVjdWFyaWEgYWN0aXZhcyBkZWwgcGHDrXMuDQoNCkxvcyBkYXRvcyBwcmVzZW50YWRvcyBhIGNvbnRpbnVhY8OzbiBzb24gdW4gcmVjb3BpbGFjacOzbiBkZSBkYXRhIHNldHMgcMO6YmxpY29zIG9mcmVjaWRvcyBwb3IgZWwgSW5lZ2kgZW4gc3UgcG9ydGFsIGRlIEluZm9ybWFjacOzbiBkZSBHb2JpZXJubywgU2VndXJpZGFkIFDDumJsaWNhIGUgSW1wYXJ0aWNpw7NuIGRlIEp1c3RpY2lhLg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGU7Ij4gMS4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyA8L3NwYW4+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojaW5zdGFsbC5wYWNrYWdlcygiY2x1c3RlciIpICMgQW7DoWxpc2lzIGRlIGFncnVwYW1pZW50bw0KbGlicmFyeShjbHVzdGVyKQ0KI2luc3RhbGwucGFja2FnZXMoImdncGxvdDIiKSAjIEdyYWZpY2FyDQpsaWJyYXJ5KGdncGxvdDIpDQojaW5zdGFsbC5wYWNrYWdlcygiZGF0YS50YWJsZSIpICMgTWFuZWpvIGRlIG11Y2hvcyBkYXRvcw0KbGlicmFyeShkYXRhLnRhYmxlKQ0KI2luc3RhbGwucGFja2FnZXMoImZhY3RvZXh0cmEiKSAjIEdyw6FmaWNhIG9wdGltaXphY2nDs24gZGUgbsO6bWVybyBkZSBjbHVzdGVycw0KbGlicmFyeShmYWN0b2V4dHJhKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZTsiPiBQYXNvIDIuIE9idGVuZXIgbG9zIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGZfc2VxdWlhcyA8LSByZWFkLmNzdigiQzpcXFVzZXJzXFxTYWx2YWRvclxcRGVza3RvcFxcY29uY2VudHJhY2nDs24gSUFcXEFndWFcXHNlcXVpYXMuY3N2IikNCmRmX3NlcXVpYXNfbnVtIDwtIGRmX3NlcXVpYXNbLGMoInBvYmxhY2lvbiIsInBlcmRpZGFzX3NlcXVpYXMiLCAicGVyZGlkYXNfaW51bmRhY2lvbmVzIiwgInRlbXBfcHJvbSIpXQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZTsiPiBQYXNvIDMuIEVudGVuZGVyIGxvcyBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGZfc2VxdWlhcykgI3BhdGEgdmVyIGRhdG9zIHJhcm9zLCBuYSdzLCANCnN0cihkZl9zZXF1aWFzKSAjdmVyIHF1ZSBzZWFuIG51bWVyaWNvcyBsb3MgZGF0b3MgZGVsIGRmDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZTsiPiBQYXNvIDQuIEVzY2FsYXIgbG9zIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGF0b3NfZXNjYWxhZG9zIDwtIHNjYWxlKGRmX3NlcXVpYXNfbnVtKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZTsiPiBQYXNvIDUuIERldGVybWluYXIgbsO6bWVybyBkZSBncnVwb3MgPC9zcGFuPg0KYGBge3J9DQojIFNpZW1wcmUgZXMgdW4gdmFsb3IgaW5pY2lhbCAiY3VhbHF1aWVyYSIsIGx1ZWdvIHNlIG9wdGltaXphLg0KIyBwbG90KGRmMSR4LCBkZjEkeSkgIyQgc2lydmUgcGFyYSBzZXBhcmFybG8sIGVzcGVjaWZpY2FyIGNvbHVtbmFzDQpncnVwb3MxIDwtIDUNCmBgYA0KIyA8c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlOyI+IFBhc28gNi4gR2VuZXJhciBsb3MgZ3J1cG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KY2x1c3RlcnMxIDwtIGttZWFucyhkYXRvc19lc2NhbGFkb3MsZ3J1cG9zMSkNCmNsdXN0ZXJzMQ0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGU7Ij4gUGFzbyA3LiBPcHRpbWl6YXIgZWwgbsO6bWVybyBkZSBncnVwb3MgPC9zcGFuPg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpvcHRpbWl6YWNpw7NuIDwtIGNsdXNHYXAoZGF0b3NfZXNjYWxhZG9zLEZVTj1rbWVhbnMsbnN0YXJ0PTEsSy5tYXg9MTApDQojRWwgSy5tYXggbm9ybWFsbWVudGUgZXMgMTAsIGVuIGVzdGUgZWplcmNpY2lvIGFsIHNlciA4IGRhdG9zIHNlIGRlasOzIGVuIDcuDQpwbG90KG9wdGltaXphY2nDs24seGxhYj0iTsO6bWVybyBkZSBjbHVzdGVycyBrIikNCiMgU2Ugc2VsZWNjaW9uYSBjb21vIMOzcHRpbW8gZWwgcHJpbWVyIG7Dum1lcm8gZGUgY2x1c3RlciBtw6FzIGFsdG8uDQoNCmBgYA0KIyA8c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlOyI+IFBhc28gOC4gR3JhZmljYXIgbG9zIGdydXBvcyA8L3NwYW4+DQoNCmBgYHtyfQ0KZnZpel9jbHVzdGVyKGNsdXN0ZXJzMSwgZGF0YT1kYXRvc19lc2NhbGFkb3MpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlOyI+IFBhc28gOS4gQWdyZWdhciBjbHVzdGVycyBvYnRlbmlkb3MgYSBsYSBiYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGYxY2x1c3RlcnMgPC0gY2JpbmQoZGZfc2VxdWlhcyxjbHVzdGVyID0gY2x1c3RlcnMxJGNsdXN0ZXIpDQpoZWFkKGRmMWNsdXN0ZXJzKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZTsiPiBDb25jbHVzaW9uZXMgPC9zcGFuPg0KTG9zIGNsdXN0ZXJzIHBlcm1pdGVuIGlkZW50aWZpY2FyIHNlZ21lbnRvcyBjbGFyb3MgZW4gbGEgcG9ibGFjacOzbiB5IHN1cyBjb25kaWNpb25lcyBkZSB2dWxuZXJhYmlsaWRhZCBmcmVudGUgYSBsYSBzZXF1w61hLCBlc3BlY2lhbG1lbnRlIGVuIGxvcyBlc3RhZG9zIG3DoXMgYWZlY3RhZG9zIHkgcXVlIHByZXNlbnRhbiBtYXlvcmVzIHDDqXJkaWRhcyBwb3IgZXN0b3MgZmVuw7NtZW5vcyBuYXR1cmFsZXMsIGxvIGN1YWwgcHVlZGUgc2VyIHV0aWxpemFkbyBwYXJhIGVsIGRpc2XDsW8geSBtZWpvcmEgZGUgcG9sw610aWNhcyBww7pibGljYXMgZGUgZ2VzdGnDs24gaMOtZHJpY2EsIHByZXZlbmNpw7NuIGRlIHJpZXNnb3MgeSBtaXRpZ2FjacOzbiBkZSBpbXBhY3Rvcw0KDQoNCg0KDQoNCg0KDQoNCg==