1 Introducción

El aguacate, conocido científicamente como Persea americana Mill, es un fruto altamente apreciado tanto por su sabor como por sus beneficios nutricionales. Originario de regiones cálidas y templadas de América Central y del Sur, este cultivo ha ganado popularidad en todo el mundo, convirtiéndose en un componente esencial de diversas dietas y gastronomías. Sin embargo, para lograr un crecimiento óptimo y una producción abundante, es fundamental comprender las condiciones climáticas que favorecen su desarrollo.

Una de las variables más críticas en el cultivo del aguacate es la temperatura. Este factor influye no solo en el crecimiento de la planta, sino también en la calidad y cantidad de frutos producidos. En general, el aguacate prospera en un rango de temperaturas que oscila entre los 20 °C y 30 °C (Lahav and Trochoulias 1982), aunque existen matices importantes que deben considerarse para cada etapa del ciclo de vida de la planta (Grüter et al. 2022). Conocer estas condiciones óptimas permite a los agricultores y cultivadores maximizar su rendimiento y garantizar una cosecha exitosa. En este contexto, exploraremos las temperaturas y su distribución espacial dentro de un cultivo de aguacate en el apartamento del Cauca, Colombia.

2 Problema

El objetivo de este estudio es analizar la temperatura medida en una finca donde se cultiva el aguacate y modelar esta temperatura en una superficie de respuesta.

3 Análisis Exploratorio de Datos

El conjunto de datos representa las variables ambientales asociadas a un cultivo de aguacate. Este posee un total de 20271 registros y 21 variables que van desde la fecha de toma de los datos, hasta la posición geográfica representada en la latitud y la longitud. Para el presente análisis solo se tomaron los datos del día 1 de octubre de 2020, el cuál representa un total de 534 arboles (Figura 1).

require(sp)
require(ggmap)
require(leaflet)
data_geo<-data_total[,c(3,2,9)]

coordinates(data_geo)<-~Longitude+Latitude


leaflet()  %>% 
  addTiles('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}')%>%
   addCircleMarkers(lng = data_geo$Longitude,
                    lat = data_geo$Latitude,
                    radius = 0.9,
                    color = "red",
                    popup = paste0(
  "<i>Temperatura:</i> ", data_geo$Temperature
)
                    )

Figura 1. Distribución de los árboles de donde se obtuvieron los datos de temperatura.

3.1 Estadísticas descriptivas de la temperatura

Los datos de temperatura tomados en los árboles de aguacate no presentaron una distribución normal (shapiro W = 0.98348, p < 0.01) (Figura 2). Esta distribución presentó un asimetría positiva (sesgo: 0.161) con una forma platicúrtica (curtósis: 2.31) (Figura 3).

library(ggplot2)
require(plotly)


# Datos: Suponiendo que `data_total$Temperature` es la variable a evaluar
qqplot<-ggplot2::ggplot(data = data_total, aes(sample = Temperature)) +
  stat_qq() +  # Q-Q plot
  stat_qq_line(color = "red", linetype = "dashed") +  # Línea teórica de normalidad
  labs(
    title = "Prueba gráfica de normalidad (Q-Q plot)",
    x = "Cuantiles teóricos",
    y = "Cuantiles muestrales"
  ) +
  theme_bw()

plotly::ggplotly(qqplot)

Figura 2. Gráfica de cuantil-cuantil (Q-Q Plot) para los datos de temperatura tomados en el cultivo de aguacate.

Debido a que los datos de temperatura no se ajustaron a una distribución Gaussiana, la medida de tendencia central usada para describir el conjunto de datos fue la mediana con un valor de 25.80 °C, un valor mínimo de 22.20 °C, un máximo de 29.70 °C y un rango intercuartílico de 2.675 °C (Figura 3).

require(plotly)

temperatura<-ggplot(data = data_total, 
                    aes(y = Temperature, x = "")) +
  geom_boxplot() +
  geom_jitter(width = 0.2, 
              aes(x = "", y = Temperature), 
              color="blue")+
  labs(y="°C",
       x="")+
  coord_flip()+
  theme_classic()+
  theme(
    axis.title.x = element_blank(), 
    axis.text.x = element_blank(),  
    axis.ticks.x = element_blank()  
  )

temp_histograma<-ggplot(data = data_total, aes(x = Temperature)) +
  geom_histogram(color="blue", fill="lightgrey") +    
  labs(y="Frecuencia",
       x="Temperatura (°C)")+
  theme_classic()

