UNIVERSIDAD CENTRAL DEL ECUADOR

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

FECHA: 19/11/2025

# ==============================================================================
# ESTADÍSTICA DESCRIPTIVA (VARIABLE CUALITATIVA NOMINAL: ZONA)
# ==============================================================================
# Autor: ARIEL CHILUISA
# Fecha: 19/11/2025
# ==============================================================================

# --------------------------
# 0. CARGA DE LIBRERÍAS
# --------------------------
library(gt)
library(dplyr)
library(RColorBrewer) 

# --------------------------
# 1. CARGA DE DATOS
# --------------------------
# NOTA: Asegúrate que la ruta del archivo sea correcta
datos <- read.csv("C:/Users/JOSELYN/Desktop/kangle/Datos Cambiados.csv",
                  header = TRUE,
                  dec = ".",
                  sep = ",")

# ==============================================================================
# 2. CÁLCULO DE FRECUENCIAS (ZONA)
# ==============================================================================

Zona <- datos$Zona
# Tabla de distribución de frecuencia (TDF)
TDF_Zona <- data.frame(table(Zona))

# Cálculo de frecuencias
ni <- TDF_Zona$Freq
hi <- round((ni / sum(ni)) * 100, 2)
Zona <- TDF_Zona$Zona

TDF_Zona <- data.frame(Zona, ni, hi)

# Fila de resumen (TOTAL)
Summary <- data.frame(Zona = "TOTAL", ni = sum(ni), hi = 100)
TDF_Zona_suma <- rbind(TDF_Zona, Summary)

colnames(TDF_Zona_suma) <- c("Nombre_Oficial", "ni", "hi(%)")

# ==============================================================================
# 3. TABLA DE DISTRIBUCIÓN DE FRECUENCIAS (GT)
# ==============================================================================

TDF_Zona_suma %>%
  gt() %>%
  tab_header(
    title = md("Tabla Nro. 2"),
    subtitle = md("Tabla de distribución de Zona de estados de la estación de monitoreo")
  ) %>%
  tab_source_note(
    source_note = md("Fuente: Datos procesados por el autor a partir de archivo city.day.csv ")
  ) %>%
  # --- Estilos de Borde ---
  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()
  ) %>%
  # --- Opciones Generales de la Tabla ---
  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 Zona de estados de la estación de monitoreo
Nombre_Oficial ni hi(%)
Centro 289 0.98
Este 7873 26.66
Oeste 21369 72.36
TOTAL 29531 100.00
Fuente: Datos procesados por el autor a partir de archivo city.day.csv
# ==============================================================================
# 4. GENERACIÓN DE GRÁFICOS (5 GRÁFICAS)
# ==============================================================================

TDF_Zona$Zona <- iconv(TDF_Zona$Zona, from = "latin1", to = "UTF-8", sub = "")

# -----------------------------------------------------------
# DEFINICIÓN DE PALETAS DE COLORES (MOVIMIENTO CLAVE AQUÍ)
# -----------------------------------------------------------
colores_manual <- c("yellow", "orange", "red", "cyan", "magenta", "green", "blue")
colores_zona <- colores_manual[1:length(TDF_Zona$Zona)]

n <- length(TDF_Zona$Zona)
colores_set3 <- brewer.pal(min(n, 12), "Set3") 
colores_pie <- adjustcolor(colores_set3, alpha.f = 0.9) 

# ------------------------------------------------------------------------------
# Gráfica No. 1.1: Distribución de Zonas (Frecuencia Absoluta - Global por defecto)
# ------------------------------------------------------------------------------
barplot(
  height = TDF_Zona$ni,
  names.arg = TDF_Zona$Zona, 
  main = "Gráfica No. 1.1: Distribución de Zonas (Frecuencia Absoluta)",
  xlab = "Zonas",
  ylab = "Cantidad (ni)",
  col = heat.colors(length(TDF_Zona$ni)),
  las = 2,                 
  cex.names = 0.7,         
  ylim = c(0, max(TDF_Zona$ni) * 1.1)
)

