Introducción

En esta parte, el libro nos introduce dos técnicas de interpolación espacial que se utilizarán para estimar de forma continua el contenido de carbono orgánico del suelo (SOC) en la capa de 15–30 cm de profundidad, a partir de datos muestreados:

IDW (Inverse Distance Weighted) Es un método determinístico, lo que significa que el valor estimado en un punto depende directamente de la distancia a los puntos de muestreo más cercanos. Cuanto más lejos está un punto, menos influencia tiene.

OK (Ordinary Kriging) Es un método probabilístico, que no solo considera la distancia, sino también la estructura espacial del fenómeno (mediante el semivariograma), para estimar valores.

Ambas técnicas buscan crear una superficie continua a partir de datos puntuales, permitiendo visualizar o analizar zonas donde no se tomaron muestras.

Configuración del entorno

Con este código se preparar el ambiente de trabajo para realizar la interpolación. a. Limpieza de memoria:

rm(list=ls())

Elimina todos los objetos de la sesión actual de R para evitar conflictos. b. Carga de librerías:

library(sp)        # Manejo de datos espaciales tipo 'sp'
library(terra)     # Manipulación de capas raster modernas
## terra 1.8.29
library(sf)        # Manipulación de datos vectoriales (simple features)
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(stars)     # Lectura y análisis de objetos raster multidimensionales
## Loading required package: abind
library(gstat)     # Interpolaciones espaciales y análisis geoestadístico
library(automap)   # Kriging automático (ajuste de semivariogramas)
library(leaflet)   # Visualización de mapas interactivos
library(leafem)    # Extensiones para mapas de 'leaflet'
library(ggplot2)   # Gráficos y visualización elegante
library(dplyr)     # Manipulación de datos tipo 'tidy'
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:terra':
## 
##     intersect, union
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)
## 
## Attaching package: 'knitr'
## The following object is masked from 'package:terra':
## 
##     spin
library(raster)
## 
## Attaching package: 'raster'
## The following object is masked from 'package:dplyr':
## 
##     select

Estas librerías permiten: Leer y transformar datos espaciales,Calcular interpolaciones como IDW y Kriging y Visualizar los resultados tanto en mapas estáticos (ggplot2) como interactivos (leaflet).

En esta sección, se utiliza la librería curl para gestionar conexiones HTTP/HTTPS seguras al descargar o acceder a datos desde servidores externos.

library(curl)
## Using libcurl 8.3.0 with Schannel

Carga el paquete curl, que permite manejar solicitudes web, útil especialmente para acceder a datos desde plataformas como SoilGrids, REST APIs o servidores remotos.

h <- new_handle()
handle_setopt(h, http_version = 2)

new_handle() crea un nuevo “manejador” de conexión.

handle_setopt() configura este manejador para usar la versión 2 del protocolo HTTP, asegurando mayor compatibilidad y eficiencia al conectarse a servidores modernos.

Leer los datos de entrada

En esta sección se prepara y transforma la capa de Carbono Orgánico del Suelo (SOC) descargada de SoilGrids, necesaria para aplicar los métodos de interpolación.

Cargar el archivo raster SOC: Este código carga un archivo raster llamado soc_igh_15_30.tif que representa los valores de carbono orgánico (SOC) a una profundidad de 15-30 cm. Se utiliza rast() del paquete terra para convertir el archivo en un objeto de tipo SpatRaster.

archivo <- ("soc_igh_15_30.tif")
(soc <- rast(archivo))
## class       : SpatRaster 
## dimensions  : 904, 1490, 1  (nrow, ncol, nlyr)
## resolution  : 250, 250  (x, y)
## extent      : -8592750, -8220250, -62500, 163500  (xmin, xmax, ymin, ymax)
## coord. ref. : Interrupted_Goode_Homolosine 
## source      : soc_igh_15_30.tif 
## name        : soc_igh_15_30

Convertir los valores a porcentaje: El archivo original tiene los valores de SOC multiplicados por 10 (escala de SoilGrids). Esta línea normaliza los datos para obtener el porcentaje real de carbono orgánico en el suelo

soc.perc <-  soc/10

Proyección a un sistema de coordenadas conocido (WGS84): Transforma la proyección del raster SOC al sistema de referencia WGS84, usado globalmente para coordenadas geográficas (latitud y longitud).Esto es fundamental para que los mapas sean compatibles con otros datos geoespaciales y se puedan visualizar correctamente en herramientas como leaflet.

