En las últimas décadas el cambio climático ha provocado alteraciones en la variabilidad climática natural del planeta, lo que trae como resultado el incremento de temperaturas (incluso en valores promedio), que se manifiesta en olas de calor extremas, baja producción en los ecosistemas, eventos climáticos extremos y eventualmente afectará la seguridada alimentaria.
En este trabajo mostramos una aplicación de modelación estadística y geoestadística utilizando los datos temperaturas promedio para el mayo de 2023, obtenidas del Servicio Meteorológico Nacional (SMN) (https://smn.conagua.gob.mx/es/climatologia/temperaturas-y-lluvias/resumenes-mensuales-de-temperaturas-y-lluvias).
En este documento (Parte 1) nos enfocaremos en un análisis exploratorio de datos (EDA) de nivel global, es decir para México. Posteriormente (Parte 2), delimitaremos un subconjunto de Estados y realizaremos el EDA como insumo para investigar diferencias promedio en sus temperaturas. Es importante precisar que este ejercicio NO ES UN TRABAJO DE INVESTIGACIÓN RIGUROSO ó EXHAUSTIVO DE LAS TEMPERATURAS PROMEDIO, pero si se enfoca en una aplicación correcta de modelación estadística con fines educativos de estadística aplicada, caso particular Geoestadística.
list.of.packages <- c("tidyverse","ggplot2","writexl","here","glue","car","leaflet","readr")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
library(tidyverse)
library(ggplot2)
library(here)
library(glue)
library(writexl)
library(car)
library(leaflet)
library(readr)
rm(list = ls()) #Se limpia el ambiente de trabajo
datos <- read.csv('https://smn.conagua.gob.mx/tools/RESOURCES/com_archivo_datos_resumenes/202305010000TMed.csv')
here() #Para conocer la ubicación de trabajo
#> [1] "G:/Mi unidad/R/Projects/2024_GeoestU2 _ConAgregadosHMB"
exportados <- glue(here(),'/Exportados/') # especifico la ubicación pora exportar archivos
datos_originales <- glue(here(),'/DatosOriginales/') # especifico la ubicación pora archivos originales
bases_modificadas <- glue(here(),'/BasesModificadas/') # especifico la ubicación pora bases modificadas
write_xlsx(datos,glue(datos_originales,'/2305_Tmed.xlsx')) #Guardo la base original
######Resumen general
summary(datos$Tmed)
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 7.147 21.607 24.619 24.451 27.901 34.664
#######Boxplot
#R-base
boxplot(datos$Tmed,main = "Distribución de temperatura promedio",xlab = "ºC",ylab = "Frecuencia")
#ggplot2
ggplot(
data = datos, aes(x = 1 , y = Tmed)
) +
geom_boxplot() +
scale_x_discrete(name = "ºC") +
scale_y_continuous(name = "Frecuencia")
#######Histograma con diferentes opciones
# Histograma con ggplot2
hist(datos$Tmed, nclass=5,main = "Distribución de temperatura promedio",xlab = "ºC",ylab = "Frecuencia")
hist(datos$Tmed, nclass=10,main = "Distribución de temperatura promedio",xlab = "ºC",ylab = "Frecuencia")
hist(datos$Tmed, breaks = 20, col = "blue", border = "white",main = "Distribución de temperatura promedio",xlab = "ºC",ylab = "Frecuencia")
# Histograma con ggplot2
ggplot(datos, aes(x = Tmed)) +
geom_histogram() +
ggtitle("Distribución de temperatura promedio")
#Resumen por Estado
tapply(datos$Tmed, datos$Edo, summary)
#> $AGS
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 19.69 19.69 19.69 19.69 19.69 19.69
#>
#> $BC
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 9.913 16.342 17.517 18.950 22.623 28.127
#>
#> $BCS
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 16.42 21.40 24.45 23.12 24.74 27.77
#>
#> $CAMP
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 29.00 29.74 29.98 30.20 30.74 31.47
#>
#> $CDMX
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 15.03 18.56 20.13 19.44 20.79 21.39
#>
#> $CHIH
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 13.08 15.82 20.58 21.09 26.17 30.20
#>
#> $CHIS
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 21.39 26.97 29.72 28.18 30.70 31.67
#>
#> $COAH
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 22.90 26.15 27.16 26.71 27.41 28.60
#>
#> $COL
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 25.40 27.88 28.38 28.54 29.59 30.75
#>
#> $DGO
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 15.05 19.89 22.15 22.15 25.73 26.99
#>
#> $GRO
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 18.46 25.28 27.97 27.81 30.09 34.66
#>
#> $GTO
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 18.44 21.61 22.65 22.54 23.63 26.05
#>
#> $HGO
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 14.73 20.23 21.29 22.51 24.96 28.69
#>
#> $JAL
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 20.85 23.18 24.46 24.67 25.62 29.11
#>
#> $MEX
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 7.147 17.444 18.838 18.502 19.583 28.905
#>
#> $MICH
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 18.09 21.86 22.77 24.35 24.80 34.05
#>
#> $MOR
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 14.29 24.79 26.15 25.65 28.00 30.67
#>
#> $NAY
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 22.94 25.86 28.53 27.91 29.59 32.47
#>
#> $NL
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 25.55 25.77 25.98 26.51 26.99 27.99
#>
#> $OAX
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 17.27 22.90 24.92 25.12 28.95 30.12
#>
#> $PUE
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 11.48 18.26 20.40 21.23 26.06 28.69
#>
#> $QRO
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 19.67 22.93 23.56 23.61 23.96 28.02
#>
#> $QROO
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 27.07 28.35 29.16 28.95 29.69 30.27
#>
#> $SIN
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 24.45 26.06 26.77 26.75 27.58 29.53
#>
#> $SLP
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 19.41 25.55 27.26 26.17 28.22 29.73
#>
#> $SON
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 15.58 22.69 23.74 23.71 24.62 29.18
#>
#> $TAB
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 29.07 29.87 30.15 30.22 30.34 31.78
#>
#> $TAMPS
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 24.43 26.36 27.43 27.35 28.22 31.22
#>
#> $TLAX
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 15.76 17.08 17.43 17.77 18.91 19.54
#>
#> $VER
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 15.55 22.16 27.93 25.89 29.16 30.94
#>
#> $YUC
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 27.40 28.83 29.68 29.64 30.24 32.26
#>
#> $ZAC
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 17.84 19.88 21.19 21.33 21.87 28.16
Tabla1 <- datos %>%
group_by(Edo) %>%
summarize(
Min = min(Tmed),
Mediana = median(Tmed),
Media = mean(Tmed),
sd = sd(Tmed),
Max = max(Tmed))
Tabla1
#> # A tibble: 32 × 6
#> Edo Min Mediana Media sd Max
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 AGS 19.7 19.7 19.7 NA 19.7
#> 2 BC 9.91 17.5 19.0 4.56 28.1
#> 3 BCS 16.4 24.5 23.1 2.95 27.8
#> 4 CAMP 29 30.0 30.2 0.736 31.5
#> 5 CDMX 15.0 20.1 19.4 1.77 21.4
#> 6 CHIH 13.1 20.6 21.1 5.51 30.2
#> 7 CHIS 21.4 29.7 28.2 3.61 31.7
#> 8 COAH 22.9 27.2 26.7 1.67 28.6
#> 9 COL 25.4 28.4 28.5 1.42 30.8
#> 10 DGO 15.1 22.2 22.2 3.89 27.0
#> # ℹ 22 more rows
write.table(Tabla1,glue(exportados,'/Tabla1.csv'))
write_xlsx(Tabla1,glue(exportados,'/Tabla1.xlsx'))
boxplot(datos$Tmed ~ datos$Edo, data = datos, col = "white")
stripchart(datos$Tmed ~ datos$Edo,
data = datos,
method = "jitter",
pch = 19,
col = 2:4,
vertical = TRUE,
add = TRUE)
#Con outliers
ggplot(
data = datos,
aes(x = Edo , y = Tmed)
) +
geom_boxplot() +
geom_point(
aes(color = Edo),
position =
position_jitter(width = 0.2),
alpha = 0.6
) +
scale_x_discrete(name="Estado")
#Sin outliers
ggplot(
data = datos,
aes(x = Edo , y = Tmed)
) +
geom_boxplot(outlier.shape = NA) +
geom_point(
aes(color = Edo),
position =
position_jitter(width = 0.2),
alpha = 0.6
) +
scale_x_discrete(name="Estado") +
scale_color_hue(guide = FALSE)
ggplot(datos) +
aes(x = Lon, y = Lat, colour = Edo) +
geom_point(shape = "circle") +
scale_color_hue(direction = 1) +
theme_minimal()
point_data <- datos
leaflet(point_data) %>%
fitBounds(lng1 = min(point_data$Lon) - 0.11,
lat1 = min(point_data$Lat) - 0.11,
lng2 = max(point_data$Lon) + 0.11,
lat2 = max(point_data$Lat) + 0.11) %>%
addCircleMarkers(~Lon, ~Lat,
radius = 1,
opacity = 10,
color = "red",
label = as.character(point_data$Tmed),
labelOptions = labelOptions(noHide = FALSE,
textOnly = TRUE,
style = list(color = "blue"),
direction = "right",
offset = c(0, -10))) %>%
addScaleBar(options = list(imperial = FALSE)) %>%
addProviderTiles(providers$Esri.WorldTopoMap)
Se ha mostrado cómo realizar un análisis estadístico y geoestadístico con énfasis en el EDA que nos ayudará a definir de mejor forma la información a emplear en un modelo espacial.