Evaluacion 1 - Calidad del aire y movilidad urbana

Jorge Retamoza, Erick Bernal, German Gómez

6/4/2022

Diferencias entre métodos supervisados y no supervisados

Machine Learning es una de las muchas disciplinas del campo de la IA (Inteligencia Artificial) que se encarga del uso de algoritmos que permiten que las máquinas aprendan, y esto se logra simulando la forma en que aprenden los humanos.

Figura 1. Machine Learning

Dentro del Machine learning podemos encontrar dos tipos que son los métodos supervisados y los no supervisados.

Métodos supervisados

Los algoritmos que son mediante métodos supervisados se basan en un conjunto de datos de entranamiento que son previamente etiquetados. Es decir, son datos ya introducidos por una persona. Estos datos introducidos le podrá permitir “aprender” generando datos de salida ya esperados por el hecho de que en los datos de entrada se han etiquetado. Dentro de los algoritmos supervisados podemos encontrar: -Los algoritmos de clasificacion que son encargados de clasificar un objeto entre diferentes clases. Como un ejemplo podría ser el clasificar si un correo electrónico dentro de tu bandeja es spam o no -Los algoritmos de regresión se encargan de poder predecir un valor de tipo númerico.

Algunos ejemplos con los que cuentan este tipo de algoritmos son modelos de regresión lineal y logística

Métodos no supervisados

En este tipo de métodos se basan en un conjunto de datos sin elementos etiquetados. No hay o no existe una interveción humana. Esto se logra buscando patrones o buscando si tienen alguna relacion entre ellos. Los métodos no supervisados son utilizados para las tareas de agrupamiento o también conocidas como “clustering” donde tiene como fin poder encontrar grupos parecidos dentro del conjunto de datos. Dentro de los métodos no supervisados podemos econtrar dos tipos de algoritmos que son: -Clustering: Que son encargados de clasificar en grupos los datos (como ya se mencionó previamente). -Asociación: Son encargados de descubrir “reglas” dentro del mismo conjunto de datos proporcionado.

Uno de los ejemplos de este tipo de métodos es K-means.

Proceso de resolución de problema usando ciencia de datos

-Entendimiento/Comprensión del tema: Para poder llevar a cabo la resolución de un problema primero se debe comprender el tema a tratar para poder tener bases en las cuales apoyarnos para poder resolver la problematica de manera exitosa.

-Enfoque: Una vez tenemos en claro el tema y lo comprendemos en su totalidad podremos definir cual será el enfoque que le daremos para nuestro análisis.

-Datos requeridos para el análisis: El enfoque establecido anteriormente es lo que nos va a ayudar a poder difinir los datos requeridos.

-Recopilación de datos: Al momento de tener todo lo anterior, los cientificos de datos reúnen los datos necesarios que se encuentren el alcance para poder realizar un análisis de la forma correcta acerca del tema.

-Comprensión de datos: Una vez se tengan los datos recopilados se utilizan estadísticas descriptivas/gráficos para poder visualizar y lograr comprender de mejor manera el contenido de los datos.

-Implementación: En esta parte del proceso es cuando desarrollamos el modelo de estudio y es aceptado como un buen modelo representativo de los datos utilizados.

-Retroalimentación: Se recopilan los resultados que ha dado el modelo que se ha implementado como lo es su rendimiento y su impacto según el entorno en el que se desarrolló.

1- Librerías usadas

library(pacman)
p_load("DT","xfun","ggplot2", "readr", "readxl", "corrplot","scales","anytime", "tidyverse", "lubridate", "forecast", "TTR", "MLmetrics", "tseries", "fpp", "TSstudio")
p_load(gridExtra,leaflet,TSstudio, dplyr, psych, GGally, corrplot)
  • DT: Permite mostrar matrices en tablas html.
  • xfun: Permite embeber dentro del documento archivos como pueden ser los documentos de datos o del mismo proyecto.
  • ggplot2: Nos permite generar gráficas.
  • readr: Permite leer archivos con extensión “.csv”. *corrplot: Nos proporciona una herramienta de exploración visual en la matriz de correlación que admite el reordenamiento automático de variables para ayudar a detectar patrones ocultos entre variables.
  • scales: Nos permite personalizar la apariencia de las etiquetas de ejes y leyendas. Y nos permite controlar como se generan las rupturas a partir de los límites.
  • anytime: Nos permite convertir una entrada en cualquier tipo de carácter.
  • tidyverse: Proporciona funciones clave de transformación de datos.
  • lubridate: Nos permite manipular de manera más facil datos de fechas y horas.
  • forecast: Nos ayuda a pronosticar a partir de series temporales.
  • TTR: Proporciona funciones de análisis técnico más populares para los datos del mercado financiero.
  • MLmetrics: Es una colección de métricas de evaluación.
  • tseries: Nos ayuda con el análisis de series temporales y finanzas computacionales.
  • fpp: Nos proporciona los conjuntos de datos necesarios para realizar pronósticos.
  • TSstudio: Proporciona un conjunto de herramientas para el análisis descriptivo y predictivo de datos de series temporales.
  • dplyr - Nos otorga la manipulación de datos que proporciona un conjunto consistente de verbos que lo ayudan a resolver los desafíos de manipulación de datos más comunes.