geog ="+proj=longlat +datum=WGS84"
(geog.soc = project(soc.perc, geog))
## class       : SpatRaster 
## dimensions  : 906, 1497, 1  (nrow, ncol, nlyr)
## resolution  : 0.002241786, 0.002241786  (x, y)
## extent      : -77.19081, -73.83486, -0.5623125, 1.468745  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
## source(s)   : memory
## name        : soc_igh_15_30 
## min value   :       8.86789 
## max value   :     199.42097

En este código se realizó la conversión del objeto raster (de clase SpatRaster) a un objeto de clase stars, usando la función st_as_stars(). Esta conversión es necesaria para poder visualizar el raster en un mapa interactivo utilizando la librería leaflet.

stars.soc = st_as_stars(geog.soc)
names(stars.soc) <- "SOC" 

El mapa generado muestra la distribución espacial del carbono orgánico del suelo (SOC) en forma porcentual, específicamente para el departamento del Putumayo, Colombia. La gradación de colores representa diferentes concentraciones de SOC: Verdes y azules indican zonas con mayor contenido de carbono. Amarillos y naranjas indican valores más bajos.

m <- leaflet() %>%
  addTiles() %>%  
  leafem:::addGeoRaster(
      stars.soc,
      opacity = 0.8,                
      colorOptions = colorOptions(palette = c("orange", "yellow", "cyan", "green"), 
                                  domain = 8:130)
    ) 
#
m  # Print the map

Muestreo del mundo

En esta sección se realiza un muestreo aleatorio de 500 puntos dentro de la capa raster ya transformada a coordenadas geográficas (WGS84). Este paso simula la recolección de datos reales de campo, distribuidos aleatoriamente en el territorio analizado. set.seed(123456): fija la semilla aleatoria para asegurar que los resultados del muestreo sean reproducibles.

spatSample(geog.soc, 500, “random”, as.points=TRUE): genera 500 puntos aleatorios sobre el raster geog.soc, retornando sus coordenadas como un objeto SpatVector de geometría tipo puntos.

Este muestreo es fundamental para aplicar métodos de interpolación espacial en pasos posteriores, como IDW o Kriging, ya que permite predecir valores continuos del suelo a partir de un número limitado de observaciones puntuales.

set.seed(123456)

# Random sampling of 500 points
(samples <- spatSample(geog.soc, 500, "random", as.points=TRUE))
##  class       : SpatVector 
##  geometry    : points 
##  dimensions  : 500, 1  (geometries, attributes)
##  extent      : -77.18521, -73.8427, -0.5522245, 1.465383  (xmin, xmax, ymin, ymax)
##  coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
##  names       : soc_igh_15_30
##  type        :         <num>
##  values      :         25.29
##                        46.14
##                         35.2

Después de obtener los 500 puntos de muestreo aleatorio, esta parte del código convierte ese objeto en un formato más adecuado para análisis espaciales: el formato sf (Simple Features), ampliamente utilizado en R para manejar datos espaciales vectoriales.

Esta línea convierte el objeto SpatVector en un objeto sf, que es más compatible con operaciones de geoprocesamiento y visualización avanzada en R.

(muestras <- sf::st_as_sf(samples))

Aquí se eliminan los valores faltantes (NA) en los datos. Esto asegura que solo los puntos con información válida de carbono orgánico (SOC) sean utilizados en análisis posteriores (como la interpolación).

nmuestras <- na.omit(muestras)

Esta conversión y limpieza permiten trabajar de forma óptima con paquetes como ggplot2, leaflet, gstat o spdep para modelar, interpolar o visualizar información espacial en pasos siguientes.

Esta sección del código organiza la información geográfica y del contenido de carbono orgánico del suelo (SOC) en una tabla estructurada (data.frame) para futuras tareas de modelado, interpolación o exportación.

En este código se extraen las coordenadas geográficas (longitud y latitud) de los puntos de muestreo (sf_POINT) usando st_coordinates() y se obtiene la variable SOC (carbono orgánico del suelo) asociada a cada punto. Tambien, se genera una columna de ID únicos para identificar cada punto (de 1 a 500), ideal para trazabilidad o visualización.

