Descripción del conjunto de datos

La temperatura es un factor crucial que afecta el crecimiento y desarrollo de los aguacates y ene espacial una gran variadad de cultivos. Algunos con rangos de temperatura adecuados. El presente conjunto de datos espaciales recopila información sobre la temperatura de un cultivo de aguacate. Este conjunto de datos es supremamente imporatnte para poder comprender la distribución espacial de las condiciones de temperatura.

Se procede a llamar la información usando la libreria readxl :

library(readxl)
Aguacate <- read_excel(paste(path,"Mod 2 Unid1 Datos_Completos_Aguacate_filtrada.xlsx", sep = '//'))

Considerando el conjunto de caracteríaticas alusivas al cultivo, se filtra la variable Temperatura para de esta fomra poder realizar análisis de esta variable importante en la agricultura. Considerese igualmnete una descripción de los datos:

Aguacate <- Aguacate[c(2,3,9)]
Aguacate <- na.omit(Aguacate)
summary(Aguacate)
##     Latitude       Longitude       Temperature   
##  Min.   :2.392   Min.   :-76.71   Min.   :22.20  
##  1st Qu.:2.393   1st Qu.:-76.71   1st Qu.:24.50  
##  Median :2.393   Median :-76.71   Median :25.80  
##  Mean   :2.393   Mean   :-76.71   Mean   :25.83  
##  3rd Qu.:2.393   3rd Qu.:-76.71   3rd Qu.:27.18  
##  Max.   :2.394   Max.   :-76.71   Max.   :29.70

Según el resumen de la información de Aguacates se puede identificar que:

  • La temperatura mínima registrada es de 22.20°C y la máxima de 29.70°C.

  • La media y la mediana de la temperatura son aproximadamente 25.83°C y 25.80°C respectivamente, indicando una distribución relativamente simétrica de los datos de temperatura.

  • El rango intercuartil (Q1-Q3) muestra que la mayoría de las temperaturas están entre 24.50°C y 27.18°C, sugiriendo un clima cálido y moderado.

Observemos como se está distribuyendo las plantas de Aguacate espacialmente:

require(leaflet)

leaflet() %>% 
    addTiles() %>% 
    addCircleMarkers(lng = Aguacate$Longitude,lat = Aguacate$Latitude,radius = 0.2,color = "black")

Considerando la im´portancia de realiazr análisis geoespaciales en el conjunto de datos, se procede a convertir los datos espaciales en un objeto de clase geodata, que es compatible con las funciones de análisis espacial y geoestadístico del paquete geoR.

require(geoR)
aguacate_geo=as.geodata(Aguacate,coords.col = 2:1,data.col = 3)
plot(aguacate_geo)

De la gráfica anterior se identifica:

  • La primera visualización ubicada en la parte superior izquierda, muestra la distribución de la variable a nivel espacial y los colores son característicos del nivel de la temperatura donde azul hace refeencia a sitios más frios y rojos para sitios con temperatura mayor.

  • En la grafica anterior se puede observar un histograma de frecuencia relativa del conjunto de datos de temperatura, aquí la frecuencia relativa muestra la proporción de datos que se encuentran dentro de cada intervalo de temperatura. En otras palabras Y representa la densidad de los datos, que en este caso se traduce en la proporción de datos que se encuentran dentro de cada intervalo de temperatura. Esta gráfica permite identificar que entre 24 y 28 grados es el rango donde la temperatura es frecuente en el conjunto de datos.

Semivariograma

la correlación espacial es crucial para poder entender las relaciones y patrones de tipo geográfico en este tipo de conjunto de datos. Adicionalmente, es necesario para poder identificar la similitud entre valores en diferentes puntos espaciales, indicando si los valores similares tienden a agruparse.

Una forma de identificar la similitud de puntos es por medio de la distancia, esta medida nos puede dar un panorama de cómo se está comportando el conjunto de datos, para esto observemos la siguiente salida que permite observar el rango de las distancias en el conjuntos de datos, adicionalmente se observa que los sitios más cercanos están a 1.712e-05 ~ 0.00001712 de distancia y los más lejanos a 1.959e-03 ~ 0.001959

summary(dist(aguacate_geo$coords))
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 1.712e-05 4.051e-04 6.408e-04 6.827e-04 9.178e-04 1.959e-03

Considerando que el tercer cuartil es 9.178e-04 ~ 0.0009178, se calcula el semivariograma desde en el rango de (0 a 0.001) cada 0.00002

variograma=variog(aguacate_geo,option = "bin",uvec=seq(0,0.001,0.00002))
## variog: computing omnidirectional variogram
datos.env=variog.mc.env(aguacate_geo,obj=variograma)
## variog.env: generating 99 simulations by permutating data values
## variog.env: computing the empirical variogram for the 99 simulations
## variog.env: computing the envelops

En este punto ya se pude realizar el gráfico del semivariograma, el cual muestra que para distancias pequeñas la simillitud (o semivarianza) es baja y a medida que la distancia es mayor la semivarianza es mayor.