2.- Datos usados

datos <- read_excel("Concentracion.xlsx")
mov <- read_excel("Concentracion_Mov.xlsx")

Como podemos ver en la siguiente tabla se encuentran contenidos los datos que estaremos utilizando a lo largo del análisis. Como vemos la primeras tres columnas son los datos relacionados con los tres principales gases más contaminantes los cuales son:

* Ozono (O3)
* Dióxido de azufre (SO2)
* PM10.

Las demás columnas representan los datos de la movilidad que hubo de la población entre esos sectores.

datatable(datos)

3.- Introducción

La contaminación del aire es un problema frecuente que podemos observar en cualquier parte del mundo. Esta tiene efectos que perjudican a las personas y al planeta. La contaminación del aire esta compuesta por partículas sólidas y gases que se encuentran en el aire. Los principales contaminantes en el aire se han generado gracias a la mano humana.

Este estudio tuvo en cuenta los siguientes contaminantes:

* Material particulado (PM10)
* Ozono (O3)
* Dióxido de azufre (SO2)

Figura 1. Calidad del aire

El ozono (O3), un gas, es un componente fundamental de la contaminación del aire en las ciudades. Cuando el ozono forma la contaminación del aire también se denomina smog.

Se denomina PM10 a pequeñas partículas sólidas o líquidas de polvo, cenizas, hollín, partículas metálicas, cemento o polen, dispersas en la atmósfera

El dióxido de azufre (SO²), es un gas presente en la atmósfera como resultado de la combinación de azufre y oxígeno y su vida media es de dos a cuatro días.

Antecedentes

El municipio de Hermosillo inicia de manera formal el Programa de Monitoreo de la Calidad del Aire en el año 2004, los aparatos de muestreo son donados al municipio por SEMARNAT y son reinstalados en sitios céntricos pese al crecimiento urbano que ha rebasado en kilómetros las zonas marginales de diez años atrás (Barajas Olvera, 2007).

En Hermosillo sonora, la contaminación del aire es elevada y la población desconoce acerca de este hecho. Existen antecedentes para esta ciudad de medición de PST (Partículas suspendidas totales similares a las PM10) de 1990 a 1995, reportándose que todos esos años se rebasó el máximo permisible anual de 75 μg/m^3 con promedios anuales que fluctuaban de 126 hasta 565 μg/m^3.

4- Objetivos

Lo que se busca con este caso de estudio es ver y analizar el comportamiento de los datos con respecto a la calidad del aire y la movilidad urbana en estos años de pandemia.

Se quiere determinar si la hipótesis de que el decremento de la movilidad urbana hizo que la calidad del aire mejorará significativamente. Para esto se requiere poder ver si existe una relación determinante entre estas variables, también poder describirlas y realizar predicciones de las mismas.

Y para explicar todo esto se utilizarán las técnicas de análisis de relación, regresión lineal múltiple, análisis de series de tiempo, análisis de correlación, y EDA.

5.- Marco teórico

La contaminación del aire representa un importante riesgo medioambiental para la salud, tanto en los países desarrollados como en los países en desarrollo.

La OMS estima que aproximadamente el 58% de las muertes prematuras relacionadas con la contaminación atmosférica que se produjeron en 2016 se debieron a cardiopatías isquémicas y accidentes cerebrovasculares, mientras que el 18% de las muertes se debieron a enfermedades pulmonares obstructivas crónicas e infecciones respiratorias agudas, y el 6% de las muertes se debieron al cáncer de pulmón. Con los diferentes cambios climáticos experimentados a lo largo de los años el tema del medio ambiente ha sido un tema que empezó hacerse más popular entre las bocas de todos los ciudadanos del mundo, además de que gracias a la propagación de esta información a través de los medios y de distintas campañas la población se ha percatado de los daños que ocasionan con distintas acciones de su día a día, creando conciencia de ello y haciendo que cambien sus hábitos.

