UNIVERSIDAD CENTRAL DEL ECUADOR

PROYECTO:ESTUDIO ESTADÍSTICO DE LA CALIDAD DEL AIRE EN LA INDIA

FECHA: 27/11/2025

TDFAQI<-read.csv("C:/Users/JOSELYN/Desktop/kangle/Datos Cambiados.csv",header = TRUE)
# 1. Preparación de Datos: Convertir a numérico y limpiar NAs
# Usamos PM2.5 como la variable continua
AQI_limpio <- as.numeric(TDFAQI$AQI)
AQI_limpio <- AQI_limpio[!is.na(AQI_limpio)]

# 2. Agrupación: CREACIÓN DE LOS INTERVALOS DE CLASE
# Usamos la función cut() para dividir los datos en grupos.
numero_intervalos <- 6
grupos_AQI <- cut(AQI_limpio, 
                   breaks = numero_intervalos, 
                   include.lowest = TRUE, 
                   right = FALSE)        

# 3. Cálculo de Frecuencias (ni)
tabla_frecuencia <- as.data.frame(table(grupos_AQI))

# 4. Asignación de Variables
AQI <- tabla_frecuencia$grupos_AQI
ni <- tabla_frecuencia$Freq              

# 5. Cálculos Derivados
# La suma de ni es el tamaño total de la muestra limpia
hi <- ni / sum(ni) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi), 4)
Hi_dsc <- round(rev(cumsum(rev(hi))), 4)

# 6. Crear la Tabla de Distribución de Frecuencias Agrupadas
TDFAQIFin_Agrupada <- data.frame(AQI, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)
print(TDFAQIFin_Agrupada)
##                   AQI    ni          hi Ni_asc Ni_dsc   Hi_asc   Hi_dsc
## 1            [11,352) 22652 91.15492958  22652  24850  91.1549 100.0000
## 2           [352,692)  1975  7.94768612  24627   2198  99.1026   8.8451
## 3      [692,1.03e+03)   135  0.54325956  24762    223  99.6459   0.8974
## 4 [1.03e+03,1.37e+03)    61  0.24547284  24823     88  99.8913   0.3541
## 5 [1.37e+03,1.71e+03)    22  0.08853119  24845     27  99.9799   0.1087
## 6 [1.71e+03,2.05e+03]     5  0.02012072  24850      5 100.0000   0.0201
# 1. Calcular los totales (ni es la suma de frecuencias, hi es la suma de porcentajes)
total_ni <- sum(ni)
total_hi <- sum(hi) 

# 2. Agregar la fila 'Total' a la tabla de frecuencias
# Usamos NA (Not Available) en las columnas acumuladas. R lo trata como un valor faltante numérico, 
# y al imprimir la tabla lo muestra como espacio o se puede formatear así.
TDFAQICompleto <- rbind(TDFAQIFin_Agrupada, 
                             data.frame(AQI = "Total",
                                        ni = total_ni, 
                                        hi = total_hi,
                                        Ni_asc = NA,  # Dato Faltante
                                        Ni_dsc = NA,  # Dato Faltante
                                        Hi_asc = NA,  # Dato Faltante
                                        Hi_dsc = NA))

# 3. Mostrar la tabla con el total
print(TDFAQICompleto)
##                   AQI    ni           hi Ni_asc Ni_dsc   Hi_asc   Hi_dsc
## 1            [11,352) 22652  91.15492958  22652  24850  91.1549 100.0000
## 2           [352,692)  1975   7.94768612  24627   2198  99.1026   8.8451
## 3      [692,1.03e+03)   135   0.54325956  24762    223  99.6459   0.8974
## 4 [1.03e+03,1.37e+03)    61   0.24547284  24823     88  99.8913   0.3541
## 5 [1.37e+03,1.71e+03)    22   0.08853119  24845     27  99.9799   0.1087
## 6 [1.71e+03,2.05e+03]     5   0.02012072  24850      5 100.0000   0.0201
## 7               Total 24850 100.00000000     NA     NA       NA       NA
# 1. Calcular los totales (ni es la suma de frecuencias, hi es la suma de porcentajes)
total_ni <- sum(ni)
total_hi <- sum(hi) 