longit <- st_coordinates(muestras)[,1]
latit <- st_coordinates(muestras)[,2]
soc <- muestras$soc_igh_15_30

id <- seq(1,500,1) 

Con este código se genera una columna de ID únicos para identificar cada punto (de 1 a 500), ideal para trazabilidad o visualización.

(sitios <- data.frame(id, longit, latit, soc))

Este data.frame permite pasar de un objeto espacial complejo a una tabla explícita, donde cada fila representa un punto de muestreo y su información asociada. Es un paso previo fundamental para interpolación, regresión o visualización geográfica.

Esta sección finaliza la preparación de los datos de muestreo eliminando valores faltantes (NA) y mostrando una vista preliminar del conjunto limpio. Con este código se eliminan las filas del data.frame sitios que contienen valores faltantes (NA) en alguna de sus columnas.Esto asegura que todos los puntos tengan coordenadas (longit, latit) y un valor válido de SOC (carbono orgánico del suelo), lo cual es esencial para análisis estadísticos o interpolaciones sin errores. Con Head se visualizan las primeras 6 filas del data.frame sitios, como una vista preliminar del conjunto limpio de datos.

sitios <- na.omit(sitios)
head(sitios)

Se diseñó un visor geográfico interactivo utilizando la librería leaflet en R, con el propósito de visualizar tanto los datos raster como los puntos de muestreo espacial del contenido de carbono en el suelo (SOC). El visor integra tres componentes principales: Capa base del mapa:¨ Se incorporó una capa de fondo mediante la función addTiles(), la cual proporciona el contexto geográfico general utilizando imágenes de OpenStreetMap.

Capa raster (stars.soc): Sobre el mapa base se superpuso un raster correspondiente a los valores de SOC. Esta capa fue visualizada mediante la función addGeoRaster(), aplicando una opacidad del 70 % (opacity = 0.7) para permitir la visibilidad del mapa base. Se definió una paleta de colores compuesta por los tonos naranja, amarillo, cian y verde, asignando un dominio de valores entre 8 y 130 para representar las variaciones del SOC de forma gradual.

Puntos de muestreo (sitios): Los puntos de muestreo obtenidos previamente mediante una selección aleatoria fueron incorporados al visor con addMarkers(), utilizando sus coordenadas geográficas (longitud y latitud) y asignando a cada uno un valor emergente (popup) con el contenido de carbono correspondiente. Para optimizar la visualización y evitar la sobrecarga visual, se utilizó la opción markerClusterOptions() que agrupa los puntos cercanos en clústeres representados por círculos con un número en su interior. Este número indica la cantidad de puntos contenidos en esa área agrupada.

m <- leaflet() %>%
  addTiles() %>%  
  leafem:::addGeoRaster(
      stars.soc,
      opacity = 0.7,                
      colorOptions = colorOptions(palette = c("orange", "yellow", "cyan", "green"), 
                                  domain = 8:130)
    ) %>%
  addMarkers(lng=sitios$longit,lat=sitios$latit, popup=sitios$soc, clusterOptions = markerClusterOptions())
m  # Print the map

Al interactuar con el visor, al hacer zoom sobre una región específica, los clústeres se desagregan progresivamente, revelando los puntos individuales y permitiendo un análisis espacial más detallado. Este tipo de visualización es especialmente útil para explorar la distribución geográfica de variables edáficas como el carbono del suelo, facilitando su interpretación espacial e identificación de patrones regionales.

Interpolación

CReación de un objeto

Para realizar una interpolación espacial en R, primero se debe crear un objeto de clase gstat, el cual reúne toda la información necesaria para aplicar modelos como IDW (Inverse Distance Weighting) o Kriging. Este objeto incluye:

La fórmula del modelo, que define la variable dependiente (por ejemplo, el contenido de carbono en el suelo) y las independientes (como las coordenadas espaciales).

Los datos de calibración, que corresponden a las muestras puntuales con sus valores medidos y ubicación geográfica.

El modelo de variograma, cuando se desea aplicar Kriging.

Dependiendo de los argumentos proporcionados, el objeto gstat interpreta qué tipo de interpolación se usará:Si no se especifica un modelo de variograma, se utiliza el método IDW. Si se incluye un modelo de variograma, se aplica Kriging Ordinario.

Interpolación IDW

