2.1 Analisis descriptivo

calidad_aire <-  read.csv("C:/Users/Martini/Downloads/calidad-del-aire-datos-historicos-diarios.csv", sep=";")
View(calidad_aire)
str(calidad_aire)
## 'data.frame':    446014 obs. of  13 variables:
##  $ Fecha       : chr  "2020-12-31" "2020-12-31" "2020-12-31" "2020-12-31" ...
##  $ CO..mg.m3.  : num  0.6 NA NA NA NA NA NA NA NA NA ...
##  $ NO..ug.m3.  : int  8 2 8 1 1 2 5 2 2 1 ...
##  $ NO2..ug.m3. : int  16 6 2 4 1 2 9 6 6 1 ...
##  $ O3..ug.m3.  : int  NA NA 65 58 NA 62 56 53 59 81 ...
##  $ PM10..ug.m3.: int  6 8 4 21 6 6 5 6 5 NA ...
##  $ PM25..ug.m3.: int  NA NA NA NA NA NA NA NA NA NA ...
##  $ SO2..ug.m3. : int  1 4 2 17 2 6 5 5 NA 2 ...
##  $ Provincia   : chr  "Burgos" "León" "León" "León" ...
##  $ Estación    : chr  "Burgos1" "C.T.L.R. - Naredo" "Carracedelo" "La Robla" ...
##  $ Latitud     : num  42.4 42.8 42.6 42.8 42.8 ...
##  $ Longitud    : num  -3.68 -5.53 -6.73 -5.63 -5.65 ...
##  $ Posición    : chr  "42.3511111111,-3.67555555556" "42.8166666667,-5.53333333333" "42.5586111111,-6.72555555556" "42.8016666667,-5.625" ...
summary(calidad_aire)
##     Fecha             CO..mg.m3.       NO..ug.m3.       NO2..ug.m3.    
##  Length:446014      Min.   : 0.0     Min.   :-441.00   Min.   :  0.00  
##  Class :character   1st Qu.: 0.3     1st Qu.:   2.00   1st Qu.:  8.00  
##  Mode  :character   Median : 0.7     Median :   5.00   Median : 16.00  
##                     Mean   : 0.9     Mean   :  13.23   Mean   : 21.41  
##                     3rd Qu.: 1.1     3rd Qu.:  15.00   3rd Qu.: 29.00  
##                     Max.   :25.1     Max.   : 634.00   Max.   :249.00  
##                     NA's   :344856   NA's   :30984     NA's   :32517   
##    O3..ug.m3.      PM10..ug.m3.     PM25..ug.m3.     SO2..ug.m3.     
##  Min.   :  0.00   Min.   :  0.00   Min.   :  0.0    Min.   :-791.00  
##  1st Qu.: 37.00   1st Qu.: 11.00   1st Qu.:  5.0    1st Qu.:   2.00  
##  Median : 54.00   Median : 18.00   Median :  9.0    Median :   5.00  
##  Mean   : 52.62   Mean   : 22.69   Mean   : 13.7    Mean   :   9.09  
##  3rd Qu.: 68.00   3rd Qu.: 29.00   3rd Qu.: 15.0    3rd Qu.:  11.00  
##  Max.   :999.00   Max.   :557.00   Max.   :223.0    Max.   : 364.00  
##  NA's   :170600   NA's   :101435   NA's   :392230   NA's   :89737    
##   Provincia           Estación            Latitud         Longitud     
##  Length:446014      Length:446014      Min.   :38.94   Min.   :-6.782  
##  Class :character   Class :character   1st Qu.:41.65   1st Qu.:-6.484  
##  Mode  :character   Mode  :character   Median :42.54   Median :-4.909  
##                                        Mean   :42.15   Mean   :-5.179  
##                                        3rd Qu.:42.69   3rd Qu.:-4.538  
##                                        Max.   :43.60   Max.   :-2.467  
##                                        NA's   :226     NA's   :226     
##    Posición        
##  Length:446014     
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
hist_O3 <- hist(calidad_aire$O3..ug.m3. , main ="",
xlab = "O3 (ug/m3)",
ylab = "Frecuencia",
xlim = c(0, 150),
breaks = 1000)

hist_PM10 <- hist(calidad_aire$PM10..ug.m3., main ="",
xlab = "PM10 (ug/m3)",
ylab = "Frecuencia",
xlim = c(0, 150),
breaks = 1000)

2.2 Ajuste de tipo de variables

