Contexto

El presente análisis se realiza a partir del Forest Fire Registry of Mexico, una base de datos pública de CONAFOR que documenta más de 60,000 incendios forestales ocurridos en México entre 2015 y 2023. El conjunto incluye información sobre ubicación geográfica, duración, causas, estados y municipios afectados, así como otros factores ambientales. Dado que los incendios forestales representan un riesgo ecológico, económico y social, el análisis busca identificar patrones espaciales y temporales mediante clustering. Esto permitirá comprender mejor las zonas de mayor incidencia y apoyar la planificación de estrategias de prevención y gestión.

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)

Paso 2: Obtener los datos

df <- read.csv("~/Desktop/Concentración IA/Fires2.csv")

Paso 3: Entender los datos

# Ver estructura y resumen
summary(df)
##     Estado            Incendios    
##  Length:33          Min.   :   87  
##  Class :character   1st Qu.:  438  
##  Mode  :character   Median :  842  
##                     Mean   : 3701  
##                     3rd Qu.: 2492  
##                     Max.   :61072
str(df)
## 'data.frame':    33 obs. of  2 variables:
##  $ Estado   : chr  "Aguascalientes" "Baja California" "Baja California Sur" "Campeche" ...
##  $ Incendios: int  469 916 87 156 3253 5238 5446 681 462 2492 ...
# Eliminar filas con NA
df <- na.omit(df)

# Quitar fila de totales si existe
df <- df[df$Estado != "Total general", ]

# Asegurar que la columna Incendios sea numérica
df$Incendios <- as.numeric(df$Incendios)

# Revisar nuevamente
summary(df)
##     Estado            Incendios      
##  Length:32          Min.   :   87.0  
##  Class :character   1st Qu.:  423.2  
##  Mode  :character   Median :  815.0  
##                     Mean   : 1908.5  
##                     3rd Qu.: 2277.5  
##                     Max.   :10566.0

Paso 4: Escalar los datos

# Sólo si los datos no están en la misma escala.
datos_escalados <- scale(df$Incendios)

Paso 5: Determinar número de grupos

# Siempre es un valor inicial "cualquiera", luegop se optimiza.
#plot(df)
grupos <- 3

Paso 6: Generar los grupos

clusters <- kmeans(datos_escalados, grupos)
clusters
## K-means clustering with 3 clusters of sizes 8, 5, 19
## 
## Cluster means:
##         [,1]
## 1  0.1331299
## 2  2.0088600
## 3 -0.5847021
## 
## Clustering vector:
##  [1] 3 3 3 3 1 2 2 3 3 1 2 3 1 3 2 2 1 3 3 1 1 3 3 3 3 3 3 3 1 1 3 3
## 
## Within cluster sum of squares by cluster:
## [1] 0.4993616 3.4321588 0.2534455
##  (between_SS / total_SS =  86.5 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Paso 7: Graficar los grupos

df_clusters <- data.frame(Estado = df$Estado,
                          Incendios = df$Incendios,
                          Cluster = as.factor(clusters$cluster))

# Gráfico básico con ggplot
ggplot(df_clusters, aes(x = Estado, y = Incendios, fill = Cluster)) +
  geom_bar(stat="identity") +
  coord_flip() +
  theme_minimal()

Conclusión

A partir del análisis de agrupamiento (k-means) con base en el número de incendios forestales por estado, se identificaron tres clusters principales que permiten clasificar a las entidades federativas según su nivel de incidencia: Cluster 1 – Baja incidencia: Incluye a estados como Aguascalientes, Campeche, Colima, Nayarit y Quintana Roo, caracterizados por registrar menos de 1,000 incendios en el periodo analizado.

Cluster 2 – Incidencia moderada: Agrupa estados como Oaxaca, Puebla, Chiapas, Durango y Guerrero, con valores que oscilan entre los 1,000 y 4,000 incendios.

Cluster 3 – Alta incidencia: Comprende a entidades como Estado de México, Jalisco, Chihuahua, Michoacán y Ciudad de México, que concentran más de 5,000 incendios.