En esta etapa, se realiza una interpolación espacial del carbono orgánico del suelo (SOC) utilizando el método IDW (ponderación inversa de la distancia). Para ello, se crea un objeto de clase gstat que contiene la fórmula del modelo y los datos de entrada (nmuestras), que ya fueron convertidos a simple feature.

soc_igh_15_30 ~ 1: Se indica que la variable dependiente es el contenido de carbono (SOC) y no se incluyen variables independientes, lo cual es característico del método IDW.

data = nmuestras: Se especifican los puntos de muestreo georreferenciados como fuente de datos para la interpolación.

g1 = gstat(formula = soc_igh_15_30 ~ 1, data = nmuestras)

En esta sección se crea una copia simplificada del raster geog.soc, la cual se agrupa por un factor de 4 usando la función aggregate(). rrr es un objeto de clase SpatRaster con menor resolución espacial que el original (geog.soc). Sus valores representan un promedio de celdas vecinas (agrupadas de 4 en 4). Sirve como raster base para asignar nuevos valores o preparar una grilla de interpolación.

# a simple copy
rrr = aggregate(geog.soc, 4)
rrr
## class       : SpatRaster 
## dimensions  : 227, 375, 1  (nrow, ncol, nlyr)
## resolution  : 0.008967144, 0.008967144  (x, y)
## extent      : -77.19081, -73.82813, -0.5667961, 1.468745  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
## source(s)   : memory
## name        : soc_igh_15_30 
## min value   :      9.818252 
## max value   :    188.486915

Este comando sobrescribe todos los valores de las celdas del raster y los establece en 1, lo que transforma rrr en una grilla uniforme, útil para procesos como la predicción espacial (predict()), ya que especifica todas las ubicaciones donde queremos estimar valores.

values(rrr) <-1

Este paso renombra la única capa del raster rrr para facilitar su identificación y seguimiento durante el análisis posterior (por ejemplo, cuando se utilice como entrada en modelos de predicción espacial).

names(rrr) <- "valor"

Después de estos pasos, rrr: Sigue siendo un SpatRaster con las mismas dimensiones (278 x 247).Tiene valores iguales a 1 en todas sus celdas (values(rrr)). Ha sido renombrado con la etiqueta “valor”, en lugar de soc_igh_15_30.

Esto lo convierte en una malla raster uniforme, lista para ser utilizada como plantilla en la predicción por IDW (o Kriging), donde cada celda representará un punto de predicción.

rrr
## class       : SpatRaster 
## dimensions  : 227, 375, 1  (nrow, ncol, nlyr)
## resolution  : 0.008967144, 0.008967144  (x, y)
## extent      : -77.19081, -73.82813, -0.5667961, 1.468745  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
## source(s)   : memory
## name        : valor 
## min value   :     1 
## max value   :     1
stars.rrr = st_as_stars(rrr)

Aquí se aplica el modelo de interpolación definido previamente (g1, creado con la función gstat) sobre la grilla raster stars.rrr. Esta predicción usa el método de ponderación por distancia inversa (IDW), el cual asigna más peso a los puntos de muestra cercanos al lugar donde se quiere estimar.

z1 = predict(g1, stars.rrr)
## [inverse distance weighted interpolation]

z1 es un objeto de clase stars que contiene el resultado de la interpolación. Es un raster con dos atributos principales:

var1.pred: los valores interpolados del contenido de carbono orgánico del suelo (SOC).

var1.var: la varianza asociada a las predicciones.

z1
## stars object with 2 dimensions and 2 attributes
## attribute(s):
##                Min.  1st Qu. Median     Mean  3rd Qu.     Max.  NA's
## var1.pred  10.35681 29.33534 37.435 38.13204 43.81577 139.2682     0
## var1.var         NA       NA     NA      NaN       NA       NA 85125
## dimension(s):
##   from  to offset     delta                       refsys x/y
## x    1 375 -77.19  0.008967 +proj=longlat +datum=WGS8... [x]
## y    1 227  1.469 -0.008967 +proj=longlat +datum=WGS8... [y]

En este bloque de código se realiza la visualización del mapa interpolado del contenido de carbono orgánico del suelo (SOC), utilizando el método de interpolación por distancia inversa (IDW). Para ello: Se selecciona el atributo interpolado var1.pred del objeto z1 y se le cambia el nombre a “soc” para facilitar su identificación.

z1 = z1["var1.pred",,]
names(z1) = "soc"