#ajustamos el tipo de la variable fecha
calidad_aire$Fecha <- as.Date(calidad_aire$Fecha)
summary(calidad_aire)
##      Fecha              CO..mg.m3.       NO..ug.m3.       NO2..ug.m3.    
##  Min.   :1997-01-01   Min.   : 0.0     Min.   :-441.00   Min.   :  0.00  
##  1st Qu.:2004-07-26   1st Qu.: 0.3     1st Qu.:   2.00   1st Qu.:  8.00  
##  Median :2009-09-11   Median : 0.7     Median :   5.00   Median : 16.00  
##  Mean   :2009-09-11   Mean   : 0.9     Mean   :  13.23   Mean   : 21.41  
##  3rd Qu.:2015-02-10   3rd Qu.: 1.1     3rd Qu.:  15.00   3rd Qu.: 29.00  
##  Max.   :2020-12-31   Max.   :25.1     Max.   : 634.00   Max.   :249.00  
##                       NA's   :344856   NA's   :30984     NA's   :32517   
##    O3..ug.m3.      PM10..ug.m3.     PM25..ug.m3.     SO2..ug.m3.     
##  Min.   :  0.00   Min.   :  0.00   Min.   :  0.0    Min.   :-791.00  
##  1st Qu.: 37.00   1st Qu.: 11.00   1st Qu.:  5.0    1st Qu.:   2.00  
##  Median : 54.00   Median : 18.00   Median :  9.0    Median :   5.00  
##  Mean   : 52.62   Mean   : 22.69   Mean   : 13.7    Mean   :   9.09  
##  3rd Qu.: 68.00   3rd Qu.: 29.00   3rd Qu.: 15.0    3rd Qu.:  11.00  
##  Max.   :999.00   Max.   :557.00   Max.   :223.0    Max.   : 364.00  
##  NA's   :170600   NA's   :101435   NA's   :392230   NA's   :89737    
##   Provincia           Estación            Latitud         Longitud     
##  Length:446014      Length:446014      Min.   :38.94   Min.   :-6.782  
##  Class :character   Class :character   1st Qu.:41.65   1st Qu.:-6.484  
##  Mode  :character   Mode  :character   Median :42.54   Median :-4.909  
##                                        Mean   :42.15   Mean   :-5.179  
##                                        3rd Qu.:42.69   3rd Qu.:-4.538  
##                                        Max.   :43.60   Max.   :-2.467  
##                                        NA's   :226     NA's   :226     
##    Posición        
##  Length:446014     
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
str(calidad_aire)
## 'data.frame':    446014 obs. of  13 variables:
##  $ Fecha       : Date, format: "2020-12-31" "2020-12-31" ...
##  $ CO..mg.m3.  : num  0.6 NA NA NA NA NA NA NA NA NA ...
##  $ NO..ug.m3.  : int  8 2 8 1 1 2 5 2 2 1 ...
##  $ NO2..ug.m3. : int  16 6 2 4 1 2 9 6 6 1 ...
##  $ O3..ug.m3.  : int  NA NA 65 58 NA 62 56 53 59 81 ...
##  $ PM10..ug.m3.: int  6 8 4 21 6 6 5 6 5 NA ...
##  $ PM25..ug.m3.: int  NA NA NA NA NA NA NA NA NA NA ...
##  $ SO2..ug.m3. : int  1 4 2 17 2 6 5 5 NA 2 ...
##  $ Provincia   : chr  "Burgos" "León" "León" "León" ...
##  $ Estación    : chr  "Burgos1" "C.T.L.R. - Naredo" "Carracedelo" "La Robla" ...
##  $ Latitud     : num  42.4 42.8 42.6 42.8 42.8 ...
##  $ Longitud    : num  -3.68 -5.53 -6.73 -5.63 -5.65 ...
##  $ Posición    : chr  "42.3511111111,-3.67555555556" "42.8166666667,-5.53333333333" "42.5586111111,-6.72555555556" "42.8016666667,-5.625" ...
#ajustamos el tipo de la variable Provincia y Estacion
unique(calidad_aire$Provincia)
##  [1] "Burgos"     "León"       "Palencia"   "Salamanca"  "Valladolid"
##  [6] "Soria"      "Zamora"     "Avila"      "Segovia"    "Madrid"
calidad_aire$Provincia <- as.factor(calidad_aire$Provincia)