# 2. Agregar la fila 'Total' a la tabla de frecuencias
# Usamos NA (Not Available) en las columnas acumuladas. R lo trata como un valor faltante numérico, 
# y al imprimir la tabla lo muestra como espacio o se puede formatear así.
TDFAQICompleto <- rbind(TDFAQIFin_Agrupada, 
                             data.frame(AQI = "Total",
                                        ni = total_ni, 
                                        hi = total_hi,
                                        Ni_asc = NA,  # Dato Faltante
                                        Ni_dsc = NA,  # Dato Faltante
                                        Hi_asc = NA,  # Dato Faltante
                                        Hi_dsc = NA))

# 3. Mostrar la tabla con el total
print(TDFAQICompleto)
##                   AQI    ni           hi Ni_asc Ni_dsc   Hi_asc   Hi_dsc
## 1            [11,352) 22652  91.15492958  22652  24850  91.1549 100.0000
## 2           [352,692)  1975   7.94768612  24627   2198  99.1026   8.8451
## 3      [692,1.03e+03)   135   0.54325956  24762    223  99.6459   0.8974
## 4 [1.03e+03,1.37e+03)    61   0.24547284  24823     88  99.8913   0.3541
## 5 [1.37e+03,1.71e+03)    22   0.08853119  24845     27  99.9799   0.1087
## 6 [1.71e+03,2.05e+03]     5   0.02012072  24850      5 100.0000   0.0201
## 7               Total 24850 100.00000000     NA     NA       NA       NA
# Asegúrate de que la librería gt esté cargada
library(gt)

# Usaremos TDFMagnitudCompleto (la versión con la fila Total) como nuestra tabla de origen
TDFAQICompleto %>%
  gt() %>%
  
  # 1. Título y Subtítulo adaptados a tu variable PM2.5
  tab_header(
    title = md("**Tabla Nro. 2**"),
    subtitle = md("Tabla de distribución de frecuencias de los niveles de **AQI**")
  ) %>%
  
  # 2. Nota de Fuente
  tab_source_note(
    source_note = md("Fuente: Datos procesados por el autor a partir de archivo city.day.csv")
  ) %>%
  
  # 3. Estilos de Bordes (Laterales)
  tab_style(
    style = cell_borders(
      sides = "left",
      color = "black",
      weight = px(2),
      style = "solid"
    ),
    locations = cells_body()
  ) %>%
  tab_style(
    style = cell_borders(
      sides = "right",
      color = "black",
      weight = px(2),
      style = "solid"
    ),
    locations = cells_body()
  ) %>%
  tab_style(
    style = cell_borders(
      sides = "left",
      color = "black",
      weight = px(2),
      style = "solid"
    ),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = cell_borders(
      sides = "right",
      color = "black",
      weight = px(2),
      style = "solid"
    ),
    locations = cells_column_labels()
  )%>%
  
  # 4. Opciones de Estilos (Bordes Superiores e Inferiores, Rayado de Filas)
  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
Tabla de distribución de frecuencias de los niveles de AQI
AQI ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
[11,352) 22652 91.15492958 22652 24850 91.1549 100.0000
[352,692) 1975 7.94768612 24627 2198 99.1026 8.8451
[692,1.03e+03) 135 0.54325956 24762 223 99.6459 0.8974
[1.03e+03,1.37e+03) 61 0.24547284 24823 88 99.8913 0.3541
[1.37e+03,1.71e+03) 22 0.08853119 24845 27 99.9799 0.1087
[1.71e+03,2.05e+03] 5 0.02012072 24850 5 100.0000 0.0201
Total 24850 100.00000000 NA NA NA NA
Fuente: Datos procesados por el autor a partir de archivo city.day.csv
# DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (ni)

barplot(TDFAQIFin_Agrupada$ni, 
        main = "Gráfico de barras de Frecuencia Absoluta (ni) \n de los niveles de AQI",
        xlab = "Intervalos de AQI", 
        ylab = "Frecuencia Absoluta (Cantidad de días)", 
        names.arg = TDFAQIFin_Agrupada$AQI, # Usa los intervalos de clase como etiquetas
        las = 2, # Permite que las etiquetas del eje X se lean verticalmente
        col = "skyblue" # Puedes cambiar el color que prefieras
)