# Convertir gráficos a plotly
p1 <- ggplotly(temperatura)
p2 <- ggplotly(temp_histograma)

# Combinar gráficos usando subplot
subplot(p1, p2, nrows = 2, shareX = TRUE, shareY = FALSE)

Figura 3. Diagrama de cajas e histograma de frecuencias de la temperatura medida en cada uno de los árboles de aguacate.

Especialmente, no se observó que la temperatura fuera homogénea en todos los árboles y se encontró que hacia el suroeste y este del área se presentaron las mayores temperaturas con valores que rondaron los 28 y 29 °C. Las menores temperaturas se presentaron en una franja en dirección noreste suroeste con temperaturas entre los 22 y los 24 °C (Figura 4).

library(geoR)
library(ggplot2)
library(sf)
data_geo2<-data_total[,c(3,2,9)]
d <- st_as_sf(data_geo2,
coords = c("Longitude", "Latitude"))
mapa<-ggplot(d) + geom_sf(aes(color = Temperature), size = 2) +
scale_color_gradient(low = "#ffffcc", high = "#e31a1c") +
theme_bw()
ggplotly(mapa)

Figura 4. Distribución de los valores de temperatura en el sitio de siembra de los árboles de aguacate.

Al observar si existió alguna tendencia entre la latitud y la longitud con la temperatura, no se observó claramente un patrón dependiente entre estas coordenadas y la temperatura. Tampoco se observó un patrón concentrico de la distribución de la temperatura donde las temperaturas más altas estuvieran en los bordes y las temperaturas más bajas estuvieran en el centro (Figura 6).

require(geoR)
geodata_temp=as.geodata(data_total,coords.col = c(3,2),data.col = 9)
plot(geodata_temp)

Figura 5. Gráficos de relación entre la posición geográfica y el valor de temperatura en el área de siembra de los árboles de aguacate.

4 Autocorrelación Espacial

4.1 Autocorrelación global

Al evaluar la global con el índice de Moran, se encontró que existe una correlación positiva espacial pero muy débil (I = 0.039 p < 0.001) para la temperatura en esta área (Figura 6).

library(spdep)
coords <- coordinates(data_geo)
nb <- dnearneigh(coords,0, 9.178e-04, longlat = FALSE) 
nbw <- nb2listw(nb, style = "W")
gmoran <- moran.test(data_geo$Temperature, nbw, alternative = "greater")
gmoran
## 
##  Moran I test under randomisation
## 
## data:  data_geo$Temperature  
## weights: nbw    
## 
## Moran I statistic standard deviate = 26.351, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##      3.920187e-02     -1.876173e-03      2.430113e-06

La prueba de Monte-Carlo demuestra que esta correlación se conserva con aproximadamente 1000 simulaciones y sigue siendo una correlación significativa pero muy débil (Figura 6).

gmoranMC <- moran.mc(data_geo$Temperature, nbw, nsim = 999)
gmoranMC
## 
##  Monte-Carlo simulation of Moran I
## 
## data:  data_geo$Temperature 
## weights: nbw  
## number of simulations + 1: 1000 
## 
## statistic = 0.039202, observed rank = 1000, p-value = 0.001
## alternative hypothesis: greater
hist(gmoranMC$res,
     xlab="I de Moran")
abline(v = gmoranMC$statistic, col = "red")

Figura 6. Distribución de valores simulados de Moran’s I bajo permutaciones y comparación con el valor observado.

El gráfico de dispersión de Moran (Moran Scatterplot) muestra la relación entre las temperaturas locales y el promedio de las temperaturas en ubicaciones vecinas, evidenciando una ligera autocorrelación espacial positiva, ya que la pendiente de la línea de regresión es positiva. Esto indica que las ubicaciones con temperaturas altas tienden a estar rodeadas de otras con temperaturas altas, y lo mismo ocurre con las temperaturas bajas. Los cuadrantes resaltan diferentes relaciones espaciales, como agrupaciones de valores altos (High-High) o bajos (Low-Low), mientras que las etiquetas destacan ubicaciones atípicas que podrían influir significativamente en el análisis. Aunque existe una relación espacial, la dispersión de los puntos sugiere que no es particularmente fuerte.

