1 Carga de paquetes y acceso a la bbdd AireMadrid


Empezaremos por cargar los packages R que necesitaremos tener en memoria.

Conectamos a la BBDD AireMadrid.

Se carga datos a partir del año 2005 para las Estaciones de Control y el 2017 para los Sensores de Tráfico.

# Cargamos los paquetes necesarios para desarrollar la PEC

library("shiny")
# Para representar gráficamente la relaci?n entre variables
library("ggplot2")

# Para conectar con una BBDD PostgreSQL 
library("RPostgreSQL")

# Tratamiento de fechas
library(lubridate)

#library("useful")

library("dplyr")

library("agricolae")

# Guardamos el directorio de trabajo en una variable
directorioTrabajo <- getwd()

# Creamos la conexion
pw <- {
  "SoloLectura"
}
 
# Carga el driver PostgreSQL
drv <- dbDriver("PostgreSQL")
# Creamos la conexion a la BBDD postgres
# La variable connAireMadrid será la que utlizaremos en los comandos contra la BBDD
connAireMadrid <- dbConnect(drv, dbname = "AireMadrid",
                 host = "89.251.235.28", port = 45432,
                 user = "usrAireMadrid", password = pw)
rm(pw) 
 
# Validamos que se ha conectado
dbExistsTable(connAireMadrid, "datos")
## [1] TRUE
# Creamos un dataframe para cargar los datos de contaminacion
df_AireMadrid_Contaminacion <- dbGetQuery(connAireMadrid, "SELECT t.timestamp3, e.nombre, e.zona, m.abreviatura, d.valor from d_tiempo t, estaciones e, magnitudes m, datos d where t.id_tiempo=d.id_tiempo and e.estacion=d.estacion and m.magnitud_id=d.magnitud and t.ano>='2005' and d.magnitud in ('01', '06', '08', '10','14')")

# Creamos un dataframe para cargar los datos de trafico
df_AireMadrid_SensoresTrafico <- dbGetQuery(connAireMadrid, "SELECT t.timestamp3, e.nombre, e.zona, m.abreviatura, d.valor from d_tiempo t, estaciones e, magnitudes m, datos_sensores d where t.id_tiempo=d.id_tiempo and e.estacion=d.estacion and m.magnitud_id=d.magnitud and t.ano>='2017' and d.magnitud in ('102', '103')")

2 Vision general de los datos de Calidad del Aire


Muestra los datos generales correpondiente a las medidas recopiladas por las estaciones de control.

# Datos generales
nombreColumnas <- names(df_AireMadrid_Contaminacion)
numeroFilas <- dim.data.frame(df_AireMadrid_Contaminacion) [1]
numeroColumnas <- dim.data.frame(df_AireMadrid_Contaminacion) [2]

df_AireMadrid_Contaminacion$timestamp <- parse_date_time(df_AireMadrid_Contaminacion$timestamp3, orders="ymd hm")

# Trabajamos con una copia de los datos originales
df_AireMadrid_Contaminacion_Staging <- df_AireMadrid_Contaminacion

# Transformar Abreviatura, Zona y Nombre de la estacion en variable categorica
df_AireMadrid_Contaminacion_Staging$abreviatura <- factor(df_AireMadrid_Contaminacion_Staging$abreviatura)
df_AireMadrid_Contaminacion_Staging$zona <- factor(df_AireMadrid_Contaminacion_Staging$zona)
df_AireMadrid_Contaminacion_Staging$nombre <- factor(df_AireMadrid_Contaminacion_Staging$nombre)

Columnas del tipo de datos

nombreColumnas
## [1] "timestamp3"  "nombre"      "zona"        "abreviatura" "valor"

Tipo de las columnas

lapply(df_AireMadrid_Contaminacion_Staging, class)
## $timestamp3
## [1] "character"
## 
## $nombre
## [1] "factor"
## 
## $zona
## [1] "factor"
## 
## $abreviatura
## [1] "factor"
## 
## $valor
## [1] "numeric"
## 
## $timestamp
## [1] "POSIXct" "POSIXt"

Número de filas y columnas

cat("Numero Filas   : ", numeroFilas, "\nNumero Columnas: ", numeroColumnas)
## Numero Filas   :  9986631 
## Numero Columnas:  5

Resumen de los datos

En las variables categoricas se puede ver la distribucion de muestras del conjunto de datos.

summary(df_AireMadrid_Contaminacion_Staging)
##   timestamp3                     nombre        zona        abreviatura   
##  Length:9986631     Farolillo       : 557421   1:4813280   CO  :1671383  
##  Class :character   Casa de Campo   : 553694   2:1216038   NO2 :2713090  
##  Mode  :character   Escuelas Aguirre: 552805   3:1823637   O3  :1978154  
##                     Moratalaz       : 488051   4: 691621   PM10:1862380  
##                     Pza. del Carmen : 484372   5:1442055   SO2 :1761624  
##                     Arturo Soria    : 423151                             
##                     (Other)         :6927137                             
##      valor          timestamp                  
##  Min.   :  0.00   Min.   :2005-01-01 00:00:00  
##  1st Qu.:  5.23   1st Qu.:2007-04-27 03:00:00  
##  Median : 16.00   Median :2009-09-24 23:00:00  
##  Mean   : 27.97   Mean   :2010-07-27 10:22:58  
##  3rd Qu.: 43.00   3rd Qu.:2013-10-24 17:00:00  
##  Max.   :628.60   Max.   :2017-12-31 23:00:00  
## 
str(df_AireMadrid_Contaminacion_Staging)
## 'data.frame':    9986631 obs. of  6 variables:
##  $ timestamp3 : chr  "2005-01-01 00:00" "2005-01-01 00:00" "2005-01-01 00:00" "2005-01-01 00:00" ...
##  $ nombre     : Factor w/ 37 levels "Arturo Soria",..: 2 24 20 26 4 33 31 24 37 30 ...
##  $ zona       : Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 2 1 1 5 1 ...
##  $ abreviatura: Factor w/ 5 levels "CO","NO2","O3",..: 3 2 1 4 2 2 5 4 1 5 ...
##  $ valor      : num  3.74 70.09 3.7 40.77 99.9 ...
##  $ timestamp  : POSIXct, format: "2005-01-01 00:00:00" "2005-01-01 00:00:00" ...

Estaciones de Control

Listado de las Estaciones de Control de Calidad del Aire.

levels(df_AireMadrid_Contaminacion_Staging$nombre)
##  [1] "Arturo Soria"            "Avda. Ramón y Cajal"   
##  [3] "Barajas Pueblo"          "Barrio del Pilar"       
##  [5] "Casa de Campo"           "Castellana"             
##  [7] "Cuatro Caminos"          "El Pardo"               
##  [9] "Ensanche de Vallecas"    "Escuelas Aguirre"       
## [11] "Farolillo"               "Final C/ Alcalá"       
## [13] "Glorieta de Carlos V"    "Huerta Castañeda"      
## [15] "Juan Carlos I"           "Mendez Alvaro"          
## [17] "Moratalaz"               "Parque del Retiro"      
## [19] "Paseo Pontones"          "Paseo Recoletos"        
## [21] "Plaza Castilla"          "Pza. Castilla"          
## [23] "Pza. Cristo Rey"         "Pza. de España"        
## [25] "Pza. del Carmen"         "Pza. Dr. Marañón"     
## [27] "Pza. Fdez. Ladreda"      "Pza. Fernández Ladreda"
## [29] "Pza. Luca de Tena"       "Pza. M. de Salamanca"   
## [31] "Pza. Manuel Becerra"     "Sanchinarro"            
## [33] "Santa Eugenia"           "Tres Olivos"            
## [35] "Urb. Embajada"           "Vallecas"               
## [37] "Villaverde"

Primeras 20 lineas del conjunto de datos

head(df_AireMadrid_Contaminacion_Staging, n=20)
##          timestamp3               nombre zona abreviatura  valor
## 1  2005-01-01 00:00 Avda. Ramón y Cajal    1          O3   3.74
## 2  2005-01-01 00:00      Pza. de España    1         NO2  70.09
## 3  2005-01-01 00:00      Paseo Recoletos    1          CO   3.70
## 4  2005-01-01 00:00   Pza. Dr. Marañón    1        PM10  40.77
## 5  2005-01-01 00:00     Barrio del Pilar    1         NO2  99.90
## 6  2005-01-01 00:00        Santa Eugenia    2         NO2  70.75
## 7  2005-01-01 00:00  Pza. Manuel Becerra    1         SO2  49.78
## 8  2005-01-01 00:00      Pza. de España    1        PM10  12.28
## 9  2005-01-01 00:00           Villaverde    5          CO   3.12
## 10 2005-01-01 00:00 Pza. M. de Salamanca    1         SO2  57.03
## 11 2005-01-01 00:00     Barrio del Pilar    1          O3   5.42
## 12 2005-01-01 00:00            Farolillo    5          O3   2.80
## 13 2005-01-01 00:00  Pza. Manuel Becerra    1        PM10  15.66
## 14 2005-01-01 00:00      Pza. de España    1          O3   1.77
## 15 2005-01-01 00:00      Paseo Recoletos    1        PM10 111.50
## 16 2005-01-01 00:00 Pza. M. de Salamanca    1          CO   0.85
## 17 2005-01-01 00:00     Barrio del Pilar    1         SO2  18.14
## 18 2005-01-01 00:00    Huerta Castañeda    5        PM10  47.26
## 19 2005-01-01 00:00  Pza. Manuel Becerra    1         NO2  68.05
## 20 2005-01-01 00:00     Barrio del Pilar    1        PM10 150.90
##     timestamp
## 1  2005-01-01
## 2  2005-01-01
## 3  2005-01-01
## 4  2005-01-01
## 5  2005-01-01
## 6  2005-01-01
## 7  2005-01-01
## 8  2005-01-01
## 9  2005-01-01
## 10 2005-01-01
## 11 2005-01-01
## 12 2005-01-01
## 13 2005-01-01
## 14 2005-01-01
## 15 2005-01-01
## 16 2005-01-01
## 17 2005-01-01
## 18 2005-01-01
## 19 2005-01-01
## 20 2005-01-01

Boxplot con la distribución del conjunto de datos por abreviatura de magnitud

boxplot(df_AireMadrid_Contaminacion$valor~df_AireMadrid_Contaminacion$abreviatura)


3 Vision general de los datos de Sensores de tráfico


Muestra los datos generales correpondiente a las medidas recopiladas por las estaciones de control.

# Datos generales
nombreColumnasTrafico <- names(df_AireMadrid_SensoresTrafico)
numeroFilasTrafico <- dim.data.frame(df_AireMadrid_SensoresTrafico) [1]
numeroColumnasTrafico <- dim.data.frame(df_AireMadrid_SensoresTrafico) [2]

# Se crea una columna con timestamp en formato fecha
df_AireMadrid_SensoresTrafico$timestamp <- parse_date_time(df_AireMadrid_SensoresTrafico$timestamp3, orders="ymd hm")

# Se usa una copia de los datos originales
df_AireMadrid_SensoresTrafico_Staging <- df_AireMadrid_SensoresTrafico

# Transformar Abreviatura, Zona y Nombre de la estacion en variable categorica
df_AireMadrid_SensoresTrafico_Staging$abreviatura <- factor(df_AireMadrid_SensoresTrafico_Staging$abreviatura)
df_AireMadrid_SensoresTrafico_Staging$zona <- factor(df_AireMadrid_SensoresTrafico_Staging$zona)
df_AireMadrid_SensoresTrafico_Staging$nombre <- factor(df_AireMadrid_SensoresTrafico_Staging$nombre)

Columnas del tipo de datos

nombreColumnasTrafico
## [1] "timestamp3"  "nombre"      "zona"        "abreviatura" "valor"

Tipo de las columnas