unique(calidad_aire$Estación)
##  [1] "Burgos1"                          "C.T.L.R. - Naredo"               
##  [3] "Carracedelo"                      "La Robla"                        
##  [5] "Tudela Veguin-Tudela Veguin"      "Valderas"                        
##  [7] "Guardo"                           "Hontoria 1 - Poblado"            
##  [9] "Renault4"                         "El Maillo"                       
## [11] "Salamanca5"                       "Arco de ladrillo II"             
## [13] "La rubia II"                      "Medina del Campo"                
## [15] "Michelin2"                        "Puente Poniente-Mº Luisa Sánchez"
## [17] "Vega Sicilia"                     "Aranda de Duero 2"               
## [19] "Miranda de Ebro2"                 "C.T.L.R. - Cuadros"              
## [21] "C.T.L.R. - Ventosilla"            "Lario"                           
## [23] "Leon1"                            "Otero"                           
## [25] "Toral de los Vados"               "C.T.G. - Villalba"               
## [27] "Palencia 3"                       "Muriel de la Fuente"             
## [29] "Soria"                            "Renault3"                        
## [31] "Zamora 2"                         "Avila II"                        
## [33] "Burgos4"                          "Medina de Pomar"                 
## [35] "Leon 4"                           "Ponferrada4"                     
## [37] "C.T.G. - Compuerto"               "Hontoria 2 - Venta de Baños"     
## [39] "Salamanca6"                       "Segovia 2"                       
## [41] "Michelin1"                        "Renault1"                        
## [43] "Renault2"                         "VALLADOLID SUR"                  
## [45] "C.T.Compostilla-Congosto"         "C.T.Compostilla-Cortiguera"      
## [47] "C.T.Compostilla-Villaverde"       "C.T.Compostilla-Compostilla"     
## [49] "C.T.Compostilla-Santa Marina"     "NH3"                             
## [51] "Miranda de Ebro1"                 "Puente Regueral"                 
## [53] "San Martín de Valdeiglesias"      "C.T.Anllares - Palacios del Sil" 
## [55] "C.T.Anllares - Susañe"            "C.T.Anllares - Hospital del Sil" 
## [57] "C.T.Anllares - Anllares"          "C.T.Anllares - Lillo"            
## [59] "C.T.Compostilla-San Miguel"       "C.T.Compostilla-Sancedo"         
## [61] "C.T.Compostilla-Cueto"            "Burgos5"                         
## [63] "Salamanca4"                       "Leon3"                           
## [65] "Labradores II"                    "Cementerio"                      
## [67] "Velilla del Rio Carrion"          "Ponferrada5"                     
## [69] "Ponferrada1"                      "Salamanca2"                      
## [71] "Venta de Baños"                   "Santa Teresa"                    
## [73] "Leon2"                            "Burgos3"                         
## [75] "C.T.Anllares - Anllarinos"        "C.T.Anllares - Páramo del Sil"   
## [77] "C.T.Anllares - Sorbeda"           "C.T.L.R. - La Robla"             
## [79] "Zamora"                           "Avila"                           
## [81] "Segovia"                          "Aranda de Duero"                 
## [83] "Palencia2"                        "Salamanca3"                      
## [85] "Burgos2"                          "Ponferrada3"                     
## [87] "Ponferrada2"                      "Miranda de Ebro3"                
## [89] "Palencia1"                        "Salamanca1"                      
## [91] "Arco Ladrillo I"
calidad_aire$Estación <- as.factor(calidad_aire$Estación)

str(calidad_aire)
## 'data.frame':    446014 obs. of  13 variables:
##  $ Fecha       : Date, format: "2020-12-31" "2020-12-31" ...
##  $ CO..mg.m3.  : num  0.6 NA NA NA NA NA NA NA NA NA ...
##  $ NO..ug.m3.  : int  8 2 8 1 1 2 5 2 2 1 ...
##  $ NO2..ug.m3. : int  16 6 2 4 1 2 9 6 6 1 ...
##  $ O3..ug.m3.  : int  NA NA 65 58 NA 62 56 53 59 81 ...
##  $ PM10..ug.m3.: int  6 8 4 21 6 6 5 6 5 NA ...
##  $ PM25..ug.m3.: int  NA NA NA NA NA NA NA NA NA NA ...
##  $ SO2..ug.m3. : int  1 4 2 17 2 6 5 5 NA 2 ...
##  $ Provincia   : Factor w/ 10 levels "Avila","Burgos",..: 2 3 3 3 3 3 5 5 5 6 ...
##  $ Estación    : Factor w/ 91 levels "Aranda de Duero",..: 7 32 34 40 84 85 37 38 71 36 ...
##  $ Latitud     : num  42.4 42.8 42.6 42.8 42.8 ...
##  $ Longitud    : num  -3.68 -5.53 -6.73 -5.63 -5.65 ...
##  $ Posición    : chr  "42.3511111111,-3.67555555556" "42.8166666667,-5.53333333333" "42.5586111111,-6.72555555556" "42.8016666667,-5.625" ...

