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')")
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)
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)
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.
# 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
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)
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
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)
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)
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)
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)
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:
Viernes 17/11/2017
PREAVISO en zona 1.
Escenario: 1
Actuaciones:
Sábado 18/11/2017
PREAVISO en zona 1.
Escenario: 2
Actuaciones:
Domingo 19/11/2017
PREAVISO en zona 1.
Escenario: 2
Actuaciones:
Lunes 20/11/2017
PREAVISO en zonas 1 y 5.
Escenario: 2
Actuaciones:
Martes 21/11/2017
PREAVISO en zona 3.
AVISO en zonas 1 y 5.
Escenario: 2
Actuaciones:
Miércoles 22/11/2017
PREAVISO en zona 3.
Escenario: 2
Actuaciones:
Jueves 23/11/2017
PREAVISO ninguno.
Escenario: 2
Actuaciones:
Viernes 24/11/2017
PREAVISO ninguno.
Escenario: 1
Actuaciones:
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)
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)
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
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
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 %