Universidad Central del Ecuador

FIGEMPA-Ingeniería Ambiental

#ESTADISTICA INFERENCIAL
#Lorien Arcentales
#23/11/2025
#Carga de paquetes
library(gt)
library(dplyr)
#Carga de datos 
datos<-read.csv("city_day.csv", header = TRUE, dec = ".",
                sep = ",")
# ORDEN de jerarquía (del mejor al peor)
datos$AQI_Bucket <- factor(
  datos$AQI_Bucket,
  levels = c("Good", "Satisfactory", "Moderate",
             "Poor", "Very Poor", "Severe"),
  ordered = TRUE
)
#Creación de tablas 
#Extracción "-"
AQI_Nivel<-datos$AQI_Bucket
AQI_Nivel<-datos$AQI_Bucket[datos$AQI_Bucket != "-"]

#TDF variable AQI_Nivel
TDF_AQI<-data.frame(table(AQI_Nivel))
ni <- TDF_AQI$Freq
hi <- round((ni / sum(ni)) * 100, 2)
hip <- round((ni / sum(ni)) * 100, 2)
AQI_Nivel <- TDF_AQI$AQI_Nivel
TDF_AQI <- data.frame(AQI_Nivel, ni, hi,hip)
Summary <- data.frame(AQI_Nivel = "TOTAL", ni = sum(ni),hi = 100,hip=100)
TDF_AQI<- rbind(TDF_AQI,Summary)
colnames(TDF_AQI) <- c("AQI_Nivel", "ni", "hi(%)","P (%)")
# TABLA CREACIÓN
library(gt)
library(dplyr)


TDF_AQI %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 1*"),
    subtitle = md("**Distribucion de frecuacia nivel del Indice de la calidad Aire (AQI), estudio calidad del aire en India entre 2015-2020 **")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 2\n Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE,
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  )
Tabla Nro. 1
**Distribucion de frecuacia nivel del Indice de la calidad Aire (AQI), estudio calidad del aire en India entre 2015-2020 **
AQI_Nivel ni hi(%) P (%)
Good 1341 5.40 5.40
Satisfactory 8224 33.09 33.09
Moderate 8829 35.53 35.53
Poor 2781 11.19 11.19
Very Poor 2337 9.40 9.40
Severe 1338 5.38 5.38
TOTAL 24850 100.00 100.00
Autor: Grupo 2 Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india
#Agrupación para una mejor aplicación del modelo de probabilidad
# Eliminar registros con "-"
datos2 <- datos[!is.na(datos$AQI_Bucket) & datos$AQI_Bucket != "-", ]
datos2$Grupo_AQI <- ""

for (i in 1:nrow(datos2)) {
  
  if (datos2$AQI_Bucket[i] %in% c("Good", "Satisfactory", "Moderate")) {
    
    datos2$Grupo_AQI[i] <- "ACEPTABLE"
    
  } else if (datos2$AQI_Bucket[i] %in% c("Poor", "Very Poor", "Severe")) {
    
    datos2$Grupo_AQI[i] <- "NO ACEPTABLE"
  }
}
 AQI_grupo<-datos2$Grupo_AQI
 Grupo <- table(datos2$Grupo_AQI)
 hi_grupo <- prop.table(Grupo) * 100
 TablaAgrupada <- data.frame(
   Grupo_AQI = names(Grupo),
   ni = as.numeric(Grupo),
   hi = round(as.numeric(hi_grupo), 2),
   P = round(as.numeric(hi_grupo), 2)
 )
 
 TablaAgrupada$Grupo_AQI<- ifelse(
   TablaAgrupada$Grupo_AQI == "ACEPTABLE", 1,
   ifelse(TablaAgrupada$Grupo_AQI == "NO ACEPTABLE", 2, TablaAgrupada$Grupo_AQI)
 )
 
 TotalFila <- data.frame(
   Grupo_AQI = "TOTAL",
   ni = sum(TablaAgrupada$ni),
   hi = 100,
   P = 100
 )
 
 TablaAgrupada <- rbind(TablaAgrupada, TotalFila)
 colnames(TablaAgrupada) <- c("AQI_Nivel", "ni", "hi(%)", "P")
 
 
 TablaAgrupada %>%
   gt() %>%
   tab_header(
     title = md("*Tabla Nro. 2*"),
     subtitle = md("**Distribucion de frecuacia nivel del Indice de la calidad Aire (AQI), estudio calidad del aire en India entre 2015-2020 **")
   ) %>%
   tab_source_note(
     source_note = md("Autor: Grupo 2\n Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india")
   ) %>%
   tab_options(
     table.border.top.color = "black",
     table.border.bottom.color = "black",
     table.border.top.style = "solid",
     table.border.bottom.style = "solid",
     column_labels.border.top.color = "black",
     column_labels.border.bottom.color = "black",
     column_labels.border.bottom.width = px(2),
     row.striping.include_table_body = TRUE,
     heading.border.bottom.color = "black",
     heading.border.bottom.width = px(2),
     table_body.hlines.color = "gray",
     table_body.border.bottom.color = "black"
   )
