UNIVERSIDAD CENTRAL DEL ECUADOR
# UNIVERSIDAD CENTRAL DEL ECUADOR
# CALIDAD DEL AIRE PM2.5
# -----------------------------------
# CARGA DE LIBRERÍAS
# -----------------------------------
library(knitr)
library(kableExtra)
# -----------------------------------
# IMPORTAR BASE DE DATOS
# -----------------------------------
datos <- read.csv(
"~/Estadistica/Proyecto 2026/Datos utilizados/city_day (1).csv",
stringsAsFactors = FALSE
)
# -----------------------------------
# REVISAR NOMBRES DE COLUMNAS
# -----------------------------------
names(datos)
## [1] "City" "State" "StationName"
## [4] "Zona" "Longitud" "Latitud"
## [7] "Date" "PM2.5" "PM10"
## [10] "NO" "NO2" "NOx"
## [13] "NH3" "CO" "SO2"
## [16] "O3" "Benzene" "Toluene"
## [19] "Xylene" "AQI" "AQI_Bucket"
## [22] "Número.de.habitantes"
# -----------------------------------
# EXTRAER COLUMNA PM2.5
# -----------------------------------
PM2.5 <- datos$PM2.5
# Mostrar primeros datos
head(PM2.5)
## [1] "-" "-" "-" "-" "-" "-"
# -----------------------------------
# LIMPIAR DATOS PM2.5
# -----------------------------------
# Eliminar espacios
datos$PM2.5 <- trimws(datos$PM2.5)
# Reemplazar vacíos por NA
datos$PM2.5[datos$PM2.5 == ""] <- NA
# Convertir a numérico
datos$PM2.5 <- as.numeric(datos$PM2.5)
## Warning: NAs introducidos por coerción
# Resumen estadístico
summary(datos$PM2.5)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.04 28.82 48.57 67.45 80.59 949.99 4598
# -----------------------------------
# FUNCIÓN PARA CALCULAR AQI
# -----------------------------------
calcular_aqi <- function(C){
# Verificar datos vacíos
if(is.na(C)){
return(NA)
}
# AQI Buena
if(C <= 12){
BPlo <- 0
BPhi <- 12
Ilo <- 0
Ihi <- 50
# AQI Moderada
} else if(C <= 35.4){
BPlo <- 12.1
BPhi <- 35.4
Ilo <- 51
Ihi <- 100
# AQI Dañina para sensibles
} else if(C <= 55.4){
BPlo <- 35.5
BPhi <- 55.4
Ilo <- 101
Ihi <- 150
# AQI Dañina
} else if(C <= 150.4){
BPlo <- 55.5
BPhi <- 150.4
Ilo <- 151
Ihi <- 200
# AQI Muy dañina
} else if(C <= 250.4){
BPlo <- 150.5
BPhi <- 250.4
Ilo <- 201
Ihi <- 300
# AQI Peligrosa
} else if(C <= 350.4){
BPlo <- 250.5
BPhi <- 350.4
Ilo <- 301
Ihi <- 400
# AQI Extremadamente peligrosa
} else {
BPlo <- 350.5
BPhi <- 500.4
Ilo <- 401
Ihi <- 500
}
# Fórmula general AQI
AQI <- ((Ihi - Ilo)/(BPhi - BPlo)) * (C - BPlo) + Ilo
# Retornar AQI redondeado
return(round(AQI))
}
# -----------------------------------
# APLICAR FUNCIÓN AQI
# -----------------------------------
datos$AQI_calculado <- sapply(datos$PM2.5, calcular_aqi)
# -----------------------------------
# CLASIFICAR CALIDAD DEL AIRE
# -----------------------------------
datos$Calidad_Aire <- cut(
datos$AQI_calculado,
breaks = c(0,50,100,150,200,300,400,500),
labels = c(
"Buena",
"Moderada",
"Dañina Sensibles",
"Dañina",
"Muy Dañina",
"Peligrosa",
"Extremadamente Peligrosa"
)
)
# -----------------------------------
# ELIMINAR FILAS VACÍAS
# -----------------------------------
datos_validos <- na.omit(
datos[, c("PM2.5", "AQI_calculado", "Calidad_Aire")]
)
# Mostrar datos válidos
head(datos_validos)
# -----------------------------------
# TABLA DE FRECUENCIAS
# -----------------------------------
table(datos$Calidad_Aire)
##
## Buena Moderada Dañina Sensibles
## 970 7466 5704
## Dañina Muy Dañina Peligrosa
## 8600 1623 397
## Extremadamente Peligrosa
## 135
# -----------------------------------
# GRÁFICO DE CALIDAD DEL AIRE
# -----------------------------------
barplot(
table(datos$Calidad_Aire),
main = "Calidad del Aire PM2.5",
xlab = "Categorías AQI",
ylab = "Frecuencia"
)
