Introducción

Los incendios forestales son eventos de fuego proveniente de todo tipo de bosques, que al exceder los intentos de control por parte de las entidades de control y emergencia, se vuelven descontrolados y arrasan con grandes extensiones de superficie, mayormente surgidos por la provocación de igniciones de los restos de cigarrillos, quema de basura, acción humana premeditada y otros casos posibles. Las condiciones metereológicas de baja humedad, alta temperatura y vientos rápidos impactan ampliamente en la probabilidad de su ocurrencia, y en la severidad de las áreas afectadas.

Por tal motivo una de las preocupaciones de los Geografos es obtener información de los espacios que mas riesgo presentan ante la aparición de estos fenómenos, teniendo en cuenta analizar la importancia que los factores incidentes en el territorio tienen para que aumente el riesgo. Su herramienta es el Analisis Multicriterio, y para mostrar su utilidad le explicaré como fue que realicé un Mapa de Riesgos ante Incendios Forestales dentro del área de estudio en la Región de Valparaíso.

Construcción del Análisis Multicriterio

Elección de área de estudio y variables

El área de estudio comprende 6 comunas:

  • Valparaíso
  • Viña del Mar
  • Concón
  • Quilpué
  • Villa Alemana
  • Limache

Las variables a utilizar comprenden:

  • Pendiente
  • Humedad Topográfica
  • Uso de Suelo
  • Estructura Vegetal
  • Campamentos
  • Arraigo Comunitario
  • Área Quemada
  • Interfaz Urbano-Forestal

Para empezar debemos obtener estos datos desde las fuentes de recopilación de capas geográficas, la Mapoteca de la Biblioteca del Congreso Nacional permite descargar los límites comunales, mientras que para cada variable debemos buscar usando 5 fuentes:

La capa de Humedad Topográfica debe realizarse previamente la construcción del Indice de Humedad Topográfica SAGA desde QGIS (TWI), usando tanto la Pendiente como el Aspecto obtenibles desde el DEM antes descargado.

La capa de Arraigo Comunitario fué elaboración propia del autor, al geolocalizar los puntos de Iglesias, Clubes sociales y Sedes de Juntas de Vecinos desde Google Maps, para posteriormente crear buffer de 500 metros, esto para espacializar la distancia en que estos influencian al momento de mitigación y logistica pre y post incendio.

Ajuste de variables

Para que el Análisis Multicriterio sea iniciado se deben tener todos los elementos bajo el mismo sistema de coordenadas, en formato raster y la extensión y resolución exactas, para ello debemos preparar todas las capas dentro de RStudio, primero realizando lo siguiente:

# Encender las librerias a utilizar. 
library(tidyverse)
library(sf)
library(terra)

# Colocar nuestro directorio de trabajo. 
setwd("C:/Users/franc/Downloads/SHP Y RASTERS/")

# Cargar nustras capas 
DEMVALPO <- rast("DEM Cuencas Taller1.tif")
Suelo <- read_sf("Uso de Suelo CONAF2019 Gran Valpo.gpkg")
Humedad <- rast("Humedad Final.tif")
Buf_ARRAIGO <- read_sf("C:/Users/franc/Documents/Buffer Arraigo.shp")
Estruc_vege <- read_sf("C:/Users/franc/Documents/Estructura de Vegetacion.shp")
Campamento <- read_sf("C:/Users/franc/Documents/Campamentos Valpo.shp") 
IUF <- read_sf("IUF Gran Valparaiso/IUF.shp")
Areas_quemadas <- read_sf("/Documents and Settings/franc/Documents/Areas Quemadas Valpo2.shp")

Lo segundo a realizar, habiendo cargado las capas, es rasterizar todas las capas bajo un raster base (DEMVALPO) para que todas estén alineadas bajo la misma resolución y extensión.

r_base <- DEMVALPO*0 + 1 ## misma resolucion que el dem y con numeros 1 pixel 

campas_rast <- rasterize(vect(Campamento), r_base)

arraigo_rast <- rasterize(vect(Buf_ARRAIGO), r_base, field = "id")

areaq_rast  <- rasterize(vect(Areas_quemadas), r_base)

IUF_rast <- rasterize(vect(IUF), r_base)

hum_resamp <- resample(Humedad, r_base, method="bilinear", threads= T, by_util= F)

Condiciones:

  • La capa Pendiente se debe extraer su valor en grados desde el DEM.
  • Las capas Estruc_vege y Suelo deben ser clasificadas en vector antes de ser rasterizadas.
Pendiente <- terrain(DEMVALPO, v = "slope", unit = "degrees")# pendiente (°)
plot(Pendiente, main = "Pendientes en bruto")

Los rangos de valores de cada variable debe ser ajustada según los criterios establecidos por las instituciones creadoras de las capas, o si es una variable booleana, colocar 2 clases entre 1 y 5 (Si o No).