lapply(df_AireMadrid_SensoresTrafico_Staging, class)
## $timestamp3
## [1] "character"
## 
## $nombre
## [1] "factor"
## 
## $zona
## [1] "factor"
## 
## $abreviatura
## [1] "factor"
## 
## $valor
## [1] "numeric"
## 
## $timestamp
## [1] "POSIXct" "POSIXt"

Número de filas y columnas

cat("Numero Filas   : ", numeroFilasTrafico, "\nNumero Columnas: ", numeroColumnasTrafico)
## Numero Filas   :  34018170 
## Numero Columnas:  5

Resumen de los datos

En las variables categoricas se puede ver la distribucion de muestras del conjunto de datos.

summary(df_AireMadrid_SensoresTrafico_Staging)
##   timestamp3       
##  Length:34018170   
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
##                    
##                                                                   nombre        
##  Ingeniero Emilio Herrera - Príncipe Carlos-Infanta Catalina Micaela:   25819  
##  13XL49PM01                                                          :   17460  
##  14XL36PM01                                                          :   17460  
##  16XC70PM01                                                          :   17460  
##  17NC04PM01                                                          :   17460  
##  17XC08PM01                                                          :   17460  
##  (Other)                                                             :33905051  
##  zona         abreviatura          valor      
##  1:16391695   CARGA:31197503   Min.   :  0.0  
##  2: 3782619   VMED : 2820667   1st Qu.:  5.0  
##  3: 8950064                    Median : 16.0  
##  4:  895833                    Mean   : 23.2  
##  5: 3997959                    3rd Qu.: 36.0  
##                                Max.   :194.0  
##                                               
##    timestamp                  
##  Min.   :2017-01-01 00:00:00  
##  1st Qu.:2017-04-04 11:00:00  
##  Median :2017-07-03 05:00:00  
##  Mean   :2017-07-04 06:04:08  
##  3rd Qu.:2017-10-04 18:00:00  
##  Max.   :2017-12-31 23:00:00  
## 
str(df_AireMadrid_SensoresTrafico_Staging)
## 'data.frame':    34018170 obs. of  6 variables:
##  $ timestamp3 : chr  "2017-01-01 00:00" "2017-01-01 00:00" "2017-01-01 00:00" "2017-01-01 00:00" ...
##  $ nombre     : Factor w/ 3960 levels " C/, Fuente Carrantona  - Paular-José Bergamín",..: 3379 3100 992 3098 3377 3097 1669 3096 3376 3873 ...
##  $ zona       : Factor w/ 5 levels "1","2","3","4",..: 3 3 2 3 3 3 2 3 3 3 ...
##  $ abreviatura: Factor w/ 2 levels "CARGA","VMED": 2 1 1 1 2 1 1 1 2 1 ...
##  $ valor      : num  63 3 1 3 7 2 2 3 54 0 ...
##  $ timestamp  : POSIXct, format: "2017-01-01" "2017-01-01" ...

Primeras 20 lineas del conjunto de datos

head(df_AireMadrid_SensoresTrafico_Staging, n=20)
##          timestamp3
## 1  2017-01-01 00:00
## 2  2017-01-01 00:00
## 3  2017-01-01 00:00
## 4  2017-01-01 00:00
## 5  2017-01-01 00:00
## 6  2017-01-01 00:00
## 7  2017-01-01 00:00
## 8  2017-01-01 00:00
## 9  2017-01-01 00:00
## 10 2017-01-01 00:00
## 11 2017-01-01 00:00
## 12 2017-01-01 00:00
## 13 2017-01-01 00:00
## 14 2017-01-01 00:00
## 15 2017-01-01 00:00
## 16 2017-01-01 00:00
## 17 2017-01-01 00:00
## 18 2017-01-01 00:00
## 19 2017-01-01 00:00
## 20 2017-01-01 00:00
##                                                        nombre zona
## 1                                                     PM43151    3
## 2                                                     PM10141    3
## 3                       Av, Daroca  - Av, Daroca-Casalarreina    2
## 4                                                     PM10091    3
## 5                                                     PM43032    3
## 6                                                     PM10021    3
## 7                       C/, Casalarreina  - Ezcaray-Cordovín    2
## 8                                                     PM10013    3
## 9                                                     PM43031    3
## 10 Valle de Mena S-E - Acc,Ramon Castroviejo-Gta,Isaac Rabín    3
## 11  C/, Fuente Carrantona  - Mario Cabré-Luis de Hoyos Sainz    2
## 12                                                    PM40005    3
## 13                                                    PM43022    3
## 14                                                    PM40001    3
## 15             Ctra, Canillas - Carril del Conde-Matapozuelos    3
## 16            Av,  Mediterraneo E-O - Abtao-Pl, Mariano Cavia    1
## 17                                                    PM43021    3
## 18                   Dr, Esquerdo S-N - Estrella Polar-Astros    1
## 19                     C/, Silvano - Algabeño-Av, Machupichu    3
## 20                   Seco S-N - Gandia - Av, Ciudad Barcelona    1
##    abreviatura valor  timestamp
## 1         VMED    63 2017-01-01
## 2        CARGA     3 2017-01-01
## 3        CARGA     1 2017-01-01
## 4        CARGA     3 2017-01-01
## 5         VMED     7 2017-01-01
## 6        CARGA     2 2017-01-01
## 7        CARGA     2 2017-01-01
## 8        CARGA     3 2017-01-01
## 9         VMED    54 2017-01-01
## 10       CARGA     0 2017-01-01
## 11       CARGA     1 2017-01-01
## 12       CARGA     1 2017-01-01
## 13        VMED     7 2017-01-01
## 14       CARGA     3 2017-01-01
## 15       CARGA     2 2017-01-01
## 16       CARGA     1 2017-01-01
## 17        VMED    56 2017-01-01
## 18       CARGA     2 2017-01-01
## 19       CARGA     1 2017-01-01
## 20       CARGA     1 2017-01-01

Boxplot con la distribución del conjunto de datos por abreviatura de magnitud

boxplot(df_AireMadrid_SensoresTrafico_Staging$valor~df_AireMadrid_SensoresTrafico_Staging$abreviatura)


4 Analisis Dióxido de Nitrogeno (NO2)


El dióxido de nitrógeno es un contaminante cuya principal fuente emisora es el tráfico rodado, particularmente los vehículos que utilizan diésel como combustible. También puede ser producido en la atmósfera de manera indirecta debido a procesos químicos por la oxidación del monóxido de nitrógeno (NO).

Los valores de NO2 contemplados en el Plan del Aire del Ayuntamiento de Madrid son:

VALOR LIMITE HORARIO para la protección de la salud humana 200 µg/m3 que no podrán superarse en más de 18 ocasiones al año.

VALOR LIMITE ANUAL para la protección de la salud humana 40 µg/m3.

4.1 Revisión general de los datos

# Creamos las variables con los valores limite
ValorLimiteHorario <- 200
ValorLimiteAnual <- 40

# Se asigna a una variable los datos correspondientes a NO2
df_AireMadrid_ContaminacionNO2 <- df_AireMadrid_Contaminacion_Staging[df_AireMadrid_Contaminacion_Staging$abreviatura=='NO2',]

# Se añaden campos de year, month y weekday al conjunto de datos
df_AireMadrid_ContaminacionNO2$year <- factor(year(df_AireMadrid_ContaminacionNO2$timestamp))
df_AireMadrid_ContaminacionNO2$month <- factor(month(df_AireMadrid_ContaminacionNO2$timestamp))
df_AireMadrid_ContaminacionNO2$weekday <- factor(weekdays(df_AireMadrid_ContaminacionNO2$timestamp))

# Identificacion de los Outliers
outliers <- boxplot.stats(df_AireMadrid_ContaminacionNO2$valor)$out

#Posicion de los Outliers
indexOutliers <- which( df_AireMadrid_ContaminacionNO2$valor %in% outliers)

df_AireMadrid_ContaminacionNO2_sinOutliers <- df_AireMadrid_ContaminacionNO2[-indexOutliers,]

Número de filas y columnas

numeroFilasNO2 <- dim.data.frame(df_AireMadrid_ContaminacionNO2) [1]
numeroColumnasNO2 <- dim.data.frame(df_AireMadrid_ContaminacionNO2) [2]

cat("Numero Filas   : ", numeroFilasNO2, "\nNumero Columnas: ", numeroColumnasNO2)
## Numero Filas   :  2713090 
## Numero Columnas:  9

Frecuencia de las variables categóricas Zona y Nombre de la estación

Zonas

table(df_AireMadrid_ContaminacionNO2$zona)
## 
##       1       2       3       4       5 
## 1278156  325923  584823  180048  344140

Estaciones de control

table(df_AireMadrid_ContaminacionNO2$nombre)
## 
##            Arturo Soria    Avda. Ramón y Cajal          Barajas Pueblo 
##                  112114                  112064                  112016 
##        Barrio del Pilar           Casa de Campo              Castellana 
##                  109016                  110977                   64717 
##          Cuatro Caminos                El Pardo    Ensanche de Vallecas 
##                  112039                   69071                   68908 
##        Escuelas Aguirre               Farolillo        Final C/ Alcalá 
##                  111064                  111505                   43607 
##    Glorieta de Carlos V       Huerta Castañeda           Juan Carlos I 
##                   16594                   43635                   68627 
##           Mendez Alvaro               Moratalaz       Parque del Retiro 
##                   68789                  111454                   68400 
##          Paseo Pontones         Paseo Recoletos          Plaza Castilla 
##                   42712                   37043                   66452 
##           Pza. Castilla         Pza. Cristo Rey         Pza. de España 
##                   33005                   42657                  111977 
##         Pza. del Carmen      Pza. Dr. Marañón      Pza. Fdez. Ladreda 
##                  110895                   42638                   42847 
## Pza. Fernández Ladreda       Pza. Luca de Tena    Pza. M. de Salamanca 
##                   67476                   42282                   42263 
##     Pza. Manuel Becerra             Sanchinarro           Santa Eugenia 
##                   43549                   69122                   33715 
##             Tres Olivos           Urb. Embajada                Vallecas 
##                   67465                  111872                  111846 
##              Villaverde 
##                   78677

Resumen de los datos

En las variables categoricas se puede ver la distribucion de muestras del conjunto de datos.

summary(df_AireMadrid_ContaminacionNO2)
##   timestamp3                         nombre        zona       
##  Length:2713090     Arturo Soria        : 112114   1:1278156  
##  Class :character   Avda. Ramón y Cajal: 112064   2: 325923  
##  Mode  :character   Cuatro Caminos      : 112039   3: 584823  
##                     Barajas Pueblo      : 112016   4: 180048  
##                     Pza. de España     : 111977   5: 344140  
##                     Urb. Embajada       : 111872              
##                     (Other)             :2041008              
##  abreviatura        valor          timestamp                  
##  CO  :      0   Min.   :  0.00   Min.   :2005-01-01 00:00:00  
##  NO2 :2713090   1st Qu.: 21.00   1st Qu.:2008-01-28 22:00:00  
##  O3  :      0   Median : 40.00   Median :2011-05-08 11:00:00  
##  PM10:      0   Mean   : 47.40   Mean   :2011-05-27 01:17:47  
##  SO2 :      0   3rd Qu.: 65.22   3rd Qu.:2014-10-02 03:00:00  
##                 Max.   :628.60   Max.   :2017-12-31 23:00:00  
##                                                               
##       year             month              weekday      
##  2005   : 226289   10     : 234222   domingo  :388328  
##  2006   : 220097   5      : 233419   jueves   :387052  
##  2008   : 216532   7      : 233309   lunes    :387142  
##  2007   : 215226   3      : 233214   martes   :387361  
##  2012   : 209872   1      : 232024   miércoles:387591  
##  2017   : 209065   12     : 229640   sábado   :388421  
##  (Other):1416009   (Other):1317262   viernes  :387195

El mismo resumen sin los outliers.

