Este documento describe la metodología empleada para realizar el downscaling espacial de las variables climáticas temperatura (2 m) y precipitación total (mm) a nivel mensual, utilizando como datos base el producto ECMWF/ERA5_LAND/MONTHLY_AGGR y variables topográficas derivadas del DEM SRTM.
El objetivo del procedimiento es obtener productos climáticos a resolución fina (30 m) que permitan analizar la variabilidad espacial local en la zona de Chongón, Guayaquil - Ecuador.
El código ejecutado para el downscaling, se realizó en Google Earth Engine y está disponible en Geoportal. El procesamiento estadístico del producto generado se realizó en RStudio.
Se emplearon datos del producto ECMWF/ERA5_LAND/MONTHLY_AGGR, disponibles en la plataforma Google Earth Engine (GEE). Este conjunto de datos provee variables meteorológicas mensuales desde el año 2000 hasta el año 2024, con una resolución espacial aproximada de 0.1° (~9 km).
A continuación se sintetiza el flujo implementado en GEE.
Random Forest es robusto frente a relaciones no lineales y colinealidad moderada entre predictores. Se lo utiliza mucho en eventos de Downscaling climático.
El modelo de Random Forest se entrenó con las mismas variables topográficas para capturar la influencia orográfica en la distribución de la precipitación y la temperatura. El resultado fue una serie mensual con resolución espacial de 30 m.
Los pasos se detallan a continuación:
Los resultados del downscaling fueron exportados en formato GeoTIFF y analizados en RStudio usando los paquetes terra, sf, tidyverse y RColorBrewer.
Para cada variable (temperatura y precipitación) se calcularon estadísticos globales:
#libreria ráster
library(terra) #Para manipular información ráster
library(sf) #Para manipular información vectorial
library(tidyverse) #Para maniupular información tabulada
library(RColorBrewer) #Genera rango de colores
library(trend) #Para ejecutar tendencias climáticas
# Cargamos imágenes downscaled de GEE
temp <- list.files("TEMPERATURE/", pattern = "\\.tif$", full.names = TRUE) #imagenes por periodo (2000-2012) y (2013-2024)
precp <- list.files("PRECIPITACON/", pattern = "\\.tif$", full.names = TRUE) #imagenes por periodo (2000-2012) y (2013-2024)
#generamos un stack completo
tempG <- rast(temp)
PrecpG <- rast(precp)
# Estadísticos globales para temperatura
TmaxG <- app(tempG, max, na.rm = TRUE)## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
# Asignar nombres a las bandas calculadas temperatura
names(TmaxG) <- "TmaxG_2000_2024"
names(TmeanG) <- "TmeanG_2000_2024"
names(TminG) <- "TminG_2000_2024"
# Estadísticos globales para precipitacion
PrecpMaxG <- app(PrecpG, max, na.rm = TRUE)## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
Se agruparon las capas en dos periodos:
Y se calcularon los estadísticos por periodo para TEMPERATURA
#Definición de periodos
TempP1 <- tempG[[1:156]] #periodo 1
TempP2 <- tempG[[157:300]] # periodo 2
# Calcular estadísticos por píxel en cada periodo
TmeanP1 <- app(TempP1, mean, na.rm = TRUE)## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
# Asignar nombres a las bandas calculadas
names(TmeanP1) <- "TmeanP1_2000_2012"
names(TmeanP2) <- "TmeanP1_2013_2024"
names(TmaxP1) <- "TmaxP1_2000_2012"
names(TmaxP2) <- "TmaxP2_2013_2024"
names(TminP1) <- "TminP1_2000_2012"
names(TminP2) <- "TminP2_2013_2024"Estadísticos por periodo para PRECIPITACIÓN
#Definición de periodos
PrecpP1 <- PrecpG[[1:156]] #periodo 1
PrecpP2 <- PrecpG[[157:300]] # periodo 2
# Calcular estadísticos por píxel en cada periodo
PrecpMeanP1 <- app(PrecpP1, mean, na.rm = TRUE)## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
## |---------|---------|---------|---------|=========================================
# Asignar nombres a las bandas calculadas
names(PrecpMeanP1) <- "PrecpMeanP1_2000_2012"
names(PrecpMeanP2) <- "PrecpMeanP2_2013_2024"
names(PrecpMaxP1) <- "PrecpMaxP1_2000_2012"
names(PrecpMaxP2) <- "PrecpMaxP2_2013_2024"
names(PrecpMinP1) <- "PrecpMinP1_2000_2012"
names(PrecpMinP2) <- "PrecpMinP2_2013_2024"
names(PrecpTotalP1) <- "PrecpTotalP1_2000_2012"
names(PrecpTotalP2) <- "PrecpTotalP2_2013_2024"Por TEMPERATURA
# rampa de colores para temperatura
col_temp <- colorRampPalette(brewer.pal(11, "RdYlBu"))(100)
#Para temperatura
plot(TmaxG, col = rev(col_temp), main = "Temperatura Máxima (2000–2024)")Por PRECIPITACIÓN
# Paleta tipo gradiente azul-rojo
col_precp <- colorRampPalette(c("#e0f3f8", "#74add1", "#4575b4", "#313695"))(100)
#Para precipitación
plot(PrecpMaxG, col = col_precp, main = "Precpitación Máxima (2000–2024)")Por TEMPERATURA
#Para temperatura periodo 1
plot(TmaxP1, col = rev(col_temp), main = "Temperatura Máxima (2000–2012)")#Para temperatura periodo 2
plot(TmaxP2, col = rev(col_temp), main = "Temperatura Máxima (2013–2024)")Por PRECIPITACIÓN
#Para precipitación periodo 1
plot(PrecpMaxP1, col = col_precp, main = "Precpitación Máxima (2000–2012)")#Para precipitación periodo 2
plot(PrecpMaxP2, col = col_precp, main = "Precpitación Máxima (2013–2024)")Por TEMPERATURA
Por PRECIPITACÓN
El procedimiento permitió: