A continuación se cargan los datos y observa un total de 534 observaciones para 21 variables de estudio.
datosaguacate<- read_excel("C:/Users/ACER/Desktop/CienciaDatos/Analsis geografica/Unit 3/data.xlsx")
DT::datatable(datosaguacate,
extensions = 'FixedColumns',
rownames= FALSE,
options = list(
pageLength = 10,
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json'),
autoWidth = TRUE,
columnDefs =
list(list(width = '300px', targets = c(0,7))),
scrollX = TRUE,
escape = T)
)
View(datosaguacate)
summary(datosaguacate)
## id_arbol Latitude Longitude FORMATTED_DATE_TIME
## Min. : 1.0 Min. :2.392 Min. :-76.71 Length:534
## 1st Qu.:134.2 1st Qu.:2.393 1st Qu.:-76.71 Class :character
## Median :267.5 Median :2.393 Median :-76.71 Mode :character
## Mean :267.5 Mean :2.393 Mean :-76.71
## 3rd Qu.:400.8 3rd Qu.:2.393 3rd Qu.:-76.71
## Max. :534.0 Max. :2.394 Max. :-76.71
## Psychro_Wet_Bulb_Temperature Station_Pressure Relative_Humidity
## Min. :19.00 Min. :822.4 Min. :59.50
## 1st Qu.:20.80 1st Qu.:824.8 1st Qu.:67.33
## Median :21.50 Median :825.7 Median :71.25
## Mean :21.63 Mean :825.5 Mean :71.17
## 3rd Qu.:22.40 3rd Qu.:826.5 3rd Qu.:75.30
## Max. :24.90 Max. :827.4 Max. :91.60
## Crosswind Temperature Barometric_Pressure Headwind
## Min. :0.0000 Min. :22.20 Min. :822.4 Min. :-0.7000
## 1st Qu.:0.0000 1st Qu.:24.50 1st Qu.:824.7 1st Qu.: 0.0000
## Median :0.1000 Median :25.80 Median :825.7 Median : 0.1000
## Mean :0.1989 Mean :25.83 Mean :825.5 Mean : 0.1906
## 3rd Qu.:0.3750 3rd Qu.:27.18 3rd Qu.:826.5 3rd Qu.: 0.3750
## Max. :1.5000 Max. :29.70 Max. :827.4 Max. : 1.3000
## Direction_True Direction_Mag Wind_Speed Heat_Stress_Index
## Min. : 0.0 Min. : 0.0 Min. :0.0000 Min. :22.80
## 1st Qu.: 66.0 1st Qu.: 66.0 1st Qu.:0.0000 1st Qu.:25.20
## Median :287.5 Median :287.5 Median :0.4000 Median :27.20
## Mean :222.5 Mean :223.3 Mean :0.3315 Mean :27.40
## 3rd Qu.:311.8 3rd Qu.:312.0 3rd Qu.:0.5000 3rd Qu.:29.18
## Max. :359.0 Max. :359.0 Max. :1.8000 Max. :34.50
## Altitude Dew_Point Density_Altitude Wind_Chill
## Min. :1675 Min. :17.70 Min. :2.409 Min. :22.20
## 1st Qu.:1684 1st Qu.:19.40 1st Qu.:2.506 1st Qu.:24.50
## Median :1692 Median :20.00 Median :2.551 Median :25.80
## Mean :1693 Mean :20.16 Mean :2.556 Mean :25.79
## 3rd Qu.:1700 3rd Qu.:20.80 3rd Qu.:2.605 3rd Qu.:27.10
## Max. :1724 Max. :24.00 Max. :2.723 Max. :29.60
## Estado_Fenologico_Predominante Frutos_Afectados
## Min. :717.0 Min. :0.000000
## 1st Qu.:717.0 1st Qu.:0.000000
## Median :718.0 Median :0.000000
## Mean :717.8 Mean :0.005618
## 3rd Qu.:718.0 3rd Qu.:0.000000
## Max. :719.0 Max. :1.000000
Distribución de los puntos de coordenadas (latitud y longitud) de los árboles en la finca.
# Distribución de los puntos.
ggplot(data = datosaguacate, aes(x = Longitude, y = Latitude)) +
geom_point() +
labs(x = "Longitud", y = "Latitud", title = "Distribución de puntos de coordenadas")
# Distribución de los puntos de forma interactiva.
leaflet() %>%
addProviderTiles(provider = providers$Esri.WorldImagery) %>%
addCircleMarkers(
lng = datosaguacate$Longitude,
lat = datosaguacate$Latitude,
radius = 0.2,
color = "blue"
)
La variable temperatura se utiliza como variable de estudio, y se oberva que la temperatura del terreno varia según la ubicación de los árboles, es decir, la temperatura varía en función de la ubicación geográfica.El histograma muestra la distribucion de la temperatura y el grafico de dispersion la relacion entre la latitud y temperatura.
ggplot(datosaguacate, aes(x = Temperature)) +
geom_histogram(binwidth = 1, fill = "red", color = "black") +
theme_minimal() +
labs(title = "Distribución de la Temperatura", x = "Temperatura", y = "Frecuencia")
ggplot(datosaguacate, aes(x = Latitude, y = Temperature)) +
geom_point(color = "red") +
theme_minimal() +
labs(title = "Relación entre Latitud y Temperatura", x = "Latitud", y = "Temperatura")
## Variable regionalizada.
dfaguacate <- as.geodata(datosaguacate, coords.col = 3:2, data.col = 9) # Variable regionalizada Temperatura
plot(dfaguacate)
# Distancias entre las coordenadas
summary(dist(dfaguacate$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
Al estudiar el variograma, identificamos patrones espaciales mediante la correlación entre los puntos. No obstante, la correlación es debil, pues en ciertos puntos la línea tiende a estabilizarse dentro de las bandas, indicando una menor variabilidad y, por lo tanto, una menor correlación entre los datos.
variograma <- variog(geodata = dfaguacate, uvec = seq(0,0.0009,0.00005), option = "bin")
## variog: computing omnidirectional variogram
datos_env <- variog.mc.env(dfaguacate, obj.variog =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, envelop = datos_env)
## Ajuste Modelo. Se implementan 4 modelos teóricos:
• Modelo Exponencial.
• Modelo Esférico.
• Modelo Gaussiano.
• Modelo Matern.
Se analizan los 4 modelos juntos, y se realiza individualmente las graficas para cada modelo. También se realiza el análisis del MSE para determinar de forma estadística cual es el mejor modelo.
# Ajuste Modelo.
ini.vals <- expand.grid( seq(2,4,l=10), seq(0.0001,0.00025, l = 10))
modelo_mco_exp <- variofit(variograma, 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.11" "0" "0" "0.5"
## status "est" "est" "est" "fix"
## loss value: 3555.92876863577
modelo_mco_gau <- variofit(variograma, 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: 6633.5155506537
modelo_mco_shp <- variofit(variograma, ini.vals, cov.model = "spherical")
## 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: 6005.01775448873
plot(variograma, pch=16, envelop = datos_env)
lines(modelo_mco_exp, col = "orange")
lines(modelo_mco_gau, col = "blue")
lines(modelo_mco_shp, col = "green")
legend(0.0007, 7, legend=c("Gausiano", "Exponencial", "Esferico"),
col=c("blue", "orange","green"), lty=1, cex=0.8)
plot(variograma, col ="orange")
lines(modelo_mco_exp, col = "orange")
plot(variograma, col ="blue")
lines(modelo_mco_gau, col = "blue")
plot(variograma, col ="green")
lines(modelo_mco_shp, col = "green")
# Imprimir resultados MSE por modelo
print(paste("MSE modelo Exponencial =", as.character(modelo_mco_exp$value)))
## [1] "MSE modelo Exponencial = 3314.17633638709"
print(paste("MSE modelo Gausiano =", as.character(modelo_mco_gau$value)))
## [1] "MSE modelo Gausiano = 6339.97796271843"
print(paste("MSE modelo Esferico =", as.character(modelo_mco_shp$value)))
## [1] "MSE modelo Esferico = 5837.58927236167"
Se puede observar que el valor de MSE del modelo exponencial es el que mejor se ajusta a los puntos del semivariograma muestral.
rangos <- c(min(datosaguacate[,3]),
max(datosaguacate[,3]),
min(datosaguacate[,2]),
max(datosaguacate[,2]))
# Genera una cuadrícula espacial con 100 puntos a lo largo de la longitud y latitud
geodatos_grid <- expand.grid(lon = seq(rangos[1], rangos[2], length.out = 100),
lat = seq(rangos[3], rangos[4], length.out = 100))
plot(geodatos_grid)
# Traza los puntos de datos geográficos sobre la cuadrícula
points (datosaguacate[,3:2], col = "red")
# Realiza el Kriging con los datos de origen y la cuadrícula generada
geodatos_ko <- krige.conv(dfaguacate, loc = geodatos_grid,
krige = krige.control(nugget = 0, trend.d = "cte",
trend.l = "cte", cov.pars = c(sigmasq = 3.0186,
phi = 0.0001)))
## krige.conv: model with constant mean
## krige.conv: Kriging performed using global neighbourhood
# Visualiza la predicción Kriging
image(geodatos_ko, main = "kriging Predict", xlab = "East", ylab = "North")
contour(geodatos_ko, main = "kriging Predict", drawlabels = TRUE)
# Visualiza la desviación estándar de la predicción Kriging
image(geodatos_ko, main = "kriging StDv Predicted", val = sqrt(geodatos_ko$krige.var), xlab = "East", ylab = "North")
contour(geodatos_ko, main = "kriging StDv Predict", val = sqrt(geodatos_ko$krige.var), drawlabels = TRUE)
## Imagen raster.
Se crea una imagen raster a partir de las predicciones de kriging.
# Crear un raster de predicción y visualizarlo
pred <- cbind(geodatos_grid, geodatos_ko$predict)
temp_predict <- rasterFromXYZ(pred)
plot(temp_predict)
levelplot(temp_predict, par.settings = BuRdTheme)
# Crear un raster de error y visualizarlo
temp_error <- rasterFromXYZ(cbind(geodatos_grid, sqrt(geodatos_ko$krige.var)))
levelplot(temp_error, par.settings = BuRdTheme)
# Realizar validación cruzada y calcular el Error Absoluto Medio (MAE)
valida <- xvalid(geodata = dfaguacate, model = modelo_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
MAE <- mean(abs(valida$error))
MAE
## [1] 0.7868143
A partir de la validación cruzada se obtiene un error de predicción del modelo de 0.78 grados. Es decir, en promedio, las predicciones del modelo difieren en aproximadamente 0.78 grados de las observaciones reales, que es un dato alto y por tanto no es muy buena la capacidad predictiva del modelo.
Distribución de la Temperatura: La temperatura varía entre 22.2 °C y 29.7 °C. La mayoría de las temperaturas se concentran alrededor de la mediana (25.8 °C). La distribución es ligeramente sesgada hacia temperaturas más altas.
Relación entre Latitud y Temperatura: No se observa una relación clara entre la latitud y la temperatura. La temperatura parece ser independiente de la latitud dentro del rango estudiado.
Autocorrelación Espacial - Semivariograma: Existe autocorrelación espacial en la temperatura a ciertas distancias. Los puntos más cercanos tienen temperaturas más similares, y esta similitud disminuye con la distancia.
Predicción Espacial: La predicción espacial muestra una variación suave y continua de la temperatura, identificando claramente las áreas con temperaturas más altas y más bajas.