#Estadística descriptiva
#Variable cualitativa nominal:Zona
#Autor: Llumitasig Daniela
#Fecha: 30/05/2026
library(gt)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(RColorBrewer)
datos <- read.csv("~/Estadistica/Proyecto 2026/Datos utilizados/city_day (1).csv",
header = TRUE,
dec = ".",
sep = ",")
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("Zona", "ni", "hi(%)")
TDF_Zona_suma %>%
gt() %>%
tab_header(
title = md("Tabla Nro. 1"),
subtitle = md("Distribución de frecuencias de la variable Zona para el análisis
estadístico de la calidad del aire en la India.")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 1
\n Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india ")
) %>%
# --- 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. 1 | ||
| Distribución de frecuencias de la variable Zona para el análisis estadístico de la calidad del aire en la India. | ||
| Zona | ni | hi(%) |
|---|---|---|
| Centro | 289 | 0.98 |
| Este | 7873 | 26.66 |
| Oeste | 21369 | 72.36 |
| TOTAL | 29531 | 100.00 |
| Autor: Grupo 1
Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india |
||
#Diagrama de barras local
library(RColorBrewer)
# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")
par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
height = TDF_Zona$ni,
names.arg = TDF_Zona$Zona,
# Títulos
main = "Gráfica Nro. 1\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
# Diseño
col = colores,
border = "white",
# Texto
las = 2,
cex.names = 0.9,
cex.main = 1,
cex.lab = 1,
# Tamaño barras
width = 0.7,
# Espaciado
space = 0.3
)
title(xlab = "Zona", line = 4)
mtext(
"Frecuencia",
side = 2,
line = 4
)
# Líneas de fondo
grid(
nx = NA,
ny = NULL,
col = "gray80",
lty = 1
)
library(RColorBrewer)
# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")
# Valor máximo
max_y_global <- max(TDF_Zona$ni) + 500
par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
height = TDF_Zona$ni,
# Etiquetas
names.arg = TDF_Zona$Zona,
# Títulos
main = "Gráfica Nro. 2\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
# Diseño
col = colores,
border = "white",
# Escala
ylim = c(0,30000),
# Texto
las = 2,
cex.names = 0.9,
cex.main = 1,
cex.lab = 1,
# Barras
width = 0.7,
space = 0.3
)
title(xlab = "Zona", line = 4)
mtext(
"Frecuencia",
side = 2,
line = 4
)
# Líneas de fondo
grid(
nx = NA,
ny = NULL,
col = "gray80",
lty = 1
)
#Grafica porcentaje
library(RColorBrewer)
# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")
par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
TDF_Zona$hi,
# Etiquetas
names.arg = TDF_Zona$Zona,
# Títulos
main = "Gráfica Nro. 3\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
# Diseño
col = colores,
border = "white",
# Escala
ylim = c(0, max(TDF_Zona$hi) + 5),
# Texto
las = 2,
cex.names = 0.9,
cex.main = 1,
cex.lab = 1,
# Barras
width = 0.7,
space = 0.3
)
title(xlab = "Zona", line = 4)
mtext(
"Frecuencia",
side = 2,
line = 4
)
# Líneas de fondo
grid(
nx = NA,
ny = NULL,
col = "gray80",
lty = 1
)
# Diagrama de barras con relación a la totalidad porcentualmente
library(RColorBrewer)
# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")
par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
TDF_Zona$hi,
# Etiquetas
names.arg = TDF_Zona$Zona,
# Títulos
main = "Gráfica Nro. 4\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
# Diseño
col = colores,
border = "white",
# Escala
ylim = c(0, 100),
# Texto
las = 2,
cex.names = 0.9,
cex.main = 1,
cex.lab = 1,
# Barras
width = 0.7,
space = 0.3
)
title(xlab = "Zona", line = 4)
mtext(
"Frecuencia (%)",
side = 2,
line = 4
)
library(RColorBrewer)
# Colores pastel suaves
colores <- c(
"#FBB4AE", # rosado pastel
"#FFF2AE", # amarillo pastel
"#CDEAC0" # verde pastel
)
color <- adjustcolor(colores, alpha.f = 0.95)
# Etiquetas: SOLO porcentajes
etiqueta <- paste0(round(TDF_Zona$hi, 2), " %")
# Más espacio a la derecha para la leyenda
par(mar = c(2,3, 5, 5))
# Crear gráfico circular
pie(
TDF_Zona$hi,
labels = etiqueta,
# Distancia de las etiquetas respecto al círculo
labeldist = 1.5,
radius = 0.85,
col = color,
border = "black",
lwd = 2,
clockwise = TRUE,
main = "Gráfica Nro. 5\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
cex.main = 1,
cex = 0.9
)
## Warning in text.default(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, adj =
## ifelse(P$x < : "labeldist" es un parámetro gráfico inválido
## Warning in text.default(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, adj =
## ifelse(P$x < : "labeldist" es un parámetro gráfico inválido
## Warning in text.default(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, adj =
## ifelse(P$x < : "labeldist" es un parámetro gráfico inválido
## Warning in title(main = main, ...): "labeldist" es un parámetro gráfico
## inválido
# Leyenda más alejada
legend(
x = 1.5,
y = 1,
legend = TDF_Zona$Zona,
title = "Leyenda",
fill = color,
border = "black",
box.lwd = 1,
box.col = "black",
cex = 0.8,
bty = "o",
xpd = TRUE
)
# 1. CÁLCULO DE LA MODA (Mo)
# Es el nivel con la mayor frecuencia (ni)
Moda_row <- TDF_Zona[which.max(TDF_Zona$ni), ]
Mo_calc <- as.character(Moda_row$Zona[1])
# 2. CÁLCULO DE LA MEDIANA (Me)
# Frecuencias Acumuladas
Ni_calc <- cumsum(TDF_Zona$ni)
N_total <- sum(TDF_Zona$ni)
Posicion_Me <- N_total / 2
# Categoría que contiene la posición N/2
Mediana_row_index <- which(Ni_calc >= Posicion_Me)[1]
Me_calc <- as.character(TDF_Zona$Zona[Mediana_row_index])
# 3. RANGO
# Usamos los niveles extremos de la variable ordinal
Rango_calc <- paste0(
as.character(TDF_Zona$Zona[1]),
" a ",
as.character(TDF_Zona$Zona[length(TDF_Zona$Zona)-1])
)
Variable <- "Zona"
Rango <- Rango_calc # Rango calculado
# Mediana
Me <- Me_calc # Mediana calculada
# Media
X <- "-"
# Moda
Mo <- Mo_calc # Moda calculada
# Indicadores de Dispersión
# Desviación estandar
desv<-"-"
# Coeficiente de variación
CV <- "-"
# Indicadores de Forma
# Coeficiente de Asimetría
As <-"-"
# Curtosis
K <- "-"
# Crear el Data Frame
Tabla_indicadores <- data.frame(Variable, Rango, X, Me, Mo, desv, CV, As, K)
colnames(Tabla_indicadores) <- c("Variable","Rango","X", "Me", "Mo",
"sd","CV","As","K")
library(gt)
library(dplyr)
# Generar la Tabla GT
Tabla_indicadores %>%
gt() %>%
tab_header(
title = md("Tabla Nro. 2"),
subtitle = md("Indicadores estadísticos de la Zona en el análisis de la calidad de aire
en la India (2015-2020)")
) %>%
tab_source_note(
source_note = md("Grupo: 1 <br> Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india ")
) %>%
# Líneas verticales en TODA la tabla
tab_style(
style = cell_borders(
sides = "left",
color = "black",
weight = px(2)
),
locations = list(
cells_body(),
cells_column_labels()
)
) %>%
tab_style(
style = cell_borders(
sides = "right",
color = "black",
weight = px(2)
),
locations = list(
cells_body(),
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. 2 | ||||||||
| Indicadores estadísticos de la Zona en el análisis de la calidad de aire en la India (2015-2020) | ||||||||
| Variable | Rango | X | Me | Mo | sd | CV | As | K |
|---|---|---|---|---|---|---|---|---|
| Zona | Centro a Este | - | Oeste | Oeste | - | - | - | - |
| Grupo: 1 Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india |
||||||||
En conclusión:
El valor más frecuente de la variable
Zona es oeste