library(spdep)
moran.plot(data_geo$Temperature, nbw,
            
     xlab = "Temperatura", 
     ylab = "Temperatura con rezago espacial", 
     pch = 19, col = "blue")

Figura 7. Relación entre temperaturas locales y temperaturas espacialmente rezagadas: Moran Scatterplot.

4.2 Autocorrelación local

El análisis de la distribución espacial del I local de Moran, un indicador de autocorrelación espacial local que evalúa la relación entre el valor de una variable en un punto y los valores en sus vecinos cercanos. El I local de Moran revela que la variable analizada presenta patrones de agrupamiento espacial positivo en algunas zonas, lo que sugiere la existencia de regiones con valores homogéneos (e.g., áreas donde las temperaturas son consistentemente altas o bajas). Sin embargo, también hubo áreas con menor correlación espacial, donde los valores no tienen una relación fuerte con sus vecinos. Este análisis permite identificar regiones críticas para análisis más detallados, como “hotspots” (valores altos rodeados de altos) o “coldspots” (valores bajos rodeados de bajos) (Figura 8A).

El análisis de la significancia, representa la distribución espacial de los valores p asociados al análisis del I local de Moran, lo que permite evaluar la significancia estadística de la autocorrelación espacial en cada punto de la región de interés (Figura 8B). La significancia estadística (valores p bajos) parece no estar concentrada en una sola área específica, sino que está dispersa en diferentes partes de la región, lo que podría implicar la existencia de múltiples clusters espaciales en el área de análisis. La figura 8B destaca las zonas donde la autocorrelación espacial es significativa y muestra una distribución espacial variada de estos puntos. Las áreas con valores p bajos (rojo oscuro) son de interés particular, ya que representan lugares donde los valores de la variable están agrupados espacialmente de forma significativa, ya sea en forma de “hotspots” (valores altos rodeados de altos).

lmoran <- localmoran(data_geo$Temperature, nbw, alternative = "greater")




data_geo$lmI <- lmoran[, "Ii"] # local Moran's I
data_geo$lmZ <- lmoran[, "Z.Ii"] # z-scores
# p-values corresponding to alternative greater
data_geo$lmp <- lmoran[, "Pr(z > E(Ii))"]

d <- st_as_sf(data_geo,
coords = c("Longitude", "Latitude"))

  theme(legend.position = "bottom")
## List of 1
##  $ legend.position: chr "bottom"
##  - attr(*, "class")= chr [1:2] "theme" "gg"
##  - attr(*, "complete")= logi FALSE
##  - attr(*, "validate")= logi TRUE
p2 <- ggplot(d) + geom_sf(aes(color = lmI), size = 2) +
scale_color_gradient(low = "#f7fcf5", high = "#00441b") +
  labs(x="Longitud",
       y="Latitud",
       title = "A. I local de Moran")+
   theme_bw() +
  theme(legend.position = "bottom")

p4 <- ggplot(d) + 
  geom_sf(aes(color = lmp), size = 2) +
  scale_color_gradientn(
    colors = c("#d94801", "#fff5eb"),  # Colores para el gradiente
    values = c(0, 0.05, 1),           # Puntos para el gradiente
    breaks = c(0, 0.05, 1),           # Valores a etiquetar
    labels = c("0", "0.05", "1")      # Etiquetas
  ) +
  labs(x = "Longitud",
       y = "Latitud",
       title = "B. P-valor",
       color = "P-valor") +
  theme_bw() +
  theme(legend.position = "bottom")
  


ggplotly(p2)
ggplotly(p4)

Figura 8. A. Gráfico de I local de Moran y su distribución espacial. B. Gráfico de los valores de significancia estadística de la prueba de Ilocal de Moran.

El gráfico del variograma permite analizar la estructura espacial hallada con el análisis de autocorrelación espacial. En la figura 9 se puede observar que la semivarianza crece rápidamente desde distancias pequeñas, lo que indica una fuerte correlación espacial entre puntos cercanos tal como se observó en la figura 8A. A partir de una distancia cercana a 40-60 metros, la semivarianza comienza a estabilizarse, lo que sugiere que los puntos separados por esta distancia ya no están correlacionados. Esto se conoce como la distancia de alcance, que define el límite de la correlación espacial. A partir de este gráfico se puede concluir que existe una correlación espacial positiva significativa a distancias pequeñas, lo que sugiere que puntos cercanos tienen valores similares para la variable analizada (Figura 9).

library(geoR)

