title: “ESTUDIO ESTADÍSTICO DE LA CALIDAD DEL AIRE EN INDIA” output: html_notebook — # UNIVERSIDAD CENTRAL DEL ECUADOR ### PROYECTO:ESTUDIO ESTADÍSTICO DE LA CALIDAD DEL AIRE EN INDIA ### FECHA: 21/11/2025

#Estadística Descriptiva
#Ariana Viteri
#07/11/2025

# Cargar librerías necesarias
library(gt)

# 0. Cargar el dataframe
TDFDate <- read.csv("~/ariana tercer semestre/Estadistica/city_day.csv", header = TRUE)

# 1. Preparación de Datos: Convertir a formato de fecha R
TDFDate$Date_Convertida <- as.Date(TDFDate$Date, format = "%d/%m/%Y")

# 2. Agrupación por Año:
grupos_Anio <- format(TDFDate$Date_Convertida, format = "%Y")
grupos_Anio_limpio <- grupos_Anio[!is.na(grupos_Anio)]

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

# 👉 AQUI AÑADIMOS LA JERARQUÍA DESCENDENTE (2020 → 2015)
tabla_frecuencia <- tabla_frecuencia[order(-as.numeric(as.character(tabla_frecuencia$grupos_Anio_limpio))), ]

# 4. Asignación de Variables
Anio <- tabla_frecuencia$grupos_Anio_limpio
ni <- tabla_frecuencia$Freq            

# 5. Cálculos Derivados (Frecuencias relativas y acumuladas)
hi <- ni / sum(ni) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi), 2)
Hi_dsc <- round(rev(cumsum(rev(hi))), 2)

# 6. Crear la Tabla de Distribución de Frecuencias Agrupadas
TDFAnioFin <- data.frame(Anio, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)

# --- INCLUSIÓN DE LA FILA TOTAL ---
total_ni <- sum(ni)
total_hi <- sum(hi) 

# 7. CREACIÓN DE TDFAnioCompleto (La variable que gt necesita)
TDFAnioCompleto <- rbind(TDFAnioFin, 
                         data.frame(Anio = "Total",
                                    ni = total_ni, 
                                    hi = total_hi,
                                    Ni_asc = NA, 
                                    Ni_dsc = NA, 
                                    Hi_asc = NA, 
                                    Hi_dsc = NA))

# =======================================================
# VISUALIZACIÓN CON GT
# =======================================================

TDFAnioCompleto %>%
  gt() %>%
  fmt_number(
    columns = c(hi, Hi_asc, Hi_dsc),
    decimals = 2,
    suffix = "%"
  ) %>%
  tab_header(
    title = md("**Tabla Nro. 4**"),
    subtitle = md("Tabla de distribución de frecuencias de los datos agrupados por **Año**")
  ) %>%
  cols_label(
    Anio = "Año",
    ni = html("n<sub>i</sub>"),
    hi = html("h<sub>i</sub> (%)"),
    Ni_asc = html("N<sub>i</sub> asc"),
    Ni_dsc = html("N<sub>i</sub> dsc"),
    Hi_asc = html("H<sub>i</sub> asc (%)"),
    Hi_dsc = html("H<sub>i</sub> dsc (%)")
  ) %>%
  tab_source_note(
    source_note = md("Fuente: Datos procesados de https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india")
  ) %>%
  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()
  ) %>%
  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. 4
Tabla de distribución de frecuencias de los datos agrupados por Año
Año ni hi (%) Ni asc Ni dsc Hi asc (%) Hi dsc (%)
2020 4646 15.73 4646 29531 15.73 100.00
2019 7446 25.21 12092 24885 40.95 84.27
2018 6471 21.91 18563 17439 62.86 59.05
2017 4689 15.88 23252 10968 78.74 37.14
2016 3478 11.78 26730 6279 90.52 21.26
2015 2801 9.48 29531 2801 100.00 9.48
Total 29531 100.00 NA NA NA NA
Fuente: Datos procesados de https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india
# DIAGRAMA DE BARRAS (ya con años en orden descendente)
barplot(TDFAnioFin$ni, 
        main = "Gráfico Nº4.1: Frecuencia de la muestra distribuida por año en la India 2015-2020",
        xlab = "Año de la Muestra", 
        ylab = "Frecuencia (Cantidad de Días)", 
        names.arg = TDFAnioFin$Anio,
        las = 1,
        col = "skyblue")

# 2. DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (ni) - Global
limite_y <- sum(TDFAnioFin$ni) # Recalcula el límite Y (el total de la muestra)

barplot(TDFAnioFin$ni, 
        main = "Gráfico Nº4.2: Frecuencia de la muestra distribuida por año en la India 2015-2020",
        xlab = "Año", 
        ylab = "Frecuencia (Cantidad de Días)", 
        names.arg = TDFAnioFin$Anio, 
        las = 1, 
        col = "darkblue", 
        ylim = c(0, limite_y)) # Establece el eje Y desde 0 hasta el total

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - Local
barplot(TDFAnioFin$hi, 
        main = "Gráfico Nº4.3: Frecuencia de la muestra distribuida por año en la India 2015-2020",
        xlab = "Año de la Muestra", 
        ylab = "Porcentaje (%) (Cantidad de Días)", 
        names.arg = TDFAnioFin$Anio, # Usa los Años como etiquetas
        las = 1, 
        col = "green", 
        ylim = c(0, 100)) # El eje Y siempre va de 0 a 100%

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - Global
barplot(TDFAnioFin$hi, 
        main = "Gráfico Nº4.4: Frecuencia de la muestra distribuida por año en la India 2015-2020",
        xlab = "Año", 
        ylab = "Porcentaje (%) (Cantidad de Días)", 
        names.arg = TDFAnioFin$Anio, 
        las = 1, 
        col = "darkgreen", 
        ylim = c(0, 100))

# =============================
# DIAGRAMA CIRCULAR (PASTEL)
# =============================

library(RColorBrewer)

# Frecuencias relativas en porcentaje
hi_pastel <- round(TDFAnioFin$ni / sum(TDFAnioFin$ni) * 100, 1)

# Etiquetas SOLO porcentaje
etiquetas <- paste0(hi_pastel, "%")

# Paleta cálida (amarillo → naranja → rojo)
paleta_base <- brewer.pal(n = length(TDFAnioFin$ni), "YlOrRd")

# *** ORDENAR COLORES SEGÚN LOS PORCENTAJES ***
# menor porcentaje → color más claro
# mayor porcentaje → color más oscuro
orden <- order(hi_pastel)             # orden ascendente de porcentajes
colores <- paleta_base[rank(hi_pastel)]  # asigna colores según ranking

# Gráfico circular
pie(
  TDFAnioFin$ni,
  labels = etiquetas,
  main = "Gráfico Nº4.2: Distribución porcentual por año (2015-2020)",
  col = colores,
  radius = 1
)

# LEYENDA (en el mismo orden que el pastel)
legend(
  "topright",         # <<---- PUEDES CAMBIAR LA UBICACIÓN
  legend = TDFAnioFin$Anio,
  fill = colores,
  title = "Años",
  cex = 0.9
)