Se define una paleta de colores personalizada (naranja, amarillo, cian y verde), asignando un dominio de valores de 10 a 100, para representar las concentraciones de SOC en el mapa.

paleta <- colorNumeric(palette = c("orange", "yellow", "cyan", "green"), domain = 10:100, na.color = "transparent")

Se genera un mapa interactivo con leaflet(), donde se:

Añade un fondo base con addTiles(). -Superpone el ráster interpolado (z1) con addGeoRaster(), ajustando la opacidad. -Se añaden puntos de muestreo (addMarkers) con información emergente (popup). -Se agrupan los puntos cercanos con markerClusterOptions(). -Se añade una leyenda que indica el significado de los colores del ráster.

m <- leaflet() %>%
  addTiles() %>%  
  leafem:::addGeoRaster(
      z1,
      opacity = 0.7,                
      colorOptions = colorOptions(palette = c("orange", "yellow", "cyan", "green"), 
                                  domain = 11:55)
    ) %>%
  addMarkers(lng=sitios$longit,lat=sitios$latit, popup=sitios$soc, clusterOptions = markerClusterOptions()) %>%
    addLegend("bottomright", pal=paleta, values= z1$soc,
    title = "IDW SOC interpolation [%]"
    )
## Warning in pal(c(r[1], cuts, r[2])): Some values were outside the color scale
## and will be treated as NA
m  # Print the map

Se genera un mapa interactivo donde se visualiza la interpolación de SOC. Al acercar o alejar el mapa, se agrupan o desagrupan los puntos de muestreo. La leyenda en la parte inferior derecha muestra los valores de SOC en porcentaje, representados por colores del gradiente definido.

Interpolación OK

El objetivo aquí es interpolar los valores de SOC (Carbono Orgánico del Suelo) usando kriging ordinario (OK). Para ello se necesita primero calcular un modelo de variograma, el cual permite cuantificar la autocorrelación espacial de los datos es decir, cómo se relacionan los valores entre puntos cercanos y lejanos.

Esta línea crea el variograma empírico, que: Usa como variable dependiente soc_igh_15_30 (contenido de SOC entre 15-30 cm de profundidad); el ~ 1 indica que no se están utilizando covariables (es un modelo simple); data = nmuestras: indica que los puntos con datos están en el objeto nmuestras.

v_emp_ok = variogram(soc_igh_15_30 ~ 1, data=nmuestras)
plot(v_emp_ok)

Se observa que al comienzo, los puntos cercanos tienen baja semivarianza, lo que sugiere que están correlacionados, A medida que la distancia aumenta, la semivarianza también aumenta (los puntos más lejanos tienen diferencias mayores en SOC).Luego la curva tiende a estabilizarse: esto indica un rango más allá del cual los puntos ya no están correlacionados.

En este bloque se utiliza la función autofitVariogram() del paquete automap para ajustar automáticamente un modelo teórico de variograma al variograma empírico previamente calculado. Se convierte el objeto sf a tipo “Spatial” porque esta función no trabaja directamente con objetos sf. El modelo ajustado representa la estructura espacial de la variable soc_igh_15_30.

Luego, con plot(v_mod_ok) se visualiza el modelo ajustado sobre el variograma empírico.

v_mod_ok = autofitVariogram(soc_igh_15_30 ~ 1, as(nmuestras, "Spatial"))
plot(v_mod_ok)

El gráfico muestra el variograma empírico y el modelo ajustado . Este gráfico permite observar cómo la semivarianza se comporta con respecto a la distancia, y el modelo estimado se usará en la interpolación Kriging para predecir valores en ubicaciones no muestreadas.

Selección del modelo de variograma

kable(v_mod_ok$var_model)
model psill range kappa ang1 ang2 ang3 anis1 anis2
Nug 2.008687 0.00000 0.0 0 0 0 1 1
Ste 332.831675 34.90607 0.3 0 0 0 1 1

Interpolación usando Kriging Ordinario (OK) gstat(): genera el modelo de Kriging usando los parámetros del variograma. predict(): realiza la predicción espacial del contenido de carbono orgánico del suelo (SOC) usando el modelo OK sobre un raster.

## [using ordinary kriging]
g2 = gstat(formula = soc_igh_15_30 ~ 1, model = v_mod_ok$var_model, data = nmuestras)
z2= predict(g2, stars.rrr)
## [using ordinary kriging]