Los principales gases contaminantes y de los cuales serán de los que informaremos dentro de este análisis son: Material particulado (Pm10), Ozono (O3) y Dioxido de azufre(SO2).

Nuestra fuente de datos para la realización de este análisis provienen de la estación de calidad del aire de la ERNO ubicado en Hermosillo. Enlace a la fuente de datos: http://www.erno.geologia.unam.mx/

6- Métodos

Análisis de Relación entre el PM10 y la movilidad de supermercados y farmacias

El análisis de relación es aquel que se encarga de indentificar una posible relación entre variables. Es una forma básica de lo que es el análisis de datos y según el tipo de variable que sea puede ser llamado de asosiación o correlación.

En este caso se mostrará la relación entre el PM10 y la movilidad de los supermercados y farmacias.

gcov <- ggplot(data = mov) +
  geom_line(aes(Fecha, PM10, colour="PM10")) +
  geom_line(aes(Fecha, Supermercado_Farmacia, colour="Movilidad")) +
  xlab("Fecha") +
  ylab("Cantidad") +
  labs(colour="casos")+
  ggtitle("PM10 y la movilidad de supermercados y farmacias") +
  scale_y_continuous(labels = comma)
gcov

Gráfica 1. Análisis de Relación entre el PM10 y la movilidad de supermercados y farmacias

Ya viendo la gráfica nos podemos percatar de que pareciera que existe cierta relación entre el PM10 y la movilidad de farmacias, puesto que cuando la movilidad sube el PM10 también tiende a subir.

EDA (Exploratory Data Analysis)

En el procesamiento de datos, EDA es una herramienta que permite analizar conjuntos de datos para resumir sus características principales, la mayoría de las veces se lleva a cabo con métodos visuales. EDA es usado para ver que información podemos obtener antes de realizar el modelo.

Seleccionamos las variables que utilizaremos las cuales son O3, PM10, SO2 y supermercado_Farmacia

air <- data.frame(datos$SO2, datos$O3, datos$PM10) 

datos %>%   
  select(SO2, O3, PM10, Supermercado_Farmacia) -> datosdf 
  
  head(datosdf) 
## # A tibble: 6 x 4
##       SO2    O3  PM10 Supermercado_Farmacia
##     <dbl> <dbl> <dbl>                 <dbl>
## 1 -0.198   25.1  39.2                     6
## 2 -0.204   22.0  33.8                     6
## 3  0.0525  15.4  72.4                     4
## 4 -0.0438  14.2  59.5                    -1
## 5  0.135   15.7  74.4                    -1
## 6 -0.107   24.9  42.3                     0

Medidas de tendencia central del conjunto de datos

summary(datosdf) 
##       SO2                 O3             PM10        Supermercado_Farmacia
##  Min.   :-0.38083   Min.   : 1.04   Min.   :-18.21   Min.   :-37.000      
##  1st Qu.:-0.06396   1st Qu.:18.44   1st Qu.: 26.87   1st Qu.:-15.000      
##  Median : 0.20708   Median :23.65   Median : 36.27   Median :-10.000      
##  Mean   : 0.18734   Mean   :24.40   Mean   : 38.50   Mean   : -8.608      
##  3rd Qu.: 0.41125   3rd Qu.:31.14   3rd Qu.: 46.85   3rd Qu.: -2.000      
##  Max.   : 1.14917   Max.   :50.64   Max.   :100.09   Max.   : 33.000

Grafico de caja y bigote

boxplot(datosdf) 

Gráfica 2. Gráfico de caja y bigote

Se puede observar que los datos de SO2 se encuentran la mayoria sobre la media, ya que, todas las entradas de esta variable rondan entre -0 a 1.

Igualmente podemos observar que los datos del PM10 se encuentran mas dispersos y cuenta con mas datos unicos, su media de datos se encuentra por 40.

Graficos de dispersión

Se pueden observar los graficos de dispersión de los datos de O3, SO2 Y PM10

  • O3
plot(datos$O3)

Gráfica 3. Gráfico de dispersión del O3

Mediante este grafico podemos observar como los datos se encuentran dispersos de una maneras donde no se nota a simple vista un lugar donde se agrupen un gran grupo de datos.

  • SO2
plot(datos$SO2)

Gráfica 4. Gráfico de dispersión del O3

Este grafico cuenta con una mayor densidad de datos entre 0 y 0,5,

  • PM10
plot(datos$PM10)

Gráfica 4. Gráfico de dispersión del PM10

