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
# -----------------------------------------------------------
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: Distribución de Zonas del estudio del aire en India, entre
2015-2020",
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 No. 2: Distribución de Zonas del estudio del aire en India, entre
2015-2020",
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 = "Gráfica No. 3: Distribución de Zonas prcentual del estudio del aire en India, entre
2015-2020",
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 = "Gráfica No. 4: Distribución de Zonas porcentual del estudio del aire en India, entre
2015-2020",
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,
main = "Gráfica No. 5: Distribución de Zonas del estudio del aire en India, entre
2015-2020")
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")
## ==========================================
# ==============================================================================
# 6. TABLA GT DE INDICADORES ESTADÍSTICOS (ZONA)
# ==============================================================================
# 1. CÁLCULO DE INDICADORES (Moda y Rango, el resto no aplica)
Mo_calc <- as.character(Moda_Zona) # Moda ya calculada en la Sección 5
Rango_calc <- paste0("Número de categorías: ", Rango_Zona_Categorias)
# 2. Creación del Data Frame de Indicadores
Variable <- "Zona (Localidad geográfica)"
Rango <- Rango_calc
Me <- "-" # Mediana no aplica a variables nominales
Mo <- Mo_calc # Moda
X <- "-" # Media no aplica a variables nominales
var <- "-" # Varianza no aplica
desv <- "-" # Desviación Estándar no aplica
CV <- "-" # Coeficiente de Variación no aplica
As <- "-" # Asimetría no aplica
K <- "-" # Curtosis no aplica
Tabla_indicadores_Zona <- data.frame(Variable, Rango, X, Me, Mo, var, desv, CV, As, K)
colnames(Tabla_indicadores_Zona) <- c("Variable","Rango","X", "Me", "Mo","Var",
"sd","CV","As","K")
# 3. Generar la Tabla GT
Tabla_indicadores_Zona %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 3*"),
subtitle = md("**Indicadores Estadísticos de la Zona del estudio del aire en India (2015-2020)**")
) %>%
tab_source_note(
source_note = md("Autor: Ariel Chilisa\n Fuente: Datos procesados por el autor a partir de archivo city.day.csv")
) %>%
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. 3 |
| Indicadores Estadísticos de la Zona del estudio del aire en India (2015-2020) |
| Variable |
Rango |
X |
Me |
Mo |
Var |
sd |
CV |
As |
K |
| Zona (Localidad geográfica) |
Número de categorías: 3 |
- |
- |
Oeste |
- |
- |
- |
- |
- |
| Autor: Ariel Chilisa
Fuente: Datos procesados por el autor a partir de archivo city.day.csv |