Renombrar la capa predicha Se extrae la variable predicha y se renombra como “soc” para facilidad de lectura.

z2 = z2["var1.pred",,]
names(z2) = "soc"

Visualización con leaflet() Crea un mapa interactivo. Colorea el raster interpolado de SOC. Agrega marcadores en los puntos de muestreo. Incluye una leyenda con los valores interpolados (en [%]).

m <- leaflet() %>%
  addTiles() %>%  
  leafem:::addGeoRaster(
      z2,
      opacity = 0.7,                
      colorOptions = colorOptions(palette = c("orange", "yellow", "cyan", "green"), 
                                  domain = 11:55)
    ) %>%
  addMarkers(lng=sitios$longit,lat=sitios$latit, popup=sitios$soc, clusterOptions = markerClusterOptions()) %>%
    addLegend("bottomright", pal = paleta, values= z2$soc,
    title = "OK SOC interpolation [%]"
    )
## Warning in pal(c(r[1], cuts, r[2])): Some values were outside the color scale
## and will be treated as NA
m  # Print the map

Evaluación de resultados

Evaluación cualitativa

Este bloque de código permite comparar visualmente tres capas diferentes de interpolación sobre el mismo mapa interactivo utilizando leaflet: Define una paleta de colores para representar los valores de carbono orgánico del suelo (SOC).Los colores van del naranja (bajo) al verde (alto).Los valores fuera del dominio 10:100 se muestran como transparentes.

colores <- colorOptions(palette = c("orange", "yellow", "cyan", "green"), domain = 10:100, na.color = "transparent")

El mapa generado permite comparar fácilmente cómo cada método (IDW y Kriging Ordinario) se aproxima a los valores reales (stars.soc) de carbono orgánico en el suelo. Esto ayuda a evaluar visualmente qué interpolación se ajusta mejor a la distribución espacial observada.

m <- leaflet() %>%
  addTiles() %>%  
  addGeoRaster(stars.soc, opacity = 0.8, colorOptions = colores, group="RealWorld") %>%
  addGeoRaster(z1, colorOptions = colores, opacity = 0.8, group= "IDW")  %>%
  addGeoRaster(z2, colorOptions = colores, opacity = 0.8, group= "OK")  %>%
  # Add layers controls
  addLayersControl(
    overlayGroups = c("RealWorld", "IDW", "OK"),
    options = layersControlOptions(collapsed = FALSE)
  ) %>% 
    addLegend("bottomright", pal = paleta, values= z1$soc,
    title = "Soil organic carbon [%]"
)
## Warning in pal(c(r[1], cuts, r[2])): Some values were outside the color scale
## and will be treated as NA
m  # Print the map

Validación cruzada

Después de aplicar dos métodos de interpolación (IDW e Kriging Ordinario), es importante evaluar cuál de ellos produce resultados más precisos. Para esto, se aplica una técnica estadística llamada Leave-One-Out Cross Validation (LOOCV).

Aquí se ejecuta la función gstat.cv() sobre el objeto g1, que representa el modelo IDW.El resultado (cv1) contiene los valores observados, predichos y otros atributos útiles para el análisis.Se usa na.omit() para eliminar filas con valores faltantes.

