#UNIVERSIDAD CENTRAL DEL ECUADOR 
#Facultad de Ingeniería en Geología, Minas, Petroleos y Ambiental 
#Ingeniería Ambiental
#Autor: Grupo 1
#fecha:2/12/2025

datos <- datasets::airquality
#extraccion variable cuantitativa continua
Ozono <- datos$Ozone
Ozono <- subset(Ozono, Ozono >= 0)

#Tabla de distribución de frecuencia

#Manualmente
min <- min(Ozono)
max <- max(Ozono)
R <- max - min
K <- floor(1 + 3.33 * log10(length(Ozono)))
k <- floor(K)
A <- R / K

lim_inf <- round(seq(from = min, to = max - A, by = A), 2)
lim_sup <- round(seq(from = min + A, to = max, by = A), 2)
MC <- (lim_inf + lim_sup) / 2

ni <- c()
for (i in 1:K) {
  if (i < K) {
    ni[i] <- length(subset(Ozono, Ozono >= lim_inf[i] & Ozono < lim_sup[i]))
  } else {
    ni[i] <- length(subset(Ozono, Ozono >= lim_inf[i] & Ozono <= lim_sup[i]))
  }
}

hi <- ni / sum(ni) * 100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_desc <- rev(cumsum(rev(hi)))

TDF_Ozono <- data.frame(lim_inf,
                        lim_sup,
                        MC,
                        ni,
                        round(hi,2),
                        Ni_asc,
                        Ni_desc,
                        round(Hi_asc,2),
                        round(Hi_desc,2))

colnames(TDF_Ozono) <- c("Lim inf","Lim sup","MC","ni","hi(%)",
                         "Ni asc","Ni desc","Hi asc(%)","Hi desc(%)")

# crear de fila de totales
totales <- c(lim_inf="TOTAL",
             lim_sup=" ",
             MC=" ",
             ni=sum(ni),
             hi=sum(hi),
             Ni_asc=" ",
             Ni_des=" ",
             Hi_asc=" ",
             Hi_des=" ")

TDF_Ozono_total <- rbind(TDF_Ozono, totales)

library(knitr)
## Warning: package 'knitr' was built under R version 4.5.2
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.5.2
kable(TDF_Ozono_total, align='c',
      caption="Tabla de Distribución de Frecuencias de la Concentración de 
      Ozono en el Aire") %>%
  kable_styling(full_width=FALSE, position="center",
                bootstrap_options=c("striped","hover","condensed"))
Tabla de Distribución de Frecuencias de la Concentración de Ozono en el Aire
Lim inf Lim sup MC ni hi(%) Ni asc Ni desc Hi asc(%) Hi desc(%)
1 24.86 12.93 50 43.1 50 116 43.1 100
24.86 48.71 36.785 30 25.86 80 66 68.97 56.9
48.71 72.57 60.64 12 10.34 92 36 79.31 31.03
72.57 96.43 84.5 15 12.93 107 24 92.24 20.69
96.43 120.29 108.36 6 5.17 113 9 97.41 7.76
120.29 144.14 132.215 2 1.72 115 3 99.14 2.59
144.14 168 156.07 1 0.86 116 1 100 0.86
TOTAL 116 100
# GRAFICAS

# Histograma

hist_Ozono <- hist(Ozono, breaks=11,
                   main="Gráfica N°1: Distribución de la Concentración de 
                   Ozono Presente en el Aire",
                   xlab="Ozono",
                   ylab="Cantidad",
                   ylim=c(0, max(ni)),
                   col="purple",
                   cex.main=0.9,
                   cex.lab=1,
                   cex.axis=0.9,
                   xaxt="n")

axis(1, at=hist_Ozono$breaks,
     labels=hist_Ozono$breaks, las=1,
     cex.axis=0.9)

# Global

hist_Ozono <- hist(Ozono, breaks=11,
                   main="Gráfica N°2: Distribución de la Concentración de 
                   Ozono Presente en el Aire",
                   ylab="Cantidad",
                   ylim=c(0, length(Ozono)),
                   col="purple",
                   cex.main=1,
                   cex.lab=1,
                   cex.axis=0.9,
                   xaxt="n")

axis(1, at=hist_Ozono$breaks,
     labels=hist_Ozono$breaks, las=1,
     cex.axis=0.9)

barplot(TDF_Ozono[["hi(%)"]],
        space=0,
        col="skyblue",
        main="Gráfica N°3: Distribución de la Concentración de Ozono 
        Presente en el Aire",
        xlab="Ozono",
        ylab="Porcentaje (%)",
        names.arg=TDF_Ozono$MC,
        ylim=c(0,100))

# Diagrama de Caja
barplot(TDF_Ozono$'hi(%)', space=0,
        col="lightblue",
        main="Gráfica N°4: Distribución de la Concentración de Ozono 
        Presente en el Aire",
        ylab="Porcentaje (%)",
        ylim=c(0,40),
        cex.main=0.9,
        cex.lab=1,
        cex.axis=0.9,
        names.arg=TDF_Ozono$MC)

boxplot(Ozono,
        horizontal=TRUE,
        main="Gráfica N°5: Distribución de la Concentración de Ozono 
        Presente en el Aire",
        xlab="Ozono",
        col="purple",
        outline=TRUE,
        pch=1)

Li <- lim_inf
Ls <- lim_sup
# Diagrama de Ojiva Ascendente y Descendente
plot(Li, Ni_desc,
     main="Gráfica N°6: Ojiva Ascendente y Descendente de la Distribución de 
     la Concentración de Ozono",
     xlab="Ozono",
     ylab="Cantidad",
     xlim=c(min(Li), max(Ls)),
     col="orange",
     type="o",
     lwd=3,
     xaxt="n")

lines(Ls, Ni_asc,
      col="green",
      type="o",
      lwd=3)

axis(1, at=unique(round(c(Li, Ls),2)))

# Diagrama de Ojiva Ascendente y Descendente Porcentual
plot(Li, Hi_desc,
     main="Gráfica N°7: Ojiva Ascendente y Descendente Porcentual de 
     la Concentración de Ozono",
     xlab="Ozono",
     ylab="Porcentaje (%)",
     xlim=c(min(Li), max(Ls)),
     col="red",
     type="o",
     lwd=2,
     xaxt="n")

lines(Ls, Hi_asc,
      col="blue",
      type="o",
      lwd=3)

axis(1, at=unique(round(c(Li, Ls),2)))