UNIVERSIDAD CENTRAL DEL ECUADOR

ANÁLISIS ESTADÍSTICO SOBRE LA CALIDAD DE AIRE EN LA INDIA

FECHA: 05/12/2025

city_day_2_ <- read.csv("city_day (2).csv")

##Estadística Descriptiva
#Variable Continua Benceno
#Llumitasig Daniela 

#Cargar datos 
datos<-read.csv("~/Documentos R/TABLAS A/city_day (2).csv")

#Extraccion de los "-" de la variable Benzene debido a que son valores inexistentes, 
# para un mejor analisis, cambia tamaño muestral de 29531 a 23908

city_day_2_$Benzene[city_day_2_$Benzene == "-"] <- NA

city_day_2_$Benzene <- as.numeric(city_day_2_$Benzene)

Benzene <- na.omit(city_day_2_$Benzene)

#Filtrar Benzene
Benzene <- subset(city_day_2_$Benzene, city_day_2_$Benzene >= 0)

# Calcular el mínimo y máximo de NH3
min_Benzene <- min(Benzene)
max_Benzene <- max(Benzene)

#Calcular rango 
R <- max_Benzene - min_Benzene

#Calcular intervalos 
K <- floor(1 + 3.33 * log10(length(Benzene)))

#Calcular amplitud 
A <-R/K

#Limite inferior 
Li <-round(seq(from=min_Benzene,to=max_Benzene-A,by=A),2)

#Limite superior 
Ls <-round(seq(from=min_Benzene+A,to=max_Benzene,by=A),2)

#Marca de clase 
Mc <- (Li+Ls)/2

# Vector vacío para guardar las frecuencias de cada clase
ni <- c()

for (i in 1:K) {
  if (i < K) {
    # Para las primeras clases: [Li , Ls)
    ni[i] <- length(subset(Benzene, Benzene >= Li[i] & Benzene < Ls[i]))
  } else {
    # Para la última clase: [Li , Ls]
    ni[i] <- length(subset(Benzene, Benzene >= Li[i] & Benzene <= Ls[i]))
  }
}

N <- sum(ni)
hi <- (ni / N) * 100
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))
Intervalo <- paste0("[", round(Li,2), " - ", round(Ls,2), ")")
Intervalo[length(Intervalo)] <- paste0("[", round(Li[length(Li)],2), " - ", 
                                       round(Ls[length(Ls)],2), "]")

TDF_Benzene <- data.frame(
  Intervalo = Intervalo,
  Mc = round(Mc, 2),
  ni = ni,
  hi = round(hi, 2),
  Ni_asc = Ni_asc,
  Ni_desc = Ni_desc,
  Hi_asc = round(Hi_asc, 2),
  Hi_desc = round(Hi_desc, 2)
)
# Crear fila de totales para Benzene
totales <- data.frame(
  Intervalo = "Totales",
  Mc = "-",
  ni = sum(ni),
  hi = round(sum(hi), 2),
  Ni_asc = "-",
  Ni_desc = "-",
  Hi_asc= "-",
  Hi_desc = "-"
)

TDF_Benzene <- rbind(TDF_Benzene, totales)

length(Li)
## [1] 15
library(gt)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
TDF_Benzene %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 1*"),
    subtitle = md("*Distribución de frecuencias de la concentración de Benceno en el estudio de calidad del aire en la India*")
  ) %>%
  tab_source_note(
    source_note = md("Fuente:Datos procesados por el autor a partir del archivo *city_day_(2).csv*")
  ) %>%
  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
Distribución de frecuencias de la concentración de Benceno en el estudio de calidad del aire en la India
Intervalo Mc ni hi Ni_asc Ni_desc Hi_asc Hi_desc
[0 - 30.34) 15.17 23698 99.12 23698 23908 99.12 100
[30.34 - 60.67) 45.51 121 0.51 23819 210 99.63 0.88
[60.67 - 91.01) 75.84 31 0.13 23850 89 99.76 0.37
[91.01 - 121.34) 106.18 8 0.03 23858 58 99.79 0.24
[121.34 - 151.68) 136.51 4 0.02 23862 50 99.81 0.21
[151.68 - 182.01) 166.84 8 0.03 23870 46 99.84 0.19
[182.01 - 212.35) 197.18 4 0.02 23874 38 99.86 0.16
[212.35 - 242.68) 227.51 3 0.01 23877 34 99.87 0.14
[242.68 - 273.02) 257.85 2 0.01 23879 31 99.88 0.13
[273.02 - 303.35) 288.18 7 0.03 23886 29 99.91 0.12
[303.35 - 333.69) 318.52 1 0.00 23887 22 99.91 0.09
[333.69 - 364.02) 348.86 0 0.00 23887 21 99.91 0.09
[364.02 - 394.36) 379.19 1 0.00 23888 21 99.92 0.09
[394.36 - 424.69) 409.52 4 0.02 23892 20 99.93 0.08
[424.69 - 455.03] 439.86 16 0.07 23908 16 100 0.07
Totales - 23908 100.00 - - - -
Fuente:Datos procesados por el autor a partir del archivo city_day_(2).csv
#HISTOGRAMA