Finalmente en este grafico se nota una media entre 20 y 40.

Análisis de Correlación

El análisis de correlación se utiliza para lograr determinar la relación que existe entre las variables cuantitativas. Este análisis consiste en un procedimiento para poder determinar si dos varioables están relacionadas o no. El resultado que arroja dicho análisis es un coeficiente de correlación que puede tomar valores entre -1 y +1. El signo es el indicador de que tipo de correlación es el que existe entre las variables.

Estos tipos de análisis de correlación se conocen como: * Análisis de correlación positiva. * Análisis de correlación negativa.

A continuación se realizará la correlación de los datos sobre la calidad del aire, donde se analizarán los datos de O3, SO2, PM10, Reactivacion_Comercial, Supermercado_Farmacia, Parques_Centros, Estaciones_Tramsotp, Lugares_Trabajo y Residencia, para así poder observar como se relaciona cada dato con otro y observar cuales tienen una relación mas fuerte.

aire <- as.data.frame(datos)
round(cor(x = aire, method="pearson"), 3)
##                            O3    SO2   PM10 Reactivacion_Comercial
## O3                      1.000 -0.220 -0.229                 -0.193
## SO2                    -0.220  1.000  0.612                  0.404
## PM10                   -0.229  0.612  1.000                  0.281
## Reactivacion_Comercial -0.193  0.404  0.281                  1.000
## Supermercado_Farmacia  -0.047  0.443  0.280                  0.875
## Parques_Centros        -0.182  0.019  0.065                  0.814
## Estaciones_Transito    -0.174  0.399  0.270                  0.944
## Lugares_Trabajo        -0.119  0.138  0.100                  0.581
## Residencia              0.130 -0.371 -0.238                 -0.842
##                        Supermercado_Farmacia Parques_Centros
## O3                                    -0.047          -0.182
## SO2                                    0.443           0.019
## PM10                                   0.280           0.065
## Reactivacion_Comercial                 0.875           0.814
## Supermercado_Farmacia                  1.000           0.655
## Parques_Centros                        0.655           1.000
## Estaciones_Transito                    0.872           0.770
## Lugares_Trabajo                        0.492           0.371
## Residencia                            -0.729          -0.617
##                        Estaciones_Transito Lugares_Trabajo Residencia
## O3                                  -0.174          -0.119      0.130
## SO2                                  0.399           0.138     -0.371
## PM10                                 0.270           0.100     -0.238
## Reactivacion_Comercial               0.944           0.581     -0.842
## Supermercado_Farmacia                0.872           0.492     -0.729
## Parques_Centros                      0.770           0.371     -0.617
## Estaciones_Transito                  1.000           0.474     -0.758
## Lugares_Trabajo                      0.474           1.000     -0.853
## Residencia                          -0.758          -0.853      1.000

Análisis con histogramas

Los histogramas son gráficos que indican la frecuencia de un hecho mediante una distribución de los datos. Por lo tanto para tener un mejor enfoque de las variables se procedera a realizar este analis debido a que estos utilizan variables para su elaboración.

multi.hist(x = aire, dcol = c("red", "green"), dlty = c("dotted", "solid"))

Gráfica 5. Histograma de cada dato.

Aquí se puede observar graficamente como son los datos de las variables por separado.

Análisis de Dispersión de los datos

Mediante este grafico se puede observar como estan dispersos los datos, y la correlación que tiene cada variable.

ggpairs(datos, lower = list(continuous ="smooth"),
        diag = list (continuos = "barDiag"), axisLabels = "none")

Gráfica 6. Gráfico de dispersión de los datos.

Se puede observar como hay varias relaciones, como las del PM10 y SO2 con el Supermercado y Farmacias, esto es debido que proximo al lugar donde se tomaron las muestras de aire se encontraba una farmacia, lo que facilito la obtención de datos y que se le adjudicara a las farmacias.

Regresion lineal multiple

Un modelo de regresión linea multiple es un modelo estadístico que nos permite generar un modelo linea en el que el valor de la variable dependiente se determina según un conjunto de variables que son independientes las cuales son llamdas predictores. Es una extensión de lo que es la regresión lineal simple.

Modelo general de correlación

Se revisará la relación que tiene el PM10 con los supermercados y farmacias.

m <- lm(SO2 ~ Supermercado_Farmacia, data=datos)
summary(m)
## 
## Call:
## lm(formula = SO2 ~ Supermercado_Farmacia, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.77447 -0.16040 -0.00167  0.15632  0.98634 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           0.285796   0.015300   18.68   <2e-16 ***
## Supermercado_Farmacia 0.011437   0.001098   10.42   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2544 on 445 degrees of freedom
## Multiple R-squared:  0.1961, Adjusted R-squared:  0.1943 
## F-statistic: 108.5 on 1 and 445 DF,  p-value: < 2.2e-16