options(scipens = 9999)
suppressMessages({
  suppressWarnings({
    variograma <- geoR::variog(geodata_temp, option = "bin", uvec = seq(0, 0.001, length.out = 100 ))
    variograma_mc <- geoR::variog.mc.env(geodata_temp, obj = variograma)
  })
})
## variog: computing omnidirectional variogram
## variog.env: generating 99 simulations by permutating data values
## variog.env: computing the empirical variogram for the 99 simulations
## variog.env: computing the envelops
# Escala de distancia en metros (asumiendo un factor de conversión)
factor_conversion <- 100000  # Cambia la escala a metros 
variograma$u <- variograma$u * factor_conversion
variograma_mc$u <- variograma_mc$u * factor_conversion


plot(variograma, 
     ylim = c(0, 5.5), 
     main = "Variograma y Envolvente Monte Carlo", 
     xlab = "Distancia (m)", 
     ylab = "Semivarianza", 
     pch = 19, col = "blue")


lines(variograma_mc, col = "red", lty = 2)


legend("topright", 
       legend = c("Variograma", "Envolvente Monte Carlo"), 
       col = c("blue", "red"), 
       lty = c(1, 2), 
       pch = c(19, NA),
       bty = "n")

Figura 9. Variograma y envolvente Monte-Carlo para evaluar la estructura espacial de la temperatura del cultivo de aguacates.

5 Ajustes de Modelos Teóricos

Al evaluar el ajuste de tres modelos teóricos: El exponencial, el Gaussiano y el esférico, el que presentó un menor valor de pérdida (loss value) fue el modelo exponencial con: 5125 (Figura 10).

ini.vals = expand.grid(seq(2,4,l=100), seq(0,0.001,l=100))
variograma <- geoR::variog(geodata_temp, option = "bin", uvec = seq(0,0.001, length.out = 100 ))
## variog: computing omnidirectional variogram
model_mco_exp=variofit(variograma, ini=ini.vals, cov.model="exponential")
## variofit: covariance model used is exponential 
## variofit: weights used: npairs 
## variofit: minimisation function used: optim 
## variofit: searching for best initial value ... selected values:
##               sigmasq phi   tausq kappa
## initial.value "3.21"  "0"   "0"   "0.5"
## status        "est"   "est" "est" "fix"
## loss value: 5125.88932340833
model_mco_gaus=variofit(variograma, ini=ini.vals, cov.model="gaussian")
## variofit: covariance model used is gaussian 
## variofit: weights used: npairs 
## variofit: minimisation function used: optim 
## variofit: searching for best initial value ... selected values:
##               sigmasq phi   tausq kappa
## initial.value "3.11"  "0"   "0"   "0.5"
## status        "est"   "est" "est" "fix"
## loss value: 8937.5226171696
model_mco_spe=variofit(variograma, ini=ini.vals, cov.model="spheric")
## variofit: covariance model used is spherical 
## variofit: weights used: npairs 
## variofit: minimisation function used: optim 
## variofit: searching for best initial value ... selected values:
##               sigmasq phi   tausq kappa
## initial.value "3.11"  "0"   "0"   "0.5"
## status        "est"   "est" "est" "fix"
## loss value: 8266.21748457415
plot(variograma, 
     ylim = c(0, 5.5), 
     main = "Variograma", 
     xlab = "Distancia (grados)", 
     ylab = "Semivarianza", 
     pch = 19, col = "blue")

lines(model_mco_exp,col="blue")
lines(model_mco_gaus,col="red")
lines(model_mco_spe,col="purple")

# Añadir una leyenda para identificar las líneas
legend("topright", 
       legend = c("Modelo exponencial", "Modelo gaussiano", "Modelo esférico"),
       col = c("blue", "red", "purple"),
       lty = c(1, 2, 3),
       lwd = 2,
       bty = "n")

Figura 10.Comparación del ajuste de modelos teóricos al variograma en el análisis de dependencia espacial de la temperatura en un cultivo de aguacate.

6 Predicciones Espaciales

6.1 Creación de la grilla

Se creó una grilla que representaba 0.001 grado de coordenadas, que en metros es aproximadamente 111 metros en terreno, esto generó aproximadamente 10000 puntos.

library(mapview)

geodatos_grid=expand.grid( lon=seq(max(geodata_temp$coords[,1]),min(geodata_temp$coords[,1]),l=100),lat=seq(max(geodata_temp$coords[,2]), min(geodata_temp$coords[,2]) ,l=100))


