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")
## ==========================================