Se puede predecir el SO2 mediante los supermercados y farmacias con un 19% de exactitud, lo cual es bajo, pero, el p-value es menor a 0.05 lo que nos da a saber que las variables estan bastante relacionadas.

Modelo de regresión lineal múltiple.

Se evaluaran las variables predictoras para dar un primer modelo para saber cuales son mas significativas para el SO2.

modelo <- lm(SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + Parques_Centros + Estaciones_Transito + Lugares_Trabajo + Residencia, data = datos )
summary(modelo)
## 
## Call:
## lm(formula = SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Estaciones_Transito + Lugares_Trabajo + 
##     Residencia, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.51190 -0.09921 -0.00269  0.09870  0.52906 
## 
## Coefficients:
##                          Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            -0.0187954  0.0380324  -0.494 0.621416    
## O3                     -0.0057616  0.0009832  -5.860 9.10e-09 ***
## PM10                    0.0056324  0.0005408  10.415  < 2e-16 ***
## Reactivacion_Comercial  0.0096304  0.0020097   4.792 2.27e-06 ***
## Supermercado_Farmacia   0.0060624  0.0015668   3.869 0.000126 ***
## Parques_Centros        -0.0169489  0.0010860 -15.607  < 2e-16 ***
## Estaciones_Transito    -0.0018481  0.0013556  -1.363 0.173465    
## Lugares_Trabajo        -0.0106817  0.0009837 -10.858  < 2e-16 ***
## Residencia             -0.0352798  0.0041747  -8.451 4.32e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1582 on 438 degrees of freedom
## Multiple R-squared:  0.6938, Adjusted R-squared:  0.6882 
## F-statistic: 124.1 on 8 and 438 DF,  p-value: < 2.2e-16

Habiendo introducido todas las variables como predictores el modelo cuenta con un R2 de 0.6882, por lo que es capaz de explicar el 68.82% de la variabilidad observada en el SO2.

Evaluación del modelo

Se realizará una evaluación del modelo anteriormente visto, esto mediante el Akaike(AIC), el cual es una medida de la calidad relativa de un modelo estadístico, para un conjunto dado de dato. Este se basa en la entropía de información y ofrece una estimación de la información perdida cuando se utiliza un modelo determinado.

step(object = modelo, direction = "both", trace = 1)
## Start:  AIC=-1639.29
## SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Estaciones_Transito + Lugares_Trabajo + 
##     Residencia
## 
##                          Df Sum of Sq    RSS     AIC
## - Estaciones_Transito     1    0.0465 11.014 -1639.4
## <none>                                10.968 -1639.3
## - Supermercado_Farmacia   1    0.3749 11.343 -1626.3
## - Reactivacion_Comercial  1    0.5750 11.543 -1618.5
## - O3                      1    0.8600 11.828 -1607.5
## - Residencia              1    1.7883 12.756 -1573.8
## - PM10                    1    2.7161 13.684 -1542.4
## - Lugares_Trabajo         1    2.9523 13.920 -1534.7
## - Parques_Centros         1    6.0997 17.067 -1443.6
## 
## Step:  AIC=-1639.4
## SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Lugares_Trabajo + Residencia
## 
##                          Df Sum of Sq    RSS     AIC
## <none>                                11.014 -1639.4
## + Estaciones_Transito     1    0.0465 10.968 -1639.3
## - Supermercado_Farmacia   1    0.3298 11.344 -1628.2
## - Reactivacion_Comercial  1    0.6091 11.623 -1617.3
## - O3                      1    0.8366 11.851 -1608.7
## - Residencia              1    1.7647 12.779 -1575.0
## - PM10                    1    2.7569 13.771 -1541.5
## - Lugares_Trabajo         1    2.9217 13.936 -1536.2
## - Parques_Centros         1    6.0965 17.111 -1444.5
## 
## Call:
## lm(formula = SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Lugares_Trabajo + Residencia, data = datos)
## 
## Coefficients:
##            (Intercept)                      O3                    PM10  
##              -0.020842               -0.005669                0.005668  
## Reactivacion_Comercial   Supermercado_Farmacia         Parques_Centros  
##               0.008020                0.005439               -0.016944  
##        Lugares_Trabajo              Residencia  
##              -0.010417               -0.035005

