D.4 Predicción espacial (KU)
Para generar la rejilla de predicción consideramos un buffer de radio 40 en torno a las posiciones espaciales:
<- aquifer_sf %>% st_geometry() %>% st_buffer(40) buffer
En lugar de emplear una rejilla sf
:
# grid <- buffer %>% st_make_grid(n = c(50, 50), what = "centers") %>% st_intersection(buffer)
por comodidad es preferible emplear una rejilla stars
:
library(stars)
<- buffer %>% st_as_stars(nx = 50, ny = 50) grid
Si suponemos un modelo (no constante) para la tendencia, es necesario añadir los valores de las variables explicativas a la rejilla de predicción:
<- st_coordinates(grid)
coord $lon <- coord$x
grid$lat <- coord$y grid
Además, en este caso recortamos la rejilla para filtrar predicciones alejadas de las observaciones:
<- grid %>% st_crop(buffer) grid
Obtenemos las predicciones mediante kriging universal (Sección 4.3 y Sección 4.4):
<- krige(formula = head ~ lon + lat, locations = aquifer_sf, model = fit,
pred newdata = grid)
## [using universal kriging]
ERROR en krige: cambia las coordenadas del objeto stars
summary(st_coordinates(grid))
## x y
## Min. :-181.86 Min. :-28.03
## 1st Qu.:-100.73 1st Qu.: 33.25
## Median : -16.22 Median : 97.09
## Mean : -16.22 Mean : 97.09
## 3rd Qu.: 68.29 3rd Qu.:160.93
## Max. : 149.42 Max. :222.21
summary(st_coordinates(pred))
## x y
## Min. :-181.86 Min. : 53.83
## 1st Qu.:-100.73 1st Qu.:115.11
## Median : -16.22 Median :178.95
## Mean : -16.22 Mean :178.95
## 3rd Qu.: 68.29 3rd Qu.:242.79
## Max. : 149.42 Max. :304.08
Posible solución: añadir el resultado a grid
:
$var1.pred <- pred$var1.pred
grid$var1.var <- pred$var1.var grid
Finalmente representamos las predicciones y las varianzas kriging:
plot(grid["var1.pred"], breaks = "equal", col = sf.colors(64), key.pos = 4,
main = "Predicciones kriging")
plot(grid["var1.var"], breaks = "equal", col = sf.colors(64), key.pos = 4,
main = "Varianzas kriging")
También podríamos emplear el paquete ggplot2
:
library(ggplot2)
library(gridExtra)
<- ggplot() + geom_stars(data = grid, aes(fill = var1.pred, x = x, y = y)) +
p1 scale_fill_viridis_c() + geom_sf(data = aquifer_sf) +
coord_sf(lims_method = "geometry_bbox")
<- ggplot() + geom_stars(data = grid, aes(fill = var1.var, x = x, y = y)) +
p2 scale_fill_viridis_c() + geom_sf(data = aquifer_sf) +
coord_sf(lims_method = "geometry_bbox")
grid.arrange(p1, p2, ncol = 2)