0. Librerías

library(readr)
library(knitr)
library(kableExtra)
library(dplyr)
library(ggplot2)
library(moments)

1. Leer

variables <- read.csv("C:/Users/dellh/Downloads/GlobalWeatherRepository.csv")

2. Depuración y Selección de Variables

DEFRA <- variables$air_quality_gb.defra.index
# Eliminar NA
DEFRA <- na.omit(DEFRA)
Tabla_DEFRA <- table(DEFRA)

3. Frecuencia

ni_DEFRA <- as.vector(Tabla_DEFRA) 
hi_DEFRA <- round((ni_DEFRA / sum(ni_DEFRA)) * 100, 2)

TDF_DEFRA_Base <- data.frame(
  DEFRA = names(Tabla_DEFRA),
  ni = ni_DEFRA,
  hi = hi_DEFRA
)
sumatoria_DEFRA <- data.frame(
  DEFRA = "TOTAL", 
  ni = sum(ni_DEFRA), 
  hi = 100
)
TDF_DEFRA_Suma <- rbind(TDF_DEFRA_Base, sumatoria_DEFRA)

colnames(TDF_DEFRA_Suma) <- c("DEFRA", "Frecuencia Absoluta (ni)", "Frecuencia Relativa (hi %)")

kable(TDF_DEFRA_Suma, 
      align = "c",
      caption = "Tabla N°1:Distribución de frecuencia del índice de calidad                     de aire según escala (AQI DEFRA) 
                  del año 2024 hasta 2026") |> 
  kable_styling(full_width = TRUE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed", "responsive")) |> 
  row_spec(0, bold = TRUE, color = "white", background = "#2C3E50") |> 
  row_spec(nrow(TDF_DEFRA_Suma), bold = TRUE, background = "#EAEDED") |> 
  footnote(general = "Fuente: Global Weather Repository,(https://www.kaggle.com/datasets/nelgiriyewithana/global-weather-repository)",
           general_title = "Nota:Elaborado Grupo N°2 ",
           footnote_as_chunk = TRUE,
           title_format = c("italic", "bold"))
Tabla N°1:Distribución de frecuencia del índice de calidad de aire según escala (AQI DEFRA) del año 2024 hasta 2026
DEFRA Frecuencia Absoluta (ni) Frecuencia Relativa (hi %)
1 62139 43.85
2 37906 26.75
3 17121 12.08
4 4842 3.42
5 3688 2.60
6 2824 1.99
7 1739 1.23
8 1792 1.26
9 1455 1.03
10 8197 5.78
TOTAL 141703 100.00
Nota:Elaborado Grupo N°2 Fuente: Global Weather Repository,(https://www.kaggle.com/datasets/nelgiriyewithana/global-weather-repository)

4. Tabla Simplificada

# Convertir a numérico
DEFRA <- as.numeric(DEFRA)
DEFRA_Categoria <- cut(
  DEFRA,
  breaks = c(0, 3, 6, 9, 10),
  labels = c("Bajo", "Moderado", "Alto", "Muy Alto"),
  include.lowest = TRUE
)

Tabla_DEFRA <- table(DEFRA_Categoria)

ni_DEFRA <- as.vector(Tabla_DEFRA)

hi_DEFRA <- round((ni_DEFRA / sum(ni_DEFRA)) * 100, 2)

TDF_DEFRA_Base <- data.frame(
  Categoria = names(Tabla_DEFRA),
  ni = ni_DEFRA,
  hi = hi_DEFRA
)

sumatoria_DEFRA <- data.frame(
  Categoria = "TOTAL",
  ni = sum(ni_DEFRA),
  hi = 100
)

TDF_DEFRA_Suma <- rbind(TDF_DEFRA_Base, sumatoria_DEFRA)

colnames(TDF_DEFRA_Suma) <- c(
  "Clasificación DEFRA",
  "Frecuencia Absoluta (ni)",
  "Frecuencia Relativa (hi %)"
)

kable(
  TDF_DEFRA_Suma,
  align = "c",
  caption = "Tabla N°2: Resumen de niveles de calidad del aire (Escala DEFRA)                en período 2024-2026"
) %>%
  kable_styling(
    full_width = TRUE,
    position = "center",
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2C3E50") %>%
  row_spec(nrow(TDF_DEFRA_Suma), bold = TRUE, background = "#EAEDED") %>%
  footnote(
    general = "Fuente: Global Weather Repository (Kaggle) y UK-AIR DEFRA: https://uk-air.defra.gov.uk/",
    general_title = "Nota:Grupo N°2 ",
    footnote_as_chunk = TRUE,
    title_format = c("italic", "bold")
  )
Tabla N°2: Resumen de niveles de calidad del aire (Escala DEFRA) en período 2024-2026
Clasificación DEFRA Frecuencia Absoluta (ni) Frecuencia Relativa (hi %)
Bajo 117166 82.68
Moderado 11354 8.01
Alto 4986 3.52
Muy Alto 8197 5.78
TOTAL 141703 100.00
Nota:Grupo N°2 Fuente: Global Weather Repository (Kaggle) y UK-AIR DEFRA: https://uk-air.defra.gov.uk/

5. Gráfica de distribución de frecuencia

5.1 Diagrama de barra (ni)AQI

# Frecuencias por categoría

Tabla_DEFRA <- table(DEFRA_Categoria)

datos_grafica <- data.frame(
  Categoria = names(Tabla_DEFRA),
  Frecuencia = as.vector(Tabla_DEFRA)
)

# Orden correcto de las categorías
datos_grafica$Categoria <- factor(
  datos_grafica$Categoria,
  levels = c("Bajo", "Moderado", "Alto", "Muy Alto")
)

ggplot(datos_grafica,
       aes(x = Categoria,
           y = Frecuencia,
           fill = Categoria)) +
  
  geom_col(width = 0.6, color = "black") +
  
  geom_text(
    aes(label = Frecuencia),
    vjust = -0.5,
    fontface = "bold",
    size = 4
  ) +
  
  scale_fill_manual(
    values = c(
      "Bajo" = "green",
      "Moderado" = "yellow",
      "Alto" = "orange",
      "Muy Alto" = "red"
    )
  ) +
  
  labs(
    title = "Clasificación del Índice AQI según escala DEFRA 
            el año 2024 al 2026",
    x = "Categorías DEFRA",
    y = "Frecuencia Absoluta (ni)"
  ) +
  
  theme_minimal() +
  
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

5.2. Distribución de frecuencia (ni)con relación al todo

# Frecuencias por categoría
Tabla_DEFRA <- table(DEFRA_Categoria)

# Frecuencia absoluta
ni_DEFRA <- as.vector(Tabla_DEFRA)

# Tamaño muestral
N <- sum(ni_DEFRA)

# Datos para la gráfica
datos_grafica <- data.frame(
  Categoria = names(Tabla_DEFRA),
  ni = ni_DEFRA
)

# Orden correcto de categorías
datos_grafica$Categoria <- factor(
  datos_grafica$Categoria,
  levels = c("Bajo", "Moderado", "Alto", "Muy Alto")
)

# Diagrama de barras global
ggplot(datos_grafica,
       aes(x = Categoria,
           y = ni,
           fill = Categoria)) +
  
  geom_col(width = 0.6, color = "black") +
  
  geom_text(
    aes(label = ni),
    vjust = -0.5,
    fontface = "bold",
    size = 4
  ) +
  
  scale_fill_manual(
    values = c(
      "Bajo" = "green",
      "Moderado" = "yellow",
      "Alto" = "orange",
      "Muy Alto" = "red"
    )
  ) +
  
  scale_y_continuous(
    limits = c(0, N),
    breaks = seq(0, N, by = 20000)
  ) +
  
  labs(
    title = "Frecuencia de niveles de calidad de aire según escala 
              DEFRA  desde 2024 hasta 2026",
    subtitle = paste("Tamaño muestral N =", N),
    x = "Categorías DEFRA",
    y = "Frecuencia Absoluta (ni)"
  ) +
  
  theme_minimal() +
  
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(face = "bold", hjust = 0.5),
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

5.3. Distribución de frecuencia (hi) original

N <- sum(ni_DEFRA)

datos_grafica <- data.frame(
  Categoria = names(Tabla_DEFRA),
  ni = ni_DEFRA
)

# Frecuencia relativa porcentual
datos_grafica$hi <- round((datos_grafica$ni / N) * 100, 2)

# Orden correcto
datos_grafica$Categoria <- factor(
  datos_grafica$Categoria,
  levels = c("Bajo", "Moderado", "Alto", "Muy Alto")
)

ggplot(datos_grafica,
       aes(x = Categoria,
           y = hi,
           fill = Categoria)) +
  
  geom_col(width = 0.6, color = "black") +
  
  geom_text(
    aes(label = paste0(hi, "%")),
    vjust = -0.5,
    fontface = "bold",
    size = 4
  ) +
  
  scale_fill_manual(
    values = c(
      "Bajo" = "green",
      "Moderado" = "yellow",
      "Alto" = "orange",
      "Muy Alto" = "red"
    )
  ) +
  
  labs(
    title = "Distribución de frecuencia del Índice AQI según 
                  escala DEFRA desde el año 2024 hasta 2026",
    subtitle = paste("Tamaño de muestra (N) =", N),
    x = "Categorías DEFRA",
    y = "Frecuencia Relativa (%)"
  ) +
  
  ylim(0, max(datos_grafica$hi) + 5) +
  
  theme_minimal() +
  
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(face = "bold", hjust = 0.5),
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

5.4 Distribución DEFRA (hi)

datos_hi <- data.frame(
  Categoria = names(Tabla_DEFRA),
  hi = hi_DEFRA
)

datos_hi$Categoria <- factor(
  datos_hi$Categoria,
  levels = c("Bajo", "Moderado", "Alto", "Muy Alto")
)

ggplot(datos_hi,
       aes(x = Categoria,
           y = hi,
           fill = Categoria)) +
  
  geom_col(width = 0.6, color = "black") +
  
  geom_text(
    aes(label = paste0(hi, "%")),
    vjust = -0.5,
    fontface = "bold",
    size = 4
  ) +
  
  scale_fill_manual(
    values = c(
      "Bajo" = "green",
      "Moderado" = "yellow",
      "Alto" = "orange",
      "Muy Alto" = "red"
    )
  ) +
  
  scale_y_continuous(
    limits = c(0, 100),
    breaks = seq(0, 100, by = 10)
  ) +
  
  labs(
    title = "Distribución de frecuencia relativa
          (hi) del Índice AQI según  escala DEFRA desde
    2024 hasta 2026",
    subtitle = paste("Tamaño muestral N =", N),
    x = "Categorías DEFRA",
    y = "Frecuencia Relativa (%)"
  ) +
  
  theme_minimal() +
  
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(face = "bold", hjust = 0.5),
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

5.5. Diagrama Circular

# Estructura ampliar margen
par(mar = c(4,4,4,8))

Tabla_DEFRA <- table(DEFRA_Categoria)

porcentaje <- round(prop.table(Tabla_DEFRA) * 100, 2)

#Crea el gráfico
pie(
  Tabla_DEFRA,
  labels = paste0(porcentaje, "%"),
  col = c("green", "yellow", "orange", "red"),
  main ="Gráfica N°2:Distribución porcentual AQI DEFRA 
         del año 2024 al 2026",
  border = "black",
  radius = 0.9
)
# Agregar Leyenda

legend("topright",
  inset = c(-0.30,0),
  legend = c("Bajo", "Moderado", "Alto", "Muy Alto"),
  fill = c("green", "yellow", "orange", "red"),
  title = "Categorías",
  xpd =TRUE
)

6. Indicadores de frecuencia

Indicador de posición

# Moda
Tabla_DEFRA <- table(DEFRA)
Moda <- names(Tabla_DEFRA)[which.max(Tabla_DEFRA)]
Moda
## [1] "1"
# Mediana

DEFRA_ordinal <- factor(
  DEFRA_Categoria,
  levels = c("Bajo","Moderado","Alto","Muy Alto"),
  ordered = TRUE
)

median(as.numeric(DEFRA_ordinal))
## [1] 1
niveles <- c("Bajo","Moderado","Alto","Muy Alto")

niveles[round(median(as.numeric(DEFRA_ordinal)))]
## [1] "Bajo"

Rango

# Amplitud del rango
max(DEFRA) - min(DEFRA)
## [1] 9

Indicadores de posición

# Desviación estándar


# Varianza


# Coeficiente de variación (%)

Indicador de forma

# Asimetría


# Curtosis

Tabla de indicadores

Indicadores_DEFRA <- data.frame(
  Variable = "DEFRA (Índice AQI)",
  Rango = "Bajo a Muy Alto",
  X = "-",
  Me = "Bajo",
  Mo = "Bajo",
  sd = "-",
  CV = "-",
  As = "-",
  K = "-"
)

kable(
  Indicadores_DEFRA,
  aling = "c",
  caption = "Tabla N°3: Indicadores estadísticos del índice de calidad del aire (AQI) según la escala DEFRA en el Global Weather Repository desde el 2024 hasta el 2026"
)
Tabla N°3: Indicadores estadísticos del índice de calidad del aire (AQI) según la escala DEFRA en el Global Weather Repository desde el 2024 hasta el 2026
Variable Rango X Me Mo sd CV As K
DEFRA (Índice AQI) Bajo a Muy Alto - Bajo Bajo - - - -

7. Conclusiones

La variable índice de calidad del aire según DEFRA es de tipo ordinal y presenta un rango comprendido entre las categorías Bajo y Muy Alto. La categoría más frecuente corresponde a Bajo y la distribución de los datos gira entorno a la categoría Bajo . Esto indica que durante el período analizado, predominan condiciones atmosféricas de la muestra analizada son adecuadas para el bienestar de las personasde por lo tanto la calidad del aire es clasificada como bajas según la escala DEFRA dentro del repositorio Global Weather Repository. Debido a la variable no es apropiado calcular medidas basadas en distancias númericas como media, desviación estándar , coeficiente de variación, asimetría y curtosis.