require(geoR)
## Loading required package: geoR
## --------------------------------------------------------------
## Analysis of Geostatistical Data
## For an Introduction to geoR go to http://www.leg.ufpr.br/geoR
## geoR version 1.9-4 (built on 2024-02-14) is now loaded
## --------------------------------------------------------------
require(rasterVis)
## Loading required package: rasterVis
## Loading required package: lattice
library(leaflet)
library(ggplot2)
library(raster)
## Loading required package: sp
library(readxl)
Datos_Completos_Aguacate <- read_excel("C:/Users/ACER/Downloads/Datos_Completos_Aguacate.xlsx")
datos = Datos_Completos_Aguacate
datos <- datos[, c("Latitude", "Longitude","FORMATTED_DATE_TIME", "Temperature")]
colnames(datos) <- c("Latitud", "Longitud", "Fecha", "Temperatura")
datos
## # A tibble: 534 × 4
## Latitud Longitud Fecha Temperatura
## <dbl> <dbl> <chr> <dbl>
## 1 2.39 -76.7 01/10/2020 10:11:12 a, m, 23.9
## 2 2.39 -76.7 01/10/2020 10:11:12 a, m, 23.5
## 3 2.39 -76.7 01/10/2020 10:11:12 a, m, 24.5
## 4 2.39 -76.7 01/10/2020 10:11:12 a, m, 25.9
## 5 2.39 -76.7 01/10/2020 10:11:12 a, m, 26
## 6 2.39 -76.7 01/10/2020 10:11:12 a, m, 24.5
## 7 2.39 -76.7 01/10/2020 10:11:12 a, m, 25.5
## 8 2.39 -76.7 01/10/2020 10:11:12 a, m, 25.7
## 9 2.39 -76.7 01/10/2020 10:11:12 a, m, 26
## 10 2.39 -76.7 01/10/2020 10:11:12 a, m, 25.9
## # ℹ 524 more rows
leaflet() %>% addTiles() %>% addCircleMarkers(lng = datos$Longitud, lat = datos$Latitud, radius = 0.2, color = "black")
geodata = as.geodata(datos, coords.col = 2:1, data.col = 4)
plot(geodata)
summary(dist(datos[,2:1]))
## 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
variograma = variog(geodata, option="bin", uvec=seq(0, 9.178e-04,0.650e-4))
## variog: computing omnidirectional variogram
datos.env=variog.mc.env(geodata,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
plot(variograma,pch=16,envelope=datos.env)
ini.vals = expand.grid(seq(3,5,l=10), seq(4e-04,6e-04,l=10))
model_mco_exp = variofit(variograma, ini=ini.vals, cov.model = "exp")
## 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 "4.11" "0" "0" "0.5"
## status "est" "est" "est" "fix"
## loss value: 24465.8949033656
model_mco_gaus = variofit(variograma, ini=ini.vals, cov.model="gaus")
## 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.67" "0" "0" "0.5"
## status "est" "est" "est" "fix"
## loss value: 74717.8585662642
model_mco_spe = variofit(variograma, ini= ini.vals, cov.model="sph")
## 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.22" "0" "0" "0.5"
## status "est" "est" "est" "fix"
## loss value: 10102.484600263
plot(variograma,pch=16,envelope=datos.env)
lines(model_mco_exp,col="blue")
lines(model_mco_gaus, col="red")
lines(model_mco_spe, col="purple")
print(model_mco_exp)
## variofit: model parameters estimated by WLS (weighted least squares):
## covariance model is: exponential
## parameter estimates:
## tausq sigmasq phi
## 0.0000 3.1031 0.0001
## Practical Range with cor=0.05 for asymptotic range: 0.0002329142
##
## variofit: minimised weighted sum of squares = 5119.566
print(model_mco_gaus)
## variofit: model parameters estimated by WLS (weighted least squares):
## covariance model is: gaussian
## parameter estimates:
## tausq sigmasq phi
## 0.1123 2.9569 0.0001
## Practical Range with cor=0.05 for asymptotic range: 0.000233168
##
## variofit: minimised weighted sum of squares = 6960.626
print(model_mco_spe)
## variofit: model parameters estimated by WLS (weighted least squares):
## covariance model is: spherical
## parameter estimates:
## tausq sigmasq phi
## 0.0674 3.0113 0.0002
## Practical Range with cor=0.05 for asymptotic range: 0.0002491095
##
## variofit: minimised weighted sum of squares = 6256.725
En el resultado de la suma de los cuadrados de los errores nos da que el valor más bajo es el del modelo exponencial con 5119, por lo tanto este es el que se utilizará para realizar la predicción espacial Kriging.
geodatos_grid = expand.grid(lon=seq(-76.71022,-76.71180,l=100),lat=seq(2.392101 ,2.393634 ,l=100))
plot(geodatos_grid)
points(datos[,2:1], col="red")
datos_ko=krige.conv(geodata, loc=geodatos_grid,
krige=krige.control(nugget=0,trend.d="cte", trend.l="cte",cov.pars=c(sigmasq=3.1031,phi=0.0001)))
## krige.conv: model with constant mean
## krige.conv: Kriging performed using global neighbourhood
par(mfrow=c(1,2))
image(datos_ko, main="Predicción espacial Kriging", xlab="Latitud", ylab="Longitud")
contour(datos_ko, main="Kriking predict", add=TRUE, drawlabels=TRUE)
pred = cbind(geodatos_grid, datos_ko$predict)
temp_predict= rasterFromXYZ(cbind(geodatos_grid, datos_ko$predict))
plot(temp_predict)
levelplot(temp_predict,par.settings =BuRdTheme)
temp_error=rasterFromXYZ(cbind(geodatos_grid,sqrt(datos_ko$krige.var)))
levelplot(temp_error,par.settings =BuRdTheme)
valida = xvalid(geodata = geodata, model = model_mco_spe)
## 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
MAE = mean(abs(valida$error))
MAE
## [1] 0.7932443
En la validación cruzada el modelo presenta un error de predicción de 0,79 grados, esto significa que el modelo difiere de las observaciones reales aproximandamente en esta medida.