Tabla Nro. 2
**Distribucion de frecuacia nivel del Indice de la calidad Aire (AQI), estudio calidad del aire en India entre 2015-2020 **
AQI_Nivel ni hi(%) P
1 18394 74.02 74.02
2 6456 25.98 25.98
TOTAL 24850 100.00 100.00
Autor: Grupo 2 Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india
 # Gráfica de distribución de frecuencia 
 #Diagrama de barras local
 # Excluir la fila TOTAL
 TablaPlot <- TablaAgrupada[TablaAgrupada$`AQI_Nivel` != "TOTAL", ]
 TablaPlot <- TablaPlot[!is.na(TablaPlot$ni), ]
 
 TablaPlot$ni <- as.numeric(TablaPlot$ni)
 
 barplot(
   TablaPlot$ni,
   names.arg = TablaPlot$AQI_Nivel,
   main = "Grafica Nro 1: Distribución del nivel Indice de calidad del Aire,
  estudio calidad del aire en India, entre 2015-2020 ",
   xlab = "AQI_Nivel",
   ylab = "Cantidad",
   col = c("lightyellow"),
   ylim = c(0,20000),
   las = 2,
   cex.axis = 0.7,
   cex.names = 0.5,
   cex.main = 0.7
 )

 #Diagrama de barras porcentual local
 barplot(TablaPlot$`hi(%)`,
         main="Gráfica No. 2:
        Distribución de Porcentaje del Indice calidad del Aire, 
         estudio calidad del aire en India, entre 2015-2020 ",
         xlab= "AQI_Nivel",
         ylab="Porcentaje (%)",
         names.arg= TablaPlot$`AQI_Nivel`,
         col = "lightyellow",
         cex.names = 0.7,
         cex.main = 0.9,
         cex.axis = 0.8,
         ylim=c(0,80))

 #GDF porbabilidad
 barplot(TablaPlot$`P`,
         main="Gráfica No. 3:
        Distribución de probabilidad del Indice calidad del Aire, 
         estudio calidad del aire en India, entre 2015-2020 ",
         xlab= "AQI_Nivel",
         ylab="Probabilidad",
         names.arg= TablaPlot$`AQI_Nivel`,
         col = "orange",
         cex.names = 0.7,
         cex.main = 0.9,
         cex.axis = 0.8,
         ylim=c(0,100))

 #Asignación de modelo de probabilidad
 # Total de observaciones
 n <- sum(TablaAgrupada$ni[TablaAgrupada$`AQI_Nivel` != "TOTAL"])
 
 # Número de éxitos (ACEPTABLE = 1)
 x <- TablaAgrupada$ni[TablaAgrupada$`AQI_Nivel` == 1]
 
 # Probabilidad de éxito
 p <- x / n
 P_binomial <- dbinom(x, size = n, prob = p)
 P_binomial
## [1] 0.00577095
 P_acumulada <- pbinom(x, size = n, prob = p)
 P_acumulada
## [1] 0.5024234
 Prob_real <- TablaAgrupada$P[TablaAgrupada$`AQI_Nivel` != "TOTAL"]
 Prob_modelo <- c(p, 1 - p)
 
 barplot(
   rbind(Prob_real, Prob_modelo),
   beside = TRUE,
   names.arg = c("Aceptable", "No aceptable"),
   col = c("lightyellow", "orange"),
   ylab = "Probabilidad",
   main = "Modelo Probabilidad binomial del AQI, estudio calidad 
   del aire en India desde 2015-2020"
 )
 
 legend("topright",
        legend = c("Real", "Modelo binomial"),
        fill = c("lightyellow", "orange"))