#DIAGRAMA DE BARRAS LOCAL ni
barplot(TDFAQIFin_Agrupada$ni, main = "Gráfica Nº1.1: Frecuencia de los niveles de AQI en el aire de la india (Local)",
        xlab="AQI", ylab="Cantidad", names.arg = TDFAQIFin_Agrupada$AQI,
        las=2, col="grey")

# 1. Calculamos el límite superior (suma total de ni)
limite_y <- sum(TDFAQIFin_Agrupada$ni)

# 2. DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (Global)
barplot(TDFAQIFin_Agrupada$ni, 
        main = "Gráfico Global: Frecuencia de los niveles de AQI en el aire de la India",
        xlab = "Intervalos de AQI", 
        ylab = "Frecuencia Absoluta ", 
        names.arg = TDFAQIFin_Agrupada$AQI, # Usa los intervalos de clase (ej: [0, 50))
        las = 2,                              # Gira las etiquetas del eje X a 90 grados
        col = "darkblue",                     # Cambiamos el color para distinguirlo
        ylim = c(0, limite_y))                # Establece el eje Y desde 0 hasta el total

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - LOCAL

barplot(TDFAQICompleto$hi, 
        main = "Gráfica : Porcentaje de los niveles de AQI en el aire (Local)",
        xlab = "Intervalos de AQI", 
        ylab = "Porcentaje (%)", 
        names.arg = TDFAQICompleto$AQI, # Usa los intervalos de clase (ej: [0, 50))
        las = 2,                             # Gira las etiquetas del eje X a 90 grados
        col = "darkgreen",                   # Puedes cambiar el color
        ylim = c(0, 100))                    # Aseguramos que el eje Y vaya de 0 a 100%

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - GLOBAL

barplot(TDFAQIFin_Agrupada$hi, 
        main = "Gráfica : Porcentaje de los niveles de AQI en el aire (Global)",
        xlab = "Intervalos de AQI", 
        ylab = "Porcentaje (%)", 
        names.arg = TDFAQIFin_Agrupada$AQI, # Intervalos de clase
        las = 2,                             # Etiquetas verticales
        col = "red",                         # Cambiamos el color
        ylim = c(0, 100))                    # Mantiene el eje Y hasta el 100% (Global)

# 1. Graficar la ojiva Niasc
plot(x = 1:length(TDFAQIFin_Agrupada$AQI), 
     y = TDFAQIFin_Agrupada$Ni_asc, 
     type = "o",  # Usamos 'o' para puntos y líneas (Ojiva)
     col = "red", 
     xlab = "Intervalos de AQI", 
     ylab = "Frecuencia Absoluta Acumulada (Ni)",
     main = "Gráfico de Ojivas Combinadas de los niveles de AQI", 
     xaxt = "n", # Oculta las etiquetas del eje X por defecto
     ylim = c(0, max(TDFAQIFin_Agrupada$Ni_asc))) # Ajusta el límite Y al total de la muestra

# 2. Agregar las etiquetas del eje X usando los intervalos de clase
axis(side = 1, 
     at = 1:length(TDFAQIFin_Agrupada$AQI), 
     labels = TDFAQIFin_Agrupada$AQI,
     las = 2) # Etiquetas verticales

# 3. Agregar la ojiva descendente (Ni_dsc)
lines(x = 1:length(TDFAQIFin_Agrupada$AQI), 
      y = TDFAQIFin_Agrupada$Ni_dsc, 
      type = "o", 
      col = "blue")

# 4. Agregar la Leyenda
legend("topright", 
       legend = c("Ojiva Ascendente (Ni_asc)", "Ojiva Descendente (Ni_dsc)"),
       cex = 0.8,
       col = c("red", "blue"), 
       pch = 1)

# 1. Aseguramos que la variable AQI_limpio esté definida
# Si no has corrido el código anterior, define AQI_limpio así:
AQI_limpio <- as.numeric(TDFAQI$AQI)
AQI_limpio <- AQI_limpio[!is.na(AQI_limpio)]

# 2. Generamos el Diagrama de Caja y Bigotes
Bigotes <- boxplot(AQI_limpio, 
                   horizontal = TRUE, # Gráfico horizontal para mejor lectura
                   col = "lightblue",  # Color que prefieras
                   main = "Gráfica de Caja y Bigotes: Distribución de los niveles de AQI",
                   xlab = "Niveles de AQI",
                   names.arg = "AQI")