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
# 6. Crear la Tabla de Distribución de Frecuencias Agrupadas
TDFAnioFin <- data.frame(Anio, ni, hi)
# --- 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))
# ========================================================
# PASOS DE CORRECCIÓN PARA EVITAR EL ERROR DE GT
# ========================================================
# 8. Limpiar nombres de columnas (esto suele causar problemas con GT/Markdown)
colnames(TDFAnioCompleto) <- c("Anio", "ni ", "hi (%)")
# 9. Asegurar que las columnas sean de tipo character/numeric para gt
TDFAnioCompleto$Anio <- as.character(TDFAnioCompleto$Anio)
TDFAnioCompleto$`hi (%)` <- round(TDFAnioCompleto$`hi (%)`, 2) # Redondear porcentajes
# ========================================================
# TABLA GT (CÓDIGO ORIGINAL MODIFICADO)
# ========================================================
library(gt)
library(dplyr)
TDFAnioCompleto %>%
gt() %>%
tab_header(
title = md("Tabla Nro. 1"),
subtitle = md("Tabla de frecuencias de AQI_Bucket en el estudio calidad del aire en India de 2015-2020")
) %>%
tab_source_note(
source_note = md("Fuente: Datos procesados por el autor a partir de archivo city.day.csv")
) %>%
tab_style(
style = cell_borders(sides = "left", color = "black", weight = px(2)),
locations = cells_body()
) %>%
tab_style(
style = cell_borders(sides = "right", color = "black", weight = px(2)),
locations = cells_body()
) %>%
tab_style(
style = cell_borders(sides = "left", color = "black", weight = px(2)),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "right", color = "black", weight = px(2)),
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. 1 |
| Tabla de frecuencias de AQI_Bucket en el estudio calidad del aire en India de 2015-2020 |
| Anio |
ni |
hi (%) |
| 2020 |
4646 |
15.73 |
| 2019 |
7446 |
25.21 |
| 2018 |
6471 |
21.91 |
| 2017 |
4689 |
15.88 |
| 2016 |
3478 |
11.78 |
| 2015 |
2801 |
9.48 |
| Total |
29531 |
100.00 |
| Fuente: Datos procesados por el autor a partir de archivo city.day.csv |
# DIAGRAMA DE BARRAS local
barplot(TDFAnioFin$ni,
main = "Gráfico Nº1: Frecuencia de la muestra distribuida por año en la India 2015-2020",
xlab = "Año de la Muestra",
ylab = "Frecuencia Cantidad ",
cex.main = 0.8,
names.arg = TDFAnioFin$Anio,
las = 1,
col = "skyblue")

#grafica 2 cantidad global
# 1. Calcular el límite Y
limite_y <- sum(TDFAnioFin$ni)
barplot(TDFAnioFin$ni,
main = "Gráfico Nº2: Frecuencia de la muestra distribuida por año en la India 2015-2020",
xlab = "",
ylab = "", # <--- Eliminamos el título aquí
cex.names = 0.9,
cex.main = 0.8,
names.arg = TDFAnioFin$Anio,
las = 0.9,
col = "darkblue",
ylim = c(0, limite_y))
mtext(text = "Frecuencia Cantidad",
side = 2,
line = 2.2) # <--- Cambia este valor para alejar o acercar el título
mtext(text = "Año",
side = 1,
line = 2)