#Clasificación Pendiente
rcmat <- rbind(
  c(-Inf,   2, 1),  # 0–2 Horizontal
  c(  2,    5, 2),  # 2–5 Suave
  c(  5,   10, 3),  # 5–10 Moderada
  c( 10,   20, 4),  # 10–20 Fuerte
  c( 20,   30, 5),  # 20–30 Muy fuerte
  c( 30,   45, 6),  # 30–45 Escarpada
  c( 45,  Inf, 7)   # >45  Muy escarpada
)

pend_clas <- classify(Pendiente, rcmat, right = FALSE)

# Etiquetas para el plot
labs <- data.frame(
  ID   = 1:7,
  clase = c("Horizontal (0–2°)",
            "Suave (2–5°)",
            "Moderada (5–10°)",
            "Fuerte (10–20°)",
            "Muy fuerte (20–30°)",
            "Escarpada (30–45°)",
            "Muy escarpada (>45°)")
)

levels(pend_clas) <- labs

# Colores para el plot
cols <- c("white",
          "papayawhip",
          "darksalmon",
          "lightcoral",
          "red",
          "red3",
          "darkred")

plot(pend_clas, col = cols, main = "Clases de pendiente (grados)")

# Clasificación Humedad TWI
hcmat <- rbind(
  c(-Inf,   9.13,  7),  # Muy seco
  c( 9.13,  10.02, 6),  # Seco
  c( 10.02, 11,    5),  # Ligeramente seco
  c( 11,    12,    4),  # Ligeramente húmedo
  c( 12,    13.2,  3),  # Húmedo
  c( 13.2,  19.1,  2),  # Muy húmedo
  c( 19.1,  Inf,   1)   # Cuerpo de Agua
)

hum_clas <- classify(hum_resamp, hcmat, right = FALSE)

humlab <- data.frame(
  ID   = 1:7, 
  clase = c("Cuerpos de agua",
            "Muy húmedo",
            "Húmedo",
            "Ligeramente húmedo",
            "Ligeramente suco",
            "Seco",
            "Muy seco")
)

levels(hum_clas) <- humlab

cols2 <- c("blue4",
           "dodgerblue",
           "deepskyblue",
           "skyblue2",
           "lightblue",
           "lightblue1",
           "white")
  
plot(hum_clas, col = cols2, main = "Grado de humedad")

# Clasificación Uso de Suelo 
uso_tab <- data.frame(
  USO = c("Bosques",
          "Praderas y Matorrales",
          "Terrenos Agrícolas",
          "Áreas Desprovistas de Vegetación",
          "Áreas Urbanas e Industriales",
          "Humedales",
          "Cuerpos de Agua"),
  clase = c(5,  # Bosques = Baja susceptibilidad
            4,  # Praderas y matorrales = Media
            3,  # Agrícolas = Media
            5,  # Desprovistas = muy alta
            1,  # Urbanas = alta
            1,  # Humedales = baja-media
            1)  # Agua = sin evaluar
)

suelo_reclass <- Suelo |>
  dplyr::left_join(uso_tab, by = "USO")

suelo_clas <- rasterize(vect(suelo_reclass), r_base, field = "clase")

usolab <- data.frame(
  ID   = 1:5,
  clase = c("Muy Bajo",
            "Bajo",
            "Medio",
            "Alto",
            "Muy Alto")
)

levels(suelo_clas) <- usolab

cols3 <- c("darkgreen",
           "greenyellow",
           "seagreen1",
           "lightgoldenrod2",
           "coral3")

plot(suelo_clas, col = cols3, main = "Impacto de Usos de Suelo")

#Clasificación Estructura Vegetación
estruc_tab <- data.frame(
  ESTRUCTURA = c("Adulta",
                 "Adulto",
                 "Nativo con Exóticas Asilvestradas",
                 "Nativo-Plantación",
                 "No Aplica",
                 "Pradera Perenne",
                 "Praderas Anuales",
                 "Renoval"),
  clase = c(5,  # Adulta = Muy alta susceptibilidad
            4,  # Adulto = Alta
            2,  # Nativo Asilvestrado = Media
            3,  # Nativo-Plantación = Alta
            1,  # No Aplica = Muy baja
            2,  # Pra-Perenne = Baja
            2,  # Pra-Anuales = Media
            5)  # Renoval = Muy Alta
)

estruc_reclass <- Estruc_vege |>
  dplyr::left_join(estruc_tab, by = "ESTRUCTURA")

estruc_clas <- rasterize(vect(estruc_reclass), r_base, field = "clase")

estrulab <- data.frame(
  ID   = 1:5, 
  clase = c("Muy Bajo",
            "Bajo",
            "Medio",
            "Alto",
            "Muy Alto")
)

levels(estruc_clas) <- estrulab

cols4 <- c("grey",
           "seagreen",
           "greenyellow",
           "darkgreen",
           "green"
)

plot(estruc_clas, col = cols4, main = "Impácto de Vegetación")

#Clasificación Campamentos
campmat <- rbind(
  c(1, 5),  # Si hay
  c(NA, 1)   # No hay
)

camp_clas <- classify(campas_rast, campmat, right = FALSE)
camp_crop <- crop(camp_clas, DEMVALPO, mask = TRUE, touches = TRUE)