# ------------------------------------------------------------------------------
# Gráfica No. 1.2: Distribución de las Zonas (Frecuencia Absoluta - Vista GLOBAL)
# ------------------------------------------------------------------------------

# NOTA: Ajuste de margen para asegurar la visibilidad del Eje X y evitar el tope con el título
par(mar = c(8, 4, 6, 2) + 0.1) 

barplot(TDF_Zona$ni,
        main = "Gráfica 1.2: Distribución de las Zonas (Frecuencia Absoluta - Vista GLOBAL)",
        xlab = "", # Usamos mtext para el título del eje X
        ylab = "Cantidad (ni)",
        col = colores_zona, 
        names.arg = TDF_Zona$Zona,
        ylim = c(0, max(TDF_Zona$ni) * 1.1),
        las = 2,
        cex.names = 0.7
)
mtext("Zonas", side = 1, line = 6.5, cex = 1)

# IMPORTANTE: Restablecer los márgenes estándar después de este gráfico
par(mar = c(5, 4, 4, 2) + 0.1)

# ------------------------------------------------------------------------------
# Gráfica No. 1.3: Distribución de Zonas (Porcentaje Local)
# ------------------------------------------------------------------------------

barplot(TDF_Zona$hi,
        main = "Grafica No 1.3: Distribución de Zonas (Porcentaje Local)",
        xlab = "Zonas",
        ylab = "Porcentaje (%)",
        col = colores_zona,
        names.arg = TDF_Zona$Zona,
        ylim = c(0, max(TDF_Zona$hi) * 1.2),
        las = 2,
        cex.names = 0.7
)

# ------------------------------------------------------------------------------
# Gráfica N°1.4: Distribución de Zonas (Porcentaje Global)
# ------------------------------------------------------------------------------

barplot(TDF_Zona$hi,
        main = "Grafica N°1.4: Distribución de Zonas (Porcentaje Global)",
        xlab = "Zonas",
        ylab = "Porcentaje (%)",
        col = colores_zona,
        names.arg = TDF_Zona$Zona,
        ylim = c(0, 100),
        las = 2,
        cex.names = 0.7
)

# ------------------------------------------------------------------------------
# Gráfica No. 1.5: Diagrama Circular (Porcentaje)
# ------------------------------------------------------------------------------

etiqueta <- paste(TDF_Zona$hi, "%", sep = "")

pie(TDF_Zona$hi,
    labels = etiqueta,
    radius = 1,
    col = colores_pie, # ¡Ahora 'colores_pie' está definido en la Sección 4!
    main = "Gráfica No.1.5: Porcentaje de Zonas")

legend("bottomright",
       legend = TDF_Zona$Zona,
       title = "Leyenda",
       fill = colores_pie,
       cex = 0.8)

# ==============================================================================
# 5. CÁLCULO DE MODA Y RANGO (ZONA)
# ==============================================================================

# CÁLCULO DE LA MODA (Categoría más frecuente)
moda_index <- which.max(TDF_Zona$ni)
Moda_Zona <- TDF_Zona$Zona[moda_index]

# CÁLCULO DEL RANGO (Número de categorías únicas)
Rango_Zona_Categorias <- length(TDF_Zona$Zona)

cat("\n==========================================\n")
## 
## ==========================================
cat("          ANÁLISIS DE MODA Y RANGO\n")
##           ANÁLISIS DE MODA Y RANGO
cat("==========================================\n")
## ==========================================
cat("MODA (Categoría más frecuente): ", as.character(Moda_Zona), "\n")
## MODA (Categoría más frecuente):  Oeste
cat("RANGO (Número de categorías únicas):", Rango_Zona_Categorias, "\n")
## RANGO (Número de categorías únicas): 3
cat("==========================================\n")
## ==========================================