plot(variograma, pch=16, main='Grafica del Semivariograma observado')
lines(datos.env)

Las bandas son una referencia para identificar cuando hay semivariogramas sin correlación, el nuestro si tiene un comportamineto diferentes, luego se confirma correlacion espacial.

Modelo Teorico

Se realiza el ajuste del modelo teórico para poder realizar predicciones espaciales, aqui es importante consdierar que los parámetros de un modelo de semivarianza es :

  • El alcance: Es el valor de la distancia donde se estabiliza el semivariograma, en este conjunto de datos sería entre (0.0001,0.0008)

  • La meseta: Valor donde se estabiliza en el eje y que en nuestro conjunto de datos es entre (1.2,1.5)

Como este procedimiento es un metodo numérico se deben establecer

ini.vals = expand.grid(seq(1.2,1.5,l=10), seq(0.0001,0.0008,l=10))

Ajustando modelos exponencial (exponential) y Gausiano (gaussian), se tiene:

model_exp=variofit(variograma, ini=ini.vals, cov.model="exponential", wei="npair", min="optim")
## 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 "1.5"   "0"   "0"   "0.5"
## status        "est"   "est" "est" "fix"
## loss value: 296807.231725087
model_gaus=variofit(variograma, ini=ini.vals, cov.model="gaussian", wei="npair", min="optim",nugget = 0)
## 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 "1.5"   "0"   "0"   "0.5"
## status        "est"   "est" "est" "fix"
## loss value: 288205.86784414

Ahora bien, se grafican los modelos teóricos ajustados (Azul: Modelo exponencial) , (Rojo: Modelo Gaussiano) :

plot(variograma)

lines(model_exp,col="blue")
lines(model_gaus,col="red")

considerando la suma de cuadrados de los errores para cada modelo, se tiene:

model_exp$value
## [1] 9158.212
model_gaus$value
## [1] 8947.68

Estos anteriores valores implican que la suma de cuadrados de los errores en el modelo exponencial es 9158.212 y Gausiano 8947.68. Por lo tanto el modelo que más se ajustó fue el Gausiano y se tomará para hacer predicciones.

Predicción Espacial usando kriging

Para poder realizar predicciones se necesita identificar los puntos minimos y máximos en términos de latitudes y longitudes y de esta fomra crear un a grilla y hacer predicciones.

min(Aguacate[,2])  # MINIMO
## [1] -76.7118
max(Aguacate[,2])  # MAXIMO
## [1] -76.71022
min(Aguacate[,1])
## [1] 2.392101
max(Aguacate[,1])
## [1] 2.393634

Según lo anterior, se puede observar en la siguiente gráfica la grilla donde se realizarán las predicciones:

grid=expand.grid( lon=seq(-76.71022,-76.7118,l=100),lat=seq(2.392101 ,2.393634 ,l=100))


par(mfrow=c(1,2))
plot(grid, main='Grilla')

plot(grid)
points(aguacate_geo$coords,col="red")

Realicemos la predicción con el modelo que se establecido antes “Gausiano”

model_gaus
## variofit: model parameters estimated by WLS (weighted least squares):
## covariance model is: gaussian
## parameter estimates:
##   tausq sigmasq     phi 
##  0.7902  2.2842  0.0001 
## Practical Range with cor=0.05 for asymptotic range: 0.0002330932
## 
## variofit: minimised weighted sum of squares = 8947.68

Los parámetros de este modelo “Gausiano” son sigmasq=2.2842 y phy=0.0001 se modifican en el código, con la finalida de realizar el krigin:

kg=krige.conv(aguacate_geo, loc=grid,
                       krige= krige.control(nugget=0,trend.d="cte", 
                                            trend.l="cte",cov.pars=c(sigmasq=2.2842, phi=0.0001 )))
## krige.conv: model with constant mean
## krige.conv: Kriging performed using global neighbourhood

Visualización de Predicciones Espaciales usando kriging

En la siguiente gráfica se observa como en la temperatura predicha en la zona, unas partes de la gráfica evidencian mayor concentración de temperatura y otras on temperaturas más bajas, etc.

image(kg, main="Predicción kriging", xlab="East", ylab="North")

Conclusiones

  • Durante el análisis geoestadístico, se identificó que el modelo Gaussiano como el más adecuado para los datos de temperatura en el cultivo de aguacate. Este modelo se destacó, debido a que presentó una menor suma de cuadrado de errores, esto indica una excelente capacidad para poder representar la variabilidad de los datos de tipo espacial.

  • Se usa Kriging para estimar temperaturas en una región determinada a partir de los datos obtenidos de mediciones en arboles de aguacates, permitiendo generar mapas de temperatura precisos.

  • El diseño del Semivariograma es fundamental para el proceso de kriging, dado que se utilizó para entender y modelar la dependencia espacial de la temperatura del cultivo de aguaacates.