summary(df_AireMadrid_ContaminacionNO2_sinOutliers)
##   timestamp3                    nombre        zona        abreviatura   
##  Length:2645865     Barajas Pueblo : 110838   1:1237271   CO  :      0  
##  Class :character   Casa de Campo  : 110792   2: 319313   NO2 :2645865  
##  Mode  :character   Vallecas       : 110652   3: 575582   O3  :      0  
##                     Arturo Soria   : 110510   4: 179862   PM10:      0  
##                     Farolillo      : 110190   5: 333837   SO2 :      0  
##                     Pza. del Carmen: 109655                             
##                     (Other)        :1983228                             
##      valor          timestamp                        year        
##  Min.   :  0.00   Min.   :2005-01-01 00:00:00   2005   : 215075  
##  1st Qu.: 21.00   1st Qu.:2008-02-24 13:00:00   2008   : 210374  
##  Median : 39.00   Median :2011-06-04 08:00:00   2006   : 209565  
##  Mean   : 44.47   Mean   :2011-06-12 23:41:46   2012   : 207691  
##  3rd Qu.: 63.00   3rd Qu.:2014-10-11 23:00:00   2016   : 206465  
##  Max.   :131.50   Max.   :2017-12-31 23:00:00   2007   : 205773  
##                                                 (Other):1390922  
##      month              weekday      
##  5      : 230680   domingo  :383035  
##  7      : 229688   jueves   :374762  
##  3      : 229242   lunes    :377639  
##  10     : 226399   martes   :376952  
##  4      : 224239   miércoles:376349  
##  6      : 223031   sábado   :381680  
##  (Other):1282586   viernes  :375448

4.2 Gráficos generales de los datos

Se muestran 2 gráficas tipo Boxplot con distribucion de las medidas de NO2 por año. La primera gráfica muestra lo datos como se cargan desde la BBDD y la segunda después de eliminar los valores vuera de rango (outliers).

Eliminados los outliers se puede apreciar mejor la tendencia del NO2 desde 2005.

Boxplot NO2

boxplot(df_AireMadrid_ContaminacionNO2$valor~year(df_AireMadrid_ContaminacionNO2$timestamp))

Boxplot NO2 sin outliers

boxplot(df_AireMadrid_ContaminacionNO2_sinOutliers$valor~df_AireMadrid_ContaminacionNO2_sinOutliers$year)

El siguiente gráfico muestra todos los valores en el tiempo coloreados por la zona donde se recopilaron. La linea indica el Valor Límite Anual

ggplot(df_AireMadrid_ContaminacionNO2,aes(x=timestamp,y=valor,color=zona)) +
  geom_point() +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Gráfico de NO2") +
  xlab(label="Fecha") +
  ylab(label="Valor NO2") + 
  geom_hline(yintercept = ValorLimiteAnual)

Las siguientes gráficas muestra los datos agrupados por diferentes campos. No se incluyen los outliers

1.- Media por año

2.- Media por mes

3.- Media por dia de la semana

4.- Media por zona

5.- Media por estación de control

Media por año

Muestra la tendencia que ya se indicaba la gráfica boxplot.

NO2_por_year <- df_AireMadrid_ContaminacionNO2_sinOutliers%>%group_by(year)%>%summarise(Avg_NO2=mean(valor,na.rm=TRUE))