2.3 Deteccion y tratamiento de datos ausentes

a. deteccion de datos ausentes

# Devuelve un vector lógico 
head(is.na(calidad_aire))
##      Fecha CO..mg.m3. NO..ug.m3. NO2..ug.m3. O3..ug.m3. PM10..ug.m3.
## [1,] FALSE      FALSE      FALSE       FALSE       TRUE        FALSE
## [2,] FALSE       TRUE      FALSE       FALSE       TRUE        FALSE
## [3,] FALSE       TRUE      FALSE       FALSE      FALSE        FALSE
## [4,] FALSE       TRUE      FALSE       FALSE      FALSE        FALSE
## [5,] FALSE       TRUE      FALSE       FALSE       TRUE        FALSE
## [6,] FALSE       TRUE      FALSE       FALSE      FALSE        FALSE
##      PM25..ug.m3. SO2..ug.m3. Provincia Estación Latitud Longitud Posición
## [1,]         TRUE       FALSE     FALSE    FALSE   FALSE    FALSE    FALSE
## [2,]         TRUE       FALSE     FALSE    FALSE   FALSE    FALSE    FALSE
## [3,]         TRUE       FALSE     FALSE    FALSE   FALSE    FALSE    FALSE
## [4,]         TRUE       FALSE     FALSE    FALSE   FALSE    FALSE    FALSE
## [5,]         TRUE       FALSE     FALSE    FALSE   FALSE    FALSE    FALSE
## [6,]         TRUE       FALSE     FALSE    FALSE   FALSE    FALSE    FALSE
# Devuelve un único valor lógico, cierto o falso, si existe algún valor ausente
any(is.na(calidad_aire))
## [1] TRUE
# Devuelve el número de NAs que presenta la tabla
sum(is.na(calidad_aire))
## [1] 1162811
# Devuelve el % de valores perdidos
mean(is.na(calidad_aire))
## [1] 0.2005475
# Detección del número de valores perdidos en cada una de las columnas que presenta la tabla
colSums(is.na(calidad_aire))
##        Fecha   CO..mg.m3.   NO..ug.m3.  NO2..ug.m3.   O3..ug.m3. PM10..ug.m3. 
##            0       344856        30984        32517       170600       101435 
## PM25..ug.m3.  SO2..ug.m3.    Provincia     Estación      Latitud     Longitud 
##       392230        89737            0            0          226          226 
##     Posición 
##            0
# Detección del % de valores perdidos en cada una de las columnas que presenta la tabla
colMeans(is.na(calidad_aire), round(2))
##        Fecha   CO..mg.m3.   NO..ug.m3.  NO2..ug.m3.   O3..ug.m3. PM10..ug.m3. 
## 0.0000000000 0.7731954602 0.0694686714 0.0729057832 0.3824992041 0.2274255965 
## PM25..ug.m3.  SO2..ug.m3.    Provincia     Estación      Latitud     Longitud 
## 0.8794118570 0.2011977203 0.0000000000 0.0000000000 0.0005067106 0.0005067106 
##     Posición 
## 0.0000000000

b. Tratamiento de datos ausentes

# Eliminación de las variables que presentan un % de NAs superior al 50%, para ello se utiliza la función which() que permite realizar selecciones de datos bajo alguna premisa.}
calidad_aire <- calidad_aire[,-which(colMeans(is.na(calidad_aire)) >= 0.50)]
head(calidad_aire)
##        Fecha NO..ug.m3. NO2..ug.m3. O3..ug.m3. PM10..ug.m3. SO2..ug.m3.
## 1 2020-12-31          8          16         NA            6           1
## 2 2020-12-31          2           6         NA            8           4
## 3 2020-12-31          8           2         65            4           2
## 4 2020-12-31          1           4         58           21          17
## 5 2020-12-31          1           1         NA            6           2
## 6 2020-12-31          2           2         62            6           6
##   Provincia                    Estación  Latitud  Longitud
## 1    Burgos                     Burgos1 42.35111 -3.675556
## 2      León           C.T.L.R. - Naredo 42.81667 -5.533333
## 3      León                 Carracedelo 42.55861 -6.725556
## 4      León                    La Robla 42.80167 -5.625000
## 5      León Tudela Veguin-Tudela Veguin 42.80167 -5.648889
## 6      León                    Valderas 42.07972 -5.448889
##                       Posición
## 1 42.3511111111,-3.67555555556
## 2 42.8166666667,-5.53333333333
## 3 42.5586111111,-6.72555555556
## 4         42.8016666667,-5.625
## 5 42.8016666667,-5.64888888889
## 6 42.0797222222,-5.44888888889
# Seleccionamos las variables numéricas que presenta la tabla iterando sobre todas las columnas de la tabla mediante la función sapply() 
columnas_numericas <- which(sapply(calidad_aire, is.numeric))

