En este documento, se presenta el paso a paso para llevar a cabo el requerimiento solicitado para cumplimiento de la actividad del módulo 2, Unidad 1:
Nota: A lo largo del documento, por sección, se realizan las interpretaciones y conclusiones pertinentes para cumplir los requerimientos de la rúbrica
Como primera medida, se realiza el análisis exploratorio a la base de datos: “Datos_Completos_Aguacates.xlsx”
suppressMessages(library(readxl))
suppressMessages(library(dplyr))
suppressMessages(library(ggplot2))
suppressMessages(library(sp))
suppressMessages(library(gstat))
suppressMessages(library(automap))
suppressMessages(library(sf))
suppressMessages(library(summarytools))
suppressMessages(library(corrplot))
# Leer la base de datos
file_path <- "C:/Users/jlafaurie/Dropbox/Datos personales/Maestría ciencia de datos/2. Segundo Semestre/4. Análisis de información geográfica y espacial/Módulo 2/Unidad 1/Datos_Completos_Aguacate.xlsx"
data <- read_excel(file_path)
# Convertir la columna de fecha a tipo Date y filtrar por el periodo 01/10/2020
data <- data %>%
mutate(Date = as.Date(FORMATTED_DATE_TIME, format = "%d/%m/%Y")) %>%
filter(Date == as.Date("2020-10-01"))
# Mostrar las primeras filas del dataset
head(data)
## # A tibble: 6 × 22
## id_arbol Latitude Longitude FORMATTED_DATE_TIME Psychro_Wet_Bulb_Temp…¹
## <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
## # ℹ abbreviated name: ¹Psychro_Wet_Bulb_Temperature
## # ℹ 17 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>,
## # Estado_Fenologico_Predominante <dbl>, Frutos_Afectados <dbl>, Date <date>
# Resumen estadístico de todas las variables
summary(data)
## id_arbol Latitude Longitude FORMATTED_DATE_TIME
## Length:534 Min. :2.392 Min. :-76.71 Length:534
## Class :character 1st Qu.:2.393 1st Qu.:-76.71 Class :character
## Mode :character Median :2.393 Median :-76.71 Mode :character
## Mean :2.393 Mean :-76.71
## 3rd Qu.:2.393 3rd Qu.:-76.71
## 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 Date
## Min. :717.0 Min. :0.000000 Min. :2020-10-01
## 1st Qu.:717.0 1st Qu.:0.000000 1st Qu.:2020-10-01
## Median :718.0 Median :0.000000 Median :2020-10-01
## Mean :717.8 Mean :0.005618 Mean :2020-10-01
## 3rd Qu.:718.0 3rd Qu.:0.000000 3rd Qu.:2020-10-01
## Max. :719.0 Max. :1.000000 Max. :2020-10-01
Análisis e interpretación de variables más relevantes:
Variables Categóricas
id_arbol y FORMATTED_DATE_TIME
id_arbol: Identificadores únicos de los árboles, con un total de 534 registros.
FORMATTED_DATE_TIME: Fecha y hora en formato de caracteres, todos los registros corresponden a una única fecha: 01/10/2020.
Variables Numéricas
Latitude: Valores entre 2.392 y 2.394, con una media de 2.393. La dispersión de los datos es muy pequeña, indicando que los árboles están ubicados en una área geográfica muy específica.
Longitude: Valores entre -76.71 y -76.71, con una media de -76.71. Similar a la latitud, la dispersión es mínima.
Relative_Humidity (Humedad relativa): Rango: 59.50 a 91.60. Media: 71.17. Mediana: 71.25. La mayoría de los valores se encuentran entre 67.33 y 75.30, con algunos valores más altos.
Wind_Speed (Velocidad del viento): Rango: 0.0000 a 1.8000. Media: 0.3315. Mediana: 0.4000. La velocidad del viento es generalmente baja.
Temperature (Temperatura): Rango: 22.20 a 29.70. Media: 25.83. Mediana: 25.80. La distribución de la temperatura es bastante centrada.
Una vez analizada la información y sus estadísticos, se procede a presentar diagramas de frecuencia de las variables más relevantes:
ggplot(data, aes(x = Temperature)) +
geom_histogram(binwidth = 1, fill = "blue", color = "black", alpha = 0.7) +
labs(title = "Histograma de la Temperatura", x = "Temperatura", y = "Frecuencia") +
theme_minimal()
#Boxplot de Temperature
ggplot(data, aes(y = Temperature)) +
geom_boxplot(fill = "orange", color = "black") +
labs(title = "Boxplot de la Temperatura", y = "Temperatura") +
theme_minimal()
Intepretación y conclusiones del gráfico
ggplot(data, aes(x = Relative_Humidity)) +
geom_histogram(binwidth = 1, fill = "blue", color = "black", alpha = 0.7) +
labs(title = "Histograma de Humedad Relativa", x = "Humedad Relativa", y = "Frecuencia") +
theme_minimal()
Intepretación y conclusiones del gráfico
ggplot(data, aes(x = Wind_Speed)) +
geom_histogram(binwidth = 0.1, fill = "blue", color = "black", alpha = 0.7) +
labs(title = "Histograma de Velocidad del Viento", x = "Velocidad del Viento", y = "Frecuencia") +
theme_minimal()
Intepretación y conclusiones del gráfico
Seguido, se realiza un análsis de correlación de todas las variables:
# Seleccionar variables numéricas relevantes para la correlación
variables_seleccionadas <- data %>% select(Temperature, Latitude, Longitude,
Psychro_Wet_Bulb_Temperature,
Station_Pressure,
Relative_Humidity,
Wind_Speed,
Heat_Stress_Index,
Dew_Point)
# Calcular la matriz de correlación
correlation_matrix <- cor(variables_seleccionadas, use = "complete.obs")
# Visualizar la matriz de correlación
corrplot(correlation_matrix, method = "circle")
La gráfica muestra una matriz de correlación entre variables climáticas y geográficas en el dataset. Aquí hay un análisis detallado de la gráfica:
Los círculos azules indican una correlación positiva, mientras que los círculos rojos indican una correlación negativa.
El tamaño del círculo y la intensidad del color reflejan la magnitud de la correlación. Un círculo más grande y un color más oscuro indican una correlación más fuerte.
Los valores en la matriz varían entre -1 y 1, donde: 1 indica una correlación positiva perfecta, -1 indica una correlación negativa perfecta y 0 indica que no hay correlación.
La correlación entre Latitude y Longitude es cercana a cero, indicando que estas dos variables no están relacionadas entre sí, lo cual tiene sentido geográficamente.
Temperature (Temperatura) Vs:
Psychro_Wet_Bulb_Temperature (Temperatura de bulbo húmedo psicrométrico): Alta correlación positiva (cercana a 1), lo cual es esperado ya que ambas son medidas relacionadas con la temperatura.
Heat_Stress_Index (Índice de estrés por calor): Alta correlación positiva, ya que el índice de estrés por calor está influenciado directamente por la temperatura.
Dew_Point (Punto de rocío): Alta correlación positiva, indicando que a mayor temperatura, también aumenta el punto de rocío.
Conclusiones
Una vez analizada toda la base de datos, se procede a continuar con los requerimientos planteados. Como primera medida, se selecciona únicamente las vairables Temperatura, Latitude y Longitude, que serán utilizadas para el desarrollo de todo el ejercicio:
# Seleccionar las variables de interés
data_selected <- data %>%
select(Temperature, Latitude, Longitude)
# Verificar la información de la base de datos resultante
print(head(data_selected))
## # A tibble: 6 × 3
## Temperature Latitude Longitude
## <dbl> <dbl> <dbl>
## 1 23.9 2.39 -76.7
## 2 23.5 2.39 -76.7
## 3 24.5 2.39 -76.7
## 4 25.9 2.39 -76.7
## 5 26 2.39 -76.7
## 6 24.5 2.39 -76.7
# Gráfico de dispersión con la latitud y longitud
ggplot(data_selected, aes(x = Longitude, y = Latitude)) +
geom_point(aes(color = Temperature)) +
labs(title = "Diagrama de dispersión de Latitude and Longitude",
x = "Longitude",
y = "Latitude",
color = "Temperature") +
theme_minimal()
El gráfico de dispersión muestra la distribución geográfica de los árboles en función de su latitud y longitud, en una escala de colores marcada por la temperatura. A continuación, se procede a realizar la interpretación de este:
Distribución Geográfica:
Los árboles están distribuidos en un área geográfica específica con coordenadas de latitud que van de aproximadamente 2.3924 a 2.3936 y coordenadas de longitud que van de aproximadamente -76.7115 a -76.7105.
La distribución de los puntos sugiere una cobertura uniforme del área con algunas concentraciones más densas en ciertos lugares.
Rango de Temperatura:
Patrones de Temperatura:
Conclusiones
La temperatura es uniforme en toda el área de estudio, con variaciones menores entre 24°C y 28°C. Esto sugiere que no hay variaciones de temperatura considerables en la región en las fechas registradas.
Los árboles están distribuidos uniformemente en la región estudiada.
Dado que no se observan grandes variaciones en la temperatura en función de la ubicación, puede ser necesario investigar otros factores que podrían influir en la temperatura local, como la altitud, la cobertura del suelo, entre otros.
Podría ser útil realizar un análisis de variabilidad espacial más detallado, como kriging, para ver si hay patrones espaciales más sutiles que no son evidentes en el gráfico de dispersión.
A continuación, se presenta la creación del geodata y su interpretación:
# Crear el objeto spatial data
coordinates(data_selected) <- ~ Longitude + Latitude
proj4string(data_selected) <- CRS("+proj=longlat +datum=WGS84")
# Semivariograma
variogram <- variogram(Temperature ~ 1, data_selected)
plot(variogram)
Interpretación del Semivariograma
Eje Y (Semivarianza):
La semivarianza es una medida de la similitud entre los valores de la variable a medida que aumenta la distancia entre ellos.
Valores más altos de semivarianza indican una mayor diferencia entre los valores de la variable a medida que aumenta la distancia.
Eje X (Distancia):
La distancia representa la separación espacial entre los puntos de muestreo.
A medida que aumenta la distancia, esperamos que la similitud entre los puntos disminuya, reflejándose en un aumento de la semivarianza.
Forma del Semivariograma:
Pendiente Inicial: La semivarianza aumenta rápidamente a distancias cortas, lo que indica que los puntos cercanos tienden a ser más similares entre sí.
Meseta: La semivarianza parece estabilizarse alrededor de una distancia de 0.06 a 0.08. Esto se conoce como el “sill” y representa la distancia a partir de la cual los puntos ya no muestran dependencia espacial significativa, es decir, se vuelven independientes entre sí.
Rango: La distancia en la que la semivarianza se estabiliza (alrededor de 0.06 a 0.08) es conocida como el “range” y representa la extensión de la dependencia espacial. Más allá de esta distancia, los puntos no están correlacionados espacialmente.
Conclusiones
La variable analizada muestra dependencia espacial a distancias cortas, lo que significa que los valores cercanos entre sí tienden a ser más similares que los valores más distantes.
La dependencia espacial disminuye y se estabiliza alrededor de una distancia de 0.06 a 0.08, sugiriendo que más allá de esta distancia, los puntos son prácticamente independientes.
A distancias mayores, la semivarianza se estabiliza, indicando que la variabilidad de la variable es constante a gran escala. Esto sugiere una estructura espacial homogénea a partir de una cierta distancia.
El semivariograma es útil para seleccionar un modelo teórico adecuado (como el modelo esférico, exponencial o gaussiano) para describir la variabilidad espacial. Este modelo puede ser utilizado para la interpolación espacial mediante kriging.
Una vez analizado el gráfico de semivariograma, se procede con la identificación del mejor modelo teórico (Se usarán los modelos exponencial, gaussiano y esférico), por medio de la comparación de gráficos de semivariogramada:
suppressMessages(library(gstat))
suppressMessages(library(sp))
# Ajuste de modelos teóricos
vfit_exp <- fit.variogram(variogram, model = vgm(psill = 3, "Exp", range = 0.05, nugget = 1))
vfit_gau <- fit.variogram(variogram, model = vgm(psill = 3, "Gau", range = 0.05, nugget = 1))
vfit_sph <- fit.variogram(variogram, model = vgm(psill = 3, "Sph", range = 0.05, nugget = 1))
# Crear data frames para cada modelo teórico
exp_model <- variogramLine(vfit_exp, maxdist = max(variogram$dist), n = 100)
exp_model$model <- "Exponential"
gau_model <- variogramLine(vfit_gau, maxdist = max(variogram$dist), n = 100)
gau_model$model <- "Gaussian"
sph_model <- variogramLine(vfit_sph, maxdist = max(variogram$dist), n = 100)
sph_model$model <- "Spherical"
# Combinar los modelos teóricos en un solo data frame
models <- rbind(exp_model, gau_model, sph_model)
# Crear el gráfico combinado usando ggplot2
ggplot() +
geom_point(data = as.data.frame(variogram), aes(x = dist, y = gamma), size = 2) +
geom_line(data = models, aes(x = dist, y = gamma, color = model), size = 1) +
scale_color_manual(values = c("red", "green", "blue")) +
labs(title = "Comparison of Variogram Models",
x = "Distance",
y = "Semivariance",
color = "Model") +
theme_minimal()
El gráfico muestra la comparación de los tres modelos teóricos de semivariogramas (exponencial, gaussiano y esférico) superpuestos sobre el semivariograma empírico. A continuación, se presenta el análisis detallado:
Los puntos negros representan la semivarianza empírica en función de la distancia entre las muestras.
La semivarianza aumenta con la distancia y parece estabilizarse alrededor de una distancia de 0.06 a 0.08, indicando el rango de la dependencia espacial.
Modelo Exponencial (línea roja): Muestra un ajuste razonable a los datos empíricos, especialmente en distancias más cortas.
Modelo Gaussiano (línea verde): Tiene un comportamiento inusual al principio con una pendiente muy pronunciada, pero se estabiliza rápidamente. Este modelo parece no ajustarse bien a los datos empíricos en las distancias cortas e intermedias.
Modelo Esférico (línea azul): Muestra un buen ajuste a los datos empíricos, capturando bien la variabilidad en las distancias cortas e intermedias, y estabilizándose correctamente en el rango observado.
Conclusiones
De los tres modelos, el modelo esférico parece proporcionar el mejor ajuste general a los datos empíricos, capturando tanto las distancias cortas como las intermedias de manera adecuada.
El modelo exponencial también es un buen ajuste, especialmente en distancias cortas, aunque tiene incovenientes en distancias intermedias.
El modelo no parece ser el más adecuado para estos datos debido a su comportamiento inusual y su incapacidad para capturar correctamente la variabilidad en las distancias intermedias.
Por último, se realiza la proyección espacial utilizando la metodología kriging y su correspondiente imagen:
suppressMessages(library(automap))
# Re-proyectar los datos a un sistema de coordenadas proyectadas (por ejemplo, UTM)
data_selected_proj <- spTransform(data_selected, CRS("+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs"))
# Crear una malla (grid) de nuevos puntos para la interpolación
# Definir un rango más apropiado para la malla
bbox <- bbox(data_selected_proj)
x.range <- seq(bbox[1,1], bbox[1,2], by = 1)
y.range <- seq(bbox[2,1], bbox[2,2], by = 1)
grd <- expand.grid(x = x.range, y = y.range)
coordinates(grd) <- ~ x + y
gridded(grd) <- TRUE
proj4string(grd) <- proj4string(data_selected_proj)
# Realizar el kriging
kriging_result <- autoKrige(Temperature ~ 1, data_selected_proj, new_data = grd)
## [using ordinary kriging]
# Plotear los resultados
spplot(kriging_result$krige_output, "var1.pred", main = "Kriging Prediction")
El gráfico actualizado muestra una interpolación de Kriging y un mapa de temperatura. A continuación, se presenta el análisis detallado:
El gráfico muestra una distribución continua de la temperatura en el área de estudio, con colores que van del azul oscuro (temperaturas más bajas) al amarillo brillante (temperaturas más altas).
La variabilidad espacial de la temperatura está delineada, con zonas de transición suave y otras con cambios más abruptos.
Se observan varios patrones de temperatura en forma de bandas o franjas, lo que sugiere que la temperatura varía de manera sistemática en el área.
Las áreas con temperaturas más altas (colores amarillos) y más bajas (colores azules oscuros) están distribuidas de manera que parecen seguir un patrón geográfico o ambiental.
Las áreas con temperaturas extremas son identificables. Estas zonas, pueden ser críticas para la gestión agrícola, especialmente en relación con el crecimiento de cultivos sensibles a la temperatura.
Las áreas de alta temperatura (amarillo brillante) podrían requerir prácticas de manejo específicas, como riego adicional o sombra, para proteger los cultivos de altas temperaturas.
Los patrones espaciales observados en el gráfico pueden estar influenciados por factores ambientales o topográficos, como la altitud, la exposición al sol, la proximidad a cuerpos de agua, entre otros.
El modelo de Kriging proporciona un mapa detallado y continuo de la temperatura, que es valioso para la planificación y la toma de decisiones en la gestión agrícola.