temperatura_geo<-st_as_sf(data_geo2, coords=c("Longitude", "Latitude"), crs = 4236)
grid_geo<-st_as_sf(geodatos_grid, coords=c("lon", "lat"), crs = 4236)

mapview(grid_geo,  map.types = "Esri.WorldImagery")+
mapview(temperatura_geo, zcol = "Temperature",  map.types = "Esri.WorldImagery")

6.2 kriging

El modelo que mejor se ajustó al variograma fue el exponencial y por lo tanto el kriging se creo a partir de este modelo (Figura 11).

library(raster)
library(metR)
geodatos_ko=geoR::krige.conv(
  geodata_temp,
  locations = geodatos_grid,                    
  krige = krige.control(
    obj.model = model_mco_exp       ##### Modelo de variograma ajustado exponencial
  )
)
## krige.conv: model with constant mean
## krige.conv: Kriging performed using global neighbourhood
coordenadas<-as.data.frame(geodatos_grid)
predicciones<-as.data.frame(geodatos_ko$predict)

datos_predicciones<-cbind(coordenadas,predicciones )
colnames(datos_predicciones)<-c("Longitud", "Latitud", "kriging")

raster_obj <- rasterFromXYZ(
  datos_predicciones[, c("Longitud", "Latitud", "kriging")],  
  crs = CRS("+init=epsg:4326") 
)

shape_data <- st_read("cultivo.shp")
## Reading layer `cultivo' from data source 
##   `C:\Users\user\OneDrive - PUJ Cali\02_Segundo_Semestre\Analisis_Geografico\Unidad_03\cultivo.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 1 feature and 1 field
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -76.71182 ymin: 2.392082 xmax: -76.71019 ymax: 2.393652
## Geodetic CRS:  WGS 84
raster_kriging<-mask(raster_obj, shape_data)

raster_df <- as.data.frame(raster_kriging, xy = TRUE, na.rm = TRUE)  
colnames(raster_df) <- c("Longitud", "Latitud", "kriging")  


raster_sqrt <- as.data.frame(raster_kriging, xy = TRUE, na.rm = TRUE)  
colnames(raster_sqrt) <- c("Longitud", "Latitud", "kriging")  

krig_plot<-ggplot() +
 geom_raster(data = raster_df, aes(x = Longitud, 
                                   y = Latitud, 
                                   fill = kriging)) + 
   geom_contour(data = raster_df, 
                aes(x = Longitud, 
                    y = Latitud, 
                    z = kriging), color = "white", size = 0.5) +
   geom_text_contour(data = raster_df, 
                     aes(x = Longitud, 
                         y = Latitud, 
                         z = kriging), 
                     color = "white", size = 3) +
  
  scale_fill_viridis_c(option = "turbo", name = "°C") +   
  labs(
    title = "Modelo kriging",
    x = "Longitud",
    y = "Latitud"
  ) +
  theme_bw()

ggplotly(krig_plot)

Figura 11. Modelo interpolado de la temperatura del cultivo de aguacates a través de la técnica del kriging.

La desviación estándar más alta registrada fue de 1.4 °C y la menor fue de aproximadamente 0.2 °C (Figura 12).

coordenadas<-as.data.frame(geodatos_grid)
varianza<-as.data.frame(geodatos_ko$krige.var)

datos_varianza<-cbind(coordenadas,varianza )
colnames(datos_varianza)<-c("Longitud", "Latitud", "varianza")

raster_varianza <- rasterFromXYZ(
  datos_varianza[, c("Longitud", "Latitud", "varianza")],  
  crs = CRS("+init=epsg:4326") 
)

raster_varianza<-mask(raster_varianza, shape_data)


raster_sqrt <- as.data.frame(raster_varianza, xy = TRUE, na.rm = TRUE)  
colnames(raster_sqrt) <- c("Longitud", "Latitud", "varianza")  
raster_sqrt=raster_sqrt%>%
            mutate(sqrt = sqrt(varianza))

raster_sqrt$sqrt<-round(raster_sqrt$sqrt, digits = 2 )