Despues de realizar el proceso de AIC, nos da que el mejor modelo es

  • (formula = SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + Parques_Centros + Lugares_Trabajo + Residencia, data = datos)

Mejor Modelo

El modelo ajustado nos elimina la variable Estaciones_Transito.

modeloAIC <- (lm(formula = SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + 
    Parques_Centros + Lugares_Trabajo + Residencia, data = datos))
summary(modeloAIC)
## 
## Call:
## lm(formula = SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Lugares_Trabajo + Residencia, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5458 -0.1006 -0.0022  0.0964  0.5374 
## 
## Coefficients:
##                          Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            -0.0208416  0.0380399  -0.548 0.584047    
## O3                     -0.0056694  0.0009818  -5.775 1.46e-08 ***
## PM10                    0.0056679  0.0005407  10.482  < 2e-16 ***
## Reactivacion_Comercial  0.0080203  0.0016277   4.927 1.18e-06 ***
## Supermercado_Farmacia   0.0054386  0.0015000   3.626 0.000322 ***
## Parques_Centros        -0.0169444  0.0010870 -15.588  < 2e-16 ***
## Lugares_Trabajo        -0.0104169  0.0009653 -10.791  < 2e-16 ***
## Residencia             -0.0350045  0.0041739  -8.387 6.89e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1584 on 439 degrees of freedom
## Multiple R-squared:  0.6925, Adjusted R-squared:  0.6876 
## F-statistic: 141.2 on 7 and 439 DF,  p-value: < 2.2e-16

El modelo ajustado nos da un %68 de exactitud.

Intervalo de Confianza de los coeficientes

En la siguiente tabla podemos observar los intervalos de confianza de los coeficientes:

confint(lm(formula = SO2 ~ O3 + PM10 + Reactivacion_Comercial + Supermercado_Farmacia + 
    Parques_Centros + Lugares_Trabajo + Residencia, data = datos))
##                               2.5 %       97.5 %
## (Intercept)            -0.095604583  0.053921343
## O3                     -0.007599002 -0.003739801
## PM10                    0.004605203  0.006730588
## Reactivacion_Comercial  0.004821182  0.011219376
## Supermercado_Farmacia   0.002490524  0.008386774
## Parques_Centros        -0.019080816 -0.014808020
## Lugares_Trabajo        -0.012314119 -0.008519681
## Residencia             -0.043207808 -0.026801239

Se puede observar un intervalo de confianza del 97.5%.

Validación de condiciones para la regresión múltiple lineal.