plot(camp_crop, main = "Presencia de Campamentos")

#Clasificación Arraigo Comunitario
arraimat <- rbind(
  c(1, 5),  
  c(NA, 1)
)

arrai_clas <- classify(arraigo_rast, arraimat, right = FALSE)
arrai_crop <- crop(arrai_clas, DEMVALPO, mask = TRUE, touches = TRUE)

plot(arrai_crop, main = "Alcance de influencia Arraigo Comunitario")

#Clasificación IUF
iufnmat <- rbind(
  c(1, 5),  
  c(NA, 1)
)

IUF_clas <- classify(IUF_rast, iufnmat, right = FALSE)
IUF_crop <- crop(IUF_clas, DEMVALPO, mask = TRUE, touches = TRUE)

plot(IUF_crop, main = "Interfaz Urbano Forestal")

#Clasificación Área Quemada
areaqunmat <- rbind(
  c(1, 3),  
  c(NA, 1)
)

areaq_clas <- classify(areaq_rast, areaqunmat, right = FALSE)
areaq_crop <- crop(areaq_clas, DEMVALPO, mask = TRUE, touches = TRUE)

plot(areaq_crop, main = "Áreas Quemadas por Incendios Forestales 2013-2024")

Normalizaciónes

Habiendo preparado todas las variables el siguiente paso recae en normalizar los rangos de valores, para que el mismo sea estandarizado entre 0 a 1 y así se permita hacer el cálculo de las ponderaciones, el método de la normalización se ejemplifica con el siguiente código:

# Normalizaciones 
areaq_n <- (areaq_crop - 1) / (2 - 1)
pend_n  <- (pend_clas - 1) / (7 - 1)  
suelo_n <- (suelo_clas - 1) / (5 - 1)
hum_n <- (hum_clas - 1) / (7 - 1)
estruc_n <- (estruc_clas - 1) / (5 - 1) 
arrai_n <- (arrai_crop - 1) / (5 - 1)
camp_n <- (camp_crop - 1) / (5 - 1)
iuf_n <- (IUF_crop - 1) / (5 - 1)

Ponderaciónes

La importancia de las variables en el cálculo del Análisis Multicriterio se debe ajustar de acuerdo a las experiencias, evidencias y discusiones sujetas al objetivo de estudio, bajo un consenso de expertos en la materia.

Condición:

  • La suma de las ponderaciones DEBE ser igual a 1, si no alcanza o es mayor habrá problemas de representacion que alterarán el resultado final.
# Pesos 
w_pend  <- 0.12
w_suelo <- 0.14
w_hum <- 0.19
w_estruc <- 0.18
w_arrai <- 0.06
w_camp <- 0.08
w_areaq <- 0.08
w_iuf <-  0.15

Cálculo de Análisis Multicriterio

Los últimos pasos constan de crear un índice que permita registrar el grado de riesgo de los incendios forestales, para ello se debe seguir lo siguiente:

  1. Multiplicar la ponderación con la normalización de cada variable, para luego sumar los resultados entre si.
  2. Crear una matriz que agrupe cinco clases, desde “Muy Bajo” hasta “Muy Alto”.
  3. Clasificar el mapa final con el Índice y la Matriz.
  4. Diseñar los colores de cada clase y los nombres del mapa.
# Calculo del Índice
ISR <- (w_pend * pend_n) + (w_areaq * areaq_n) + (w_hum * hum_n) + (w_suelo * suelo_n) + (w_estruc * estruc_n) + (w_arrai * arrai_n) + (w_camp * camp_n) + (w_iuf * iuf_n)

# Clasificación en clases
m_isr <- matrix(c(-Inf, 0.20, 1,
                  0.20, 0.40, 2,
                  0.40, 0.60, 3,
                  0.60, 0.80, 4,
                  0.80,  Inf, 5), ncol=3, byrow=TRUE)

ISR_cl <- classify(ISR, m_isr, right = FALSE)

levels(ISR_cl) <- data.frame(
  ID    = 1:5,
  clase = c("Muy Baja", "Baja", "Media", "Alta", "Muy Alta")
)

#Ploteo del mapa

cols_isr <- c("lightblue",
              "palegreen2",
              "yellow",
              "orange",
              "red")

plot(ISR_cl, col = cols_isr,
     main = "Riesgo ante Incendios Forestales")

Conclusiones

El metodo de Análisis Multicriterio permite espacializar las áreas de riesgo que se presentan para los eventos de incendios forestales, notando que aquellos espacios en rojo demuestran altos niveles de riesgo por la frecuencia de poca Humedad, alta Pendiente, Usos forestales y matorrales junto a Estructuras renovales y exóticas, asi como a estar fuera de la influencia del Arraígo Comunitario y estar dentro de Campamentos, Interfaces Urbano Forestal y Áreas Quemadas.

La utilización de este resumen del Trabajo de Taller 1 facilitará a otros interesados en aplicar el Análisis Multicriterio en sus investigaciones, aplicando los consejos y pasos a seguir, garantizando un correcto uso de este método bajo todo tipo de casos de estudio.