# Histograma 
histo_Benzene <- hist(
  Benzene,
  main = "Gráfica Nº1: Distribución de la Concentración de Benceno (µg/m³)\nEstudio de Calidad del Aire en India (2015-2020)",
  xlab = "Concentración de Benceno (µg/m³)",
  ylab = "Frecuencia",
  col = "pink",
  border = "black"
)

# PROCESO DE SIMPLIFICACIÓN PARA BENCENO 

Lis<-histo_Benzene$breaks [1:10]
Lss<-histo_Benzene$breaks [2:11]
MCs<-(Lis+Lis)/2
nis<-histo_Benzene$counts
his <- (nis / N) * 100
Nis_asc <- cumsum(nis) 
His_asc <- cumsum(his) 
Nis_desc <- rev(cumsum(rev(nis)))
His_desc <- rev(cumsum(rev(his)))
Intervalos <- paste0("[", round(Lis,2), " - ", round(Lss,2), ")")
Intervalos[length(Intervalos)] <- paste0("[", round(Lis[length(Lis)],2), 
                                         " - ", round(Lss[length(Lss)],2), "]")
TDF_Benzenesimplificado <- data.frame(
  Intervalo = Intervalos,
  MC = round(MCs, 2),
  ni = nis,
  hi= round(his, 2),
  Ni_ascendente = Nis_asc,
  Hi_ascendente = round(His_asc, 2),
  Ni_descendente = Nis_desc,
  Hi_descendente = round(His_desc, 2)
)
colnames(TDF_Benzenesimplificado) <- c(
  "Intervalo",
  "MC",
  "ni",
  "hi(%)",
  "Ni_asc",
  "Hi_asc (%)",
  "Ni_desc",
  "Hi_desc (%)"
)
totaless <- data.frame(
  Intervalo = "Totales",
  MC = "-",
  ni = sum(nis),           # suma total de ni
  hi = sum(his),            # suma total de hi (%)
  Ni_ascendente = "-",
  Ni_descendente = "-",
  Hi_ascendente = "-",
  Hi_descendente = "-"
)
colnames(totaless) <- c(
  "Intervalo",
  "MC",
  "ni",
  "hi(%)",
  "Ni_asc",
  "Hi_asc (%)",
  "Ni_desc",
  "Hi_desc (%)"
)
# Agregar al final de la tabla
TDF_Benzenesimplificado <- rbind(TDF_Benzenesimplificado, totaless)


#Tabla 2 


TDF_Benzenesimplificado %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 2*"),
    subtitle = md("*Distribución de frecuencia simplificada de concentración de Benceno, estudio calidad del aire en India*")
  ) %>%
  tab_source_note(
    source_note = md("Fuente: Datos procesados por el autor a partir del archivo *city_day (2)*")
  ) %>%
  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
Distribución de frecuencia simplificada de concentración de Benceno, estudio calidad del aire en India
Intervalo MC ni hi(%) Ni_asc Hi_asc (%) Ni_desc Hi_desc (%)
[0 - 50) 0 23809 99.59 23809 99.59 23908 100
[50 - 100) 50 45 0.19 23854 99.77 99 0.41
[100 - 150) 100 8 0.03 23862 99.81 54 0.23
[150 - 200) 150 11 0.05 23873 99.85 46 0.19
[200 - 250) 200 5 0.02 23878 99.87 35 0.15
[250 - 300) 250 8 0.03 23886 99.91 30 0.13
[300 - 350) 300 1 0.00 23887 99.91 22 0.09
[350 - 400) 350 1 0.00 23888 99.92 21 0.09
[400 - 450) 400 18 0.08 23906 99.99 20 0.08
[450 - 500] 450 2 0.01 23908 100 2 0.01
Totales - 23908 100.00 - - - -
Fuente: Datos procesados por el autor a partir del archivo city_day (2)
#GRAFICAS