### run the following code from the console -- line-by-line
cv1 = gstat.cv(g1)
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
## [inverse distance weighted interpolation]
#cv2 = gstat.cv(g2)
head(cv1)
names(cv1)
## [1] "var1.pred" "var1.var"  "observed"  "residual"  "zscore"    "fold"
str(cv1)
## Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
##   ..@ data       :'data.frame':  492 obs. of  6 variables:
##   .. ..$ var1.pred: num [1:492] 25.8 46.8 38 43.7 40.9 ...
##   .. ..$ var1.var : num [1:492] NA NA NA NA NA NA NA NA NA NA ...
##   .. ..$ observed : num [1:492] 25.3 46.1 35.2 33.1 40.4 ...
##   .. ..$ residual : num [1:492] -0.521 -0.619 -2.839 -10.658 -0.513 ...
##   .. ..$ zscore   : num [1:492] NA NA NA NA NA NA NA NA NA NA ...
##   .. ..$ fold     : int [1:492] 1 2 3 4 5 6 7 8 9 10 ...
##   ..@ coords.nrs : num(0) 
##   ..@ coords     : num [1:492, 1:2] -75.5 -76.5 -75.8 -76.2 -75.6 ...
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : NULL
##   .. .. ..$ : chr [1:2] "coords.x1" "coords.x2"
##   ..@ bbox       : num [1:2, 1:2] -77.185 -0.552 -73.843 1.465
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : chr [1:2] "coords.x1" "coords.x2"
##   .. .. ..$ : chr [1:2] "min" "max"
##   ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
##   .. .. ..@ projargs: chr "+proj=longlat +datum=WGS84 +no_defs"
##   .. .. ..$ comment: chr "GEOGCRS[\"unknown\",\n    DATUM[\"World Geodetic System 1984\",\n        ELLIPSOID[\"WGS 84\",6378137,298.25722"| __truncated__
cv1 = na.omit(cv1)
cv1
## class       : SpatialPointsDataFrame 
## features    : 492 
## extent      : -77.18521, -73.8427, -0.5522245, 1.465383  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 6
## names       :        var1.pred, var1.var,         observed,          residual, zscore, fold 
## min values  : 12.0124979400664,       NA, 10.2763442993164, -28.8987060198214,     NA,    1 
## max values  : 91.3115034546246,       NA, 140.856628417969,  73.2114722332331,     NA,  492
cv1 = st_as_sf(cv1)
sp::bubble(as(cv1[, "residual"], "Spatial"))

# This is the RMSE value for the IDW interpolation
sqrt(sum((cv1$var1.pred - cv1$observed)^2) / nrow(cv1))
## [1] 13.08125
cv2 = gstat.cv(g2)
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
## [using ordinary kriging]
cv2 = st_as_sf(cv2)
sqrt(sum((cv2$var1.pred - cv2$observed)^2) / nrow(cv2))
## [1] 12.218

Referencias

Lizarazo, I., 2023. Spatial interpolation of soil organic carbon. Available at https://rpubs.com/ials2un/soc_interp.

sessionInfo()
## R version 4.3.3 (2024-02-29 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 26100)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8  LC_CTYPE=Spanish_Colombia.utf8   
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C                     
## [5] LC_TIME=Spanish_Colombia.utf8    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] curl_5.2.1     raster_3.6-32  knitr_1.45     dplyr_1.1.4    ggplot2_3.5.0 
##  [6] leafem_0.2.4   leaflet_2.2.2  automap_1.1-20 gstat_2.1-3    stars_0.6-8   
## [11] abind_1.4-5    sf_1.0-20      terra_1.8-29   sp_2.2-0      
## 
## loaded via a namespace (and not attached):
##  [1] gtable_0.3.4       xfun_0.42          bslib_0.6.1        htmlwidgets_1.6.4 
##  [5] lattice_0.22-6     vctrs_0.6.5        tools_4.3.3        crosstalk_1.2.1   
##  [9] generics_0.1.3     parallel_4.3.3     tibble_3.2.1       proxy_0.4-27      
## [13] spacetime_1.3-3    fansi_1.0.6        highr_0.10         xts_0.13.2        
## [17] pkgconfig_2.0.3    KernSmooth_2.23-22 lifecycle_1.0.4    farver_2.1.1      
## [21] compiler_4.3.3     FNN_1.1.4.1        munsell_0.5.0      codetools_0.2-19  
## [25] htmltools_0.5.7    class_7.3-22       sass_0.4.8         yaml_2.3.8        
## [29] pillar_1.9.0       jquerylib_0.1.4    ellipsis_0.3.2     classInt_0.4-11   
## [33] cachem_1.1.0       tidyselect_1.2.1   digest_0.6.34      fastmap_1.2.0     
## [37] grid_4.3.3         colorspace_2.1-0   cli_3.6.2          magrittr_2.0.3    
## [41] base64enc_0.1-3    utf8_1.2.4         e1071_1.7-16       withr_3.0.0       
## [45] scales_1.3.0       rmarkdown_2.25     zoo_1.8-12         png_0.1-8         
## [49] evaluate_0.23      rlang_1.1.3        Rcpp_1.0.12        glue_1.7.0        
## [53] DBI_1.2.3          rstudioapi_0.17.1  reshape_0.8.10     jsonlite_1.8.8    
## [57] R6_2.5.1           plyr_1.8.9         intervals_0.15.5   units_0.8-7