plot1 <- ggplot(data = datos, aes(O3, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot2 <- ggplot(data = datos, aes(PM10, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot3 <- ggplot(data = datos, aes(Reactivacion_Comercial, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot4 <- ggplot(data = datos, aes(Supermercado_Farmacia, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot5 <- ggplot(data = datos, aes(Parques_Centros, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot6 <- ggplot(data = datos, aes(Lugares_Trabajo, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot7 <- ggplot(data = datos, aes(Residencia, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
grid.arrange(plot1, plot2, plot3, plot4, plot5, plot6, plot7)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Gráfica 7. Gráfico de residuales.

El SO2 tiene una distribucion con relacion a las demas variables anormal con un 97.5%,

Analizando la parte de Supermercado_Farmacia podemos observar que sus datos se encuentran dispersos, ademas de que no cuenta con una linea regular donde podemos observar picos por ejemplo en -20.

Variabilidad constante de los residuos

Para demostrar la variabilidad de los residuos se grafica una matriz donde se puede observar que tan relacionados estan las variables.

corrplot(cor(dplyr::select(datos, O3, PM10, Reactivacion_Comercial, Supermercado_Farmacia, Parques_Centros, Lugares_Trabajo, Residencia)),
         method = "number", tl.col = "black")

Gráfica 7. Matríz de correlación.

Esta matriz nos muestra las relaciones que existen entre cada una de las variable. El color rojo nos indica que tiene un mayor impacto cuando se correlacionan.

TSA (Time Series Analysis)

Time Series Analysis es una manera especifica de analizar una secuencia de datos recolectados en un intervalo de tiempo.En TSA los analistas registran puntos de datos a intervalos constantes durante un período de tiempo determinado en lugar de simplemente registrar los puntos de datos de forma intermitente o aleatoria.

anyNA(mov)
## [1] FALSE

Esto nos dice que no hay ningun dato faltante

Analisís de datos y descomposición de la serie de tiempo

A continuación se realizará un analisís de la seríe de tiempo tomando como variables el PM10.

qual <- ts(mov$PM10, start = 2017, end = 2028 ,frequency = 2)
qual
## Time Series:
## Start = c(2017, 1) 
## End = c(2028, 1) 
## Frequency = 2 
##  [1] 39.20583 33.75667 72.35500 59.46083 74.44708 42.33542 62.24417 30.70417
##  [9] 22.72583 29.09708 37.50750 21.02875 40.74500 50.33583 38.33417 32.31750
## [17] 28.50333 12.30250 26.29667 22.18625 31.20792 33.08542  9.11250
autoplot(qual)

Gráfica 8. Descomposición de serie de tiempo.

La descomposición de series de tiempo se usa para identificar componentes, reensamblando las partes para construir un pronóstico.

qualdc <- qual %>%
decompose(type="multiplicative") %>%
autoplot()  
qualdc

Gráfica 9. Descomposición de serie de tiempo multiplicativa.

cada uno de los componentes representa una de las categorías subyacentes de los patrones.

Validación cruzada

La validación cruzada es una técnica para ajustar hiperparámetros y producir medidas sólidas del rendimiento del modelo.

Aquí definiremos un 20% para pruebas y un 80% para entrenamiento.

test_qual <- tail(qual, 3) #20% para pruebas

train_qual <- head(qual, length(qual)-3) #80% para entrenamiento

Ajuste del modelo con Holt-Winters.

Se usará el metodo Holt-Winters para el ajuste del modelo, quees una ampliación perfeccionada del enfoque de la suavización exponencial,

qual_ses <- HoltWinters(x=train_qual, seasonal = "multiplicative")
qual_ses
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
## 
## Call:
## HoltWinters(x = train_qual, seasonal = "multiplicative")
## 
## Smoothing parameters:
##  alpha: 0.868512
##  beta : 0.2310532
##  gamma: 1
## 
## Coefficients:
##          [,1]
## a  31.8137400
## b  -0.4439777
## s1  0.9381583
## s2  0.6973795

Forecasting

Forecasting es el proceso de hacer predicciones sobre el futuro mediante el análisis estadístico de tendencias observadas en datos históricos.

Se usará el modelo dado por Holt-Winters para asi poder hacer la predicción

qual_forecast <- forecast(object = qual_ses, h=4)

Visualizando resultados

Tenemos 3 variables actualmente, los datos que ya teniamos, los de test y los entrenados.

Teniendo estos en cuenta se realiza una grafica para mostrar como se comporta cada uno.

qual %>%
  autoplot(series = "actual") +
  autolayer(qual_forecast$fitted, series = "train") +
  autolayer(qual_forecast$mean, series = "test") +
  theme_minimal()
## Warning: Removed 2 row(s) containing missing values (geom_path).

Gráfica 10. Serie de tiempo de comparación entre lo actual, entrenado y el test.

Se puede observar como por momentos la variable entrenada se llega a asemejar a la actual.

Evaluar la precisión del modelo

Esto se hace para saber que tan preciso fue la predicción dada.

eval_ses <- accuracy(qual_forecast, test_qual)
eval_ses
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set -5.197672 19.26240 15.21923 -17.37667 43.61137 1.0504454
## Test set     -2.062579 13.10816 10.92693 -57.76908 84.77694 0.7541868
##                     ACF1 Theil's U
## Training set -0.05535754        NA
## Test set     -0.36689851 0.9559035

De acuerdo con la prueba de precision el modelo tiene un error medio de: 43.4%

Utilizando el modelo SARIMA o ARIMA

Los modelos SARIMA (Seasonal Autoregressive Integrated Moving Average Model) captan el comportamiento puramente estacional de una serie.

Empezaremos haciendo una prueba al conjunto de datos

adf.test(qual)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  qual
## Dickey-Fuller = -2.8785, Lag order = 2, p-value = 0.2377
## alternative hypothesis: stationary

De acuerdo con el valor de P, los datos son estacionarios porque son mayores a 0.05

Analisis de ajuste

Se realiza el analisis de ajuste y se procede a representarse de manera grafíca

qual_diff <- qual %>%
  diff(lag=12) %>%
  diff(lag=1)

qual_diff %>%
  autoplot()

Gráfica 11. Análisis de ajuste

Analizando la serie de tiempo por medio de un modelo ARIMA

qual_auto <- auto.arima(y = train_qual, seasonal = T)
summary(qual_auto)
## Series: train_qual 
## ARIMA(0,1,0) 
## 
## sigma^2 = 312.1:  log likelihood = -81.52
## AIC=165.04   AICc=165.28   BIC=165.99
## 
## Training set error measures:
##                      ME     RMSE      MAE       MPE     MAPE      MASE
## Training set -0.8490189 17.21902 14.01056 -13.64256 40.69657 0.9670223
##                    ACF1
## Training set -0.4942984

Mediante el modelo ARIMA se obtuvo un menor porcentaje de error, el cual fue del 40.2%.

Datos reales vs SARIMA

Se mostrará los resultados de ARIMA representados en una grafica

train_qual %>%
  autoplot(series= "actual") +
  autolayer (qual_auto$fitted, series = "SARIMA auto") +
  theme_minimal()

Gráfica 12. Comparación entre datos reales y el metodo SARIMA

Se puede ver que el modelo actual y ARIMA cuentan con bastente similitud, lo que quiere decir que se podría hacer una buena estimación de los datos a futuro a pesar de su margen de error del 40%.

Analisis de los cambios diferenciales en la serie de tiempo

tsdisplay(qual_diff)

Gráfica 13. Analisis de los cambios diferenciales en la serie de tiempo

Aquí se pueden observar los cambios diferenciales de la serie de tiempo.

7.- Resultados y discusión

A simple vista los datos no parecen tener una relacion, pero analizandolos y teniendo los contextos de estos mismos podemos llegar a notar como ciertas cosas encajan formando asi una relacion entre datos, como por ejemplo la siguiente:

gcov

Gráfica 1. Análisis de Relación entre el PM10 y la movilidad de supermercados y farmacias

Como se vio anteriormente, el PM10 y la movilidad de supermercados y farmacias se encuentran relacionadas.

Variabilidad

Esta grafica nos muestra la relación que existe entre las variables. Lo que se ve rojo nos dice que tienen una relacion mas fuerte, por ejemplo, la relacion entre reactivacion comercial y residencia esta en rojo, esto quiere decir que puede existir una relación entre las variables.

corrplot(cor(dplyr::select(datos, O3, PM10, Reactivacion_Comercial, Supermercado_Farmacia, Parques_Centros, Lugares_Trabajo, Residencia)),
         method = "number", tl.col = "black")

Gráfica 7. Matríz de correlación.

Entrenamiento en serie de tiempo

Al momento de realizar un entrenamiento mediante un forecast en la serie de tiempo obtuvimos lo siguiente:

qual %>%
  autoplot(series = "actual") +
  autolayer(qual_forecast$fitted, series = "train") +
  autolayer(qual_forecast$mean, series = "test") +
  theme_minimal()
## Warning: Removed 2 row(s) containing missing values (geom_path).

Gráfica 10. Serie de tiempo de comparación entre lo actual, entrenado y el test.

Donde se puede observar como la linea “actual” de la grafica se asemeja a la otra linea “train”, la cual fue entrenada mediante metodos antes vistos.

8- Bibliografía

Gobierno de México. Efectos a la salud por la contaminación del aire ambiente. gob.mx. Recuperado 7 de abril de 2022, de https://www.gob.mx/cofepris/acciones-y-programas/3-efectos-a-la-salud-por-la-contaminacion-del-aire-ambiente#

OMS. (2021, 22 septiembre). Calidad del aire ambiente (exterior) y salud. who.int. Recuperado 7 de abril de 2022, de https://www.who.int/es/news-room/fact-sheets/detail/ambient-(outdoor)-air-quality-and-health

UNAM. Instituto de Geología. Recuperado 7 de abril de 2022, de http://www.erno.geologia.unam.mx/

9.- Conclusión

A lo largo de este caso se demostró como es que la movilidad urbana influye en la reducción de contaminación atmoférica y es muy interesante percatarse de que hasta los más pequeños detalles pueden ser relevantes.

En este documento se toma como referencia la movilidad de restaurantes y farmacias para ver cual fue el impacto en el PM10 a lo cual primero se realizó un análisis de relación el cual se puede ver a simple vista que están ligeramente relacionadas y ya en base a esto se realizó un modelo de regresión multiple y un análisis de series.

Y con todo esto podemos percatarnos de que no hay algo absoluto, se puede decir que si ayuda realmente el que haya baja movilidad a la calidad del aire, pero no es el único factor que se tiene que considerar.

10.- Descarga de código y datos

Descargar Proyecto:

xfun::embed_file("Evaluacion1.Rmd")

Download Evaluacion1.Rmd

Descargar Datos:

xfun::embed_file("Concentracion.xlsx")

Download Concentracion.xlsx

xfun::embed_file("Concentracion_Mov.xlsx")

Download Concentracion_Mov.xlsx