# Tema: Estadística Descriptiva
# Autor: Camila Zambrano
# Fecha: 17/06/2026

0.Carga de librerías

library(knitr)
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
library(gt)

1. Carga de datos

setwd("~/CAMILA")
datos <- read.csv("Datos cambiados..csv",
                  header = TRUE, 
                  sep = ",", dec = "." )

2. Variable aleatoria

datos <- datos[datos$AQI_Bucket != "-" & !is.na(datos$AQI_Bucket), ]

# ORDEN JERÁRQUICO

datos$AQI_Bucket <- factor(
  datos$AQI_Bucket,
  levels = c("Good", "Satisfactory", "Moderate",
             "Poor", "Very Poor", "Severe"),
  ordered = TRUE
)

3. Tabla de Distribución de Frecuencia

# Frecuencia

TDF_AQI_Bucket <- datos %>%
  group_by(AQI_Bucket) %>%
  summarise(ni = n()) %>%
  arrange(AQI_Bucket) %>%
  mutate(
    hi = round((ni / sum(ni)) * 100, 2),
    Pi = hi
  )

# Fila de TOTAL
Summary <- data.frame(
  AQI_Bucket = "TOTAL",
  ni = sum(TDF_AQI_Bucket$ni),
  hi = 100,
  Pi = 100
)

TDF_AQI_Bucket_final <- rbind(as.data.frame(TDF_AQI_Bucket), Summary)

# TABLA 
TDF_AQI_Bucket_final %>%
  gt() %>%
  
  tab_header(
    title = md("*Tabla N°1*"),
    subtitle = md("Distribución de frecuencias de AQI_Bucket en el estudio calidad del aire en India de 2015-2020")
  ) %>%
  
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%

    tab_style(
    style = cell_borders(
      sides = c("top", "bottom"),  
      color = "black",  
      weight = px(2),  
      style = "solid"   
    ),
    locations = cells_column_labels()  
  ) %>%
  
  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 N°1
Distribución de frecuencias de AQI_Bucket en el estudio calidad del aire en India de 2015-2020
AQI_Bucket ni hi Pi
Good 1341 5.40 5.40
Satisfactory 8224 33.09 33.09
Moderate 8829 35.53 35.53
Poor 2781 11.19 11.19
Very Poor 2337 9.40 9.40
Severe 1338 5.38 5.38
TOTAL 24850 100.00 100.00
Autor: Grupo 1

4. Gráfica de Distribución de Frecuencia

4.1 Diagrama de barras porcentual

library(RColorBrewer)
par(mar = c(6, 5, 5, 5))
# Colores suaves
n <- length(TDF_AQI_Bucket$AQI_Bucket)
colores <- brewer.pal(min(max(n,3), 8), "Set2")

# Crear gráfico
barplot(
  TDF_AQI_Bucket$hi,
  
  # Etiquetas
  names.arg = TDF_AQI_Bucket$AQI_Bucket,
  
  # Títulos
  main = "Gráfica N°3\nDistribución de frecuencia AQI_Bucket en el estudio\ncalidad del aire en India (2015-2020)",
  
  ylab = "Porcentaje",
  
  # Diseño
  col = colores,
  border = "white",
  
  # Escala
  ylim = c(0, max(TDF_AQI_Bucket$hi) + 5),
  
  # Texto
  las = 2,
  cex.names = 0.9,
  cex.main = 1,
  cex.lab = 1,
  
  # Barras
  width = 0.7,
  space = 0.3
)

# Bajar nombre del eje X
title(xlab = "AQI_Bucket", line = 5)

# Líneas de fondo
grid(
  nx = NA,
  ny = NULL,
  col = "gray80",
  lty = 1
)

4.2 Diagrama de barras con probabilidad

library(RColorBrewer)
par(mar = c(6, 5, 5, 5))
# Colores suaves
n <- length(TDF_AQI_Bucket$AQI_Bucket)
colores <- brewer.pal(min(max(n,3), 8), "Set2")

# Crear gráfico
barplot(
  TDF_AQI_Bucket$hi,
  
  # Etiquetas
  names.arg = TDF_AQI_Bucket$AQI_Bucket,
  
  # Títulos
  main = "Gráfica Nro. 3\nDistribución de frecuencia para la probabilidad de AQI_Bucket en el estudio\ncalidad del aire en India (2015-2020)",
  
  ylab = "Probabilidad",
  
  # Diseño
  col = colores,
  border = "white",
  
  # Escala
  ylim = c(0, max(TDF_AQI_Bucket$hi) + 5),
  
  # Texto
  las = 2,
  cex.names = 0.9,
  cex.main = 1,
  cex.lab = 1,
  
  # Barras
  width = 0.7,
  space = 0.3
)

# Bajar nombre del eje X
title(xlab = "AQI_Bucket", line = 5)

# Líneas de fondo
grid(
  nx = NA,
  ny = NULL,
  col = "gray80",
  lty = 1
)

5. Cálculo de probabilidad

¿Cuál es la probabilidad de que la calidad del aire sea clasificada como “Moderate”?

  prob <- TDF_AQI_Bucket_final$Pi[
    TDF_AQI_Bucket_final$AQI_Bucket == "Moderate"
  ]
prob
## [1] 35.53
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "",
     xlim = c(0,2), ylim = c(0,2))

text(
  x = 1,
  y = 1,
  labels = paste(
    "Cálculo de probabilidad\n",
    "¿Cuál es la probabilidad de que la calidad del aire\n",
    "sea clasificada como Moderate?\n",
    "R: La probabilidad de que la calidad de aire sea clasificada\n",
    "como Moderate es de 35.53%\n",
    sep = ""
  ),
  cex = 1.5,
  font = 2
)

6. Conclusión

La variable aleatoria AQI_Bucket tiene un comportamiento poblacional relacionado con la Ley de los grandes números; por ejemplo, la probabilidad de que la calidad del aire sea clasificada como Moderate es de 35.53%, de acuerdo con su frecuencia relativa observada en la muestra.