Base de datos: Datos_Completos_Aguacate.xlsx”
Descripción de datos: Información de clima y areas de una finca en Cauca (Colombia), con la cual se va a realizar geoestadística con:
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(geoR)
## Warning: package 'geoR' was built under R version 4.4.3
## --------------------------------------------------------------
## Analysis of Geostatistical Data
## For an Introduction to geoR go to http://www.leg.ufpr.br/geoR
## geoR version 1.9-5 (built on 2025-04-25) is now loaded
## --------------------------------------------------------------
library(raster)
## Warning: package 'raster' was built under R version 4.4.3
## Cargando paquete requerido: sp
## Warning: package 'sp' was built under R version 4.4.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(leaflet)
## Warning: package 'leaflet' was built under R version 4.4.3
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3
library(raster)
library(RColorBrewer)
View(datos_aguacate)
str(datos_aguacate)
## tibble [20,271 × 21] (S3: tbl_df/tbl/data.frame)
## $ id_arbol : chr [1:20271] "1" "2" "3" "4" ...
## $ Latitude : num [1:20271] 2.38 2.38 2.38 2.38 2.38 ...
## $ Longitude : num [1:20271] -76.6 -76.6 -76.6 -76.6 -76.6 ...
## $ FORMATTED_DATE_TIME : chr [1:20271] "21/08/2019 9:22:57 a, m," "21/08/2019 9:27:13 a, m," "21/08/2019 9:36:36 a, m," "21/08/2019 9:38:02 a, m," ...
## $ Psychro_Wet_Bulb_Temperature : num [1:20271] 14.8 11.6 12.9 14.1 14.3 14.2 14.4 12.8 15 14 ...
## $ Station_Pressure : num [1:20271] 805 805 806 806 805 ...
## $ Relative_Humidity : num [1:20271] 33.6 36.8 31.5 33.2 34.3 33.8 34.9 34.2 33.6 34 ...
## $ Crosswind : num [1:20271] 0.2 3.6 0.4 0.6 0.4 0.5 0.6 2.9 0.4 0.7 ...
## $ Temperature : num [1:20271] 25.7 20.8 23.7 25 25 25 24.9 22.9 26.2 24.6 ...
## $ Barometric_Pressure : num [1:20271] 805 805 806 806 805 ...
## $ Headwind : num [1:20271] 0.7 3.5 0.7 0.7 0.4 0.1 0 2.2 0.2 0.7 ...
## $ Direction_True : num [1:20271] 166 314 332 139 129 83 93 128 118 137 ...
## $ Direction_Mag : num [1:20271] 165 313 331 139 128 83 92 127 118 137 ...
## $ Wind_Speed : num [1:20271] 0.8 5.1 0.8 0.9 0.6 0.5 0.6 3.7 0.5 1 ...
## $ Heat_Stress_Index : num [1:20271] 24.1 19.5 22 23.2 23.3 23.3 23.2 21.5 24.6 22.9 ...
## $ Altitude : num [1:20271] 1896 1895 1889 1890 1894 ...
## $ Dew_Point : num [1:20271] 8.6 5.5 5.8 7.7 8.1 7.9 8.3 6.3 8.9 7.7 ...
## $ Density_Altitude : num [1:20271] 2.74 2.57 2.66 2.71 2.71 ...
## $ Wind_Chill : num [1:20271] 25.7 20.8 23.7 24.9 24.9 24.9 24.8 22.9 26.2 24.5 ...
## $ Estado_Fenologico_Predominante: num [1:20271] 715 715 715 715 715 715 715 715 715 715 ...
## $ Frutos_Afectados : num [1:20271] 0 3 0 0 1 0 0 0 0 21 ...
Datos_faltantes <- data.frame(colnames(datos_aguacate ), sapply(datos_aguacate, function(x) sum(is.na(x))))
Datos_faltantes <- Datos_faltantes[c(2:4, 9), ]
#Limpiando Dataframe
rownames(Datos_faltantes) <- NULL
colnames(Datos_faltantes) <- c("Variable", "Datos Faltantes")
#Presentando información en formato tabla
kable_classic(kbl(Datos_faltantes, caption = "<center><b>Tabla 1. Datos Faltantes por Variable</b></center>"), full_width = F)
| Variable | Datos Faltantes |
|---|---|
| Latitude | 0 |
| Longitude | 0 |
| FORMATTED_DATE_TIME | 0 |
| Temperature | 0 |
Se solicitó solo usar el periodo 01/10/2020 10:11:12 a, m,
# Eliminar espacios no quiebre
datos_aguacate$FORMATTED_DATE_TIME <- gsub(
"\u00A0", " ", datos_aguacate$FORMATTED_DATE_TIME)
# Filtramos nuevamente la cadena de texto solicitada
FincaAgu_Filtro <- datos_aguacate[
datos_aguacate$FORMATTED_DATE_TIME == "01/10/2020 10:11:12 a, m,",]
print(FincaAgu_Filtro)
## # A tibble: 534 × 21
## id_arbol Latitude Longitude FORMATTED_DATE_TIME Psychro_Wet_Bulb_Tem…¹
## <chr> <dbl> <dbl> <chr> <dbl>
## 1 1 2.39 -76.7 01/10/2020 10:11:12 a, m, 22
## 2 2 2.39 -76.7 01/10/2020 10:11:12 a, m, 21.4
## 3 3 2.39 -76.7 01/10/2020 10:11:12 a, m, 21.8
## 4 4 2.39 -76.7 01/10/2020 10:11:12 a, m, 22.8
## 5 5 2.39 -76.7 01/10/2020 10:11:12 a, m, 22.6
## 6 6 2.39 -76.7 01/10/2020 10:11:12 a, m, 21.5
## 7 7 2.39 -76.7 01/10/2020 10:11:12 a, m, 22.2
## 8 8 2.39 -76.7 01/10/2020 10:11:12 a, m, 22.6
## 9 9 2.39 -76.7 01/10/2020 10:11:12 a, m, 23
## 10 10 2.39 -76.7 01/10/2020 10:11:12 a, m, 22.7
## # ℹ 524 more rows
## # ℹ abbreviated name: ¹Psychro_Wet_Bulb_Temperature
## # ℹ 16 more variables: Station_Pressure <dbl>, Relative_Humidity <dbl>,
## # Crosswind <dbl>, Temperature <dbl>, Barometric_Pressure <dbl>,
## # Headwind <dbl>, Direction_True <dbl>, Direction_Mag <dbl>,
## # Wind_Speed <dbl>, Heat_Stress_Index <dbl>, Altitude <dbl>, Dew_Point <dbl>,
## # Density_Altitude <dbl>, Wind_Chill <dbl>, …
# Convertir dataframe en geodata
geo_datos <- as.geodata(
FincaAgu_Filtro,coords.col = 3:2,data.col = 5)
# Convertir dataframe en geodata
FincaAguacate_geo <- as.geodata(
FincaAgu_Filtro,coords.col = 3:2,data.col = 5)
# Gráficar geodata
par(mfrow = c(2, 1), mar = c(0, 4, 0, 4))
plot.new()
text(x = 0.5, y = 0.5, labels = "Figura 1. Geodata de la Temperatura",
cex = 1.7)
plot(geo_datos)
summary(dist(FincaAgu_Filtro[3:2]))
## 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
# Crear variograma
FincaAguacate_variog <- variog(FincaAguacate_geo,option = "bin",
uvec=seq(0,9.178e-04,9.178e-05), messages = FALSE)
# Calcular margen de correlación
FincaAguacate_marks <- variog.mc.env(FincaAguacate_geo,
obj=FincaAguacate_variog, messages = FALSE)
# Graficar semivariograma
plot(FincaAguacate_variog, main = "Figura 2. Semivariograma de Temperatura",
xlab = "Distancia", ylab = "Semivarianza")
lines(FincaAguacate_marks)
La semivariograma muestra que la temperatura tiene una correlación espacial.
# Humedad relativa
# Convertir dataframe en geodata
FincaAguacate_geo2 <- as.geodata(
FincaAgu_Filtro,coords.col = 3:2,data.col = 7)
# Crear variograma
FincaAguacate_variog2 <- variog(FincaAguacate_geo2,option = "bin",
uvec=seq(0,9.178e-04,9.178e-05), messages = FALSE)
# Calcular margen de correlación
FincaAguacate_marks2 <- variog.mc.env(FincaAguacate_geo2,
obj=FincaAguacate_variog2, messages = FALSE)
# Graficar semivariograma
plot(FincaAguacate_variog2, main = "Figura 3. Semivariograma de Humedad Relativa",
xlab = "Distancia", ylab = "Semivarianza")
lines(FincaAguacate_marks2)
#Fijar rango de evaluación
val_ini <- expand.grid(seq(1.5,3,l=10), seq(4e-04,6e-04,l=10))
# Gráficar semiovariograma junto a las curvas teóricas
plot(FincaAguacate_variog, main = "Figura 4. Semivariograma de Temperatura\ncon modelos teóricos",
xlab = "Distancia", ylab = "Semivarianza")
FincaAguacate_exp <- variofit(FincaAguacate_variog, ini=val_ini,
cov.model="exponential", wei="npair",
min="optim", messages = FALSE)
FincaAguacate_gaus <- variofit(FincaAguacate_variog, ini=val_ini,
cov.model="gaussian", wei="npair",
min="optim",nugget = 0, messages = FALSE)
FincaAguacate_spe <- variofit(FincaAguacate_variog, ini=val_ini,
cov.model="spheric",fix.nug=TRUE,
wei="npair", min="optim", messages = FALSE)
lines(FincaAguacate_exp,col="yellow")
lines(FincaAguacate_gaus,col="red")
lines(FincaAguacate_spe,col="black")
#Crear dataframe del área a gráficar
area_val <- data.frame(Modelo=c("Min. Long", "Max Long.", "Min. Lat", "Max. Lat"),
Suma_Errores=c(min(FincaAgu_Filtro[3]), max(FincaAgu_Filtro[3]), min(FincaAgu_Filtro[2]), max(FincaAgu_Filtro[2])))
#Crear tabla para visualizar los valores del área
kbl(area_val, caption = "<center><b>Tabla 2. Rango de área a graficar</b></center>", col.names=c("Línea","Valor"))%>%
kable_classic(full_width = F)
| Línea | Valor |
|---|---|
| Min. Long | -76.711799 |
| Max Long. | -76.710215 |
| Min. Lat | 2.392101 |
| Max. Lat | 2.393634 |
# Graficar grilla de terreno
FincaAguacate_grilla <- expand.grid(lon=seq(-76.7118, -76.71022, l=100),
lat=seq(2.392101, 2.393634, l=100))
plot(FincaAguacate_grilla, main = "Figura 4. Grilla del terreno",
xlab = "Longitud", ylab = "Latitud")
points(FincaAgu_Filtro[3:2],col="yellow")
geodatos_kr=krige.conv(FincaAguacate_geo, loc=FincaAguacate_grilla,
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
par(mfrow=c(1,2))
contour(geodatos_kr,main="kriging Predict", drawlabels=TRUE)
image(geodatos_kr, main="kriging Predict", xlab="East", ylab="North")
La temperatura varia en el área analizada, no presenta un patrón no uniforme. La correlación de la temperatura no fue muy fuerte, sin embargo se observa que los áboles de aguacate se encuentran situados en las areas dentro de las mejores varianzas. Esto podría aportar a seleccionar el terreno más adecuado para el cultivo de árboles para mayor producción de frutos.