Aplicación de Modelos mixtos para estudiar el comportamiento de la temperatura en Colombia
Cambio Climático
El cambio climático se refiere a los cambios a largo plazo de las temperaturas y los patrones climáticos. Estos cambios pueden ser naturales, por ejemplo, a través de las variaciones del ciclo solar. Pero desde el siglo XIX, las actividades humanas han sido el principal motor del cambio climático, debido principalmente a la quema de combustibles fósiles como el carbón, el petróleo y el gas. La quema de combustibles fósiles genera emisiones de gases de efecto invernadero que actúan como una manta que envuelve a la Tierra, atrapando el calor del sol y elevando las temperaturas.
Base de datos
A continuación se presenta una base de datos con la temperatura promedio por departamento en Colombia entre los años 2000 a 2020, de la cual puede obtener un contexto climático del país en la actualidad. Los datos fueron obtenidos de Climate Knowledge Portal, el cual proporciona una variedad de datos globales sobre “el clima, las vulnerabilidades y los impactos históricos y futuros”. Los datos históricos observados fueron producidos por la Unidad de Investigación Climática (CRU) de la Universidad de East Anglia.
#librerias
library(readxl)
library(tidyverse)
library(kableExtra)
library(nlme)| Anio | Dpto | Temp |
|---|---|---|
| 2000 | Amazonas | 26.19 |
| 2001 | Amazonas | 26.22 |
| 2002 | Amazonas | 26.47 |
| 2003 | Amazonas | 26.56 |
| 2004 | Amazonas | 26.49 |
| 2005 | Amazonas | 26.48 |
| 2006 | Amazonas | 26.35 |
| 2007 | Amazonas | 26.26 |
| 2008 | Amazonas | 26.13 |
| 2009 | Amazonas | 26.48 |
| 2010 | Amazonas | 26.70 |
| 2011 | Amazonas | 26.36 |
| 2012 | Amazonas | 26.30 |
| 2013 | Amazonas | 26.49 |
| 2014 | Amazonas | 26.50 |
| 2015 | Amazonas | 26.87 |
| 2016 | Amazonas | 26.91 |
| 2017 | Amazonas | 26.51 |
| 2018 | Amazonas | 26.41 |
| 2019 | Amazonas | 26.79 |
| 2020 | Amazonas | 26.61 |
| 2000 | Antioquia | 22.34 |
| 2001 | Antioquia | 22.87 |
| 2002 | Antioquia | 23.02 |
| 2003 | Antioquia | 23.07 |
| 2004 | Antioquia | 22.84 |
| 2005 | Antioquia | 23.00 |
| 2006 | Antioquia | 22.84 |
| 2007 | Antioquia | 22.73 |
| 2008 | Antioquia | 22.46 |
| 2009 | Antioquia | 23.00 |
| 2010 | Antioquia | 23.19 |
| 2011 | Antioquia | 22.80 |
| 2012 | Antioquia | 23.14 |
| 2013 | Antioquia | 23.34 |
| 2014 | Antioquia | 23.51 |
| 2015 | Antioquia | 23.75 |
| 2016 | Antioquia | 23.77 |
| 2017 | Antioquia | 23.16 |
| 2018 | Antioquia | 23.08 |
| 2019 | Antioquia | 23.50 |
| 2020 | Antioquia | 23.43 |
| 2000 | Arauca | 25.54 |
| 2001 | Arauca | 26.07 |
| 2002 | Arauca | 26.15 |
| 2003 | Arauca | 26.32 |
| 2004 | Arauca | 25.97 |
| 2005 | Arauca | 26.12 |
| 2006 | Arauca | 25.92 |
| 2007 | Arauca | 25.97 |
| 2008 | Arauca | 25.66 |
| 2009 | Arauca | 26.12 |
| 2010 | Arauca | 26.40 |
| 2011 | Arauca | 26.01 |
| 2012 | Arauca | 26.13 |
| 2013 | Arauca | 26.31 |
| 2014 | Arauca | 26.38 |
| 2015 | Arauca | 26.79 |
| 2016 | Arauca | 26.92 |
| 2017 | Arauca | 26.18 |
| 2018 | Arauca | 25.96 |
| 2019 | Arauca | 26.34 |
| 2020 | Arauca | 26.33 |
| 2000 | Atlantico | 27.41 |
| 2001 | Atlantico | 27.91 |
| 2002 | Atlantico | 27.99 |
| 2003 | Atlantico | 28.09 |
| 2004 | Atlantico | 27.76 |
| 2005 | Atlantico | 28.01 |
| 2006 | Atlantico | 27.89 |
| 2007 | Atlantico | 27.81 |
| 2008 | Atlantico | 27.52 |
| 2009 | Atlantico | 27.96 |
| 2010 | Atlantico | 28.24 |
| 2011 | Atlantico | 27.75 |
| 2012 | Atlantico | 28.14 |
| 2013 | Atlantico | 28.35 |
| 2014 | Atlantico | 28.45 |
| 2015 | Atlantico | 28.66 |
| 2016 | Atlantico | 28.73 |
| 2017 | Atlantico | 28.14 |
| 2018 | Atlantico | 27.99 |
| 2019 | Atlantico | 28.31 |
| 2020 | Atlantico | 28.34 |
| 2000 | Bolivar | 26.56 |
| 2001 | Bolivar | 27.10 |
| 2002 | Bolivar | 27.24 |
| 2003 | Bolivar | 27.31 |
| 2004 | Bolivar | 27.04 |
| 2005 | Bolivar | 27.25 |
| 2006 | Bolivar | 27.09 |
| 2007 | Bolivar | 26.99 |
| 2008 | Bolivar | 26.70 |
| 2009 | Bolivar | 27.22 |
| 2010 | Bolivar | 27.45 |
| 2011 | Bolivar | 27.01 |
| 2012 | Bolivar | 27.41 |
| 2013 | Bolivar | 27.59 |
| 2014 | Bolivar | 27.73 |
| 2015 | Bolivar | 27.94 |
La base de datos está compuesta por 3 variables y 672 observaciones descritas a continuación:
- Temp: Temperatura promedio por año. Variable respuesta de tipo numérica.
- Anio: Año de cuando se observó la temperatura. Variable explicativa de tipo entero.
- Dpto: Departamento donde se obtuvo la temperatura, de tipo factor con 33 niveles
Objetivo
El objetivo de estudio es aplicar los conceptos vistos de modelos mixtos o modelos jerárquicos para estudiar cómo el cambio climático está afectando a Colombia en sus diferentes departamentos.
Análisis descriptivo
Se análiza un total de 32 departamentos, con una temperatura máxima de 28.74 °C y una temperatura miníma de 15.94°C. En el gráfico a continuación, se observa como los 32 departamentos tienden a tener una pendiente similar, con un comportamiento al parecer no completamente lineal, lo cual se debe verificar con una prueba formal. Por otro lado, se puede observar con claridad que el intercepto en el eje vertical es diferente para cada uno de ellos.
ggplot(df, aes(x=Anio, y=Temp, color=Dpto)) + geom_point()El clima de Colombia está determinado por aspectos geográficos y atmosféricos tales como precipitaciones, latitud, altitud, humedad atmosférica, entre otras. Los mismos generan un amplio mosaico de climas y microclimas en Colombia, que van desde los más calurosos (30°C en las costas y llanuras) hasta los más fríos, con temperaturas bajo 0 °C en los picos de las montañas de la Cordillera de los Andes y la Sierra Nevada de Santa Marta.. En el siguiente gráfico se pretende ilustrar dicha situación con sólo algunos de los 32 departamentos, se observa cómo en general la temperatura entre ellos es muy distinta. Entre otras anotaciones, por ejemplo, el departamento de Amazonas tiene una temperatura más uniforme, a diferencia de Anquioquia y Nariño donde tiende a variar en mayor magnitud.
ggplot(df[df$Dpto %in% d,], aes(y=Temp, x= Dpto))+
geom_boxplot(fill=rainbow(7),alpha=0.7)+
labs(title = 'Gráfico de cajas para la temperatura por departamento', x = 'Departamentos', y='Temperatura')En la siguiente figura se puede observar que la temperatura promedio, desde el año 2000 al 2020, varía según los departamentos. Por esta razón se desea probar la hipótesis de que la temperatura promedio es distinta en cada uno de los departamentos y ajustar diferentes modelos variando el intercepto y/o la pendiente como efectos aleatorios.
ggplot(df, aes(x=Anio, y=Temp, color=Dpto)) + geom_point(alpha=0.7) + facet_wrap(~ Dpto)Modelos
Modelo 1
Se considera el siguiente donde se pretende modelar el valor esperado de la distribución de la temperatura como función de la variable regreso que el ano y ademas considerando el intercepto aleatorio debido a que en el análisis descriptivo pudimos notar que la dispersion de algunos puntos empiezas a niveles distintos del eje y
\[ \text {Temperatura}_{i j} \sim N\left(\mu_{i j}, \sigma^{2}\right) \\ \mu_{i j}=\beta_{0}+\beta_{1} \text {Año}_{i j}+b_{0 i} \\ b_{0} \sim N\left(0, \sigma_{b 0}^{2}\right) \\ i=1,2, \ldots, 20 . \quad j=1,2, \ldots, 32 \]
Modelo 2
Se considera el mismo modelo anterior pero ahora agregando una pendiente aleatoria en función del año.
\[ \text { Temperatura }_{i j} \sim N\left(\mu_{i j}, \sigma^{2}\right) \\ \mu_{i j}=\beta_{0}+\beta_{1} \text {Año}_{i j}+b_{0 i}+b_{1 i} \text {Año}_{i j} \\ \left(\begin{array}{l} b_{0} \\ b_{1} \end{array}\right) \sim N\left(\left(\begin{array}{l} 0 \\ 0 \end{array}\right),\left(\begin{array}{lr} \sigma_{b 0}^{2} & \sigma_{b 01}^{2} \\ \sigma_{b 01}^{2} & \sigma_{b 1}^{2} \end{array}\right)\right) \\ i=1,2, \ldots, 20 . \quad j=1,2, \ldots, 32 \]
Modelo 3
Ahora consideramos este modelo agregando una componente cuadratica al año debido que los puntos se nota cierta curvatura.
\[ \text { Temperatura }_{i j} \sim N\left(\mu_{i j}, \sigma^{2}\right) \\ \mu_{i j}=\beta_{0}+\beta_{1} \text {Año}_{i j}+ \beta_{2} \text {Año}_{i j}^{2}+b_{0 i} \\ b_{0} \sim N\left(0, \sigma_{b 0}^{2}\right)\\ i=1,2, \ldots, 20 . \quad j=1,2, \ldots, 32 \]
Construcción de los Modelos
En esta sección se muestra el código de R usado para ajustar cada modelo de la sección anterior, con su respectivo resumen.
Modelo 1
#intercepto aleatorio
fit1 <- lme(Temp ~ 1 + Anio, random =~ 1 | Dpto, data = df)
summary(fit1)## Linear mixed-effects model fit by REML
## Data: df
## AIC BIC logLik
## 397.1751 415.2042 -194.5875
##
## Random effects:
## Formula: ~1 | Dpto
## (Intercept) Residual
## StdDev: 3.406551 0.2645875
##
## Fixed effects: Temp ~ 1 + Anio
## Value Std.Error DF t-value p-value
## (Intercept) -52.68083 3.441130 639 -15.30917 0
## Anio 0.03815 0.001686 639 22.63328 0
## Correlation:
## (Intr)
## Anio -0.985
##
## Standardized Within-Group Residuals:
## Min Q1 Med Q3 Max
## -2.32442236 -0.69727294 -0.02500592 0.70225068 2.21211921
##
## Number of Observations: 672
## Number of Groups: 32
Modelo 2
#intercepto y pendiente aleatoria
fit2 <- lme(Temp ~ 1 + Anio, random =~ 1 + Anio | Dpto, data = df)
summary(fit2)## Linear mixed-effects model fit by REML
## Data: df
## AIC BIC logLik
## 401.1751 428.2187 -194.5875
##
## Random effects:
## Formula: ~1 + Anio | Dpto
## Structure: General positive-definite, Log-Cholesky parametrization
## StdDev Corr
## (Intercept) 3.406552e+00 (Intr)
## Anio 7.161794e-08 0.001
## Residual 2.645875e-01
##
## Fixed effects: Temp ~ 1 + Anio
## Value Std.Error DF t-value p-value
## (Intercept) -52.68083 3.441130 639 -15.30917 0
## Anio 0.03815 0.001686 639 22.63328 0
## Correlation:
## (Intr)
## Anio -0.985
##
## Standardized Within-Group Residuals:
## Min Q1 Med Q3 Max
## -2.32442239 -0.69727295 -0.02500593 0.70225069 2.21211924
##
## Number of Observations: 672
## Number of Groups: 32
Modelo 3
#intercepto y exploración curvatura
fit3 <- lme(Temp ~ 1 + Anio + I(Anio^2), random =~ 1 | Dpto, data = df)
summary(fit3)## Linear mixed-effects model fit by REML
## Data: df
## AIC BIC logLik
## 412.5599 435.0888 -201.28
##
## Random effects:
## Formula: ~1 | Dpto
## (Intercept) Residual
## StdDev: 3.406551 0.264604
##
## Fixed effects: Temp ~ 1 + Anio + I(Anio^2)
## Value Std.Error DF t-value p-value
## (Intercept) 1157.7608 1261.7425 638 0.9175888 0.3592
## Anio -1.1663 1.2555 638 -0.9289569 0.3533
## I(Anio^2) 0.0003 0.0003 638 0.9593448 0.3377
## Correlation:
## (Intr) Anio
## Anio -1
## I(Anio^2) 1 -1
##
## Standardized Within-Group Residuals:
## Min Q1 Med Q3 Max
## -2.28729004 -0.70256689 -0.02354677 0.69298025 2.22519113
##
## Number of Observations: 672
## Number of Groups: 32
Comparación de los modelos
Modelo 1
#intercepto aleatorio
pred1 <- fitted(fit1)
ggplot(data = df, aes(x = Anio, y = Temp, colour = Dpto)) +
geom_point() + labs(title ="Ajuste del modelo 1")+ theme_bw()+
facet_wrap(~ factor(Dpto)) + geom_line(aes(y =pred1), colour="black")Modelo 2
#intercepto y pendiente aleatoria
pred2 <- fitted(fit2)
ggplot(data = df, aes(x = Anio, y = Temp, colour = Dpto)) +
geom_point() + labs(title ="Ajuste del modelo 2")+ theme_bw()+
facet_wrap(~ factor(Dpto)) + geom_line(aes(y =pred2), colour="black")Modelo 3
#intercepto y exploración curvatura
pred3 <- fitted(fit3)
ggplot(data = df, aes(x = Anio, y = Temp, colour = Dpto)) +
geom_point() + labs(title ="Ajuste del modelo 3")+ theme_bw()+
facet_wrap(~ factor(Dpto)) + geom_line(aes(y =pred3), colour="black")Pruebas de hipótesis para componentes de varianza (Modelo 1 vs Modelo 2)
Prueba para la significancia de la componente la componente de varianza para el intercepto aleatorio.
\[ H_{0}: \sigma_{b 0}^{2}=0 \quad v s \quad H_{1}: \sigma_{b 0}^{2}>0 \]
Donde es el estadístico de prueba es: \[ \operatorname{lrt}=-2 \times(\log \operatorname{Lik}(\text { modelo } 1)-\log \operatorname{Lik}(\text { modelo } 2)) \]
anova1 <- anova(fit1, fit2)
anova1 %>% mutate(call = NULL) %>% kbl() %>% kable_styling(font_size = 12)| Model | df | AIC | BIC | logLik | Test | L.Ratio | p-value | |
|---|---|---|---|---|---|---|---|---|
| fit1 | 1 | 4 | 397.1751 | 415.2042 | -194.5875 | NA | NA | |
| fit2 | 2 | 6 | 401.1751 | 428.2187 | -194.5875 | 1 vs 2 | 2e-07 | 0.9999999 |
Así entonces, No se rechaza la hipótesis nula dado que el valor-p resulta ser mayor a un nivel de significancia \(0.01<\alpha<0.1\), es decir que, la componente de varianza para la pendiente aleatoria no es significativa ni contribuye a la explicación de la temperatura promedio en los departamentos de Colombia.
Prueba de hipótesis sobre el efecto fijo (modelo1 vs modelo3).
Prueba de hipótesis para la significancia de la componente asociada a \(Año^{2}\)
\[ H_{0}: \beta_{2}=0 \quad \text { vs } \quad H_{1}: \beta_{2} \neq 0 \]
Se evaluan las siguientes pruebas de hipótesis con el fin de comparar los modelos ajustados.
anova2 <- anova(fit1, fit3)
anova2 %>% mutate(call = NULL)%>% kbl() %>% kable_styling(font_size = 12)| Model | df | AIC | BIC | logLik | Test | L.Ratio | p-value | |
|---|---|---|---|---|---|---|---|---|
| fit1 | 1 | 4 | 397.1751 | 415.2042 | -194.5875 | NA | NA | |
| fit3 | 2 | 5 | 412.5599 | 435.0888 | -201.2800 | 1 vs 2 | 13.38484 | 0.0002537 |
Así entonces, No se rechaza la hipótesis nula dado que el valor-p = \(3e^{-4}\) resulta ser menor a un nivel de significancia \(0.01<\alpha<0.1\), es decir que, la componente de varianza para el componente cuadrático es significativa y contribuye a la explicación de la temperatura promedio en los departamentos de Colombia.
Por otro lado, se calcula la medida de error cuadrático medio (MSE) para cada modelo, siendo todos muy similares.
\[ \mathrm{MSE}=\frac{1}{n} \sum_{i=1}^{n}\left(Y_{i}-\hat{Y}_{i}\right)^{2} \]
| Modelo1 | Modelo2 | Modelo3 | |
|---|---|---|---|
| MSE | 0.0665696 | 0.0665696 | 0.0664738 |
Modelo final
Por lo tanto, a pesar de que el AIC y BIC no resultaron ser las de mejor resultado, se considera el Modelo 3, con el componente cuadrático, como el mejor modelo, dado que soporta lo observado gráficamente y resulta tener una leve disminución en el error cuadrático medio MSE.
\[ \text { Temperatura }_{i j} \sim N\left(\mu_{i j}, \sigma^{2}\right) \\ \mu_{i j}=1157.76-1.1663 \text {Año}_{i j}+ 0.0003 \text {Año}_{i j}^{2}+\tilde{b_{0 i}} \\ b_{0} \sim N\left(0, 0.2646^{2}\right)\\ i=1,2, \ldots, 20 . \quad j=1,2, \ldots, 32 \]
Análisis de residuales del Modelo Final
Observe que en el modelo3, los residuales cumple el supuesto de media en cero y homogeneidad en varianza y una correlación del 99.7% de los valores observados con los ajustados.
cor(fitted(fit3),df$Temp)## [1] 0.9970713
par(mfrow=c(1,2))
plot(residuals(fit3)~fitted(fit3), xlab = "Valores Ajustados", ylab = "Residuales", main = "Residuales modelo3", col="skyblue")
qqnorm(residuals(fit3), main = "Normal Q-Q Plot modelo3", col="skyblue")Conclusiones
Hay un certero aumento de la temperatura en Colombia, por lo cual no se puede ser ajeno a la búsqueda de soluciones para mitigar sus efectos, derretimiento de los nevados, incendios forestales, aumento en el nivel del mar y animales en peligro, entre muchos otros.
Referencias
United Nations. (s. f.). ¿Qué es el cambio climático? | Naciones Unidas. Recuperado febrero de 2022, de https://www.un.org/es/climatechange/what-is-climate-change
Barajas, F. H., & López Martínez, J. L. (2022). Modelos Mixtos con R. https://fhernanb.github.io/libro_modelos_mixtos/
World Bank Climate Change Knowledge Portal. (s. f.). Climate Change Knowledge Portal. Recuperado febrero de 2022, de https://climateknowledgeportal.worldbank.org/country/colombia/climate-data-historical
Colaboradores de Wikipedia. (2021, 30 diciembre). Clima de Colombia. Wikipedia, la enciclopedia libre. Recuperado febrero de 2022, de https://es.wikipedia.org/wiki/Clima_de_Colombia