LS0tCnRpdGxlOiAiTWV4aWNvIgphdXRob3I6ICJDYXJsYSBMaWV2YW5vIgpkYXRlOiAiMjAyNS0wOC0xOSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiB5ZXRpCi0tLQoKIVtdKGh0dHBzOi8vaW1hZ2VuZXMuZWxwYWlzLmNvbS9yZXNpemVyL3YyL1hRR1E3RU1PSTVIWVhQWktST1lNVjdUV1RBLmpwZz9hdXRoPWU2ZmIzOTE1MWYyODEzMzdkNWMyY2RiNTQ5NDhlNGE3MGQwMWMzMzE1MDU3NjdjMzQxNmFhYzlmMDc2ODU3OTgmd2lkdGg9MTk2MCZoZWlnaHQ9MTEwMyZzbWFydD10cnVlKQoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBDb250ZXh0bzwvc3Bhbj4KRWwgcHJlc2VudGUgYW7DoWxpc2lzIHNlIHJlYWxpemEgYSBwYXJ0aXIgZGVsIEZvcmVzdCBGaXJlIFJlZ2lzdHJ5IG9mIE1leGljbywgdW5hIGJhc2UgZGUgZGF0b3MgcMO6YmxpY2EgZGUgQ09OQUZPUiBxdWUgZG9jdW1lbnRhIG3DoXMgZGUgNjAsMDAwIGluY2VuZGlvcyBmb3Jlc3RhbGVzIG9jdXJyaWRvcyBlbiBNw6l4aWNvIGVudHJlIDIwMTUgeSAyMDIzLiBFbCBjb25qdW50byBpbmNsdXllIGluZm9ybWFjacOzbiBzb2JyZSB1YmljYWNpw7NuIGdlb2dyw6FmaWNhLCBkdXJhY2nDs24sIGNhdXNhcywgZXN0YWRvcyB5IG11bmljaXBpb3MgYWZlY3RhZG9zLCBhc8OtIGNvbW8gb3Ryb3MgZmFjdG9yZXMgYW1iaWVudGFsZXMuIERhZG8gcXVlIGxvcyBpbmNlbmRpb3MgZm9yZXN0YWxlcyByZXByZXNlbnRhbiB1biByaWVzZ28gZWNvbMOzZ2ljbywgZWNvbsOzbWljbyB5IHNvY2lhbCwgZWwgYW7DoWxpc2lzIGJ1c2NhIGlkZW50aWZpY2FyIHBhdHJvbmVzIGVzcGFjaWFsZXMgeSB0ZW1wb3JhbGVzIG1lZGlhbnRlIGNsdXN0ZXJpbmcuIEVzdG8gcGVybWl0aXLDoSBjb21wcmVuZGVyIG1lam9yIGxhcyB6b25hcyBkZSBtYXlvciBpbmNpZGVuY2lhIHkgYXBveWFyIGxhIHBsYW5pZmljYWNpw7NuIGRlIGVzdHJhdGVnaWFzIGRlIHByZXZlbmNpw7NuIHkgZ2VzdGnDs24uCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlOyI+IFBhc28gMTogSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyA8L3NwYW4+CmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNpbnN0YWxsLnBhY2thZ2VzKCJjbHVzdGVyIikgIyBBbsOhbGlzaXMgZGUgYWdydXBhbWllbnRvIgpsaWJyYXJ5KGNsdXN0ZXIpCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikjIEdyYWZpY2FyCmxpYnJhcnkoZ2dwbG90MikKI2luc3RhbGwucGFja2FnZXMoImRhdGEudGFibGUiKSAjTWFuZWpvIGRlIG11Y2hvcyBkYXRvcwpsaWJyYXJ5KGRhdGEudGFibGUpCiNpbnN0YWxsLnBhY2thZ2VzKCJmYWN0b2V4dHJhIikgI0dyw6FmaWNhIG9wdGltaXphY2nDs24gZGUgbsO6bWVybyBkZSBjbHVzdGVycwpsaWJyYXJ5KGZhY3RvZXh0cmEpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBQYXNvIDI6IE9idGVuZXIgbG9zIGRhdG9zIDwvc3Bhbj4KYGBge3J9CmRmIDwtIHJlYWQuY3N2KCJ+L0Rlc2t0b3AvQ29uY2VudHJhY2lvzIFuIElBL0ZpcmVzMi5jc3YiKQoKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlOyI+IFBhc28gMzogRW50ZW5kZXIgbG9zIGRhdG9zIDwvc3Bhbj4KYGBge3J9CiMgVmVyIGVzdHJ1Y3R1cmEgeSByZXN1bWVuCnN1bW1hcnkoZGYpCnN0cihkZikKCiMgRWxpbWluYXIgZmlsYXMgY29uIE5BCmRmIDwtIG5hLm9taXQoZGYpCgojIFF1aXRhciBmaWxhIGRlIHRvdGFsZXMgc2kgZXhpc3RlCmRmIDwtIGRmW2RmJEVzdGFkbyAhPSAiVG90YWwgZ2VuZXJhbCIsIF0KCiMgQXNlZ3VyYXIgcXVlIGxhIGNvbHVtbmEgSW5jZW5kaW9zIHNlYSBudW3DqXJpY2EKZGYkSW5jZW5kaW9zIDwtIGFzLm51bWVyaWMoZGYkSW5jZW5kaW9zKQoKIyBSZXZpc2FyIG51ZXZhbWVudGUKc3VtbWFyeShkZikKCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBQYXNvIDQ6IEVzY2FsYXIgbG9zIGRhdG9zIDwvc3Bhbj4KYGBge3J9CiMgU8OzbG8gc2kgbG9zIGRhdG9zIG5vIGVzdMOhbiBlbiBsYSBtaXNtYSBlc2NhbGEuCmRhdG9zX2VzY2FsYWRvcyA8LSBzY2FsZShkZiRJbmNlbmRpb3MpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBQYXNvIDU6IERldGVybWluYXIgbsO6bWVybyBkZSBncnVwb3MgPC9zcGFuPgpgYGB7cn0KIyBTaWVtcHJlIGVzIHVuIHZhbG9yIGluaWNpYWwgImN1YWxxdWllcmEiLCBsdWVnb3Agc2Ugb3B0aW1pemEuCiNwbG90KGRmKQpncnVwb3MgPC0gMwpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWU7Ij4gUGFzbyA2OiBHZW5lcmFyIGxvcyBncnVwb3MgPC9zcGFuPgpgYGB7cn0KY2x1c3RlcnMgPC0ga21lYW5zKGRhdG9zX2VzY2FsYWRvcywgZ3J1cG9zKQpjbHVzdGVycwpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWU7Ij4gUGFzbyA3OiBHcmFmaWNhciBsb3MgZ3J1cG9zIDwvc3Bhbj4KYGBge3J9CmRmX2NsdXN0ZXJzIDwtIGRhdGEuZnJhbWUoRXN0YWRvID0gZGYkRXN0YWRvLAogICAgICAgICAgICAgICAgICAgICAgICAgIEluY2VuZGlvcyA9IGRmJEluY2VuZGlvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBDbHVzdGVyID0gYXMuZmFjdG9yKGNsdXN0ZXJzJGNsdXN0ZXIpKQoKIyBHcsOhZmljbyBiw6FzaWNvIGNvbiBnZ3Bsb3QKZ2dwbG90KGRmX2NsdXN0ZXJzLCBhZXMoeCA9IEVzdGFkbywgeSA9IEluY2VuZGlvcywgZmlsbCA9IENsdXN0ZXIpKSArCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZV9taW5pbWFsKCkKCgoKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlOyI+IENvbmNsdXNpw7NuIDwvc3Bhbj4KQSBwYXJ0aXIgZGVsIGFuw6FsaXNpcyBkZSBhZ3J1cGFtaWVudG8gKGstbWVhbnMpIGNvbiBiYXNlIGVuIGVsIG7Dum1lcm8gZGUgaW5jZW5kaW9zIGZvcmVzdGFsZXMgcG9yIGVzdGFkbywgc2UgaWRlbnRpZmljYXJvbiB0cmVzIGNsdXN0ZXJzIHByaW5jaXBhbGVzIHF1ZSBwZXJtaXRlbiBjbGFzaWZpY2FyIGEgbGFzIGVudGlkYWRlcyBmZWRlcmF0aXZhcyBzZWfDum4gc3Ugbml2ZWwgZGUgaW5jaWRlbmNpYToKKipDbHVzdGVyIDEgKirigJMgQmFqYSBpbmNpZGVuY2lhOiBJbmNsdXllIGEgZXN0YWRvcyBjb21vIEFndWFzY2FsaWVudGVzLCBDYW1wZWNoZSwgQ29saW1hLCBOYXlhcml0IHkgUXVpbnRhbmEgUm9vLCBjYXJhY3Rlcml6YWRvcyBwb3IgcmVnaXN0cmFyIG1lbm9zIGRlIDEsMDAwIGluY2VuZGlvcyBlbiBlbCBwZXJpb2RvIGFuYWxpemFkby4gIAoKKipDbHVzdGVyIDIqKiDigJMgSW5jaWRlbmNpYSBtb2RlcmFkYTogQWdydXBhIGVzdGFkb3MgY29tbyBPYXhhY2EsIFB1ZWJsYSwgQ2hpYXBhcywgRHVyYW5nbyB5IEd1ZXJyZXJvLCBjb24gdmFsb3JlcyBxdWUgb3NjaWxhbiBlbnRyZSBsb3MgMSwwMDAgeSA0LDAwMCBpbmNlbmRpb3MuICAKCioqQ2x1c3RlciAzKiog4oCTIEFsdGEgaW5jaWRlbmNpYTogQ29tcHJlbmRlIGEgZW50aWRhZGVzIGNvbW8gRXN0YWRvIGRlIE3DqXhpY28sIEphbGlzY28sIENoaWh1YWh1YSwgTWljaG9hY8OhbiB5IENpdWRhZCBkZSBNw6l4aWNvLCBxdWUgY29uY2VudHJhbiBtw6FzIGRlIDUsMDAwIGluY2VuZGlvcy4KCg==