ggplot(NO2_por_year,aes(x=year,y=Avg_NO2,fill=Avg_NO2)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Media de NO2 por año") +
  xlab(label="Año") +
  ylab(label="Media NO2") +
  scale_fill_gradient2(low="green",high="red",mid="orange",midpoint=ValorLimiteAnual) + 
  geom_hline(yintercept = ValorLimiteAnual)

Media por mes

NO2_por_mes <- df_AireMadrid_ContaminacionNO2_sinOutliers%>%group_by(month)%>%summarise(Avg_NO2=mean(valor,na.rm=TRUE))

ggplot(NO2_por_mes,aes(x=month,y=Avg_NO2,fill=Avg_NO2)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Media de NO2 por mes") +
  xlab(label="Mes") +
  ylab(label="Media NO2") +
  scale_fill_gradient2(low="green",high="red",mid="orange",midpoint=ValorLimiteAnual) + 
  geom_hline(yintercept = ValorLimiteAnual)

Media por dia de la semana

NO2_por_weekday <- df_AireMadrid_ContaminacionNO2_sinOutliers%>%group_by(weekday)%>%summarise(Avg_NO2=mean(valor,na.rm=TRUE))

ggplot(NO2_por_weekday,aes(x=weekday,y=Avg_NO2,fill=Avg_NO2)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Media de NO2 por Dia de la Semana") +
  xlab(label="Dia de la Semana") +
  ylab(label="Media NO2") +
  scale_fill_gradient2(low="green",high="red",mid="orange",midpoint=ValorLimiteAnual) + 
  scale_x_discrete(limits=c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo")) + 
  geom_hline(yintercept = ValorLimiteAnual)

Media por zona

NO2_por_zona <- df_AireMadrid_ContaminacionNO2_sinOutliers%>%group_by(zona)%>%summarise(Avg_NO2=mean(valor,na.rm=TRUE))

ggplot(NO2_por_zona,aes(x=zona,y=Avg_NO2,fill=Avg_NO2)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Media de NO2 por Zona") +
  xlab(label="Zona") +
  ylab(label="Media NO2") +
  scale_fill_gradient2(low="green",high="red",mid="orange",midpoint=ValorLimiteAnual) + 
  geom_hline(yintercept = ValorLimiteAnual)

Media por estación de control

NO2_por_estacion <- df_AireMadrid_ContaminacionNO2_sinOutliers%>%group_by(nombre)%>%summarise(Avg_NO2=mean(valor,na.rm=TRUE))


ggplot(NO2_por_estacion,aes(x=nombre,y=Avg_NO2,fill=Avg_NO2)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=90)) +
  ggtitle("Media de NO2 por Estación de Control") +
  xlab(label="Estación de Control") +
  ylab(label="Media NO2") +
  scale_fill_gradient2(low="green",high="red",mid="orange",midpoint=ValorLimiteAnual)  + 
  geom_hline(yintercept = ValorLimiteAnual)

4.3 Evolución de NO2 por año

En esta sección se analiza la tendencia de NO2 desde 2005. Las gráficas anteriores mostraban una evolución descriptiva. Ahora se ejecutará un test ANOVA para ver numéricamente los datos medios de cada año y que tendencia siguen los ultimos años. No se incluyen los outliers

El resultado de test indica que existe variacion entre los diferentes años y, por tanto, han habido cambios en los niveles de NO2 desde 2005 hasta 2017.

El valor de Pr(>F) es <2e-16 que nos confirma lo indicado anteriormente.

Resumen del test de ANOVA

#myaov <- aov( df_AireMadrid_ContaminacionNO2$valor~df_AireMadrid_ContaminacionNO2$year, df_AireMadrid_ContaminacionNO2 )
myaov <- aov( df_AireMadrid_ContaminacionNO2_sinOutliers$valor~df_AireMadrid_ContaminacionNO2_sinOutliers$year, df_AireMadrid_ContaminacionNO2_sinOutliers )

summary( myaov )
##                                                      Df    Sum Sq  Mean Sq
## df_AireMadrid_ContaminacionNO2_sinOutliers$year      12 1.773e+08 14775524
## Residuals                                       2645852 2.057e+09      777
##                                                 F value Pr(>F)    
## df_AireMadrid_ContaminacionNO2_sinOutliers$year   19004 <2e-16 ***
## Residuals                                                         
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes y gráfica del test ANOVA

Los coeficientes muestran el cambio de tendencia de cada año respecto el 2005.

# Se preparan los coeficientes de la ANOVA para la gráfica
labels <- c("2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017")
aov_coefficients <- myaov$coefficients
aov_coefficients <- aov_coefficients[2:13]
aov_coefficients <- as.data.frame(cbind(aov_coefficients, labels))
aov_coefficients$aov_coefficients <- as.numeric(as.character(aov_coefficients$aov_coefficients))

aov_coefficients$aov_coefficients
##  [1]  -1.302796  -1.692311  -4.556214  -6.061150 -14.311272 -14.379866
##  [7] -19.358653 -22.353940 -22.997009 -18.182073 -19.465535 -17.313092
ggplot(aov_coefficients,aes(x=labels,y=aov_coefficients)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Coeficientes del test ANOVA") +
  xlab(label="Años") +
  ylab(label="Varianza")

Diferencia de varianzas entre años

Se muestran las diferencias entre los años.

Se puede observar que no hay similitudes entre los pares de años a excepción de 2011-2010(grupo f) y 2016-2012(grupo i) que son significativamente iguales.

Tomando como ejemplo el 2017 respecto años anteriores vemos que los valores se han ido incrementando. La tendencia ha aumentado desde el año 2011.

interval diff lwr upr p adj
2017-2016 2.15244331 1.8645626 2.4403240 0.0000000
2017-2015 0.86898089 0.5805401 1.1574216 0.0000000
2017-2014 5.68391696 5.3903394 5.9774945 0.0000000
2017-2013 5.04084742 4.7466280 5.3350668 0.0000000
2017-2012 2.04556055 1.7581038 2.3330173 0.0000000
2017-2011 -2.93322636 -3.2217539 -2.6446988 0.0000000

Test de Tukey’s HSD para agrupar años que tiene valores parecidos según el modelo ANOVA

HSD.test(myaov, "df_AireMadrid_ContaminacionNO2_sinOutliers$year", group=TRUE,console=TRUE,
main="HSD.test por Año")
## 
## Study: HSD.test por Año
## 
## HSD Test for df_AireMadrid_ContaminacionNO2_sinOutliers$valor 
## 
## Mean Square Error:  777.4944 
## 
## df_AireMadrid_ContaminacionNO2_sinOutliers$year,  means
## 
##      df_AireMadrid_ContaminacionNO2_sinOutliers.valor      std      r  Min
## 2005                                         56.75462 30.39981 215075 0.00
## 2006                                         55.45182 30.14095 209565 0.57
## 2007                                         55.06230 29.80414 205773 1.05
## 2008                                         52.19840 28.43592 210374 0.00
## 2009                                         50.69347 28.89251 199007 0.60
## 2010                                         42.44334 27.02384 196388 0.60
## 2011                                         42.37475 27.48096 204619 1.00
## 2012                                         37.39596 26.28612 207691 1.00
## 2013                                         34.40068 25.34401 189542 1.00
## 2014                                         33.75761 25.66665 191144 1.00
## 2015                                         38.57254 27.57997 204865 1.00
## 2016                                         37.28908 26.12715 206465 1.00
## 2017                                         39.44152 28.18078 205357 1.00
##        Max
## 2005 131.5
## 2006 131.5
## 2007 131.5
## 2008 131.5
## 2009 131.5
## 2010 131.5
## 2011 131.0
## 2012 131.0
## 2013 131.0
## 2014 131.0
## 2015 131.0
## 2016 131.0
## 2017 131.0
## 
## Alpha: 0.05 ; DF Error: 2645852 
## Critical Value of Studentized Range: 4.68492 
## 
## Groups according to probability of means differences and alpha level( 0.05 )
## 
## Treatments with the same letter are not significantly different.
## 
##      df_AireMadrid_ContaminacionNO2_sinOutliers$valor groups
## 2005                                         56.75462      a
## 2006                                         55.45182      b
## 2007                                         55.06230      c
## 2008                                         52.19840      d
## 2009                                         50.69347      e
## 2010                                         42.44334      f
## 2011                                         42.37475      f
## 2017                                         39.44152      g
## 2015                                         38.57254      h
## 2012                                         37.39596      i
## 2016                                         37.28908      i
## 2013                                         34.40068      j
## 2014                                         33.75761      k

Intervalos con las diferencias entre las medias

intervalosYear = TukeyHSD(myaov)
intervalosYear
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = df_AireMadrid_ContaminacionNO2_sinOutliers$valor ~ df_AireMadrid_ContaminacionNO2_sinOutliers$year, data = df_AireMadrid_ContaminacionNO2_sinOutliers)
## 
## $`df_AireMadrid_ContaminacionNO2_sinOutliers$year`
##                   diff         lwr         upr     p adj
## 2006-2005  -1.30279610  -1.5863215  -1.0192708 0.0000000
## 2007-2005  -1.69231125  -1.9771567  -1.4074658 0.0000000
## 2008-2005  -4.55621384  -4.8394629  -4.2729647 0.0000000
## 2009-2005  -6.06115011  -6.3484595  -5.7738407 0.0000000
## 2010-2005 -14.31127152 -14.5995742 -14.0229688 0.0000000
## 2011-2005 -14.37986583 -14.6651215 -14.0946102 0.0000000
## 2012-2005 -19.35865274 -19.6428252 -19.0744803 0.0000000
## 2013-2005 -22.35393960 -22.6449511 -22.0629281 0.0000000
## 2014-2005 -22.99700914 -23.2873717 -22.7066466 0.0000000
## 2015-2005 -18.18207308 -18.4672409 -17.8969052 0.0000000
## 2016-2005 -19.46553550 -19.7501369 -19.1809341 0.0000000
## 2017-2005 -17.31309219 -17.5980850 -17.0280993 0.0000000
## 2007-2006  -0.38951514  -0.6761857  -0.1028446 0.0004928
## 2008-2006  -3.25341773  -3.5385022  -2.9683333 0.0000000
## 2009-2006  -4.75835401  -5.0474729  -4.4692351 0.0000000
## 2010-2006 -13.00847542 -13.2985815 -12.7183693 0.0000000
## 2011-2006 -13.07706972 -13.3641478 -12.7899916 0.0000000
## 2012-2006 -18.05585663 -18.3418585 -17.7698548 0.0000000
## 2013-2006 -21.05114350 -21.3439417 -20.7583453 0.0000000
## 2014-2006 -21.69421304 -21.9863662 -21.4020598 0.0000000
## 2015-2006 -16.87927697 -17.1662679 -16.5922861 0.0000000
## 2016-2006 -18.16273939 -18.4491674 -17.8763114 0.0000000
## 2017-2006 -16.01029608 -16.2971131 -15.7234791 0.0000000
## 2008-2007  -2.86390259  -3.1502999  -2.5775053 0.0000000
## 2009-2007  -4.36883887  -4.6592525  -4.0784253 0.0000000
## 2010-2007 -12.61896027 -12.9103566 -12.3275639 0.0000000
## 2011-2007 -12.68755458 -12.9759365 -12.3991726 0.0000000
## 2012-2007 -17.66634149 -17.9536521 -17.3790309 0.0000000
## 2013-2007 -20.66162836 -20.9557050 -20.3675517 0.0000000
## 2014-2007 -21.30469789 -21.5981324 -21.0112634 0.0000000
## 2015-2007 -16.48976183 -16.7780569 -16.2014667 0.0000000
## 2016-2007 -17.77322425 -18.0609590 -17.4854895 0.0000000
## 2017-2007 -15.62078094 -15.9089029 -15.3326589 0.0000000
## 2009-2008  -1.50493627  -1.7937843  -1.2160882 0.0000000
## 2010-2008  -9.75505768 -10.0448938  -9.4652216 0.0000000
## 2011-2008  -9.82365199 -10.1104573  -9.5368467 0.0000000
## 2012-2008 -14.80243890 -15.0881669 -14.5167109 0.0000000
## 2013-2008 -17.79772576 -18.0902564 -17.5051951 0.0000000
## 2014-2008 -18.44079530 -18.7326804 -18.1489102 0.0000000
## 2015-2008 -13.62585924 -13.9125772 -13.3391412 0.0000000
## 2016-2008 -14.90932166 -15.1954762 -14.6231671 0.0000000
## 2017-2008 -12.75687835 -13.0434223 -12.4703344 0.0000000
## 2010-2009  -8.25012141  -8.5439268  -7.9563160 0.0000000
## 2011-2009  -8.31871571  -8.6095316  -8.0278998 0.0000000
## 2012-2009 -13.29750262 -13.5872562 -13.0077491 0.0000000
## 2013-2009 -16.29278949 -16.5892534 -15.9963256 0.0000000
## 2014-2009 -16.93585903 -17.2316859 -16.6400321 0.0000000
## 2015-2009 -12.12092296 -12.4116528 -11.8301931 0.0000000
## 2016-2009 -13.40438538 -13.6945596 -13.1142112 0.0000000
## 2017-2009 -11.25194207 -11.5425002 -10.9613839 0.0000000
## 2011-2010  -0.06859431  -0.3603916   0.2232030 0.9999061
## 2012-2010  -5.04738122  -5.3381198  -4.7566427 0.0000000
## 2013-2010  -8.04266808  -8.3400947  -7.7452414 0.0000000
## 2014-2010  -8.68573762  -8.9825293  -8.3889459 0.0000000
## 2015-2010  -3.87080156  -4.1625131  -3.5790900 0.0000000
## 2016-2010  -5.15426398  -5.4454218  -4.8631062 0.0000000
## 2017-2010  -3.00182067  -3.2933611  -2.7102802 0.0000000
## 2012-2011  -4.97878691  -5.2665042  -4.6910697 0.0000000
## 2013-2011  -7.97407378  -8.2685477  -7.6795998 0.0000000
## 2014-2011  -8.61714332  -8.9109760  -8.3233107 0.0000000
## 2015-2011  -3.80220725  -4.0909077  -3.5135068 0.0000000
## 2016-2011  -5.08566967  -5.3738106  -4.7975288 0.0000000
## 2017-2011  -2.93322636  -3.2217539  -2.6446988 0.0000000
## 2013-2012  -2.99528687  -3.2887117  -2.7018620 0.0000000
## 2014-2012  -3.63835640  -3.9311376  -3.3455752 0.0000000
## 2015-2012   1.17657966   0.8889494   1.4642099 0.0000000
## 2016-2012  -0.10688276  -0.3939514   0.1801859 0.9912621
## 2017-2012   2.04556055   1.7581038   2.3330173 0.0000000
## 2014-2013  -0.64306954  -0.9424932  -0.3436458 0.0000000
## 2015-2013   4.17186653   3.8774776   4.4662555 0.0000000
## 2016-2013   2.88840411   2.5945639   3.1822443 0.0000000
## 2017-2013   5.04084742   4.7466280   5.3350668 0.0000000
## 2015-2014   4.81493606   4.5211886   5.1086835 0.0000000
## 2016-2014   3.53147364   3.2382761   3.8246712 0.0000000
## 2017-2014   5.68391696   5.3903394   5.9774945 0.0000000
## 2016-2015  -1.28346242  -1.5715164  -0.9954084 0.0000000
## 2017-2015   0.86898089   0.5805401   1.1574216 0.0000000
## 2017-2016   2.15244331   1.8645626   2.4403240 0.0000000

4.4 Evolución de NO2 por meses del año

En esta sección se analiza la tendencia de NO2 desde 2005 pero basado en los meses del año. Las gráficas anteriores mostraban una evolución descriptiva. Ahora se ejecutará un test ANOVA para ver numéricamente los datos medios de cada mes y que tendencia siguen durante el año. No se incluyen los outliers

El resultado de test indica que la variacion entre los diferentes meses es mayor que dentro de los meses.

El valor de Pr(>F) es <2e-16 que nos confirma lo indicado anteriormente.

Resumen del test de ANOVA

#myaov <- aov( df_AireMadrid_ContaminacionNO2$valor~df_AireMadrid_ContaminacionNO2$year, df_AireMadrid_ContaminacionNO2 )
myaov_meses <- aov( df_AireMadrid_ContaminacionNO2_sinOutliers$valor~df_AireMadrid_ContaminacionNO2_sinOutliers$month, df_AireMadrid_ContaminacionNO2_sinOutliers )

summary( myaov_meses )
##                                                       Df    Sum Sq
## df_AireMadrid_ContaminacionNO2_sinOutliers$month      11 1.357e+08
## Residuals                                        2645853 2.099e+09
##                                                   Mean Sq F value Pr(>F)
## df_AireMadrid_ContaminacionNO2_sinOutliers$month 12334708   15550 <2e-16
## Residuals                                             793               
##                                                     
## df_AireMadrid_ContaminacionNO2_sinOutliers$month ***
## Residuals                                           
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes y gráfica del test ANOVA

Los coeficientes muestran las diferencias respecto a Enero.

# Se preparan los coeficientes de la ANOVA para la gráfica
labels_meses <- c("febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre")
aov_coefficients_meses <- myaov_meses$coefficients
aov_coefficients_meses <- aov_coefficients_meses[2:12]
aov_coefficients_meses <- as.data.frame(cbind(aov_coefficients_meses, labels_meses))
aov_coefficients_meses$aov_coefficients <- as.numeric(as.character(aov_coefficients_meses$aov_coefficients))
aov_coefficients_meses$aov_coefficients
##  [1]  -3.741714 -10.202213 -14.690437 -16.357395 -16.107249 -16.052047
##  [7] -18.813937 -10.242001  -3.750330  -1.450551   2.743677
ggplot(aov_coefficients_meses,aes(x=labels_meses,y=aov_coefficients)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Coeficientes del test ANOVA") +
  xlab(label="Meses") +
  ylab(label="Varianza") + 
  scale_x_discrete(limits=c("febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"))

Diferencia de varianzas entre meses

Se muestran las diferencias entre los meses.

Se puede observar que no hay similitudes entre los meses Enero(grupo b), Abril(grupo f), Agosto(grupo i), Noviembre(c) y Diciembre(grupo a). Sin embargo si que se aprecia parecidos significativos entre los meses Febrero-Octubre(grupo d), Marzo-Septiembre(grupo e) y Junio con Mayo y Julio (grupos g y h).

Los meses de invierno son los que muestran peores datos de NO2, especialmente Diciembre. Los meses de primavera y verano son los que presentan mejores valores.

Test de Tukey’s HSD para agrupar meses que tiene valores parecidos según el modelo ANOVA

HSD.test(myaov_meses, "df_AireMadrid_ContaminacionNO2_sinOutliers$month", group=TRUE,console=TRUE,
main="HSD.test por meses")
## 
## Study: HSD.test por meses
## 
## HSD Test for df_AireMadrid_ContaminacionNO2_sinOutliers$valor 
## 
## Mean Square Error:  793.226 
## 
## df_AireMadrid_ContaminacionNO2_sinOutliers$month,  means
## 
##    df_AireMadrid_ContaminacionNO2_sinOutliers.valor      std      r  Min
## 1                                          53.62642 29.08521 222668 0.60
## 10                                         49.87609 28.92013 226399 0.60
## 11                                         52.17587 28.81577 217704 0.01
## 12                                         56.37010 28.77447 219049 0.60
## 2                                          49.88470 30.07560 190639 0.00
## 3                                          43.42421 28.49038 229242 0.00
## 4                                          38.93598 27.17442 224239 0.00
## 5                                          37.26902 26.70450 230680 0.32
## 6                                          37.51917 26.79479 223031 0.64
## 7                                          37.57437 27.37959 229688 0.60
## 8                                          34.81248 26.46317 212547 0.57
## 9                                          43.38442 29.32281 219979 0.96
##      Max
## 1  131.5
## 10 131.5
## 11 131.5
## 12 131.5
## 2  131.5
## 3  131.5
## 4  131.5
## 5  131.5
## 6  131.5
## 7  131.5
## 8  131.5
## 9  131.5
## 
## Alpha: 0.05 ; DF Error: 2645853 
## Critical Value of Studentized Range: 4.621655 
## 
## Groups according to probability of means differences and alpha level( 0.05 )
## 
## Treatments with the same letter are not significantly different.
## 
##    df_AireMadrid_ContaminacionNO2_sinOutliers$valor groups
## 12                                         56.37010      a
## 1                                          53.62642      b
## 11                                         52.17587      c
## 2                                          49.88470      d
## 10                                         49.87609      d
## 3                                          43.42421      e
## 9                                          43.38442      e
## 4                                          38.93598      f
## 7                                          37.57437      g
## 6                                          37.51917     gh
## 5                                          37.26902      h
## 8                                          34.81248      i

Intervalos con las diferencias entre las medias

intervalos_meses = TukeyHSD(myaov_meses)
intervalos_meses
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = df_AireMadrid_ContaminacionNO2_sinOutliers$valor ~ df_AireMadrid_ContaminacionNO2_sinOutliers$month, data = df_AireMadrid_ContaminacionNO2_sinOutliers)
## 
## $`df_AireMadrid_ContaminacionNO2_sinOutliers$month`
##                diff          lwr         upr     p adj
## 2-1    -3.741714390  -4.02891321  -3.4545156 0.0000000
## 3-1   -10.202213328 -10.47607486  -9.9283518 0.0000000
## 4-1   -14.690437409 -14.96580013 -14.4150747 0.0000000
## 5-1   -16.357395171 -16.63083579 -16.0839546 0.0000000
## 6-1   -16.107248858 -16.38298288 -15.8315148 0.0000000
## 7-1   -16.052047345 -16.32577783 -15.7783169 0.0000000
## 8-1   -18.813936656 -19.09304742 -18.5348259 0.0000000
## 9-1   -10.242001371 -10.51868935  -9.9653134 0.0000000
## 10-1   -3.750329502  -4.02503697  -3.4756220 0.0000000
## 11-1   -1.450551376  -1.72796564  -1.1731371 0.0000000
## 12-1    2.743677396   2.46669411   3.0206607 0.0000000
## 3-2    -6.460498938  -6.74579199  -6.1752059 0.0000000
## 4-2   -10.948723019 -11.23545742 -10.6619886 0.0000000
## 5-2   -12.615680781 -12.90056981 -12.3307918 0.0000000
## 6-2   -12.365534468 -12.65262546 -12.0784435 0.0000000
## 7-2   -12.310332955 -12.59550022 -12.0251657 0.0000000
## 8-2   -15.072222266 -15.36255794 -14.7818866 0.0000000
## 9-2    -6.500286981  -6.78829432  -6.2122796 0.0000000
## 10-2   -0.008615111  -0.29472030   0.2774901 1.0000000
## 11-2    2.291163015   2.00245787   2.5798682 0.0000000
## 12-2    6.485391786   6.19710074   6.7736828 0.0000000
## 4-3    -4.488224081  -4.76159854  -4.2148496 0.0000000
## 5-3    -6.155181843  -6.42662011  -5.8837436 0.0000000
## 6-3    -5.905035530  -6.17878398  -5.6312871 0.0000000
## 7-3    -5.849834017  -6.12156429  -5.5781037 0.0000000
## 8-3    -8.611723328  -8.88887271  -8.3345739 0.0000000
## 9-3    -0.039788043  -0.31449735   0.2349213 0.9999987
## 10-3    6.451883826   6.17916941   6.7245982 0.0000000
## 11-3    8.751661952   8.47622115   9.0271028 0.0000000
## 12-3   12.945890724  12.67088399  13.2208975 0.0000000
## 5-4    -1.666957762  -1.93991056  -1.3940050 0.0000000
## 6-4    -1.416811449  -1.69206171  -1.1415612 0.0000000
## 7-4    -1.361609936  -1.63485312  -1.0883668 0.0000000
## 8-4    -4.123499248  -4.40213211  -3.8448664 0.0000000
## 9-4     4.448436038   4.17223014   4.7246419 0.0000000
## 10-4   10.940107907  10.66588601  11.2143298 0.0000000
## 11-4   13.239886033  12.96295259  13.5168195 0.0000000
## 12-4   17.434114805  17.15761309  17.7106165 0.0000000
## 6-5     0.250146313  -0.02318105   0.5234737 0.1110673
## 7-5     0.305347826   0.03404177   0.5766539 0.0125903
## 8-5    -2.456541485  -2.73327496  -2.1798080 0.0000000
## 9-5     6.115393800   5.84110411   6.3896835 0.0000000
## 10-5   12.607065669  12.33477393  12.8793574 0.0000000
## 11-5   14.906843796  14.63182148  15.1818661 0.0000000
## 12-5   19.101072567  18.82648499  19.3756601 0.0000000
## 7-6     0.055201513  -0.21841584   0.3288189 0.9999587
## 8-6    -2.706687798  -2.98568761  -2.4276880 0.0000000
## 9-6     5.865247487   5.58867143   6.1418235 0.0000000
## 10-6   12.356919356  12.08232462  12.6315141 0.0000000
## 11-6   14.656697482  14.37939485  14.9340001 0.0000000
## 12-6   18.850926254  18.57405477  19.1277977 0.0000000
## 8-7    -2.761889311  -3.03890921  -2.4848694 0.0000000
## 9-7     5.810045974   5.53546731   6.0846246 0.0000000
## 10-7   12.301717843  12.02913502  12.5743007 0.0000000
## 11-7   14.601495969  14.32618545  14.8768065 0.0000000
## 12-7   18.795724741  18.52084850  19.0706010 0.0000000
## 9-8     8.571935285   8.29199264   8.8518779 0.0000000
## 10-8   15.063607155  14.78562184  15.3415925 0.0000000
## 11-8   17.363385281  17.08272478  17.6440458 0.0000000
## 12-8   21.557614052  21.27737953  21.8378486 0.0000000
## 10-9    6.491671870   6.21611923   6.7672245 0.0000000
## 11-9    8.791449996   8.51319878   9.0697012 0.0000000
## 12-9   12.985678767  12.70785723  13.2635003 0.0000000
## 11-10   2.299778126   2.02349622   2.5760600 0.0000000
## 12-10   6.494006898   6.21815774   6.7698561 0.0000000
## 12-11   4.194228772   3.91568391   4.4727736 0.0000000
#plot(intervalos_meses)

4.5 Evolución de NO2 por dia de la semana

En esta sección se analiza la tendencia de NO2 desde 2005 pero basado en los días de la semana. Las gráficas anteriores mostraban una evolución descriptiva. Ahora se ejecutará un test ANOVA para ver numéricamente los datos medios de cada dia de la semana y que tendencia siguen durante la semana. No se incluyen los outliers.

El resultado de test indica que la variacion entre los diferentes días de la semana es mayor que dentro de los propios días de la semana.

El valor de Pr(>F) es <2e-16 que nos confirma lo indicado anteriormente.

Resumen del test de ANOVA

# Añadimos una columna con el número de día de la semana, siendo 1 el Domingo
df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber <- factor(wday(df_AireMadrid_ContaminacionNO2_sinOutliers$timestamp))

#myaov <- aov( df_AireMadrid_ContaminacionNO2$valor~df_AireMadrid_ContaminacionNO2$year, df_AireMadrid_ContaminacionNO2 )
myaov_weekday <- aov( df_AireMadrid_ContaminacionNO2_sinOutliers$valor~df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber, df_AireMadrid_ContaminacionNO2_sinOutliers )

summary( myaov_weekday )
##                                                               Df    Sum Sq
## df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber       6 4.819e+07
## Residuals                                                2645858 2.186e+09
##                                                          Mean Sq F value
## df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber 8031244    9720
## Residuals                                                    826        
##                                                          Pr(>F)    
## df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber <2e-16 ***
## Residuals                                                          
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes y gráfica del test ANOVA

Los coeficientes muestran las diferencias respecto al Domingo.

# Se preparan los coeficientes de la ANOVA para la gráfica
labels_weekday <- c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado")
aov_coefficients_weekday <- myaov_weekday$coefficients
aov_coefficients_weekday <- aov_coefficients_weekday[2:7]
aov_coefficients_weekday <- as.data.frame(cbind(aov_coefficients_weekday, labels_weekday))
aov_coefficients_weekday$aov_coefficients <- as.numeric(as.character(aov_coefficients_weekday$aov_coefficients))
aov_coefficients_weekday$aov_coefficients
## [1]  8.903147 10.766093 11.290991 11.916956 11.540553  3.969337
ggplot(aov_coefficients_weekday,aes(x=labels_weekday,y=aov_coefficients)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Coeficientes del test ANOVA") +
  xlab(label="Dia de la semana") +
  ylab(label="Varianza") +  
  scale_x_discrete(limits=c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado"))

Diferencia de varianzas entre dias de la semana

Se muestran las diferencias entre los dias de la semana. El domingo tiene valor 1 en la semana.

Se puede observar que no hay similitudes entre los dias de la semana.

Con respecto al Domingo, todos los dias de semana tienen valores superiores siendo el jueves(5) el dia mas alto. El sabado tiene valores muy parecidos al Domingo

Test de Tukey’s HSD para agrupar dias de la semana que tiene valores parecidos según el modelo ANOVA

HSD.test(myaov_weekday, "df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber", group=TRUE,console=TRUE,
main="HSD.test por dia de la semana (Domingo=1)")
## 
## Study: HSD.test por dia de la semana (Domingo=1)
## 
## HSD Test for df_AireMadrid_ContaminacionNO2_sinOutliers$valor 
## 
## Mean Square Error:  826.293 
## 
## df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber,  means
## 
##   df_AireMadrid_ContaminacionNO2_sinOutliers.valor      std      r  Min
## 1                                         36.16580 26.25435 383035 0.00
## 2                                         45.06895 29.17029 377639 0.00
## 3                                         46.93189 29.45534 376952 0.00
## 4                                         47.45679 29.56606 376349 0.00
## 5                                         48.08276 29.86430 374762 0.00
## 6                                         47.70635 29.63627 375448 0.00
## 7                                         40.13514 27.12683 381680 0.12
##     Max
## 1 131.5
## 2 131.5
## 3 131.5
## 4 131.5
## 5 131.5
## 6 131.5
## 7 131.5
## 
## Alpha: 0.05 ; DF Error: 2645858 
## Critical Value of Studentized Range: 4.169554 
## 
## Groups according to probability of means differences and alpha level( 0.05 )
## 
## Treatments with the same letter are not significantly different.
## 
##   df_AireMadrid_ContaminacionNO2_sinOutliers$valor groups
## 5                                         48.08276      a
## 6                                         47.70635      b
## 4                                         47.45679      c
## 3                                         46.93189      d
## 2                                         45.06895      e
## 7                                         40.13514      f
## 1                                         36.16580      g

Intervalos con las diferencias entre las medias

intervalos_weekday = TukeyHSD(myaov_weekday)
intervalos_weekday
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = df_AireMadrid_ContaminacionNO2_sinOutliers$valor ~ df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber, data = df_AireMadrid_ContaminacionNO2_sinOutliers)
## 
## $`df_AireMadrid_ContaminacionNO2_sinOutliers$weekdayNumber`
##           diff         lwr        upr     p adj
## 2-1  8.9031473  8.70879786  9.0974967 0.0000000
## 3-1 10.7660934 10.57165485 10.9605320 0.0000000
## 4-1 11.2909909 11.09647378 11.4855080 0.0000000
## 5-1 11.9169562 11.72223145 12.1116809 0.0000000
## 6-1 11.5405529 11.34591816 11.7351877 0.0000000
## 7-1  3.9693367  3.77550601  4.1631674 0.0000000
## 3-2  1.8629461  1.66781975  2.0580725 0.0000000
## 4-2  2.3878436  2.19263897  2.5830482 0.0000000
## 5-2  3.0138089  2.81839736  3.2092204 0.0000000
## 6-2  2.6374056  2.44208375  2.8327275 0.0000000
## 7-2 -4.9338106 -5.12833124 -4.7392900 0.0000000
## 4-3  0.5248974  0.32960405  0.7201908 0.0000000
## 5-3  1.1508627  0.95536254  1.3463629 0.0000000
## 6-3  0.7744595  0.57904889  0.9698701 0.0000000
## 7-3 -6.7967568 -6.99136647 -6.6021470 0.0000000
## 5-4  0.6259653  0.43038705  0.8215435 0.0000000
## 6-4  0.2495621  0.05407336  0.4450508 0.0031766
## 7-4 -7.3216542 -7.51634231 -7.1269661 0.0000000
## 6-5 -0.3764032 -0.57209853 -0.1807079 0.0000003
## 7-5 -7.9476195 -8.14251506 -7.7527239 0.0000000
## 7-6 -7.5712162 -7.76602197 -7.3764105 0.0000000
#plot(intervalos_weekday)

4.6 Plan Calidad del Aire 2011-2017.

En esta sección se compararan los años de aplicación del Plan de Calidad del Aire 2011-2017 con el resto para determinar si el resultado es una mejora de la Calidad del Aire de la ciudad de Madrid.

Para realizar esta comparacion, haremos un contraste de hipotesis. La hipotesis 0 indicaría que no ha habido mejora desde 2011-2017 con respecto a los años anteriores 2005-2010. La hipótesis 1 resultaría lo contrario, una mejora en la calidad del aire.

El resultado de test indica que hay variacion entre los años dentro del Plan de Calidad del Aire y los anteriores. Rechazando la hipótesis 0.

El valor de Pr(>F) es <2e-16 que nos confirma lo indicado anteriormente.

Resumen del test de ANOVA

# se añade la columna GrupoPlan para separar valores dentro del Plan 2011-2017 y se asigna como factor
df_AireMadrid_ContaminacionNO2_sinOutliers <- transform(df_AireMadrid_ContaminacionNO2_sinOutliers, GrupoPlan= ifelse(as.character(df_AireMadrid_ContaminacionNO2_sinOutliers$year) >= "2011", "Plan 2011-2017", "AnteriorPlan"))
df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan <- factor(df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan)

#myaov <- aov( df_AireMadrid_ContaminacionNO2$valor~df_AireMadrid_ContaminacionNO2$year, df_AireMadrid_ContaminacionNO2 )
myaov_plan <- aov( df_AireMadrid_ContaminacionNO2_sinOutliers$valor~df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan, df_AireMadrid_ContaminacionNO2_sinOutliers )

summary( myaov_plan )
##                                                           Df    Sum Sq
## df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan       1 1.395e+08
## Residuals                                            2645863 2.095e+09
##                                                        Mean Sq F value
## df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan 139459655  176131
## Residuals                                                  792        
##                                                      Pr(>F)    
## df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan <2e-16 ***
## Residuals                                                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes y gráfica del test ANOVA

Los coeficientes muestran las diferencias.

# Se preparan los coeficientes de la ANOVA para la gráfica
labels_plan <- c("Plan 2011-2017", "AnteriorPlan")
aov_coefficients_plan <- myaov_plan$coefficients
aov_coefficients_plan <- aov_coefficients_plan[2:3]
aov_coefficients_plan <- as.data.frame(cbind(aov_coefficients_plan, labels_plan))
aov_coefficients_plan$aov_coefficients <- as.numeric(as.character(aov_coefficients_plan$aov_coefficients))
aov_coefficients_plan$aov_coefficients
## [1] -14.55145        NA
ggplot(aov_coefficients_plan,aes(x=labels_plan,y=aov_coefficients)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Coeficientes del test ANOVA") +
  xlab(label="Plan") +
  ylab(label="Varianza") +  
  scale_x_discrete(limits=labels_plan)

Diferencia de varianzas entre los años de aplicación del Plan 2011-207 y anteriores

Se muestran las diferencias entre los años de aplicación del Plan 2011-207 y anteriores.

La diferencia es una mejora de 14 puntos con respecto a los años anteriores del Plan.

Test de Tukey’s HSD para agrupar los planes que tiene valores parecidos según el modelo ANOVA

HSD.test(myaov_plan, "df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan", group=TRUE,console=TRUE,
main="HSD.test por Plan de Calidad del Aire")
## 
## Study: HSD.test por Plan de Calidad del Aire
## 
## HSD Test for df_AireMadrid_ContaminacionNO2_sinOutliers$valor 
## 
## Mean Square Error:  791.7952 
## 
## df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan,  means
## 
##                df_AireMadrid_ContaminacionNO2_sinOutliers.valor      std
## AnteriorPlan                                           52.22734 29.54526
## Plan 2011-2017                                         37.67589 26.84498
##                      r Min   Max
## AnteriorPlan   1236182   0 131.5
## Plan 2011-2017 1409683   1 131.0
## 
## Alpha: 0.05 ; DF Error: 2645863 
## Critical Value of Studentized Range: 2.771808 
## 
## Groups according to probability of means differences and alpha level( 0.05 )
## 
## Treatments with the same letter are not significantly different.
## 
##                df_AireMadrid_ContaminacionNO2_sinOutliers$valor groups
## AnteriorPlan                                           52.22734      a
## Plan 2011-2017                                         37.67589      b

Intervalos con las diferencias entre las medias

intervalos_plan = TukeyHSD(myaov_plan)
intervalos_plan
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = df_AireMadrid_ContaminacionNO2_sinOutliers$valor ~ df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan, data = df_AireMadrid_ContaminacionNO2_sinOutliers)
## 
## $`df_AireMadrid_ContaminacionNO2_sinOutliers$GrupoPlan`
##                                  diff      lwr       upr p adj
## Plan 2011-2017-AnteriorPlan -14.55145 -14.6194 -14.48349     0
plot(intervalos_plan)

4.7 Restricciones por episodios de Dióxido de Nitrógeno

Durante el año 2017 han ocurrido una serie de episodios de Dióxido de Nitrógeno que han requerido la aplicación de medidas en la ciudad de Madrid.

La lista completa de episodios de contaminación para el 2017 * Informe sobre episodio de alta contaminación por NO2 del 9 al 11 de marzo de 2017

  • Informe sobre episodio de alta contaminación por NO2 del 29 de septiembre al 1 de octubre de 2017

  • Informe sobre episodio de alta contaminación por NO2 del 9 al 15 de octubre de 2017

  • Informe sobre episodio de alta contaminación por NO2 del 23 al 29 de octubre de 2017

  • Informe sobre episodio de alta contaminación por NO2 del 15 al 25 de noviembre de 2017

  • Informe sobre episodio de alta contaminación por NO2 del 5 al 9 de diciembre de 2017

En esta sección se revisará la situación descrita por el episodio que aconteció los días 15 al 25 de noviembre del 2017. En el siguiente enlace se encuentran los detalles proporcionados por el Ayuntamiento de Madrid. http://www.mambiente.munimadrid.es/opencms/export/sites/default/calaire/Anexos/Episodios/EPISODIO_15_25_NOVIEMBRE_2017.pdf

Los días 15 a 25 de noviembre se han aplicado en la ciudad de Madrid medidas de actuación en episodios de contaminación por dióxido de nitrógeno, incluyendo tanto medidas de carácter informativo como de restricción de tráfico (limitación de velocidad y de aparcamiento).

Las condiciones atmosféricas que han caracterizado esos días han sido de alta estabilidad. Bajo estas condiciones meteorológicas se ha producido una acumulación de contaminantes en la ciudad de Madrid, especialmente de dióxido de nitrógeno que ha supuesto la aplicación del Protocolo de medidas a adoptar durante episodios de alta contaminación.

Escenarios:

‐ Superación de los niveles de contaminación establecidos:

> PREAVISO/AVISO en zonas 1, 3 y 5.

‐ Condiciones meteorológicas desfavorable

Gráfica de Evolución durante los dias del Episodio de contaminación

# Subconjuntos de datos incluyendo las fechas del episodio de contaminacion
subset_Noviembre <- subset(df_AireMadrid_ContaminacionNO2, timestamp>"2017-11-15" & timestamp<"2017-11-25")
subset_NoviembreTrafico <- subset(df_AireMadrid_SensoresTrafico_Staging, timestamp>"2017-11-15" & timestamp<"2017-11-25")
subset_NoviembreTraficoVMED <- subset(subset_NoviembreTrafico, abreviatura =="VMED")
subset_NoviembreTraficoCARGA <- subset(subset_NoviembreTrafico, abreviatura =="CARGA")
ggplot(subset_Noviembre,aes(x=timestamp,y=valor)) +
  geom_point(aes(colour=zona, fill = zona), shape=21, size = 2) + 
  scale_fill_manual(values=c("red", "black", "blue", "orange", "green")) + 
  scale_colour_manual(values=c("red", "black", "blue", "orange", "green")) +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Valores NO2 Episodio Noviembre 2017") +
  xlab(label="Fecha") +
  ylab(label="Valor NO2") +
  geom_hline(yintercept = ValorLimiteHorario)

ggplot(subset_NoviembreTraficoVMED,aes(x=timestamp,y=valor)) +
  geom_point(aes(colour=zona, fill = zona), shape=21, size = 2) + 
  scale_fill_manual(values=c("red", "black", "blue", "orange", "green")) + 
  scale_colour_manual(values=c("red", "black", "blue", "orange", "green")) +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Valores VMED Episodio Noviembre 2017") +
  xlab(label="Fecha") +
  ylab(label="Valor VMED") +
  geom_hline(yintercept = 80)

ggplot(subset_NoviembreTraficoCARGA,aes(x=timestamp,y=valor)) +
  geom_point(aes(colour=zona, fill = zona), shape=21, size = 2) + 
  scale_fill_manual(values=c("red", "black", "blue", "orange", "green")) + 
  scale_colour_manual(values=c("red", "black", "blue", "orange", "green")) +
  theme(axis.text.x =element_text(angle=0)) +
  ggtitle("Valores CARGA Episodio Noviembre 2017") +
  xlab(label="Fecha") +
  ylab(label="Valor VMED") +
  geom_hline(yintercept = 60)

4.8 Análisis del Episodio de Contaminación

Durante el Episodio de Contaminación, el Ayuntamiento de Madrid activó el Protocolo de Medidas a adoptar según los niveles reportados por las Estaciones de Control. Los niveles y actuaciones realizadas se detallan a continuación.

Miércoles 15/11/2017

PREAVISO en zona 1.

Escenario: Ninguno

Actuaciones: Ninguna

Jueves 16/11/2017

PREAVISO en zona 1.

Escenario: 1

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30

Viernes 17/11/2017

PREAVISO en zona 1.

Escenario: 1

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30

Sábado 18/11/2017

PREAVISO en zona 1.

Escenario: 2

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30
  • Prohibición del estacionamiento de vehículos en las plazas y horario del SER en el interior de la M‐30

Domingo 19/11/2017

PREAVISO en zona 1.

Escenario: 2

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30

Lunes 20/11/2017

PREAVISO en zonas 1 y 5.

Escenario: 2

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30
  • Prohibición del estacionamiento de vehículos en las plazas y horario del SER en el interior de la M‐30

Martes 21/11/2017

PREAVISO en zona 3.

AVISO en zonas 1 y 5.

Escenario: 2

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30
  • Prohibición del estacionamiento de vehículos en las plazas y horario del SER en el interior de la M‐30

Miércoles 22/11/2017

PREAVISO en zona 3.

Escenario: 2

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30
  • Prohibición del estacionamiento de vehículos en las plazas y horario del SER en el interior de la M‐30

Jueves 23/11/2017

PREAVISO ninguno.

Escenario: 2

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30
  • Prohibición del estacionamiento de vehículos en las plazas y horario del SER en el interior de la M‐30

Viernes 24/11/2017

PREAVISO ninguno.

Escenario: 1

Actuaciones:

  • Limitación de velocidad a 70 km/h en la M‐30

Sábado 25/11/2017

PROTOCOLO desactivado

A continuación, se analizará si las actuaciones realizadas por el Ayuntamiento de Madrid modificaron la tendencia de esos dias. Se evaluaran los niveles de NO2 correspondiente a las Estaciones de Control y Velocidad Media(VMED) y Carga(CARGA) de los Sensores de Tráfico.

En los 3 casos, se realizará un contraste de hipótesis para ver si no ha habido variacion durante esos dias (H0) o, por el contrario, si que hay diferencias significativas(H1)

4.8.1 Niveles de NO2(Estaciones de Control)

Para realizar esta comparacion, haremos un contraste de hipotesis. La hipotesis 0 indicaría que no ha variado los valores de NO2 durante la aplicación del Protocolo. La hipótesis 1 resultaría lo contrario, una mejora en la calidad del aire como consecuencia de la aplicación del Protocolo.

El resultado de test indica que hay variacion entre los dias . Rechazando la hipótesis 0. Aun así, si que existe relación entre algunos dias que se analiza mas adelante.

El valor de Pr(>F) es <2e-16 que nos confirma lo indicado anteriormente.

Resumen del test de ANOVA

# se añade la columna FEcha para almacenar solo el dia
subset_Noviembre$Fecha <- factor(format(subset_Noviembre$timestamp, "%Y-%m-%d"))
myaov_subset_NoviembreNO2 <- aov(subset_Noviembre$valor~subset_Noviembre$Fecha, subset_Noviembre)
summary( myaov_subset_NoviembreNO2 )
##                          Df  Sum Sq Mean Sq F value Pr(>F)    
## subset_Noviembre$Fecha    9  883476   98164   56.44 <2e-16 ***
## Residuals              5701 9915834    1739                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes y gráfica del test ANOVA

Los coeficientes muestran las diferencias respecto al dia 15/11

# Se preparan los coeficientes de la ANOVA para la gráfica
labels_subset_NoviembreNO2 <- levels(subset_Noviembre$Fecha)[2:10]
aov_coefficients_subset_NoviembreNO2 <- myaov_subset_NoviembreNO2$coefficients
aov_coefficients_subset_NoviembreNO2 <- aov_coefficients_subset_NoviembreNO2[2:10]
aov_coefficients_subset_NoviembreNO2 <- as.data.frame(cbind(aov_coefficients_subset_NoviembreNO2, labels_subset_NoviembreNO2))
aov_coefficients_subset_NoviembreNO2$aov_coefficients <- as.numeric(as.character(aov_coefficients_subset_NoviembreNO2$aov_coefficients))

ggplot(aov_coefficients_subset_NoviembreNO2,aes(x=labels_subset_NoviembreNO2,y=aov_coefficients)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=45)) +
  ggtitle("Coeficientes del test ANOVA") +
  xlab(label="Fecha") +
  ylab(label="Varianza") +  
  scale_x_discrete(limits=labels_subset_NoviembreNO2)

Diferencia de varianzas entre los dias del Episodio de Contaminación

Se muestran las diferencias con el dia 15/11/2017, el dia del primer preaviso.

Se observan dias que son parecidos entre si. Se muestran los grupos de dias parecidos que devuelve el test Tukey’s HSD.

a -> 16/11, 23/11. Corresponden con los dias que mas creció la varianza.

ab -> 17/11, 21/11. Los siguientes par de dias con mas varianza

bc -> 17/20, 20/11. Tercera pareja en mayor varianza

cd -> 20/11, 22/10. Cuarta

e -> 15/11, 24/11. Corresponden al inicio del preaviso y el ultimo dia del protocolo de medias

f -> 18/11, 19/11. Corresponden al fin de semana que suele tener mejores valores de contaminacion

Se puede constatar que la aplicación de medidas durante el Episodio de Contaminación no provoca la disminución de los valores. Los dias con mayor incremento de NO2 corresponden a dias con actuaciones activas. Seguramente, los factores atmosfericos tiene un peso importante en la disminución del NO2.

Test de Tukey’s HSD para agrupar los planes que tiene valores parecidos según el modelo ANOVA

HSD.test(myaov_subset_NoviembreNO2, "subset_Noviembre$Fecha", group=TRUE,console=TRUE,
main="HSD.test Episodio de Contaminación para NO2")
## 
## Study: HSD.test Episodio de Contaminación para NO2
## 
## HSD Test for subset_Noviembre$valor 
## 
## Mean Square Error:  1739.315 
## 
## subset_Noviembre$Fecha,  means
## 
##            subset_Noviembre.valor      std   r Min Max
## 2017-11-15               82.75000 39.31279 576  13 280
## 2017-11-16               96.60069 40.84086 576  14 249
## 2017-11-17               92.33391 46.37688 575  17 341
## 2017-11-18               60.87018 40.85837 570   4 249
## 2017-11-19               64.62847 42.72579 576   6 223
## 2017-11-20               88.64085 44.97608 568   6 277
## 2017-11-21               95.52900 50.14644 569  19 331
## 2017-11-22               87.21951 39.36012 574  13 280
## 2017-11-23               98.05382 39.10288 576  17 270
## 2017-11-24               77.45191 29.90246 551   8 210
## 
## Alpha: 0.05 ; DF Error: 5701 
## Critical Value of Studentized Range: 4.475908 
## 
## Groups according to probability of means differences and alpha level( 0.05 )
## 
## Treatments with the same letter are not significantly different.
## 
##            subset_Noviembre$valor groups
## 2017-11-23               98.05382      a
## 2017-11-16               96.60069      a
## 2017-11-21               95.52900     ab
## 2017-11-17               92.33391    abc
## 2017-11-20               88.64085    bcd
## 2017-11-22               87.21951     cd
## 2017-11-15               82.75000     de
## 2017-11-24               77.45191      e
## 2017-11-19               64.62847      f
## 2017-11-18               60.87018      f

Intervalos con las diferencias entre las medias

intervalos_subset_NoviembreNO2 = TukeyHSD(myaov_subset_NoviembreNO2)
intervalos_subset_NoviembreNO2
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = subset_Noviembre$valor ~ subset_Noviembre$Fecha, data = subset_Noviembre)
## 
## $`subset_Noviembre$Fecha`
##                             diff         lwr         upr     p adj
## 2017-11-16-2017-11-15  13.850694   6.0728538  21.6285351 0.0000008
## 2017-11-17-2017-11-15   9.583913   1.8026915  17.3651346 0.0038829
## 2017-11-18-2017-11-15 -21.879825 -29.6781063 -14.0815428 0.0000000
## 2017-11-19-2017-11-15 -18.121528 -25.8993684 -10.3436872 0.0000000
## 2017-11-20-2017-11-15   5.890845  -1.9143343  13.6960244 0.3326652
## 2017-11-21-2017-11-15  12.778998   4.9772730  20.5807235 0.0000099
## 2017-11-22-2017-11-15   4.469512  -3.3151006  12.2541250 0.7244582
## 2017-11-23-2017-11-15  15.303819   7.5259788  23.0816601 0.0000000
## 2017-11-24-2017-11-15  -5.298094 -13.1636644   2.5674756 0.5047829
## 2017-11-17-2017-11-16  -4.266781 -12.0480029   3.5144401 0.7752032
## 2017-11-18-2017-11-16 -35.730519 -43.5288008 -27.9322373 0.0000000
## 2017-11-19-2017-11-16 -31.972222 -39.7500628 -24.1943816 0.0000000
## 2017-11-20-2017-11-16  -7.959849 -15.7650287  -0.1546701 0.0412871
## 2017-11-21-2017-11-16  -1.071696  -8.8734214   6.7300290 0.9999914
## 2017-11-22-2017-11-16  -9.381182 -17.1657950  -1.5965695 0.0053842
## 2017-11-23-2017-11-16   1.453125  -6.3247156   9.2309656 0.9998812
## 2017-11-24-2017-11-16 -19.148789 -27.0143588 -11.2832188 0.0000000
## 2017-11-18-2017-11-17 -31.463738 -39.2653914 -23.6620838 0.0000000
## 2017-11-19-2017-11-17 -27.705441 -35.4866624 -19.9242193 0.0000000
## 2017-11-20-2017-11-17  -3.693068 -11.5016164   4.1154804 0.8938267
## 2017-11-21-2017-11-17   3.195085  -4.6100106  11.0001810 0.9548780
## 2017-11-22-2017-11-17  -5.114401 -12.9023916   2.6735899 0.5429402
## 2017-11-23-2017-11-17   5.719906  -2.0613151  13.5011279 0.3717185
## 2017-11-24-2017-11-17 -14.882007 -22.7509206  -7.0130942 0.0000001
## 2017-11-19-2017-11-18   3.758297  -4.0399850  11.5565785 0.8823013
## 2017-11-20-2017-11-18  27.770670  19.9451206  35.5962187 0.0000000
## 2017-11-21-2017-11-18  34.658823  26.8367188  42.4809268 0.0000000
## 2017-11-22-2017-11-18  26.349337  18.5443006  34.1543729 0.0000000
## 2017-11-23-2017-11-18  37.183644  29.3853623  44.9819258 0.0000000
## 2017-11-24-2017-11-18  16.581730   8.6959465  24.4675139 0.0000000
## 2017-11-20-2017-11-19  24.012373  16.2071935  31.8175522 0.0000000
## 2017-11-21-2017-11-19  30.900526  23.0988008  38.7022513 0.0000000
## 2017-11-22-2017-11-19  22.591040  14.8064272  30.3756528 0.0000000
## 2017-11-23-2017-11-19  33.425347  25.6475066  41.2031878 0.0000000
## 2017-11-24-2017-11-19  12.823433   4.9578634  20.6890034 0.0000113
## 2017-11-21-2017-11-20   6.888153  -0.9408274  14.7171337 0.1417982
## 2017-11-22-2017-11-20  -1.421333  -9.2332607   6.3905949 0.9999049
## 2017-11-23-2017-11-20   9.412974   1.6077951  17.2181537 0.0053258
## 2017-11-24-2017-11-20 -11.188939 -19.0815443  -3.2963346 0.0003148
## 2017-11-22-2017-11-21  -8.309486 -16.1179627  -0.5010094 0.0263887
## 2017-11-23-2017-11-21   2.524821  -5.2769040  10.3265464 0.9908624
## 2017-11-24-2017-11-21 -18.077093 -25.9662816 -10.1879036 0.0000000
## 2017-11-23-2017-11-22  10.834307   3.0496945  18.6189200 0.0004570
## 2017-11-24-2017-11-22  -9.767607 -17.6398733  -1.8953399 0.0034656
## 2017-11-24-2017-11-23 -20.601914 -28.4674838 -12.7363438 0.0000000
plot(intervalos_subset_NoviembreNO2)

4.8.2 Niveles de Carga de la vía(Sensores de Tráfico)

Para realizar esta comparacion, haremos un contraste de hipotesis. La hipotesis 0 indicaría que no ha variado los valores de Carga de la via durante la aplicación del Protocolo. La hipótesis 1 resultaría lo contrario, la carga de las vias se ha visto influenciada como consecuencia de la aplicación del Protocolo.

El resultado de test indica que hay variacion de las cargas de la vias entre los dias . Rechazando la hipótesis 0. Aun así, si que existe relación entre algunos dias que se analiza mas adelante.

El valor de Pr(>F) es <2e-16 que nos confirma lo indicado anteriormente.

Resumen del test de ANOVA

# se añade la columna FEcha para almacenar solo el dia
subset_NoviembreTraficoCARGA$Fecha <- factor(format(subset_NoviembreTraficoCARGA$timestamp, "%Y-%m-%d"))
myaov_subset_NoviembreTraficoCARGA <- aov(subset_NoviembreTraficoCARGA$valor~subset_NoviembreTraficoCARGA$Fecha, subset_Noviembre)
summary( myaov_subset_NoviembreTraficoCARGA )
##                                        Df    Sum Sq Mean Sq F value Pr(>F)
## subset_NoviembreTraficoCARGA$Fecha      9   5965545  662838    1874 <2e-16
## Residuals                          901788 319048633     354               
##                                       
## subset_NoviembreTraficoCARGA$Fecha ***
## Residuals                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes y gráfica del test ANOVA

Los coeficientes muestran las diferencias respecto al dia 15/11.

# Se preparan los coeficientes de la ANOVA para la gráfica
labels_subset_NoviembreTraficoCARGA <- levels(subset_NoviembreTraficoCARGA$Fecha)[2:10]
aov_coefficients_subset_NoviembreTraficoCARGA <- myaov_subset_NoviembreTraficoCARGA$coefficients
aov_coefficients_subset_NoviembreTraficoCARGA <- aov_coefficients_subset_NoviembreTraficoCARGA[2:10]
aov_coefficients_subset_NoviembreTraficoCARGA <- as.data.frame(cbind(aov_coefficients_subset_NoviembreTraficoCARGA, labels_subset_NoviembreTraficoCARGA))
aov_coefficients_subset_NoviembreTraficoCARGA$aov_coefficients <- as.numeric(as.character(aov_coefficients_subset_NoviembreTraficoCARGA$aov_coefficients))

ggplot(aov_coefficients_subset_NoviembreTraficoCARGA,aes(x=labels_subset_NoviembreTraficoCARGA,y=aov_coefficients)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=45)) +
  ggtitle("Coeficientes del test ANOVA") +
  xlab(label="Fecha") +
  ylab(label="Varianza") +  
  scale_x_discrete(limits=labels_subset_NoviembreTraficoCARGA)

Diferencia de varianzas entre los dias del Episodio de Contaminación

Se muestran las diferencias con el dia 15/11/2017, el dia del primer preaviso.

Se observan dias que son parecidos entre si. Se muestran los grupos de dias parecidos que devuelve el test Tukey’s HSD.

a -> 17/11, 24/11. Corresponden a viernes. Es un dia con una carga de tráfico alta

c -> 15/11, 23/11. Indican una disminución muy pequeña en la carga de trafico esos dias

d -> 21/20, 22/11. Indican una disminución un poco mayor del grupo c.

El resto de dias no tienen parecido con el resto. Los días 18/11 y 19/11 corresponden al fin de semana con una disminución del tráfico en la ciudad de Madrid

Se puede constatar que la aplicación de medidas durante el Episodio de Contaminación no provoca una disminución de la carga de las vias de comunicación.

Test de Tukey’s HSD para agrupar los planes que tiene valores parecidos según el modelo ANOVA

HSD.test(myaov_subset_NoviembreTraficoCARGA, "subset_NoviembreTraficoCARGA$Fecha", group=TRUE,console=TRUE,
main="HSD.test Episodio de Contaminación para Carga")
## 
## Study: HSD.test Episodio de Contaminación para Carga
## 
## HSD Test for subset_NoviembreTraficoCARGA$valor 
## 
## Mean Square Error:  353.7956 
## 
## subset_NoviembreTraficoCARGA$Fecha,  means
## 
##            subset_NoviembreTraficoCARGA.valor      std     r Min Max
## 2017-11-15                           20.35342 19.95909 92264   0 100
## 2017-11-16                           20.65525 19.90707 92526   0 100
## 2017-11-17                           21.41496 20.13755 92944   0 100
## 2017-11-18                           15.45162 14.68765 93028   0 100
## 2017-11-19                           12.57803 13.30043 72920   0 100
## 2017-11-20                           19.45339 19.16001 92505   0 100
## 2017-11-21                           19.73151 19.37718 92436   0 100
## 2017-11-22                           19.83868 19.41016 92384   0 100
## 2017-11-23                           20.15977 19.45644 92340   0 100
## 2017-11-24                           21.65829 20.32590 88451   0 100
## 
## Alpha: 0.05 ; DF Error: 901788 
## Critical Value of Studentized Range: 4.474124 
## 
## Groups according to probability of means differences and alpha level( 0.05 )
## 
## Treatments with the same letter are not significantly different.
## 
##            subset_NoviembreTraficoCARGA$valor groups
## 2017-11-24                           21.65829      a
## 2017-11-17                           21.41496      a
## 2017-11-16                           20.65525      b
## 2017-11-15                           20.35342      c
## 2017-11-23                           20.15977      c
## 2017-11-22                           19.83868      d
## 2017-11-21                           19.73151      d
## 2017-11-20                           19.45339      e
## 2017-11-18                           15.45162      f
## 2017-11-19                           12.57803      g

4.8.3 Velocidad media de la vía(Sensores de Tráfico)

Para realizar esta comparacion, haremos un contraste de hipotesis. La hipotesis 0 indicaría que no ha variado los valores de velocidad media de la via durante la aplicación del Protocolo. La hipótesis 1 resultaría lo contrario, la carga de las vias se ha visto influenciada como consecuencia de la aplicación del Protocolo.

El resultado de test indica que hay variacion de las cargas de la vias entre los dias . Rechazando la hipótesis 0. Aun así, si que existe relación entre algunos dias que se analiza mas adelante.

El valor de Pr(>F) es <2e-16 que nos confirma lo indicado anteriormente.

Resumen del test de ANOVA

# se añade la columna FEcha para almacenar solo el dia
subset_NoviembreTraficoVMED$Fecha <- factor(format(subset_NoviembreTraficoVMED$timestamp, "%Y-%m-%d"))
myaov_subset_NoviembreTraficoVMED <- aov(subset_NoviembreTraficoVMED$valor~subset_NoviembreTraficoVMED$Fecha, subset_Noviembre)
summary( myaov_subset_NoviembreTraficoVMED )
##                                      Df   Sum Sq Mean Sq F value Pr(>F)
## subset_NoviembreTraficoVMED$Fecha     9   400547   44505   139.5 <2e-16
## Residuals                         95596 30501390     319               
##                                      
## subset_NoviembreTraficoVMED$Fecha ***
## Residuals                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes y gráfica del test ANOVA

Los coeficientes muestran las diferencias respecto al dia 15/11.

# Se preparan los coeficientes de la ANOVA para la gráfica
labels_subset_NoviembreTraficoVMED <- levels(subset_NoviembreTraficoVMED$Fecha)[2:10]
aov_coefficients_subset_NoviembreTraficoVMED <- myaov_subset_NoviembreTraficoVMED$coefficients
aov_coefficients_subset_NoviembreTraficoVMED <- aov_coefficients_subset_NoviembreTraficoVMED[2:10]
aov_coefficients_subset_NoviembreTraficoVMED <- as.data.frame(cbind(aov_coefficients_subset_NoviembreTraficoVMED, labels_subset_NoviembreTraficoVMED))
aov_coefficients_subset_NoviembreTraficoVMED$aov_coefficients <- as.numeric(as.character(aov_coefficients_subset_NoviembreTraficoVMED$aov_coefficients))

ggplot(aov_coefficients_subset_NoviembreTraficoVMED,aes(x=labels_subset_NoviembreTraficoCARGA,y=aov_coefficients)) +
  geom_bar(stat="identity") +
  theme(axis.text.x =element_text(angle=45)) +
  ggtitle("Coeficientes del test ANOVA") +
  xlab(label="Fecha") +
  ylab(label="Varianza") +  
  scale_x_discrete(limits=labels_subset_NoviembreTraficoVMED)

Diferencia de varianzas entre los dias del Episodio de Contaminación

Se muestran las diferencias con el dia 15/11/2017, el dia del primer preaviso.

Se observan dias que son parecidos entre si. Se muestran los grupos de dias parecidos que devuelve el test Tukey’s HSD.

a -> 18/11, 19/11. Corresponden al fin de semana y, por tanto, la velocidad media es superior debido a la mejor circulación.

c -> 23/11, 24/11. Muestran una menor disminución de la velocidad media, seguramente, debido a que son los ultimos dias del protocolo de medidas y el 24/11 es viernes.

cd -> 16/20, 21/11. Siguientes dias con una disminucion un poco mayor en relación con el grupo c

de -> 17/20, 21/11. Muestra niveles parecidos al grupo anterior

e -> 20/20, 22/11. Muestra la mayor disminución de velocidad durante el Episodio de contaminación

Se puede constatar que la aplicación de medidas durante el Episodio de Contaminación provoca una ligera disminución de la velocidad media en las vias de comunicación.

Test de Tukey’s HSD para agrupar los planes que tiene valores parecidos según el modelo ANOVA

HSD.test(myaov_subset_NoviembreTraficoVMED, "subset_NoviembreTraficoVMED$Fecha", group=TRUE,console=TRUE,
main="HSD.test Episodio de Contaminación para la Velocidad Media")
## 
## Study: HSD.test Episodio de Contaminación para la Velocidad Media
## 
## HSD Test for subset_NoviembreTraficoVMED$valor 
## 
## Mean Square Error:  319.0655 
## 
## subset_NoviembreTraficoVMED$Fecha,  means
## 
##            subset_NoviembreTraficoVMED.valor      std    r Min Max
## 2017-11-15                          63.06131 20.74683 9509   3 124
## 2017-11-16                          60.09264 19.41074 9553   1 116
## 2017-11-17                          59.33963 18.64433 9584   2 116
## 2017-11-18                          64.33017 15.59811 9683   4 112
## 2017-11-19                          64.47378 15.51682 9669   4 113
## 2017-11-20                          59.02695 18.39516 9536   2 108
## 2017-11-21                          59.58368 17.81421 9512   1 109
## 2017-11-22                          59.06419 17.79580 9627   1 118
## 2017-11-23                          60.20000 17.21550 9655   2 115
## 2017-11-24                          60.38920 16.87222 9278   2 111
## 
## Alpha: 0.05 ; DF Error: 95596 
## Critical Value of Studentized Range: 4.474124 
## 
## Groups according to probability of means differences and alpha level( 0.05 )
## 
## Treatments with the same letter are not significantly different.
## 
##            subset_NoviembreTraficoVMED$valor groups
## 2017-11-19                          64.47378      a
## 2017-11-18                          64.33017      a
## 2017-11-15                          63.06131      b
## 2017-11-24                          60.38920      c
## 2017-11-23                          60.20000      c
## 2017-11-16                          60.09264     cd
## 2017-11-21                          59.58368    cde
## 2017-11-17                          59.33963     de
## 2017-11-22                          59.06419      e
## 2017-11-20                          59.02695      e

4.9 Análisis de correlacion entre los niveles de NO2 y la carga de via

Se ha analizado la posible correlacion entre la carga de la via y los niveles de NO2. Se han utilizado los datos del año 2017 de dos estaciones ubicadas en la zona 1. La distancia entre las dos estaciones es de unos 500m. Los detalles se muestran a continuación.

Año: 2017

Estación Control NO2: Cuatro Caminos

Sensor de Tráfico: Av, Filipinas 44 E-O - (Boix y Morer-Santander)

# Subconjunto de datos filtrado por año, estacion. Trafico solo son datos del 2017.
subset_NoviembreCor <- subset(df_AireMadrid_ContaminacionNO2, year=="2017" & nombre=="Cuatro Caminos")
subset_NoviembreTraficoCor <- subset(df_AireMadrid_SensoresTrafico_Staging, abreviatura =="CARGA" & nombre == "Av, Filipinas 44 E-O  -  (Boix y Morer-Santander)")

data_cor <- inner_join(subset_NoviembreCor, subset_NoviembreTraficoCor, by="timestamp")

El resultado indica un porcentaje muy bajo de correlación, 34%

cor.test(data_cor$valor.y, data_cor$valor.x)
## 
##  Pearson's product-moment correlation
## 
## data:  data_cor$valor.y and data_cor$valor.x
## t = 33.863, df = 8631, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3237025 0.3609464
## sample estimates:
##      cor 
## 0.342459
cat("Correlacion   : ", cor(data_cor$valor.y, data_cor$valor.x)*100, "%")
## Correlacion   :  34.2459 %