# Calculamos la media para cada una de las variables numéricas sin tener en cuenta los NAs
cols_mean <- colMeans(calidad_aire[, columnas_numericas], na.rm = TRUE)

# Sustituimos los valores NA por la media correspondiente a cada variable
for (x in columnas_numericas) {
calidad_aire[is.na(calidad_aire[,x]), x] <- round(cols_mean[x],2)
}
head(calidad_aire)
##        Fecha NO..ug.m3. NO2..ug.m3. O3..ug.m3. PM10..ug.m3. SO2..ug.m3.
## 1 2020-12-31          8          16      22.69            6           1
## 2 2020-12-31          2           6      22.69            8           4
## 3 2020-12-31          8           2      65.00            4           2
## 4 2020-12-31          1           4      58.00           21          17
## 5 2020-12-31          1           1      22.69            6           2
## 6 2020-12-31          2           2      62.00            6           6
##   Provincia                    Estación  Latitud  Longitud
## 1    Burgos                     Burgos1 42.35111 -3.675556
## 2      León           C.T.L.R. - Naredo 42.81667 -5.533333
## 3      León                 Carracedelo 42.55861 -6.725556
## 4      León                    La Robla 42.80167 -5.625000
## 5      León Tudela Veguin-Tudela Veguin 42.80167 -5.648889
## 6      León                    Valderas 42.07972 -5.448889
##                       Posición
## 1 42.3511111111,-3.67555555556
## 2 42.8166666667,-5.53333333333
## 3 42.5586111111,-6.72555555556
## 4         42.8016666667,-5.625
## 5 42.8016666667,-5.64888888889
## 6 42.0797222222,-5.44888888889

2.4 Deteccion y tratamiento de valores atipicos(outliers)

a. Variables continuas

#generamos un histograma para conocer la distribución de frecuencias que presenta la variable de estudio:
calidad_aire_1 <-  read.csv("C:/Users/Martini/Downloads/calidad-del-aire-datos-historicos-diarios.csv", sep=";")

histograma_O3 <- hist(calidad_aire_1$O3..ug.m3. , main ="", xlab = "O3 (ug/m3)", ylab = "Frecuencia",xlim = c(0, 150), breaks = 1000)

# Estadísticas necesarias para reproducir el gráfico de cajas y bigotes
options(max.print = 100) 
head(boxplot.stats(calidad_aire$NO2..ug.m3. ))
## $stats
## [1]  0  8 18 34 73
## 
## $n
## [1] 446014
## 
## $conf
## [1] 17.93849 18.06151
## 
## $out
##   [1] 122  75  80  74  81  82  78 100  74  74  78  76  81  77  77  79  86  89
##  [19]  92  82  85  77  93  90  74  74  75  77  82  79  89  75  76  80  80  76
##  [37]  80  85  93  77  86  79  85  82  76  87  75  75  75  76  77  80  75  75
##  [55]  79  96  84  90  79  91  80  86  84  94  74  85  75  94 101  79  78  85
##  [73]  78  77  76  75  80  78  79  76  76  77  80  78  77  79  97  82  94  79
##  [91]  74  76  80  85  90  81  74  81  76  79
##  [ reached getOption("max.print") -- omitted 9267 entries ]
# Construcción del gráfico de cajas y bigotes
boxplot(calidad_aire$O3..ug.m3. , horizontal = TRUE, xlab = "O3 (ug/m3)")

