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"))