#Histogramas local

hist(Benzene, breaks = 11,
     main = "Gráfica N°2: Distribución de la Concentración de Benceno
     presente en el estudio de la calidad del aire en India ",
     xlab = " Benzene (µg/m3)",
     ylab = "Cantidad",
     ylim = c(0, max(nis)),
     col = "pink",
     cex.main = 0.9,
     cex.lab = 1,
     cex.axis = 0.9,
     xaxt = "n")
axis(1, at = histo_Benzene$breaks,
     labels = histo_Benzene$breaks, las = 1,
     cex.axis = 0.9)

#Histograma global
hist(Benzene, breaks = 11,
     main = "Gráfica N°3:Distribución de la Concentración de Benceno
     presente en el estudio de la calidad del aire en India",
     xlab = "Benzene (µg/m3)",
     ylab = "Cantidad",
     ylim = c(0, length(Benzene)),
     col = "pink",
     cex.main = 1,
     cex.lab = 1,
     cex.axis = 0.9,
     xaxt = "n")
axis(1, at = histo_Benzene$breaks,
     labels = histo_Benzene$breaks, las = 1,
     cex.axis = 0.9)

#Histograma porcentual local
n <- as.numeric(nrow(TDF_Benzenesimplificado))
pos<-barplot(
  TDF_Benzenesimplificado$`hi(%)`[1:(n-1)],
  space = 0,
  main = "Gráfica No. 4:Distribución concentración de Benceno en el estudio de 
  calidad del aire en la India",
  ylab = "Porcentaje (%)",
  xlab = "Benzene (µg/m3)",
  names.arg = TDF_Benzenesimplificado$MC[1:(n-1)],
  col = "pink"
)
axis(side = 1,
     at = pos,
     labels = TDF_Benzenesimplificado$MC[1:(nrow(TDF_Benzenesimplificado)-1)],
     tck = -0.04,   
     las = 1)       

#Histograma porcentual global

TDF_Benzenesimplificado$`hi (%)` <- as.numeric(TDF_Benzenesimplificado$`hi(%)`)

post<-barplot(TDF_Benzenesimplificado$`hi(%)`[1:(nrow(TDF_Benzenesimplificado)-1)],
              space = 0,
              col = "pink",
              main = "Gráfica N°5:Distribución de la Concentración de Benceno 
              Estudio de calidad del aire en la India",
              xlab = "Benzene (µg/m3)",
              ylab = "Porcentaje (%)",
              names.arg = TDF_Benzenesimplificado$MC[1:(nrow(TDF_Benzenesimplificado)-1)],
              ylim = c(0,100),
              xaxt = "n")
axis(side = 1,
     at = post,
     labels = TDF_Benzenesimplificado$MC[1:(nrow(TDF_Benzenesimplificado)-1)],
     tck = -0.02)

#Diagrama de caja
CajaBenzene<-boxplot(Benzene, horizontal = T,col = "orange", border = "black",
                    main= "Gráfica No.6: Distribución de la concentración de Benceno 
                   Estudio de calidad del aire en la India",
                    xlab="Benzene (µg/m3)")

#Ojiva local 
# Ojiva ascendente
plot(Lss, Nis_asc, type = "b", main = "Gráfica N°7:Distribución de Frecuencias Ascendente y Descendente 
  de la Concentración de Benceno",
     xlab = "Benzene (µg/m3)",
     ylab = "Cantidad", pch = 19,col="red")

# Ojiva descendente
lines(Lis, Nis_desc, type = "b", col = "blue", pch = 19)  

 # Porcentaje

# Ojiva ascendente
plot(Lss, His_asc,
     type = "b",
     main = " Gráfica N°8:Distribución Porcentual Ascendente y Descendente
  de la Concentración de Benceno",
     xlab = "Benzene(µg/m3)",
     ylab = "Porcentaje %",
     col = "blue",
     pch = 19,
     yaxt = "n",          
     ylim = c(99, 100)    
)

axis(2, at = c(99, 100), labels = c("99", "100"))

# Ojiva descendente
lines(Lis, His_desc,
      type = "b",
      col = "red",
      pch = 19)