# Configuración inicial
options(repos = c(CRAN = "https://cloud.r-project.org"))
knitr::opts_chunk$set(echo = TRUE)Análisis de Métodos de Predicción Espacial
Introducción
En este análisis se utilizaron diferentes métodos de interpolación espacial para estimar la temperatura en la región del Biobío a partir de datos recolectados in-situ y predictores generados previamente. Se compararon los métodos de Vecino Más Cercano (VMP), Inverso a la Distancia (IDW), y Kriging con variables auxiliares. Cada uno de estos métodos fue evaluado utilizando métricas de error y gráficos de comparación.
Objetivos
- Implementar métodos de predicción espacial determinísticos y de regresión para estimar temperaturas en la región del Biobío.
- Comparar el desempeño de los métodos mediante métricas como el RMSE y el coeficiente de determinación (R²).
- Generar mapas temáticos para visualizar la distribución espacial de las predicciones de temperatura y su varianza.
0. Instalación de Paquetes
install.packages(c('gt', 'viridis', 'gstat', 'stars'))Installing packages into 'C:/Users/Administrador/AppData/Local/R/win-library/4.4'
(as 'lib' is unspecified)
package 'gt' successfully unpacked and MD5 sums checked
package 'viridis' successfully unpacked and MD5 sums checked
package 'gstat' successfully unpacked and MD5 sums checked
Warning: cannot remove prior installation of package 'gstat'
Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
C:\Users\Administrador\AppData\Local\R\win-library\4.4\00LOCK\gstat\libs\x64\gstat.dll
a
C:\Users\Administrador\AppData\Local\R\win-library\4.4\gstat\libs\x64\gstat.dll:
Permission denied
Warning: restored 'gstat'
package 'stars' successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\Administrador\AppData\Local\Temp\RtmpgpoO3X\downloaded_packages
1. Cargar Paquetes
library(terra) # Análisis espacialterra 1.7.78
library(sf) # Datos vectorialesLinking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE
library(tmap) # Mapas temáticosBreaking News: tmap 3.x is retiring. Please test v4, e.g. with
remotes::install_github('r-tmap/tmap')
library(tidyverse) # Análisis de datos── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ tidyr::extract() masks terra::extract()
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(stars) # Datos rasterCargando paquete requerido: abind
library(gstat) # Geostatística
library(dplyr) # Manipulación de datos
library(gt) # Tablas
library(ggplot2) # Visualización de datos
library(abind) # Funciones para arrays
library(viridis) # Paleta de coloresCargando paquete requerido: viridisLite
2. Cargar Datos
region_sf <- read_sf("C:/Geoestadistica/data/procesada/region_biobio.gpkg") |> st_transform(crs =32718)
data_temp <- read_rds('C:/Geoestadistica/data/procesada/data_estas_temp_con_predictores.rds')
predictores <- rast("C:/Geoestadistica/data/procesada/predictores/todos_predictores.tif")
preds <- rast('C:/Geoestadistica/data/procesada/predictores/todos_predictores.tif')
st_crs(data_temp) <- crs(predictores)3. Generación de la Grilla
bb <- st_bbox(region_sf)
grilla <- rast(xmin = bb$xmin, xmax = bb$xmax,
ymin = bb$ymin, ymax = bb$ymax,
res = 500, crs = "EPSG:32718")
# Convertir a objeto stars
grilla_st <- st_as_stars(grilla)Warning: [readValues] raster has no values
4. Verificación de Puntos Reales y Ficticios
data_temp <- data_temp |> mutate(estacion_ficticia = ifelse(station_id >= 1000, "Ficticia", "Real"))
# Visualización de estaciones
tmap_mode('plot')tmap mode set to plotting
tm_shape(region_sf) +
tm_borders() +
tm_shape(data_temp) +
tm_dots(col = "estacion_ficticia", size = 0.2,
palette = c("blue", "red"), # Color azul para reales, rojo para ficticias
title = "Tipo de Estación") +
tm_layout(legend.outside = TRUE, # Colocar la leyenda afuera
legend.title.size = 3, # Tamaño del título de la leyenda
legend.text.size = 1) # Tamaño del texto de la leyenda5. Método del Vecino Más Cercano (VMP)
#04 Metodo vecino mas cercano----
interpolar_por_mes <- function(mes_numero) {
# Filtrar los datos para el mes específico
data_temp_filtered <- data_temp |> filter(mes == mes_numero & station_id <= 1000)
# Obtener las coordenadas para las estaciones
coords <- st_coordinates(data_temp_filtered)
# Definir los valores de k para los vecinos
kas <- c(3, 5, 10)
# Aplicar validación cruzada y obtener las predicciones
out_kas <- purrr::map_df(1:nrow(data_temp_filtered), \(i) {
purrr::map_df(kas, \(k) { # Iterar en los valores de k
# Interpolación con IDW excluyendo el i-ésimo punto usando la misma grilla
temp_nn <- idw(temp ~ 1, data_temp_filtered[-i,], grilla_st, nmax = k)
# Convertir a SpatRaster si no es ya uno
temp_nn <- rast(temp_nn) |> mask(vect(region_sf)) |> trim()
# Comprobar si temp_nn es un objeto SpatRaster
if (!inherits(temp_nn, "SpatRaster")) {
stop("temp_nn no es un objeto SpatRaster.")
}
# Extraer el valor interpolado en la posición i
df <- terra::extract(temp_nn, coords[i, , drop = FALSE]) # Usar terra::extract
# Guardar el ráster para cada k y mes
filename <- paste0("RasterVMP_mes_", mes_numero, "_k", k, "_idw_", i, ".tif")
writeRaster(temp_nn, file.path('C:/Geoestadistica/data/procesada/vmp2', filename), overwrite = TRUE)
df |> mutate(k = k)
})
})
# Repetir los valores observados para todos los k
observados <- rep(data_temp_filtered$temp, each = length(kas))
# Combinar datos de predicciones con los observados y las coordenadas
data_cv_kas <- cbind(coords, out_kas, observados)
# Definir la función de RMSE
rmse <- function(obs, pred) sqrt(sum((obs - pred)^2) / length(obs))
# Calcular los residuos y el Z-Score
data_cv_kas <- data_cv_kas |>
mutate(residuos = observados - var1.pred_var1.pred, # Ajustar el nombre de la columna
zscore = scale(residuos))
# Calcular métricas de evaluación
data_cv_kas_sum <- data_cv_kas |>
group_by(k) |>
summarize(rmse = rmse(observados, var1.pred_var1.pred), # Usar el nombre correcto de la columna
r2 = cor(observados, var1.pred_var1.pred)^2) |>
mutate(mes = mes_numero) # Agregar el mes a las métricas
return(list(data_cv_kas_sum = data_cv_kas_sum, data_cv_kas = data_cv_kas))
}
# Lista de meses para iterar: marzo (3), junio (6), septiembre (9), diciembre (12)
meses <- c(3, 6, 9, 12)
# Aplicar la función para cada mes y guardar los resultados
resultados_meses <- purrr::map(meses, \(mes_numero) {
cat("Procesando el mes:", mes_numero, "\n") # Mostrar en qué mes está trabajando
interpolar_por_mes(mes_numero)
})Procesando el mes: 3
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Procesando el mes: 6
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Procesando el mes: 9
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Procesando el mes: 12
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
# Extraer resultados
data_cv_kas_sum_lista <- purrr::map(resultados_meses, "data_cv_kas_sum")
data_cv_kas_lista <- purrr::map(resultados_meses, "data_cv_kas")
# Combinar todos los resultados en un solo data frame
data_cv_kas_sum_total <- bind_rows(data_cv_kas_sum_lista, .id = "mes")
data_cv_kas_total <- bind_rows(data_cv_kas_lista, .id = "mes")
# Asegúrate de que la columna 'mes' sea un factor con etiquetas correctas
data_cv_kas_sum_total$mes <- factor(data_cv_kas_sum_total$mes,
levels = c(1, 2, 3, 4),
labels = c("Marzo", "Junio", "Septiembre", "Diciembre"))
# Convertir mes a factor con etiquetas para data_cv_kas_total
data_cv_kas_total$mes <- factor(data_cv_kas_total$mes,
levels = c(1, 2, 3, 4),
labels = c("Marzo", "Junio", "Septiembre", "Diciembre"))
#ver datos de VMP
print(data_cv_kas_sum_total)# A tibble: 12 × 4
k rmse r2 mes
<dbl> <dbl> <dbl> <fct>
1 3 0.706 0.776 Marzo
2 5 0.735 0.770 Marzo
3 10 0.844 0.749 Marzo
4 3 0.475 0.187 Junio
5 5 0.467 0.201 Junio
6 10 0.463 0.195 Junio
7 3 0.480 0.421 Septiembre
8 5 0.488 0.373 Septiembre
9 10 0.486 0.380 Septiembre
10 3 0.810 0.872 Diciembre
11 5 0.900 0.860 Diciembre
12 10 1.12 0.846 Diciembre
#4.1Comparación de error medio cuadrático entre modelos por mes
ggplot(data_cv_kas_sum_total, aes(x = as.factor(k), y = rmse, fill = mes)) +
geom_bar(stat = "identity", position = "dodge", na.rm = TRUE) +
geom_text(aes(label = round(rmse, 2)), position = position_dodge(width = 0.9), vjust = -0.3, na.rm = TRUE) +
ggtitle("Comparación de RMSE entre Modelos por Mes") +
xlab("k") +
ylab("RMSE") +
scale_fill_manual(name = "Mes", values = c("Marzo" = "steelblue", "Junio" = "orange", "Septiembre" = "green", "Diciembre" = "red")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))#4.2 Comparación del coeficiente de determinación entre modelos por mes
ggplot(data_cv_kas_sum_total, aes(x = as.factor(k), y = r2, fill = mes)) +
geom_bar(stat = "identity", position = "dodge", na.rm = TRUE) +
geom_text(aes(label = round(r2, 2)), position = position_dodge(width = 0.9), vjust = -0.3, na.rm = TRUE) +
ggtitle("Comparación de R² entre Modelos por Mes") +
xlab("k") +
ylab("R²") +
scale_fill_manual(name = "Mes", values = c("Marzo" = "steelblue", "Junio" = "orange", "Septiembre" = "green", "Diciembre" = "red")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))#4.3 Visualización de residuos por mes y k
ggplot(data_cv_kas_total, aes(x = residuos, fill = as.factor(k))) +
geom_histogram(bins = 30, alpha = 0.7, position = "identity") +
labs(title = "Distribución de Residuos por Mes y k",
x = "Residuos",
y = "Frecuencia") +
theme_minimal() +
facet_grid(mes ~ k) + # Facetas por mes y k
scale_fill_viridis_d(name = "k") # Colores diferenciados para k#4.4Visualización de Z-Scores por mes y k
ggplot(data_cv_kas_total, aes(x = zscore, fill = as.factor(k))) +
geom_histogram(bins = 30, alpha = 0.7, position = "identity") +
labs(title = "Distribución de Z-Scores por Mes y k",
x = "Z-Score",
y = "Frecuencia") +
theme_minimal() +
facet_grid(mes ~ k) + # Facetas por mes y k
scale_fill_viridis_d(name = "k") # Colores diferenciados para k#4.5 Gráfico de dispersión para valores observados vs valores predichos por mes
ggplot(data_cv_kas_total, aes(x = observados, y = var1.pred_var1.pred, color = as.factor(k))) +
geom_point(alpha = 0.7) +
geom_abline(intercept = 0, slope = 1, color = "red", linetype = "dashed") + # Línea de referencia
labs(title = "Predicciones vs Observados por Mes y k",
x = "Valores Observados",
y = "Valores Predichos") +
theme_minimal() +
facet_grid(mes ~ k) + # Facetas por mes y k
scale_color_viridis_d(name = "k") # Colores diferenciados para k#4.6 Creación y promedios para cada uno de los meses trabajados y los valores k considerados
#Lista de meses y valores de k
meses <- c(3, 6, 9, 12)
kas <- c(3, 5, 10)
# Iterar sobre meses y valores de k
for (mes in meses) {
for (k in kas) {
# Cargar los rásteres de las diferentes iteraciones para un mes y un valor de k
raster_files <- list.files('C:/Geoestadistica/data/procesada/vmp2',
pattern = paste0("RasterVMP_mes_", mes, "_k", k, "_idw_"),
full.names = TRUE)
# Cargar todos los rásteres en una lista, asegurándose de que son objetos raster válidos
rasters_list <- lapply(raster_files, function(file) {
raster <- tryCatch({
rast(file)
}, error = function(e) {
message("Error al cargar el archivo: ", file)
return(NULL) # Devolver NULL si hay un error
})
return(raster)
})
# Filtrar los objetos NULL (los que no se pudieron cargar)
rasters_list <- Filter(Negate(is.null), rasters_list)
# Verificar si la lista de rásteres no está vacía
if (length(rasters_list) > 0) {
# Convertir la lista a un objeto SpatRaster
raster_stack <- do.call(c, rasters_list) # Combina las listas de rásteres
# Calcular el promedio de los rásteres usando terra::app
raster_promedio <- app(raster_stack, fun = mean, na.rm = TRUE)
# Guardar el ráster promedio
filename_promedio <- paste0("RasterVMP_mes_", mes, "_k", k, "_promedio.tif")
writeRaster(raster_promedio, file.path('C:/Geoestadistica/data/procesada/vmp2', filename_promedio), overwrite = TRUE)
cat("Promedio guardado para mes:", mes, "y k:", k, "\n")
} else {
cat("No se encontraron rásteres válidos para mes:", mes, "y k:", k, "\n")
}
}
}Promedio guardado para mes: 3 y k: 3
Promedio guardado para mes: 3 y k: 5
Promedio guardado para mes: 3 y k: 10
Promedio guardado para mes: 6 y k: 3
Promedio guardado para mes: 6 y k: 5
Promedio guardado para mes: 6 y k: 10
Promedio guardado para mes: 9 y k: 3
Promedio guardado para mes: 9 y k: 5
Promedio guardado para mes: 9 y k: 10
Promedio guardado para mes: 12 y k: 3
Promedio guardado para mes: 12 y k: 5
Promedio guardado para mes: 12 y k: 10
# Cargar los rasters desde los archivos por mes y k seleccionados
raster_marzo <- rast("C:/Geoestadistica/data/procesada/vmp2/RasterVMP_mes_3_k3_promedio.tif") # Raster de marzo
raster_junio <- rast("C:/Geoestadistica/data/procesada/vmp2/RasterVMP_mes_6_k3_promedio.tif") # Raster de junio
raster_septiembre <- rast("C:/Geoestadistica/data/procesada/vmp2/RasterVMP_mes_9_k3_promedio.tif") # Raster de septiembre
raster_diciembre <- rast("C:/Geoestadistica/data/procesada/vmp2/RasterVMP_mes_12_k3_promedio.tif") # Raster de diciembre
# Crear un stack de rasters
RasterVMP_stack <- c(raster_marzo, raster_junio, raster_septiembre, raster_diciembre)
# Nombres para los rasters en el stack
names(RasterVMP_stack) <- c("Marzo", "Junio", "Septiembre", "Diciembre")
#Cartografías utilizando el método del vecino más próximo (k=3)
tm_shape(RasterVMP_stack) + # Añadir el ráster de temperatura
tm_raster(style = 'quantile',
palette = viridis(20),
title = "Rango de Temperatura (°C)",
colorNA = "grey90", # Color para valores NA
alpha = 0.9) + # Ajustar la transparencia del ráster
tm_shape(region_sf) + # Añadir la capa de la región
tm_borders(lwd = 3) + # Dibujar los bordes de la región con mayor grosor
tm_shape(data_temp) + # Añadir los puntos de datos de temperatura
tm_dots(col = 'temp',
title = "Temperatura Media (°C)", # Título descriptivo de la leyenda
style = 'jenks',
palette = '-RdYlBu',
size = 0.3, # Aumentar el tamaño de los puntos
alpha = 1) + # Ajustar la transparencia de los puntos
tm_compass(position = c("left", "top"), type = "4star", size = 0.7) + # Añadir flecha del norte
tm_grid() + # Añadir una cuadrícula
tm_layout(
main.title = "Vecino más Cercano (k = 3)", # Título principal
main.title.size = 1, # Tamaño del título
main.title.position = "center", # Centrar el título
main.title.fontface = "bold", # Negrita para el título
legend.outside = TRUE, # Colocar la leyenda afuera
legend.title.size = 0.9, # Tamaño del título de la leyenda
legend.text.size = 0.7, # Tamaño del texto de la leyenda
legend.position = c("left", "bottom"), # Posición de la leyenda
frame = FALSE # Eliminar el marco del mapa
)tmap_mode('plot')tmap mode set to plotting
print(RasterVMP_stack)class : SpatRaster
dimensions : 453, 523, 4 (nrow, ncol, nlyr)
resolution : 500, 500 (x, y)
extent : 590787.8, 852287.8, 5738181, 5964681 (xmin, xmax, ymin, ymax)
coord. ref. : WGS 84 / UTM zone 18S (EPSG:32718)
sources : RasterVMP_mes_3_k3_promedio.tif
RasterVMP_mes_6_k3_promedio.tif
RasterVMP_mes_9_k3_promedio.tif
RasterVMP_mes_12_k3_promedio.tif
names : Marzo, Junio, Septiembre, Diciembre
min values : 13.57104, 8.89374, 8.721667, 12.06568
max values : 17.87124, 10.70980, 10.991252, 18.93818
6. Método de Inverso a la Distancia (IDW)
# Definir la función para el proceso de interpolación y validación cruzada
interpolar_por_mes <- function(mes_numero) {
# Filtrar los datos para el mes específico
data_temp_filtered <- data_temp |> filter(mes == mes_numero & station_id <= 1000)
# Obtener las coordenadas para las estaciones
coords <- st_coordinates(data_temp_filtered)
# Aplicar validación cruzada y obtener las predicciones
out_IDW <- purrr::map_df(1:nrow(data_temp_filtered), \(i) {
# Interpolación con IDW excluyendo el i-ésimo punto
temp_nn <- idw(temp ~ 1, data_temp_filtered[-i,], grilla_st)
# Aplicar máscara para la región y ajustar el raster
temp_nn <- rast(temp_nn) |> mask(vect(region_sf)) |> trim()
# Extraer el valor interpolado en la posición i
# Asegúrate de que coords[i, ] esté en el formato correcto
df <- terra::extract(temp_nn, coords[i, , drop = FALSE]) # Cambié aquí para usar terra::extract
# Guardar el ráster para cada mes
filename <- paste0("RasterIDW_mes_", mes_numero, "_idw_", i, ".tif")
writeRaster(temp_nn, file.path('C:/Geoestadistica/data/procesada/IDW', filename), overwrite = TRUE)
df
})
# Repetir los valores observados para todos los k
observados_IDW <- data_temp_filtered$temp
# Combinar datos de predicciones con los observados
data_cv_IDW <- cbind(out_IDW, observados_IDW)
# Definir la función de RMSE
rmse <- function(obs, pred) sqrt(sum((obs - pred)^2) / length(obs))
# Calcular los residuos y el Z-Score
data_cv_IDW <- data_cv_IDW |>
mutate(residuos = observados_IDW - var1.pred_var1.pred,
zscore = scale(residuos))
# Calcular métricas de evaluación
data_cv_IDW_sum <- data_cv_IDW |>
summarize(rmse = rmse(observados_IDW, var1.pred_var1.pred),
r2 = cor(observados_IDW, var1.pred_var1.pred)^2) |>
mutate(mes = mes) # Agregar el mes a las métricas
return(list(data_cv_IDW_sum = data_cv_IDW_sum, data_cv_IDW = data_cv_IDW))
}
# Lista de meses para iterar: marzo (3), junio (6), septiembre (9), diciembre (12)
meses <- c(3, 6, 9, 12)
# Aplicar la función para cada mes y guardar los resultados
resultados_meses <- purrr::map(meses, \(mes_numero) {
cat("Procesando el mes:", mes_numero, "\n") # Mostrar en qué mes está trabajando
interpolar_por_mes(mes_numero)
})Procesando el mes: 3
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Procesando el mes: 6
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Procesando el mes: 9
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Procesando el mes: 12
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
[inverse distance weighted interpolation]
Warning in asMethod(object): complete map seems to be NA's -- no selection was
made
# Extraer resultados
data_cv_IDW_sum_lista <- purrr::map(resultados_meses, "data_cv_IDW_sum")
data_cv_IDW_lista <- purrr::map(resultados_meses, "data_cv_IDW")
# Combinar todos los resultados en un solo data frame
data_cv_IDW_sum_total <- bind_rows(data_cv_IDW_sum_lista, .id = "mes")
data_cv_IDW_total <- bind_rows(data_cv_IDW_lista, .id = "mes")
# Asegúrate de que la columna 'mes' sea un factor con etiquetas correctas
data_cv_IDW_sum_total$mes <- factor(data_cv_IDW_sum_total$mes,
levels = c(1, 2, 3, 4),
labels = c("Marzo", "Junio", "Septiembre", "Diciembre"))
# Convertir mes a factor con etiquetas para data_cv_IDW_total
data_cv_IDW_total$mes <- factor(data_cv_IDW_total$mes,
levels = c(1, 2, 3, 4),
labels = c("Marzo", "Junio", "Septiembre", "Diciembre"))
#Resultados de las métricas para el cálculo del inverso a la distancia (IDW)
print(data_cv_IDW_sum_total) rmse r2 mes
1 0.8806653 0.7334018 Marzo
2 0.4604365 0.1972029 Junio
3 0.4850496 0.3812938 Septiembre
4 1.1580016 0.8385473 Diciembre
#5.2 Comparación de error medio cuadrático entre modelos por mes
ggplot(data_cv_IDW_sum_total, aes(x = 'IDW', y = rmse, fill = mes)) +
geom_bar(stat = "identity", position = "dodge", na.rm = TRUE) +
geom_text(aes(label = round(rmse, 2)), position = position_dodge(width = 0.9), vjust = -0.3, na.rm = TRUE) +
ggtitle("Comparación de RMSE entre Modelos por Mes") +
xlab("MESES") +
ylab("RMSE") +
scale_fill_manual(name = "Mes", values = c("Marzo" = "steelblue", "Junio" = "orange", "Septiembre" = "green", "Diciembre" = "red")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))#5.3 Comparación del coeficiente de determinación entre modelos por mes
ggplot(data_cv_IDW_sum_total, aes(x = 'IDW', y = r2, fill = mes)) +
geom_bar(stat = "identity", position = "dodge", na.rm = TRUE) +
geom_text(aes(label = round(r2, 2)), position = position_dodge(width = 0.9), vjust = -0.3, na.rm = TRUE) +
ggtitle("Comparación de R² entre Modelos por Mes") +
xlab("MESES") +
ylab("R²") +
scale_fill_manual(name = "Mes", values = c("Marzo" = "steelblue", "Junio" = "orange", "Septiembre" = "green", "Diciembre" = "red")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))#5.4 Visualización de los residuos por mes
ggplot(data_cv_IDW_total, aes(x = residuos, fill = mes)) +
geom_histogram(bins = 30, alpha = 0.7) +
labs(title = "Distribución de Residuos por Mes",
x = "Residuos",
y = "Frecuencia") +
theme_minimal() +
facet_wrap(~mes)#5.5 Visualización de Z-Scores por mes
ggplot(data_cv_IDW_total, aes(x = zscore, fill = mes)) +
geom_histogram(bins = 30, alpha = 0.7) +
labs(title = "Distribución de Z-Scores por Mes",
x = "Z-Score",
y = "Frecuencia") +
theme_minimal() +
facet_wrap(~mes)#5.6 Gráfico de dispersión para valores observados vs valores predichos por mes
ggplot(data_cv_IDW_total, aes(x = observados_IDW, y = var1.pred_var1.pred, color = mes)) +
geom_point(alpha = 0.7) +
geom_abline(intercept = 0, slope = 1, color = "red", linetype = "dashed") + # Línea de referencia
labs(title = "Predicciones vs Observados por Mes",
x = "Valores Observados",
y = "Valores Predichos") +
theme_minimal() +
facet_wrap(~mes)#5.7 Iteraciones para cada mes para obtener los promedios de temperatura
# Lista de meses
meses <- c(3, 6, 9, 12)
# Iterar sobre meses
for (mes in meses) {
# Cargar los rásteres de las diferentes iteraciones para un mes
raster_files <- list.files('C:/Geoestadisticadata/procesada/IDW',
pattern = paste0("RasterIDW_mes_", mes, "_idw_"),
full.names = TRUE)
# Cargar todos los rásteres en una lista, asegurándose de que son objetos raster válidos
rasters_list <- lapply(raster_files, function(file) {
raster <- tryCatch({
rast(file)
}, error = function(e) {
message("Error al cargar el archivo: ", file)
return(NULL) # Devolver NULL si hay un error
})
return(raster)
})
# Filtrar los objetos NULL (los que no se pudieron cargar)
rasters_list <- Filter(Negate(is.null), rasters_list)
# Verificar si la lista de rásteres no está vacía
if (length(rasters_list) > 0) {
# Convertir la lista a un objeto SpatRaster
raster_stack <- do.call(c, rasters_list) # Combina las listas de rásteres
# Calcular el promedio de los rásteres usando terra::app
raster_promedio <- app(raster_stack, fun = mean, na.rm = TRUE)
# Guardar el ráster promedio
filename_promedio <- paste0("RasterIDW_mes_", mes, "_promedio.tif")
writeRaster(raster_promedio, file.path('C:/Geoestadistica/data/procesada/IDW', filename_promedio), overwrite = TRUE)
cat("Promedio guardado para mes:", mes, "\n")
} else {
cat("No se encontraron rásteres válidos para mes:", mes, "\n")
}
}No se encontraron rásteres válidos para mes: 3
No se encontraron rásteres válidos para mes: 6
No se encontraron rásteres válidos para mes: 9
No se encontraron rásteres válidos para mes: 12
# 5.8 Carga de los rásters promedio y creación del stack
# Cargar los rasters promedios
raster_marzo <- rast("C:/Geoestadistica/data/procesada/IDW/RasterIDW_mes_3_promedio.tif")
raster_junio <- rast("C:/Geoestadistica/data/procesada/IDW/RasterIDW_mes_6_promedio.tif")
raster_septiembre <- rast("C:/Geoestadistica/data/procesada/IDW/RasterIDW_mes_9_promedio.tif")
raster_diciembre <- rast("C:/Geoestadistica/data/procesada/IDW/RasterIDW_mes_12_promedio.tif")
# Crear un stack de rasters
RasterIDW_stack <- c(raster_marzo, raster_junio, raster_septiembre, raster_diciembre)
# Nombres para los rasters en el stack
names(RasterIDW_stack) <- c("Marzo", "Junio", "Septiembre", "Diciembre")
#5.9 Cartografías utilizando el método del inverso a la distancia (IDW)
tm_shape(RasterIDW_stack) + # Añadir el ráster de temperatura
tm_raster(style = 'quantile',
palette = viridis(20),
title = "Rango de Temperatura (°C)",
colorNA = "grey90", # Color para valores NA
alpha = 0.9) + # Ajustar la transparencia del ráster
tm_shape(region_sf) + # Añadir la capa de la región
tm_borders(lwd = 3) + # Dibujar los bordes de la región con mayor grosor
tm_shape(data_temp) + # Añadir los puntos de datos de temperatura
tm_dots(col = 'temp',
title = "Temperatura Media (°C)", # Título descriptivo de la leyenda
style = 'jenks',
palette = '-RdYlBu',
size = 0.3, # Aumentar el tamaño de los puntos
alpha = 1) + # Ajustar la transparencia de los puntos
tm_compass(position = c("left", "top"), type = "4star", size = 0.7) + # Añadir flecha del norte
tm_grid() + # Añadir una cuadrícula
tm_layout(
main.title = "Inverso de la Distancia IDW", # Título principal
main.title.size = 1, # Tamaño del título
main.title.position = "center", # Centrar el título
main.title.fontface = "bold", # Negrita para el título
legend.outside = TRUE, # Colocar la leyenda afuera
legend.title.size = 0.9, # Tamaño del título de la leyenda
legend.text.size = 0.7, # Tamaño del texto de la leyenda
legend.position = c("left", "bottom"), # Posición de la leyenda
frame = FALSE # Eliminar el marco del mapa
)7. Regresión Lineal con Kriging
# Regresión lineal con predictores
names(preds) <- make.unique(names(preds))
kriging_por_mes <- function(mes_numero) {
mes_nombre <- c("marzo", "junio", "septiembre", "diciembre")[which(meses == mes_numero)]
pred_vars <- c('dem', 'aspect', 'slope', 'dist_costa', paste0('ndvi_', mes_nombre), paste0('lst_', mes_nombre))
pred_vars_presentes <- pred_vars[pred_vars %in% names(preds)]
preds_mes <- subset(preds, pred_vars_presentes)
preds_mes_st <- preds_mes |> st_as_stars() |> split('band')
data_temp_filtered <- data_temp |> filter(mes == mes_numero)
temp_lm6 <- krige(temp ~ dem + aspect + slope + dist_costa + get(paste0('ndvi_', mes_nombre)) + get(paste0('lst_', mes_nombre)), data_temp_filtered, preds_mes_st)
temp_lm6_raster <- rast(temp_lm6)
temp_lm6_loocv <- krige.cv(temp ~ dem + aspect + slope + dist_costa + get(paste0('ndvi_', mes_nombre)) + get(paste0('lst_', mes_nombre)), data_temp_filtered)
rmse_loocv <- sqrt(mean((temp_lm6_loocv$observed - temp_lm6_loocv$var1.pred)^2))
r2_loocv <- cor(temp_lm6_loocv$observed, temp_lm6_loocv$var1.pred)^2
return(list(prediccion_raster = temp_lm6_raster, loocv = list(modelo = temp_lm6_loocv, metricas = c(rmse_loocv, r2_loocv))))
}
resultados_kriging <- purrr::map(meses, \(mes_numero) { kriging_por_mes(mes_numero) })[ordinary or weighted least squares prediction]
[ordinary or weighted least squares prediction]
[ordinary or weighted least squares prediction]
[ordinary or weighted least squares prediction]
8. Visualización de Resultados
8.1 Comparación de RMSE entre Modelos
ggplot(data_cv_kas_sum_total, aes(x = as.factor(k), y = rmse, fill = mes)) +
geom_bar(stat = "identity", position = "dodge", na.rm = TRUE) +
geom_text(aes(label = round(rmse, 2)), position = position_dodge(width = 0.9), vjust = -0.3, na.rm = TRUE) +
ggtitle("Comparación de RMSE entre Modelos por Mes") +
xlab("k") +
ylab("RMSE") +
scale_fill_manual(name = "Mes", values = c("Marzo" = "steelblue", "Junio" = "orange", "Septiembre" = "green", "Diciembre" = "red")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))8.2 Comparación del Coeficiente de Determinación R²
ggplot(data_cv_IDW_sum_total, aes(x = 'IDW', y = r2, fill = mes)) +
geom_bar(stat = "identity", position = "dodge", na.rm = TRUE) +
geom_text(aes(label = round(r2, 2)), position = position_dodge(width = 0.9), vjust = -0.3, na.rm = TRUE) +
ggtitle("Comparación de R² entre Modelos por Mes") +
xlab("Meses") +
ylab("R²") +
scale_fill_manual(name = "Mes", values = c("Marzo" = "steelblue", "Junio" = "orange", "Septiembre" = "green", "Diciembre" = "red")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))Conclusiones
En este análisis, se evaluaron varios métodos de interpolación espacial para predecir la temperatura en la región del Biobío. Los métodos de VMP, IDW y Kriging mostraron distintas capacidades para captar las variaciones espaciales de temperatura, siendo evaluados a través de métricas como RMSE y R². Estos resultados proporcionan una visión de la eficacia de cada método para análisis futuros y destacan la importancia de seleccionar el método adecuado para cada contexto geoespacial.