#Histograma de Barras de porcentaje local 3
library(RColorBrewer)
# Número de barras
n <- length(TDFAnioFin$Anio)
# Paleta de colores verde pastel
colores <- colorRampPalette(brewer.pal(9, 'Greens'))(n)
# Porcentaje local (frecuencia relativa)
hi_local <- TDFAnioFin$hi
# Calcular límite Y automático (máximo porcentaje local + 10% para margen)
ylim_local <- c(0, max(hi_local) * 1.1)
# Gráfico de barras de porcentaje local
barplot(
height = hi_local, # frecuencia relativa local
names.arg = TDFAnioFin$Anio,
main = "Gráfica Nro 3: Distribución porcentual de la muestra por año en India (2015-2020)",
xlab = "",
ylab = "Porcentaje (%)",
col = colores, # aplica el verde pastel
ylim = ylim_local, # eje Y adaptado al máximo porcentaje local
las = 1, # nombres de eje X horizontales
cex.names = 0.8, # tamaño de nombres
cex.main = 0.9, # tamaño del título
mgp = c(3, 1, 0) # posición de títulos y labels
)
# Etiqueta adicional para eje X, más separada
mtext("Año de la Muestra", side = 1, line = 3, cex = 1)

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

# =============================
# DIAGRAMA CIRCULAR (PASTEL) CON LEYENDA EN CUADRO
# =============================
library(RColorBrewer)
# Frecuencias relativas en porcentaje
hi_pastel <- round(TDFAnioFin$ni / sum(TDFAnioFin$ni) * 100, 1)
# Etiquetas SOLO porcentaje
etiquetas <- paste0(hi_pastel, "%")
# Paleta de colores (amarillo → naranja → rojo)
paleta_base <- brewer.pal(n = length(TDFAnioFin$ni), "YlOrRd")
# Ordenar colores según porcentaje
colores <- paleta_base[rank(hi_pastel)] # menor porcentaje → color más claro
# 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 con cuadro
legend(
"topright", # posición de la leyenda
legend = TDFAnioFin$Anio, # nombres de los años
fill = colores, # colores correspondientes
title = "Año de la Muestra",
cex = 0.8, # tamaño del texto
bty = "o" # 'o' dibuja el cuadro alrededor de la leyenda
)

# ============================================
# INDICADORES ESTADÍSTICOS – Variable Anio
# (Cualitativa Ordinal)
# ============================================
# 1. MODA (Mo): Año con mayor frecuencia
Moda_row <- TDFAnioFin[which.max(TDFAnioFin$ni), ]
Mo_calc <- as.character(Moda_row$Anio)
# 2. MEDIANA (Me)
Ni_calc <- cumsum(TDFAnioFin$ni)
N_total <- sum(TDFAnioFin$ni)
Posicion_Me <- N_total / 2
Mediana_row_index <- which(Ni_calc >= Posicion_Me)[1]
Me_calc <- as.character(TDFAnioFin$Anio[Mediana_row_index])
# 3. RANGO (Año inicial – Año final)
Rango_calc <- paste0(
as.character(TDFAnioFin$Anio[length(TDFAnioFin$Anio)]),
" a ",
as.character(TDFAnioFin$Anio[1])
)
# ============================================
# TABLA DE INDICADORES
# ============================================
Variable <- "Anio (Periodo de Estudio)"
Rango <- Rango_calc
X <- "-" # Media no aplica
Me <- Me_calc
Mo <- Mo_calc
var <- "-"
desv <- "-"
CV <- "-"
As <- "-"
K <- "-"
Tabla_indicadores <- data.frame(
Variable, Rango, X, Me, Mo, var, desv, CV, As, K
)
colnames(Tabla_indicadores) <- c(
"Variable","Rango","X","Me","Mo","Var","sd","CV","As","K"
)
# ============================================
# TABLA GT
# ============================================
library(gt)
library(dplyr)
Tabla_indicadores %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 3*"),
subtitle = md("**Indicadores Estadísticos de la Variable Anio en el estudio de calidad del aire en India (2015–2020)**")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 2
Fuente: Datos procesados por el autor a partir del 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 Variable Anio en el estudio de calidad del aire en India (2015–2020) |
| Variable |
Rango |
X |
Me |
Mo |
Var |
sd |
CV |
As |
K |
| Anio (Periodo de Estudio) |
2015 a 2020 |
- |
2018 |
2019 |
- |
- |
- |
- |
- |
Autor: Grupo 2
Fuente: Datos procesados por el autor a partir del archivo city.day.csv |