library(tidyverse)
library (spdep)
library(terra)
library(sf)
library(gstat)
library(dplyr)
library(ggplot2)
library(tmap)Geoestadistica
Taller 3: Análisis de Autocorrelación espacial
1 SETUP
1.1 Cargar Librerías
2 Febrero
2.1 Indice de Moran Global
2.1.1 Carga de datos
# Cargar datos
data_t_feb <- read_rds('C:/Re6/Geoestadistica/Talleres/data/procesada/data_temp_febrero.rds')# Cálculo de la matriz de distancia
w <- 1/as.matrix(st_distance(data_t_feb))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
moran(data_t_feb$temp,w,n=length(w$neighbours),S0=Szero(w))#Volvemos a calcular moran
w <- 1/as.matrix(st_distance(data_t_feb))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
m <- moran(data_t_feb$temp,w,n=length(w$neighbours),S0=Szero(w))
mp <- moran.plot(data_t_feb$temp,w)# Buscar las estaciones que se encuentran muy cercanas
d <- st_distance(data_t_feb) #calcula la distance entre estaciones
diag(d) <- NA #convierte la diagonal de la matriz de distancia en NA
d <- units::drop_units(d) # quita las unidades de la distancia
ind <- which(d < 100,arr.ind = TRUE) # busca que estaciones se encuentran a menos de 100m
data_t_febf <- data_t_feb[-ind[,1],] #elimina las estaciones que estan a una distancia de menos de 100m
w <- 1/as.matrix(st_distance(data_t_feb))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
moran(data_t_feb$temp,w,n=length(w$neighbours),S0=Szero(w))#Test estadístico Montecarlo para probar la significancia de la autocorrelación espacial
moran.mc(data_t_feb$temp,w,nsim=10000)
mp <- moran.plot(data_t_feb$temp,w) #Con esto se descarta la hipotesis nula.Al realizar la prueba de Montecarlo para el índice global de Moran se puede afirmar que existe una correlación espacial positiva.
Porque la distribución de los datos tienen un valor estadístico de 0.23206 con un p-value de 0.0001 tras 10000 simulaciones.
2.2 Índice de Moran local
lmoran <- localmoran(data_t_feb$temp,w,alternative = "greater")
head(lmoran)2.3 Mapa de autocorrelacion
data_t_feb <- st_as_sf(data_t_feb[c('geometry','temp')],coords = c('x','y'),crs = 32719)
data_t_feb$Ii <- lmoran[,'Ii']
data_t_feb$Z <- lmoran[,'Z.Ii']
data_t_feb$Pr <- lmoran[, "Pr(z > E(Ii))"]p1 <- tm_shape(data_t_feb) +
tm_dots(col = "temp", title = "Temperatura", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
# Repite para los otros mapas
p2 <- tm_shape(data_t_feb) +
tm_dots(col = "Ii", title = "Índice de Moran Local", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p3 <- tm_shape(data_t_feb) +
tm_dots(col = "Z", title = "Z-score", style = "fixed", breaks = c(-Inf, 1.65, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p4 <- tm_shape(data_t_feb) +
tm_dots(col = "Pr", title = "p-value", style = "fixed", breaks = c(-Inf, 0.05, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5) tmap_mode('view')
tmap_arrange(p1,p2,p3,p4)Mapa Interactivo
Mapa Estático
#Quad
quad <- attr(lmoran, 'quadr')
head(quad)
data_t_feb <- data_t_feb |>
bind_cols(quad = quad$median) |> # Agregando columna quad
mutate(quad = case_when(
Pr < 0.05 ~ quad, # Mantiene valores significativos
.default = 'No Significativo')) # Asigna "No Significativo" cuando Pr >= 0.05# Crear el mapa con la columna "quad"
moran <- tm_shape(data_t_feb) +
tm_dots(col = "quad", title = "Quad", style = "cat", palette = "Set1") + # Cambiar a 'quad' y estilo 'cat' para categorías
tm_layout(legend.outside = TRUE)tmap_mode('view')
moranEl mapa del índice moran Quad nos muestra la ubicación y concentración de puntos de temperatura en autocorrelación espacial a sus vecinos.
Los puntos en rojo (High-High) son aquellos con valores altos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas similares.Son puntos con autocorrelación espacial positva.
Los puntos en azul (High-Low) son aquellos con valores altos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas más bajas. Son puntos con autocorrelación espacial negativa.
Los puntos en rojo (Low-High) son aquellos con valores bajos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas más altas.Son puntos con autocorrelación espacial negativa.
Los puntos en azul (Low-Low) son aquellos con valores bajos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas similares. Son puntos con autocorrelación espacial positiva.
Los puntos en naranjo (No Significativo) son aquellos cuyos valores de temperatura tienen un comportamiento aleatorio en relación a sus vecionos. Son puntos sin autocorrelación espacial.
Al comparar el índice de moran global y el índice de moran local, se pueden afirmar dos cosas principalmente:
La autocorrelación espacial general es positiva. Eso dice el índice de moral global (0.23206), lo que se puede corroborar visualmente con la presencia mayoritaria de puntos rojos (High-High) y morados (Low-Low).
Que los mayores clusters de autocorrelación se encuentran en las cordilleras de la Costa (High-High) y de los Andes (Low-Low).
2.4 Análisis del Variograma
2.4.1 Variograma Experimental
options(scipen = 10)
# Realizamos un variograma exploratorio para identificar qué variograma se ajusta más a nuestros datos
v <- variogram(temp~1,data_t_feb, cloud = TRUE)
plot(v)# calculamos la distancia de la diagonal para tener una referencia de cuanto debiese ser nuestro Cutoff
distance_matrix <- st_distance(data_t_feb)
max_dist <- max(dist_matrix, na.rm = TRUE)
diagonal <- max_dist/3
print(diagonal)#Definimos el punto de corte.
v_feb <- variogram(temp~1,data_t_feb,cutoff = 90000)
plot(v_feb)
show.vgms() #Verificar tipos de variogramas teoricos para ver cuál se ajusta más# Definimos el sill (máximo valor de los datos), el tipo de variograma (Wav), y el nugget (la variabilidad inicial de los datos).
m_var_feb <- vgm(5.3,'Wav',82000,0.1) # Seguimos reiterando hasta encontrar un variograma que se ajuste a nuestros datos e indique la distancia donde la semivarianza se estabiliza.
plot(v_feb,m_var_feb) # El variograma experimental de Febrero nos indica que la máxima semiviaranza es de alredor de 5.3 y que se estabiliza a los 80000 m, y se asemaja un variograma de onda (Wav).
# Guardamos
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_febrero.png",
width = 25, height = 14, units = "cm", res = 300)
plot(v_feb,m_var_feb,
col = "blue", lwd = 1,
main = "Variograma de Temperatura para Febrero 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()
write_rds(m_var_feb,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_feb.rds')2.5 Análisis de Anisotropía
# Definir variogramas en diferentes direcciones
v_febrero_dir <- variogram(temp ~ 1, data_t_feb, alpha = c(0, 45, 90, 135), cutoff = 120000, width=6000)
plot(v_febrero_dir)El gráfico 0° presenta una curva plana y una casi nula variabilidad.
El gráfico 45° presenta un patrón un poco más definido, con una máxima semivarianza de 5 y que deja aumentar al rededor los 58000 m.
EL gráfico 90° presenta un patrón muy defenido y ajustado a un variograma Gausiano, con una semivarianza máxima cercana a 11 y que se estabiliza rodeando los 90000 m.
EL gráfico 135° presenta una máxima variabilidad cercana a 5 y que se estabiliza al rededor de los 78000 m.
# Se optó por la anisotropía de 90° porque es la dirección que presenta el mejor ajuste.
v_anis_feb <- vgm(13.5,'Gau',80000,0.2,anis = c(90,1))
plot(v_febrero_dir,v_anis_feb)Anisotropía espacial del variograma es Gausiano
# Mapa Variográfico
plot(variogram(temp~1,data_t_feb,cutoff = 120000, width= 8000, map = TRUE))Del mapa se interpreta una mayor variabilidad de los datos en las cordilleras de la Costa y de los Andes.
2.5.1 Ajuste del variograma
# Guardar en .rds
fit_v_feb <- fit.variogram(v_feb,m_var_feb) # Ajuste del variograma teórico (mv) con el variograma experimental (v).
write_rds(fit_v_feb,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_feb_ajustado.rds')
plot(v_feb, fit_v_feb, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para Febrero 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_febrero_ajustado.png", # Guardamos el gráfico
width = 25, height = 14, units = "cm", res = 300)
plot(v_feb, fit_v_feb, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para Febrero 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()3 Julio
3.1 Indice de Moran Global
3.1.1 Carga de datos
# Cargar datos
data_t_jul <- read_rds('C:/Re6/Geoestadistica/Talleres/data/procesada/data_temp_julio.rds')# Cálculo de la matriz de distancia
w <- 1/as.matrix(st_distance(data_t_jul))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
moran(data_t_jul$temp,w,n=length(w$neighbours),S0=Szero(w))# filtrar datos por distancia entre las estaciones
data_t_jul <- data_t_jul|>
distinct(geometry,.keep_all = TRUE) #deja sólo las geometrias únicas#Volvemos a calcular moran
w <- 1/as.matrix(st_distance(data_t_jul))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
m <- moran(data_t_jul$temp,w,n=length(w$neighbours),S0=Szero(w))
mp <- moran.plot(data_t_jul$temp,w)# Buscar las estaciones que se encuentran muy cercanas
d <- st_distance(data_t_jul) #calcula la distance entre estaciones
diag(d) <- NA #convierte la diagonal de la matriz de distancia en NA
d <- units::drop_units(d) # quita las unidades de la distancia
ind <- which(d < 100,arr.ind = TRUE) # busca que estaciones se encuentran a menos de 100m
data_t_julf <- data_t_jul[-ind[,1],] #elimina las estaciones que estan a una distancia de menos de 100m
w <- 1/as.matrix(st_distance(data_t_jul))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
moran(data_t_jul$temp,w,n=length(w$neighbours),S0=Szero(w))#Test estadístico Montecarlo para probar la significancia de la autocorrelación espacial
moran.mc(data_t_jul$temp,w,nsim=10000)
mp <- moran.plot(data_t_jul$temp,w) #Con esto se descarta la hipotesis nula.Al realizar la prueba de Montecarlo para el índice global de Moran se puede afirmar que existe una correlación espacial positiva.
Porque la distribución de los datos tiene un valor estadístico de 0.26426 con un p-value de 0.0001 tras 10000 simulaciones.
3.2 Indice de Moran Local
lmoran <- localmoran(data_t_jul$temp,w,alternative = "greater")
head(lmoran)3.3 Mapa de autocorrelacion
data_t_jul <- st_as_sf(data_t_jul[c('geometry','temp')],coords = c('x','y'),crs = 32719)
data_t_jul$Ii <- lmoran[,'Ii']
data_t_jul$Z <- lmoran[,'Z.Ii']
data_t_jul$Pr <- lmoran[, "Pr(z > E(Ii))"]# Crear los mapas
p1 <- tm_shape(data_t_jul) +
tm_dots(col = "temp", title = "Temperatura", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
# Repite para los otros mapas
p2 <- tm_shape(data_t_jul) +
tm_dots(col = "Ii", title = "Índice de Moran Local", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p3 <- tm_shape(data_t_jul) +
tm_dots(col = "Z", title = "Z-score", style = "fixed", breaks = c(-Inf, 1.65, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p4 <- tm_shape(data_t_jul) +
tm_dots(col = "Pr", title = "p-value", style = "fixed", breaks = c(-Inf, 0.05, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5) tmap_mode('view')
tmap_arrange(p1,p2,p3,p4)Mapa Interactivo
Mapa Estático
#Quad
quad <- attr(lmoran, 'quadr')
head(quad)
data_t_jul <- data_t_jul |>
bind_cols(quad = quad$median) |> # Agregando columna quad
mutate(quad = case_when(
Pr < 0.05 ~ quad, # Mantiene valores significativos
.default = 'No Significativo')) # Asigna "No Significativo" cuando Pr >= 0.05# Crear el mapa con la columna "quad"
moran <- tm_shape(data_t_jul) +
tm_dots(col = "quad", title = "Quad", style = "cat", palette = "Set1") + # Cambiar a 'quad' y estilo 'cat' para categorías
tm_layout(legend.outside = TRUE)
tmap_mode('view')
moranEl mapa del índice moran Quad nos muestra la ubicación y concentración de puntos de temperatura en autocorrelación espacial a sus vecinos.
Los puntos en rojo (High-High) son aquellos con valores altos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas similares.Son puntos con autocorrelación espacial positva
Los puntos en azul (High-Low) son aquellos con valores altos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas más bajas. Son puntos con autocorrelación espacial negativa.
Los puntos en rojo (Low-High) son aquellos con valores bajos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas más altas.Son puntos con autocorrelación espacial negativa.
Los puntos en azul (Low-Low) son aquellos con valores bajos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas similares. Son puntos con autocorrelación espacial positiva.
Los puntos en naranjo (No Significativo) son aquellos cuyos valores de temperatura tienen un comportamiento aleatorio en relación a sus vecionos. Son puntos sin autocorrelación espacial.
Al comparar el índice de moran global y el índice de moran local, se pueden afirmar dos cosas principalmente:
La autocorrelación espacial general es positiva. Eso dice el índice de moral global (0.26426), lo que se puede corroborar visualmente con la presencia mayoritaria de puntos rojos (High-High) y morados (Low-Low).
Que los mayores clusters de autocorrelación se encuentran en las cordilleras de la Costa (High-High) y de los Andes (Low-Low).
3.4 Análisis del variograma
3.4.1 Variograma Experimental
options(scipen = 10)
# Realizamos un variograma exploratorio para identificar qué variograma se ajusta más a nuestros datos
v <- variogram(temp~1,data_t_jul)
plot(v)
show.vgms() #Verificar tipos de variogramas teoricos para ver cuál se ajusta más
v_jul <- variogram(temp~1,data_t_jul,cutoff = 70000) #Definimos el punto de corte.
plot(v_jul)# Definimos el sill (máximo valor de los datos), el tipo de variograma (Wav), y el nugget (la variabilidad inicial de los datos).
m_var_jul <- vgm(6,'Wav',60000, 0) #
plot(v_jul,m_var_jul) El variograma experimental de Julio nos indica que la máxima semiviaranza es de alredor de 7.8 y que se estabiliza a los 68000 m, y se asemaja un variograma de onda (Wav). Con el punto de corte 70000 m se elimaron los puntos que evidencian la estabilización de la semivarianza.
# Guardamos
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_julio.png",
width = 25, height = 14, units = "cm", res = 300)
plot(v_jul,m_var_jul,
col = "blue", lwd = 1,
main = "Variograma de Temperatura para julio 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()
write_rds(m_var_jul,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_jul.rds')3.5 Análisis de Anisotropía
# Definir variogramas en diferentes direcciones
v_julio_dir <- variogram(temp ~ 1, data_t_jul, alpha = c(0, 45, 90, 135), cutoff = 60000, width=4000)
plot(v_julio_dir)- El gráfico 0° presenta una curva plana, y una casi nula variabilidad.
- El gráfico 45° presenta una máxima semivarianza máxima cercana a 1.8 que se estabiliza al rededor de los 45000 m.
- EL gráfico 90° presenta un patrón más defenido y ajustado a un variograma Wav, con una semivarianza máxima cercana a 7 y que se estabiliza cerca de los 58000 m, aunque presenta cierta varia
# Se optó por la anisotropía de 90° porque es la dirección que presenta el mejor ajuste.
v_anis_jul <- vgm(8,'Wav',58000,anis = c(90,1))
plot(v_julio_dir,v_anis_jul)Anisotropía espacial del variograma ondular (Wav)
# Mapa Variográfico
plot(variogram(temp~1,data_t_jul,cutoff = 120000, width= 8000, map = TRUE))Del mapa se interpreta una mayor variabilidad de los datos en las cordilleras de la Costa y de los Andes.
3.5.1 Ajuste del variograma
# Guardar en .rds
fit_v_jul <- fit.variogram(v_jul,m_var_jul) # Ajuste del variograma teórico (mv) con el variograma experimental (v).
write_rds(fit_v_jul,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_jul_ajustado.rds')
plot(v_jul, fit_v_jul, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para julio 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_julio_ajustado.png", # Guardamos el gráfico
width = 25, height = 14, units = "cm", res = 300)
plot(v_jul, fit_v_jul, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para julio 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()4 Septiembre
4.1 Indice de Moran Global
4.1.1 Carga de datos
# Cargar datos
data_t_sept <- read_rds('C:/Re6/Geoestadistica/Talleres/data/procesada/data_temp_septiembre.rds')# Cálculo de la matriz de distancia
w <- 1/as.matrix(st_distance(data_t_sept))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
moran(data_t_sept$temp,w,n=length(w$neighbours),S0=Szero(w))# filtrar datos por distancia entre las estaciones
data_t_sept <- data_t_sept|>
distinct(geometry,.keep_all = TRUE) #deja sólo las geometrias únicas#Volvemos a calcular moran
w <- 1/as.matrix(st_distance(data_t_sept))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
m <- moran(data_t_sept$temp,w,n=length(w$neighbours),S0=Szero(w))
mp <- moran.plot(data_t_sept$temp,w)# Buscar las estaciones que se encuentran muy cercanas
d <- st_distance(data_t_sept) #calcula la distance entre estaciones
diag(d) <- NA #convierte la diagonal de la matriz de distancia en NA
d <- units::drop_units(d) # quita las unidades de la distancia
ind <- which(d < 100,arr.ind = TRUE) # busca que estaciones se encuentran a menos de 100m
data_t_septf <- data_t_sept[-ind[,1],] #elimina las estaciones que estan a una distancia de menos de 100m
w <- 1/as.matrix(st_distance(data_t_sept))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
moran(data_t_sept$temp,w,n=length(w$neighbours),S0=Szero(w))#Test estadístico Montecarlo para probar la significancia de la autocorrelación espacial
moran.mc(data_t_sept$temp,w,nsim=10000)
mp <- moran.plot(data_t_sept$temp,w) #Con esto se descarta la hipotesis nula.Al realizar la prueba de Montecarlo para el índice global de Moran se puede afirmar que existe una correlación espacial positiva.
Porque la distribución de los datos tiene un valor estadístico de 0.27261 con un p-value de 0.0001 tras 10000 simulaciones.
4.2 Indice de Moran Local
lmoran <- localmoran(data_t_sept$temp,w,alternative = "greater")
head(lmoran)4.2.1 Mapa de autocorrelacion
data_t_sept <- st_as_sf(data_t_sept[c('geometry','temp')],coords = c('x','y'),crs = 32719)
data_t_sept$Ii <- lmoran[,'Ii']
data_t_sept$Z <- lmoran[,'Z.Ii']
data_t_sept$Pr <- lmoran[, "Pr(z > E(Ii))"]# Crear los mapas
p1 <- tm_shape(data_t_sept) +
tm_dots(col = "temp", title = "Temperatura", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
# Repite para los otros mapas
p2 <- tm_shape(data_t_sept) +
tm_dots(col = "Ii", title = "Índice de Moran Local", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p3 <- tm_shape(data_t_sept) +
tm_dots(col = "Z", title = "Z-score", style = "fixed", breaks = c(-Inf, 1.65, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p4 <- tm_shape(data_t_sept) +
tm_dots(col = "Pr", title = "p-value", style = "fixed", breaks = c(-Inf, 0.05, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5) tmap_mode('view')
tmap_arrange(p1,p2,p3,p4)Mapa Interactivo
Mapa Estático
#Quad
quad <- attr(lmoran, 'quadr')
head(quad)
data_t_sept <- data_t_sept |>
bind_cols(quad = quad$median) |> # Agregando columna quad
mutate(quad = case_when(
Pr < 0.05 ~ quad, # Mantiene valores significativos
.default = 'No Significativo')) # Asigna "No Significativo" cuando Pr >= 0.05# Crear el mapa con la columna "quad"
moran <- tm_shape(data_t_sept) +
tm_dots(col = "quad", title = "Quad", style = "cat", palette = "Set1") + # Cambiar a 'quad' y estilo 'cat' para categorías
tm_layout(legend.outside = TRUE)
tmap_mode('view')
moranEl mapa del índice moran Quad nos muestra la ubicación y concentración de puntos de temperatura en autocorrelación espacial a sus vecinos.
Los puntos en rojo (High-High) son aquellos con valores altos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas similares.Son puntos con autocorrelación espacial positva
Los puntos en azul (High-Low) son aquellos con valores altos de temperatura en torno a la media, rodeados por puntos vecinos con temperaturas más bajas. Son puntos con autocorrelación espacial negativa.
Los puntos en rojo (Low-High) son aquellos con valores bajos de temperatura en torno a la media, rodeados por puntos vecinos con temperaturas más altas.Son puntos con autocorrelación espacial negativa.
Los puntos en azul (Low-Low) son aquellos con valores bajos de temperatura en torno a la media, rodeados por puntos vecinos con temperaturas similares. Son puntos con autocorrelación espacial positiva.
Los puntos en naranjo (No Significativo) son aquellos cuyos valores de temperatura tienen un comportamiento aleatorio en relación a sus vecionos. Son puntos sin autocorrelación espacial.
Al comparar el índice de moran global y el índice de moran local, se pueden afirmar dos cosas principalmente:
La autocorrelación espacial general es positiva. Eso dice el índice de moral global (0.27261), lo que se puede corroborar visualmente con la presencia mayoritaria de puntos rojos (High-High) y morados (Low-Low).
Que los mayores clusters de autocorrelación se encuentran en las cordilleras de la Costa (High-High) y de los Andes (Low-Low).
4.3 Análisis del variograma
4.3.1 Variograma experimental
options(scipen = 10)
# Realizamos un variograma exploratorio para identificar qué variograma se ajusta más a nuestros datos
v <- variogram(temp~1,data_t_sept,cutoff = 90000, width = 6000)
plot(v)
show.vgms() #Verificar tipos de variogramas teoricos para ver cuál se ajusta más
v_sept <- variogram(temp~1,data_t_sept,cutoff = 30000, width = 2000) #Definimos el punto de corte.
plot(v_sept)# Definimos el sill (máximo valor de los datos), el tipo de variograma (Wav), y el nugget (la variabilidad inicial de los datos).
m_var_sept <- vgm(1.35,'Wav',28000,0) #
plot(v_sept,m_var_sept) - El variograma experimental de Septiembre nos indica que la máxima semiviaranza es de alredor de 1.5 y que se estabiliza a los 28000 m, y se asemaja un variograma de onda (Wav).Con el punto de corte 30000 m se elimaron los puntos que evidencian la estabilización de la semivarianza.
# Guardamos
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_septiembre.png",
width = 25, height = 14, units = "cm", res = 300)
plot(v_sept,m_var_sept,
col = "blue", lwd = 1,
main = "Variograma de Temperatura para septiembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()
write_rds(m_var_sept,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_sept.rds')4.4 Análisis de Anisotropía
# Definir variogramas en diferentes direcciones
v_septiembre_dir <- variogram(temp ~ 1, data_t_sept, alpha = c(0, 45, 90, 135), cutoff = 150000, width = 10000)
plot(v_septiembre_dir)El gráfico 0° presenta una curva plana, y una casi nula variabilidad.
El gráfico 45° presenta una máxima semivarianza máxima cercana a 4 que se estabiliza alrededor de los 55000 m.
El gráfico 90° presenta un patrón más defenido, con una semivarianza máxima cercana a 39 y que se estabiliza cerca de los 140000 m.
El gráfico 135° presenta una máxima variabilidad cercana a 10.5 y que se estabiliza alrededor de los 90000 m.
# Se optó por la anisotropía de 90° porque es la dirección que presenta el mejor ajuste.
v_anis_sept <- vgm(39,'Wav',137000,0.2,anis = c(90,1))
plot(v_septiembre_dir,v_anis_sept)La anisotropía espacial del variograma ondular (Wav)
plot(variogram(temp~1,data_t_sept,cutoff = 120000, width= 8000, map = TRUE))Del mapa se interpreta una mayor autocorrelación de los datos en las cordilleras de la Costa y de los Andes.
4.4.1 Ajuste del variograma
# Guardar en .rds
fit_v_sept <- fit.variogram(v_sept,m_var_sept) # Ajuste del variograma teórico (mv) con el variograma experimental (v).
write_rds(fit_v_sept,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_sept_ajustado.rds')
plot(v_sept, fit_v_sept, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para septiembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_septiembre_ajustado.png", # Guardamos el gráfico
width = 25, height = 14, units = "cm", res = 300)
plot(v_sept, fit_v_sept, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para septiembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()5 Noviembre
5.1 Indice de Moran Global
5.1.1 Carga de datos
# Cargar datos
data_t_nov <- read_rds('C:/Re6/Geoestadistica/Talleres/data/procesada/data_temp_noviembre.rds')# Cálculo de la matriz de distancia
w <- 1/as.matrix(st_distance(data_t_nov))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
moran(data_t_nov$temp,w,n=length(w$neighbours),S0=Szero(w))# filtrar datos por distancia entre las estaciones
data_t_nov <- data_t_nov|>
distinct(geometry,.keep_all = TRUE) #deja sólo las geometrias únicas#Volvemos a calcular moran
w <- 1/as.matrix(st_distance(data_t_nov))
diag(w) <- 0
w <- units::drop_units(w)
w <- mat2listw(w)
m <- moran(data_t_nov$temp,w,n=length(w$neighbours),S0=Szero(w))
mp <- moran.plot(data_t_nov$temp,w)#Test estadístico Montecarlo para probar la significancia de la autocorrelación espacial
moran.mc(data_t_nov$temp,w,nsim=10000)mp <- moran.plot(data_t_nov$temp,w)
# Con esto se descarta la hipotesis nula. Ya que índice de Moran global tras 10000 simulaciones genero una autocorrelación espacial positiva de 0.26516.
# El p-value (0.0001) indica que esto ocurre en el 0.9999 de los casos.5.2 Indice de Moran Local
lmoran <- localmoran(data_t_nov$temp,w,alternative = "greater")
head(lmoran)5.2.1 Mapa de autocorrelacion
data_t_nov <- st_as_sf(data_t_nov[c('geometry','temp')],coords = c('x','y'),crs = 32719)
data_t_nov$Ii <- lmoran[,'Ii']
data_t_nov$Z <- lmoran[,'Z.Ii']
data_t_nov$Pr <- lmoran[, "Pr(z > E(Ii))"]# Crear los mapas
p1 <- tm_shape(data_t_nov) +
tm_dots(col = "temp", title = "Temperatura", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
# Repite para los otros mapas
p2 <- tm_shape(data_t_nov) +
tm_dots(col = "Ii", title = "Índice de Moran Local", style = "quantile", palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p3 <- tm_shape(data_t_nov) +
tm_dots(col = "Z", title = "Z-score", style = "fixed", breaks = c(-Inf, 1.65, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5)
p4 <- tm_shape(data_t_nov) +
tm_dots(col = "Pr", title = "p-value", style = "fixed", breaks = c(-Inf, 0.05, Inf), palette = "viridis") +
tm_layout(legend.position = c("0.9", "0.1"), legend.outside = FALSE, frame = FALSE) +
tm_scale_bar(position = c("right", "bottom"), text.size = 0.5) +
tm_grid(proj = 4326, n.x = 8, n.y = 8, lines = TRUE, col = "black", lwd = 0.5, alpha = 0.5) tmap_mode('view')
tmap_arrange(p1,p2,p3,p4)Mapa Interactivo
Mapa Estático
#Quad
quad <- attr(lmoran, 'quadr')
head(quad)
data_t_nov <- data_t_nov |>
bind_cols(quad = quad$median) |> # Agregando columna quad
mutate(quad = case_when(
Pr < 0.05 ~ quad, # Mantiene valores significativos
.default = 'No Significativo')) # Asigna "No Significativo" cuando Pr >= 0.05# Crear el mapa con la columna "quad"
moran <- tm_shape(data_t_nov) +
tm_dots(col = "quad", title = "Quad", style = "cat", palette = "Set1") + # Cambiar a 'quad' y estilo 'cat' para categorías
tm_layout(legend.outside = TRUE)
tmap_mode('view')
moranEl mapa del índice moran Quad nos muestra la ubicación y concentración de puntos de temperatura en autocorrelación espacial a sus vecinos.
Los puntos en rojo (High-High) son aquellos con valores altos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas similares.Son puntos con autocorrelación espacial positva
Los puntos en azul (High-Low) son aquellos con valores altos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas más bajas. Son puntos con autocorrelación espacial negativa.
Los puntos en rojo (Low-High) son aquellos con valores bajos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas más altas.Son puntos con autocorrelación espacial negativa.
Los puntos en azul (Low-Low) son aquellos con valores bajos de temperatura entorno a la media, rodeados por puntos vecinos con temperaturas similares. Son puntos con autocorrelación espacial positiva.
Los puntos en naranjo (No Significativo) son aquellos cuyos valores de temperatura tienen un comportamiento aleatorio en relación a sus vecionos. Son puntos sin autocorrelación espacial.
Al comparar el índice de moran global y el índice de moran local, se pueden afirmar dos cosas principalmente:
La autocorrelación espacial general es positiva. Eso dice el índice de moral global (0.26516), lo que se puede corroborar visualmente con la presencia mayoritaria de puntos rojos (High-High) y morados (Low-Low).
Que los mayores clusters de autocorrelación se encuentran en las cordilleras de la Costa (High-High) y de los Andes (Low-Low).
5.3 Análisis del Variograma
5.3.1 Variograma Experimental
options(scipen = 10)
# Realizamos un variograma exploratorio para identificar qué variograma se ajusta más a nuestros datos
v <- variogram(temp~1,data_t_nov, plot.numbers = TRUE)
plot(v)
show.vgms() #Verificar tipos de variogramas teoricos para ver cuál se ajusta más
v_nov <- variogram(temp~1,data_t_nov,cutoff = 80000, width = 5500) #Definimos el punto de corte.
plot(v_nov)# Definimos el sill (máximo valor de los datos), el tipo de variograma (Wav), y el nugget (la variabilidad inicial de los datos).
m_var_nov <- vgm(7.8,'Wav',70000,0.) #
plot(v_nov,m_var_nov) El variograma experimental de Noviembre nos indica que la máxima semiviaranza es de alredor de 7.8 y que se estabiliza a los 68000 m, y se asemaja un variograma de onda (Wav).Con el punto de corte 80000 m se elimaron los puntos que evidencian la estabilización de la semivarianza.
# Guardamos
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_noviembre.png",
width = 25, height = 14, units = "cm", res = 300)
plot(v_nov,m_var_nov,
col = "blue", lwd = 1,
main = "Variograma de Temperatura para noviembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()
write_rds(m_var_nov,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_nov.rds')# Definir variogramas en diferentes direcciones
v_noviembre_dir <- variogram(temp ~ 1, data_t_nov, alpha = c(0, 45, 90, 135), cutoff = 120000, width=6000)
plot(v_noviembre_dir)El gráfico 0° presenta una curva plana, y una casi nula variabilidad.
El gráfico 45° presenta una máxima semivarianza máxima cercana a 3 que se estabiliza al rededor de los 50000 m.
EL gráfico 90° presenta un patrón más defenido y ajustado a un variograma Gausiano, con una semivarianza máxima cercana a 22.5 y que se estabiliza cerca de los 108000 m.
EL gráfico 135° presenta una máxima variabilidad cercana a 7.5 y que se estabiliza al rededor de los 78000 m.
5.4 Análisis de Anisotropía
# Se optó por la anisotropía de 90° porque es la dirección que presenta el mejor ajuste.
v_anis_nov <- vgm(22.5,'Wav',108000,0.2,anis = c(90,1))
plot(v_noviembre_dir,v_anis_nov)La anisotropía espacial del variograma ondular (Wav)
plot(variogram(temp~1,data_t_nov,cutoff = 120000, width= 8000, map = TRUE))Del mapa se interpreta una mayor variabilidad de los datos en las cordilleras de la Costa y de los Andes.
5.4.1 Ajuste del variograma
# Guardar en .rds
fit_v_nov <- fit.variogram(v_nov,m_var_nov) # Ajuste del variograma teórico (mv) con el variograma experimental (v).
write_rds(fit_v_nov,'C:/Re6/Geoestadistica/Talleres/data/procesada/var_nov_ajustado.rds')
plot(v_nov, fit_v_nov, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para noviembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/var_noviembre_ajustado.png", # Guardamos el gráfico
width = 25, height = 14, units = "cm", res = 300)
plot(v_nov, fit_v_nov, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma ajustado de Temperatura para noviembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()6 Variogramas de residuos de los modelos de regresión
6.1 Febrero
Para el mes de Febrero, el modelo con mejor relación RMSE-Rcuadrado fue el que solamente utilizó al DEM como predictor
vr6_feb <- variogram(temp ~ sqrt(dem), data_unida_feb, cutoff = 40000, width = 6000) # Definiendo los puntos de corte del variograma variograma.
plot(vr6_feb)
var_r6_feb <- vgm(0.8,'Pen',33500, 0.05)
plot(vr6_feb,var_r6_feb)
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_febrero.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_feb,var_r6_feb,
col = "blue", lwd = 1,
main = "Variograma residual de modelo de Temperatura para Febrero 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()6.1.1 Variograma ajustado
fvar_r6_feb <- fit.variogram(vr6_feb,var_r6_feb)
write_rds(fvar_r6_feb,'C:/Re6/Geoestadistica/Talleres/data/procesada/residual_var_febrero_ajustado.rds')
plot(vr6_feb, fvar_r6_feb, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma residual ajustado de regresión de Temperatura para Febrero 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_febrero_ajustado.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_feb,var_r6_feb,
col = "blue", lwd = 1,
main = "Variograma residual ajustado de regresión de Temperatura para Febrero 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()El variograma residual experimental del mes de Febrero nos indica que la máxima semiviaranza es de al rededor de 0.85 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Pen. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.
El variograma residual ajustado del mes de Febrero nos indica que la máxima semiviaranza es de al rededor de 0.85 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Pen. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.
6.2 Julio
Para el mes de Julio, el modelo con mejor relación RMSE-Rcuadrado fue el que solamente utilizó al DEM como predictor
vr6_jul <- variogram(temp ~ sqrt(dem), data_unida_jul, cutoff = 40000, width = 5500) # Definiendo los puntos de corte del variograma variograma.
plot(vr6_jul)
var_r6_jul <- vgm(0.95,'Ste',39500, 0.15)
plot(vr6_jul,var_r6_jul)
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_julio.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_jul,var_r6_jul,
col = "blue", lwd = 1,
main = "Variograma residual de modelo de regresión de Temperatura para Julio 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()6.2.1 Variograma ajustado
fvar_r6_jul <- fit.variogram(vr6_jul,var_r6_jul)
write_rds(fvar_r6_jul,'C:/Re6/Geoestadistica/Talleres/data/procesada/residual_var_julio_ajustado.rds')
plot(vr6_jul, fvar_r6_jul, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma residual ajustado de modelo de regresión de Temperatura para Julio 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_julio_ajustado.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_jul, fvar_r6_jul,
col = "blue", lwd = 1,
main = "Variograma residual ajustado de modelo de regresión de Temperatura para Julio 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()El variograma residual experimental del mes de Julio nos indica que la máxima semiviaranza es de al rededor de 0.85 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Ste. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.
El variograma residual ajustado del mes de Julio nos indica que la máxima semiviaranza es de al rededor de 0.8 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Ste. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.
6.3 Septiembre
El modelo de regresión con mejor relación RMSE-Rcuadrado para el mes de Septiembre fue el que utilizó como predictores al DEM, la distancia a la costa, el NDVI y el LST.
vr6_sept <- variogram(temp ~ sqrt(dem + dist_costa + ndvi_sept + lst_sept), data_unida_sept, cutoff = 40000, width = 2500) # Definiendo los puntos de corte del variograma variograma.
plot(vr6_sept)
var_r6_sept <- vgm(3,'Wav',39500, 0)
plot(vr6_sept,var_r6_sept)
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_septiembre.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_sept, var_r6_sept,
col = "blue", lwd = 1,
main = "Variograma residual de modelo de regresión de Temperatura para Septiembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()6.3.1 Variograma ajustado
fvar_r6_sept <- fit.variogram(vr6_sept,var_r6_sept)
write_rds(fvar_r6_sept,'C:/Re6/Geoestadistica/Talleres/data/procesada/residual_var_septiembre_ajustado.rds')
plot(vr6_sept, fvar_r6_sept, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma residual ajustado de modelo de regresión de Temperatura para Septiembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_septiembre_ajustado.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_sept, fvar_r6_sept,
col = "blue", lwd = 1,
main = "Variograma residual ajustado de modelo de regresión de Temperatura para Septiembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()El variograma residual experimental del mes de Septiembre nos indica que la máxima semiviaranza es de al rededor de 3 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Wav. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.
El variograma residual ajustado del mes de Septiembre nos indica que la máxima semiviaranza es de al rededor de 2.9 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Wav. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.
6.4 Noviembre
El modelo de regresión con mejor relación RMSE-Rcuadrado para el mes de Noviembre fue el que utilizó al DEM y al LST como predictores.
vr6_nov <- variogram(temp ~ sqrt(dem + lst_nov), data_unida_nov, cutoff = 40000, width = 5000) # Definiendo los puntos de corte del variograma variograma.
plot(vr6_nov)
var_r6_nov <- vgm(0.62,'Ste',38500, 0.16)
plot(vr6_nov,var_r6_nov)
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_noviembre.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_nov,var_r6_nov,
col = "blue", lwd = 1,
main = "Variograma residual de modelo de regresión de Temperatura para Noviembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()6.4.1 Variograma ajustado
fvar_r6_nov <- fit.variogram(vr6_nov,var_r6_nov)
write_rds(fvar_r6_nov,'C:/Re6/Geoestadistica/Talleres/data/procesada/residual_var_noviembre_ajustado.rds')
plot(vr6_nov, fvar_r6_nov, scales = list(x = list(log = FALSE), y = list(log = FALSE)),
col = "blue", lwd = 1,
main = "Variograma residual ajustado de modelo de regresión de Temperatura para Noviembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
png( "C:/Re6/Geoestadistica/Talleres/Outputs/Grafico/residual_var_septiembre_ajustado.png",
width = 25, height = 14, units = "cm", res = 300)
plot(vr6_nov, fvar_r6_nov,
col = "blue", lwd = 1,
main = "Variograma residual ajustado de modelo de regresión de Temperatura para Noviembre 2023",
xlab = "Distancia (m)",
ylab = "Semivarianza")
dev.off()El variograma residual experimental del mes de Noviembre nos indica que la máxima semiviaranza es de al rededor de 0.62 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Ste. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.
El variograma residual ajustado del mes de Noviembre nos indica que la máxima semiviaranza es de al rededor de 0.58 y que se estabiliza a los 3900 m, y se asemeja un variograma tipo Ste. Con el punto de corte 40000 m se eliminaron los puntos que evidencian la estabilización de la semivarianza.