stdv<-ggplot() +
 geom_raster(data = raster_sqrt, aes(x = Longitud, 
                                   y = Latitud, 
                                   fill = sqrt)) + 
   geom_contour(data = raster_sqrt, 
                aes(x = Longitud, 
                    y = Latitud, 
                    z = sqrt), color = "white", size = 0.5) +
   geom_text_contour(data = raster_sqrt, 
                     aes(x = Longitud, 
                         y = Latitud, 
                         z = round(sqrt, digits = 1)), 
                     color = "white", size = 3) +
  
  scale_fill_viridis_c(option = "inferno", name = "StDv") +   
  labs(
    title = "Modelo kriging",
    x = "Longitud",
    y = "Latitud"
  ) +
  theme_bw()
ggplotly(stdv)

Figura 12. Representación espacial de las desviaciones estándar del modelo interpolado de la temperatura del cultivo de aguacates.

6.3 Validación

Al observar la distribución de frecuencias de los residuos se puede observar que estos son simetricos alrededor del cero, lo que indica que el modelo espacial tiene un buen desempeño (Figura 13).

# Calcular los residuos
residuos <- geodata_temp$data - geodatos_ko$predict

# Analizar los residuos
hist(residuos, main = "Histograma de residuos", xlab = "Residuos")

Figura 13. Validación del modelo de interpolación de la temperatura con el histograma de los residuos del kriging.

El resultado de la validación cruzada mostró que el Error Absoluto Medio (MAE) es de 0.78 °C, lo que no es muy alto dentro del contexto de la variación de temperatura para el cultivo de aguacates.

validacion_cruzada=geoR::xvalid(geodata = geodata_temp,model = model_mco_exp)
## xvalid: number of data locations       = 534
## xvalid: number of validation locations = 534
## xvalid: performing cross-validation at location ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 
## xvalid: end of cross-validation
# Resumen de resultados de validación cruzada
print(summary(validacion_cruzada))
##                 Min.    1st Qu.      Median         Mean   3rd Qu.     Max.
## errors     -3.710300 -0.6441365 0.008203303 -0.010888350 0.5927295 2.837920
## std.errors -3.612709 -0.6219462 0.008090389 -0.005272101 0.5838706 3.021408
##                  sd
## errors     1.016562
## std.errors 1.009709
MAE=mean(abs(validacion_cruzada$error))
MAE
## [1] 0.7880662

7 Conclusiones

La temperatura medida en el cultivo de aguacate presentó una distribución con una correlación espacial positiva global significativa pero muy débil (Figura 9) y una correlación local que se presentó en dos “clusters” una en el suroeste y otro en el noreste. El primer cluster presentó altas correlaciones (I >0.45) muy significativas (Figura 8), por esta razón las medida de correlación espacial global muchas veces no sirve para evaluar estructuras espaciales con distancias menores de relación.

El ajuste al modelo exponencial de correlación, nos indica que la temperatura en el cultivo de aguacates presenta una variación que cambia rápidamente en el espacio y a corta distancia. Estos resultados de la autocorrelación permitieron aplicar una técnica de interpolación espacial conocida como kriging (Moraga 2023).

Los resultados de esta técnica mostraron una superficie de interpolación basada en el modelo exponencial que refleja mucho mejor la distribución de la temperatura sobre el cultivo de aguacate. En esta superficie de respuesta se puede observar el comportamiento y la estructura espacial de la temperatura en el cultivo (Figura 11) mostrando que las mayores fuentes de calor se presentaron en la parte suroeste, este, y noroeste del cultivo.En general la desviación estándar espacial obtenida no fue muy alta (Figura 12) y la distribución de los residual del modelo presentaron una distribución de frecuencias simétrica, lo que indica un buen desempeño del modelo. El error absoluto medio no fue superior a 1 °C, lo cuál puede dar un indicio de una buena confiabilidad en el modelo espacial obtenido para describir el comportamiento de la temperatura en el cultivo de aguacates analizado.

Literatura Citada

Grüter, Roman, Tim Trachsel, Patrick Laube, and Isabel Jaisli. 2022. “Expected Global Suitability of Coffee, Cashew and Avocado Due to Climate Change.” PloS One 17 (1): e0261976.
Lahav, E, and T Trochoulias. 1982. “The Effect of Temperature on Growth and Dry Matter Production of Avocado Plants.” Australian Journal of Agricultural Research 33 (3): 549–58.
Moraga, Paula. 2023. Spatial Statistics for Data Science: Theory and Practice with r. CRC Press Chapman & Hall/CRC Data Science Series. ISBN.