# Se genera una nueva tabla que no contiene los valores almacenados en el vector outliers$out, antes obtenido con la función boxplot.stats().
outliers<- boxplot.stats(calidad_aire$O3..ug.m3. )
calidad_aire_NoOut <- calidad_aire[!(calidad_aire$O3..ug.m3. %in% outliers$out),]
calidad_aire_NoOut
##        Fecha NO..ug.m3. NO2..ug.m3. O3..ug.m3. PM10..ug.m3. SO2..ug.m3.
## 1 2020-12-31          8          16      22.69            6        1.00
## 2 2020-12-31          2           6      22.69            8        4.00
## 3 2020-12-31          8           2      65.00            4        2.00
## 4 2020-12-31          1           4      58.00           21       17.00
## 5 2020-12-31          1           1      22.69            6        2.00
## 6 2020-12-31          2           2      62.00            6        6.00
## 7 2020-12-31          5           9      56.00            5        5.00
## 8 2020-12-31          2           6      53.00            6        5.00
## 9 2020-12-31          2           6      59.00            5       42.15
##   Provincia                    Estación  Latitud  Longitud
## 1    Burgos                     Burgos1 42.35111 -3.675556
## 2      León           C.T.L.R. - Naredo 42.81667 -5.533333
## 3      León                 Carracedelo 42.55861 -6.725556
## 4      León                    La Robla 42.80167 -5.625000
## 5      León Tudela Veguin-Tudela Veguin 42.80167 -5.648889
## 6      León                    Valderas 42.07972 -5.448889
## 7  Palencia                      Guardo 42.79139 -4.846389
## 8  Palencia        Hontoria 1 - Poblado 41.93278 -4.470000
## 9  Palencia                    Renault4 41.96139 -4.494444
##                       Posición
## 1 42.3511111111,-3.67555555556
## 2 42.8166666667,-5.53333333333
## 3 42.5586111111,-6.72555555556
## 4         42.8016666667,-5.625
## 5 42.8016666667,-5.64888888889
## 6 42.0797222222,-5.44888888889
## 7 42.7913888889,-4.84638888889
## 8          41.9327777778,-4.47
## 9 41.9613888889,-4.49444444444
##  [ reached 'max' / getOption("max.print") -- omitted 445535 rows ]
# Construcción de los gráficos de cajas y bigotes
boxplot(calidad_aire$NO2..ug.m3., xlab = "NO2 (ug/m3)")
boxplot(calidad_aire_NoOut$NO2..ug.m3., xlab = "NO2 (ug/m3)")

length(calidad_aire$NO2..ug.m3.)
## [1] 446014
length(calidad_aire_NoOut$NO2..ug.m3.)
## [1] 445544

Variables categoricas

library(ggplot2)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Número de categorías que presenta la variable Provincia
count(calidad_aire, "Provincia")
##   "Provincia"      n
## 1   Provincia 446014
# Construcción del gráfico de barras para la variable Provincia
ggplot_provincias <- ggplot(calidad_aire)+
geom_bar(aes(x = Provincia, fill = Provincia)) +
xlab("Provincia") + ylab("No observaciones") +
theme(axis.text.x = element_text(angle = 30))
ggplot_provincias

Eliminacion de valores atipicos

# Eliminamos las filas que pertenecen al factor “Madrid”
eliminar_Madrid <- calidad_aire$Provincia %in% c("Madrid")
calidad_aire_SM <- calidad_aire[!eliminar_Madrid,]
# Eliminamos el factor “Madrid”
calidad_aire$Provincia <- as.factor(calidad_aire$Provincia)
calidad_aire_SM$Provincia <- droplevels(calidad_aire_SM$Provincia)
# Con la función levels() verificamos la eliminación de la categoría “Madrid” de la variable
levels(calidad_aire_SM$Provincia)
## [1] "Avila"      "Burgos"     "León"       "Palencia"   "Salamanca" 
## [6] "Segovia"    "Soria"      "Valladolid" "Zamora"

2.5 Analisis de correlacion entre variables

# Seleccionamos las variables numéricas situadas en las columnas 2 a 6 de la tabla de calidad del aire (NO, NO2, O3, PM10, PM25 y SO2)
num_variables <- calidad_aire[,c(2,3,4,5,6)]
#Calculamos la matriz de coeficientes de correlación entre las variables numéricas
correlacion <- cor(num_variables)
#Gráfico de correlaciones indicando la forma en la que se representa la correlación (un cuadrado que varía en tamaño según la fortaleza). Para la generación de este gráfico es necesario instalar y cargar la librería corrplot
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.2.2
## corrplot 0.92 loaded
corrplot(correlacion, method = "square")