
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==