UNIVERSIDAD CENTRAL DEL ECUADOR

PROYECTO:ESTUDIO ESTADÍSTICO DE LA CONTAMINACIÓN DEL SUELO Y SU IMPACTO EN LA SALUD

FECHA: 22/11/2025

# Cargar librerías necesarias
library(gt)

# 0. Cargar el dataframe
TDFDate <- read.csv("C:/Users/JOSELYN/Desktop/kangle/Datos Cambiados.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))

# 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 (Debe estar en el mismo bloque)
# =======================================================

TDFAnioCompleto %>%
  gt() %>%
  
  # Formato de dos decimales para porcentajes
  fmt_number(
    columns = c(hi, Hi_asc, Hi_dsc),
    decimals = 2,
    suffix = "%"
  ) %>%
  
  # 1. Título y Subtítulo
  tab_header(
    title = md("**Tabla Nro. 2**"),
    subtitle = md("Tabla de distribución de frecuencias de los datos agrupados por **Año**")
  ) %>%
  
  # Renombrar las columnas
  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 (%)")
  ) %>%
  
  # [Resto de estilos de gt]...
  
  # 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
  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
  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 datos agrupados por Año
Año ni hi (%) Ni asc Ni dsc Hi asc (%) Hi dsc (%)
2015 2801 9.48 2801 29531 9.48 100.00
2016 3478 11.78 6279 26730 21.26 90.52
2017 4689 15.88 10968 23252 37.14 78.74
2018 6471 21.91 17439 18563 59.05 62.86
2019 7446 25.21 24885 12092 84.27 40.95
2020 4646 15.73 29531 4646 100.00 15.73
Total 29531 100.00 NA NA NA NA
Fuente: Datos procesados por el autor a partir de archivo city.day.csv
# DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (ni) - Local
barplot(TDFAnioFin$ni, 
        main = "Gráfico Nº1.1: Frecuencia Absoluta (ni) \n de Observaciones por Año",
        xlab = "Año de la Muestra", 
        ylab = "Frecuencia Absoluta (Cantidad de Días)", 
        names.arg = TDFAnioFin$Anio, # Usa los Años como etiquetas
        las = 1, # Etiquetas del eje X horizontales (se ven mejor con años)
        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 Global: Frecuencia de Observaciones por Año",
        xlab = "Año", 
        ylab = "Frecuencia Absoluta", 
        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áfica: Porcentaje de Observaciones por Año (Local)",
        xlab = "Año de la Muestra", 
        ylab = "Porcentaje (%)", 
        names.arg = TDFAnioFin$Anio, # Usa los Años como etiquetas
        las = 1, 
        col = "darkgreen", 
        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áfica: Porcentaje de Observaciones por Año (Global)",
        xlab = "Año", 
        ylab = "Porcentaje (%)", 
        names.arg = TDFAnioFin$Anio, 
        las = 1, 
        col = "red", 
        ylim = c(0, 100))

# 1. Graficar la ojiva ascendente (Ni_asc)
plot(x = 1:length(TDFAnioFin$Anio), 
     y = TDFAnioFin$Ni_asc, 
     type = "o", 
     col = "red", 
     xlab = "Año", 
     ylab = "Frecuencia Absoluta Acumulada (Ni)",
     main = "Gráfico de Ojivas Combinadas: Acumulado por Año", 
     xaxt = "n", # Oculta las etiquetas del eje X por defecto
     ylim = c(0, max(TDFAnioFin$Ni_asc))) # Ajusta el límite Y al total de la muestra

# 2. Agregar las etiquetas del eje X usando los Años
axis(side = 1, 
     at = 1:length(TDFAnioFin$Anio), 
     labels = TDFAnioFin$Anio,
     las = 1) # Etiquetas horizontales

# 3. Agregar la ojiva descendente (Ni_dsc)
lines(x = 1:length(TDFAnioFin$Anio), 
      y = TDFAnioFin$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)