UNIVERSIDAD CENTRAL DEL ECUADOR - FIGEMPA , INGENIERÍA AMBIENTAL
#Estadística Inferencial
#17/01/2026
#Lorien Arcentales
# Carga de paquetes
library(gt)
library(dplyr)
#1. CARGA DE DATOS
datos<-read.csv("city_day.csv", header = TRUE, dec = ".",
sep = ",")
#Extraccion de la variabela Dióxido de azufre y los "-" de la variable porque son valores inexistentes,
# para un mejor analisis, cambia tamaño muestral de 29531 a 25677
dióxidoazufre <- datos$SO2[datos$SO2 != "-"]
length(dióxidoazufre)
## [1] 25677
dióxidoazufre <- as.numeric(dióxidoazufre)
#Justificación porque la variable es continua: porque puede tomar cualquier valor dentro de los números reales positivos, incluido el cero, sin presentar saltos en su dominio o la variable cambia de manera gradual y no pasa bruscamente de un valor a otro.
# 2. TDF simplificada
Histograma_dióxidoazufre<-hist(dióxidoazufre,plot = FALSE)
#Elemnetos simplificados
breaks <- Histograma_dióxidoazufre$breaks
Li <- breaks[1:(length(breaks)-1)]
Ls <- breaks[2:length(breaks)]
ni<-Histograma_dióxidoazufre$counts
N<-length(dióxidoazufre)
hi<- (ni / N) * 100
TDF_dióxidoazufresimplificado <- data.frame(
Intervalo = paste0("[", round(Li,2), " - ", round(Ls,2), ")"),
ni = ni,
hi= round(hi, 2))
colnames(TDF_dióxidoazufresimplificado) <- c(
"Intervalo",
"ni",
"hi(%)"
)
totales<- data.frame(
Intervalo = "Totales",
ni = sum(ni), # suma total de ni
hi = sum(hi)
)
colnames(totales) <- c(
"Intervalo",
"ni",
"hi(%)"
)
# Agregar al final de la tabla
TDF_dióxidoazufresimplificado <- rbind(TDF_dióxidoazufresimplificado, totales)
TDF_dióxidoazufresimplificado %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 1*"),
subtitle = md("**Distribucion de frecuencia simplificado de concentración de dióxido de azufre,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 frecuencia simplificado de concentración de dióxido de azufre,estudio calidad del aire en India entre 2015-2020 ** | ||
| Intervalo | ni | hi(%) |
|---|---|---|
| [0 - 10) | 14075 | 54.82 |
| [10 - 20) | 7169 | 27.92 |
| [20 - 30) | 1900 | 7.40 |
| [30 - 40) | 835 | 3.25 |
| [40 - 50) | 613 | 2.39 |
| [50 - 60) | 340 | 1.32 |
| [60 - 70) | 178 | 0.69 |
| [70 - 80) | 109 | 0.42 |
| [80 - 90) | 94 | 0.37 |
| [90 - 100) | 80 | 0.31 |
| [100 - 110) | 70 | 0.27 |
| [110 - 120) | 58 | 0.23 |
| [120 - 130) | 44 | 0.17 |
| [130 - 140) | 39 | 0.15 |
| [140 - 150) | 22 | 0.09 |
| [150 - 160) | 18 | 0.07 |
| [160 - 170) | 17 | 0.07 |
| [170 - 180) | 11 | 0.04 |
| [180 - 190) | 4 | 0.02 |
| [190 - 200) | 1 | 0.00 |
| Totales | 25677 | 100.00 |
| Autor: Grupo 2 Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india | ||
# 3. GDF-Histograma de la variable
par(mar = c(5.1, 4.1, 4.1, 2.1))
post<-barplot(TDF_dióxidoazufresimplificado$`hi(%)`[1:(nrow(TDF_dióxidoazufresimplificado)-1)],
space = 0,
col = "orange",
main = "Gráfica N°1:Distribución de la Concentración de Dióxido de azufre,
estudio calidad del aire en India, 2015-2020",
xlab = "Dióxido de azufre (µg/m3)",
ylab = "Porcentaje (%)",
ylim = c(0,100), xaxt = "n")
limites <- c(post[1] - diff(post)[1]/2,
post + diff(post)[1]/2)
axis(
side = 1,
at = limites,
labels = round(breaks, 2),
tck = -0.02
)
# 4. CONJETURA
#Se conjetura que la concentración de dióxido de azufre sigue un modelo de probabilidad exponencial, ya que la variable en su histograma muestra la mayor parte de los datos está concentrada en el extremo izquierdo (bajos valores de SO₂) y la frecuencia disminuye rápidamente conforme aumentan los valores de SO₂.
# 5. CÁLCULO DE PARÁMETROS DISTRIBUCIÓN EXPONELCIAL
# Media
media <- mean(dióxidoazufre)
media
## [1] 14.53198
# Lambda
lambda<-1/media
lambda
## [1] 0.06881376
#6. HISTOGRAMA densidad de probabilidad
Histograma_dióxidoazufre <- hist(dióxidoazufre,
breaks = breaks,
freq = FALSE,
main = "Gráfica Nº2: Comparación modelo exponelcial realidad concentración\n de dióxido de azufre nestudio calidad de aire India 2015-2020",
xlab = "Dióxido de azufre (µg/m3)",
ylab = "Densidad probabilidad ",
col = "grey", ylim = c(0,0.07),xaxt = "n"
)
axis(1, at = breaks)
# Curva exponencial
curve(dexp(x,rate = lambda),
from = 0, to = 200,
col = "orange", lwd = 2, add = TRUE)
#7.TEST DE BONDAD
#Test de Pearson
#Frecuencia observada
# Frecuencias observadas por intervalo
fo <- hist(dióxidoazufre, breaks=breaks, plot=FALSE)$counts
fo
## [1] 14075 7169 1900 835 613 340 178 109 94 80 70 58
## [13] 44 39 22 18 17 11 4 1
n <- length(dióxidoazufre)
p <- diff(pexp(breaks, rate=lambda))
# Fe = Probabilidad * n
fe <- p * n
fe
## [1] 1.277402e+04 6.419088e+03 3.225663e+03 1.620931e+03 8.145359e+02
## [6] 4.093133e+02 2.056845e+02 1.033587e+02 5.193890e+01 2.609987e+01
## [11] 1.311548e+01 6.590672e+00 3.311886e+00 1.664259e+00 8.363087e-01
## [16] 4.202544e-01 2.111825e-01 1.061215e-01 5.332725e-02 2.679753e-02
Correlación<-cor(fo,fe)*100
Correlación
## [1] 99.23768
#Test Chi-cuadrado
# Fo y Fe en porcentual
Fo_porcentual<- fo/n*100
Fo_porcentual
## [1] 54.815593722 27.919928341 7.399618335 3.251937532 2.387350547
## [6] 1.324142228 0.693227402 0.424504420 0.366086381 0.311562877
## [11] 0.272617518 0.225883086 0.171359583 0.151886903 0.085679791
## [16] 0.070101647 0.066207111 0.042839896 0.015578144 0.003894536
Fe_porcentual<- p*100
Fe_porcentual
## [1] 4.974889e+01 2.499937e+01 1.256246e+01 6.312775e+00 3.172239e+00
## [6] 1.594085e+00 8.010456e-01 4.025343e-01 2.022779e-01 1.016469e-01
## [11] 5.107869e-02 2.566761e-02 1.289826e-02 6.481517e-03 3.257034e-03
## [16] 1.636696e-03 8.224577e-04 4.132941e-04 2.076849e-04 1.043639e-04
x2 <- sum((Fo_porcentual - Fe_porcentual)^2 / Fe_porcentual)
x2
## [1] 28.79454
k <- length(Fo_porcentual)
grados_libertad <- k - 1
grados_libertad
## [1] 19
umbral_aceptacion <- qchisq(0.95, df = grados_libertad)
umbral_aceptacion
## [1] 30.14353
x2<umbral_aceptacion
## [1] TRUE
# 8.CÁLCULO DE PROBABILIDAD
#“¿Cuál es la probabilidad de que la concentración de SO₂ supere el límite legal de 40 µg/m³ en un día cualquiera?”
1-pexp(40, rate = lambda)
## [1] 0.06376503
#Demostración:
# Rango de x para la curva
x <- seq(0, 200, by=0.001)
y <- dexp(x, rate=lambda)
# Calcular máximo para ajustar ylim
ylim_max <- max(y) * 1.1
# Graficar curva principal
plot(x, y, type="l", col="orange", lwd=2, xlim=c(0,200), ylim=c(0, ylim_max),
main="Gráfica N°3: Cálculo de probabilidad",
ylab="Densidad de probabilidad", xlab="Dióxido de azufre (µg/m3)", xaxt="n")
# Área a sombrear (por ejemplo, x >= 40)
x_section <- seq(40, 200, by=0.001)
y_section <- dexp(x_section, rate=lambda)
# Sombrear el área
polygon(c(x_section, rev(x_section)), c(y_section, rep(0, length(y_section))),
col=rgb(0,1,0,0.5), border=NA) # verde semitransparente
# Dibujar línea verde sobre el área
lines(x_section, y_section, col="green", lwd=2)
# Leyenda
legend("topright", legend=c("Modelo", "Área de Probabilidad"),
col=c("orange","green"), lwd=2, lty=c(1,1))
# Eje x
axis(1, at=seq(0,200,by=20))