# ==============================================================================
# 1. CARGA DE PAQUETES Y DATOS
# ==============================================================================
# Cargar librerías necesarias
library(gt)
library(dplyr)
# Carga de librería para Asimetría y Curtosis
# install.packages("e1071")
library(e1071)
# Carga de datos
# El archivo ya está cargado en el entorno
datos <- read.csv("C:/Users/WILLIAM/Pictures/overleaf/Datos Cambiados.csv",
header = TRUE,
sep = ",",
dec = ".")
# ==============================================================================
# 2. PREPARACIÓN Y LIMPIEZA DE DATOS DE ÓXIDOS DE NITRÓGENO (NOx)
# ==============================================================================
# Extracción de los "-" (valores inexistentes) de la variable NOx
# NOTA: Asumimos que la columna se llama 'NOx'
nox <- datos$NOx[datos$NOx != "-"]
# Tamaño muestral después de la limpieza
cat("Tamaño muestral del Óxido de Nitrógeno (sin '-'):", length(nox), "\n")
## Tamaño muestral del Óxido de Nitrógeno (sin '-'): 25346
# Conversión a numérico
nox <- as.numeric(nox)
# ==============================================================================
# 3. CÁLCULOS PARA LA DISTRIBUCIÓN DE FRECUENCIAS DETALLADA (34 CLASES) - NOx
# ==============================================================================
N_nox <- length(nox)
min_nox <- min(nox)
max_nox <- max(nox)
R_nox <- max_nox - min_nox
# Número de clases (k): Se mantienen 34 clases
k_detallado_nox <- 34
# Amplitud de clase (A)
A_nox <- R_nox / k_detallado_nox
# Generación de límites de intervalos
Li_nox <- seq(from = min_nox, to = max_nox - A_nox, by = A_nox)
Ls_nox <- c(seq(from = min_nox + A_nox, to = max_nox - A_nox, by = A_nox), max_nox)
# Redondeo para cálculos de intervalos precisos
nox <- round(nox, 3)
Li_nox <- round(Li_nox, 3)
Ls_nox <- round(Ls_nox, 3)
# Marcas de Clase (MC)
MC_nox <- (Li_nox + Ls_nox) / 2
# Creación de frecuencias absolutas (ni)
ni_nox <- numeric(length(Li_nox))
for (i in 1:length(Li_nox)) {
if (i < length(Li_nox)) {
# Intervalo abierto por la derecha: [Li, Ls)
ni_nox[i] <- sum(nox >= Li_nox[i] & nox < Ls_nox[i])
} else {
# Último intervalo cerrado: [Li, Ls]
ni_nox[i] <- sum(nox >= Li_nox[i] & nox <= Ls_nox[i])
}
}
# Frecuencias relativas y acumuladas
hi_nox <- (ni_nox / N_nox) * 100
Ni_asc_nox <- cumsum(ni_nox)
Ni_desc_nox <- rev(cumsum(rev(ni_nox)))
Hi_asc_nox <- cumsum(hi_nox)
Hi_desc_nox <- rev(cumsum(rev(hi_nox)))
# Formatear la columna Intervalo
Intervalo_nox <- paste0("[", round(Li_nox, 2), " - ", round(Ls_nox, 2), ")")
# Corregir el último intervalo para que sea cerrado
Intervalo_nox[length(Intervalo_nox)] <- paste0("[", round(Li_nox[length(Li_nox)], 2), " - ",
round(Ls_nox[length(Ls_nox)], 2), "]")
# Crear el Data Frame (TDF)
TDF_nox <- data.frame(
Intervalo = Intervalo_nox,
MC = round(MC_nox, 2),
ni = ni_nox,
hi = round(hi_nox, 2),
Ni_ascendente = Ni_asc_nox,
Ni_descendente = Ni_desc_nox,
Hi_ascendente = round(Hi_asc_nox, 2),
Hi_descendente = round(Hi_desc_nox, 2)
)
# Agregar la fila de totales
totales_nox <- data.frame(
Intervalo = "Totales",
MC = "-",
ni = sum(ni_nox),
hi = sum(hi_nox),
Ni_ascendente = "-",
Ni_descendente = "-",
Hi_ascendente = "-",
Hi_descendente = "-"
)
TDF_nox_completa <- rbind(TDF_nox, totales_nox)
# ==============================================================================
# 4. TABLA DE FRECUENCIAS DETALLADA (Tabla Nro. 1)
# ==============================================================================
TDF_nox_completa %>%
gt() %>%
tab_header(
title = "Tabla Nro. 1",
subtitle = "Distribución de frecuencia de concentración de Óxidos de Nitrógeno (NOₓ), estudio calidad del aire en India entre 2015-2020"
) %>%
tab_source_note(
source_note = "Autor: Grupo 2\n Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india"
) %>%
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 frecuencia de concentración de Óxidos de Nitrógeno (NOₓ), estudio calidad del aire en India entre 2015-2020 | |||||||
| Intervalo | MC | ni | hi | Ni_ascendente | Ni_descendente | Hi_ascendente | Hi_descendente |
|---|---|---|---|---|---|---|---|
| [0 - 13.75) | 6.88 | 6840 | 26.99 | 6840 | 25346 | 26.99 | 100 |
| [13.75 - 27.51) | 20.63 | 7896 | 31.15 | 14736 | 18506 | 58.14 | 73.01 |
| [27.51 - 41.26) | 34.38 | 4526 | 17.86 | 19262 | 10610 | 76 | 41.86 |
| [41.26 - 55.02) | 48.14 | 2145 | 8.46 | 21407 | 6084 | 84.46 | 24 |
| [55.02 - 68.77) | 61.89 | 1366 | 5.39 | 22773 | 3939 | 89.85 | 15.54 |
| [68.77 - 82.52) | 75.65 | 788 | 3.11 | 23561 | 2573 | 92.96 | 10.15 |
| [82.52 - 96.28) | 89.4 | 516 | 2.04 | 24077 | 1785 | 94.99 | 7.04 |
| [96.28 - 110.03) | 103.15 | 402 | 1.59 | 24479 | 1269 | 96.58 | 5.01 |
| [110.03 - 123.78) | 116.91 | 259 | 1.02 | 24738 | 867 | 97.6 | 3.42 |
| [123.78 - 137.54) | 130.66 | 192 | 0.76 | 24930 | 608 | 98.36 | 2.4 |
| [137.54 - 151.29) | 144.42 | 134 | 0.53 | 25064 | 416 | 98.89 | 1.64 |
| [151.29 - 165.05) | 158.17 | 91 | 0.36 | 25155 | 282 | 99.25 | 1.11 |
| [165.05 - 178.8) | 171.92 | 61 | 0.24 | 25216 | 191 | 99.49 | 0.75 |
| [178.8 - 192.55) | 185.68 | 36 | 0.14 | 25252 | 130 | 99.63 | 0.51 |
| [192.55 - 206.31) | 199.43 | 32 | 0.13 | 25284 | 94 | 99.76 | 0.37 |
| [206.31 - 220.06) | 213.18 | 19 | 0.07 | 25303 | 62 | 99.83 | 0.24 |
| [220.06 - 233.82) | 226.94 | 14 | 0.06 | 25317 | 43 | 99.89 | 0.17 |
| [233.82 - 247.57) | 240.69 | 9 | 0.04 | 25326 | 29 | 99.92 | 0.11 |
| [247.57 - 261.32) | 254.45 | 7 | 0.03 | 25333 | 20 | 99.95 | 0.08 |
| [261.32 - 275.08) | 268.2 | 5 | 0.02 | 25338 | 13 | 99.97 | 0.05 |
| [275.08 - 288.83) | 281.95 | 1 | 0.00 | 25339 | 8 | 99.97 | 0.03 |
| [288.83 - 302.58) | 295.71 | 2 | 0.01 | 25341 | 7 | 99.98 | 0.03 |
| [302.58 - 316.34) | 309.46 | 1 | 0.00 | 25342 | 5 | 99.98 | 0.02 |
| [316.34 - 330.09) | 323.22 | 0 | 0.00 | 25342 | 4 | 99.98 | 0.02 |
| [330.09 - 343.85) | 336.97 | 0 | 0.00 | 25342 | 4 | 99.98 | 0.02 |
| [343.85 - 357.6) | 350.72 | 0 | 0.00 | 25342 | 4 | 99.98 | 0.02 |
| [357.6 - 371.35) | 364.48 | 0 | 0.00 | 25342 | 4 | 99.98 | 0.02 |
| [371.35 - 385.11) | 378.23 | 3 | 0.01 | 25345 | 4 | 100 | 0.02 |
| [385.11 - 398.86) | 391.98 | 0 | 0.00 | 25345 | 1 | 100 | 0 |
| [398.86 - 412.62) | 405.74 | 0 | 0.00 | 25345 | 1 | 100 | 0 |
| [412.62 - 426.37) | 419.49 | 0 | 0.00 | 25345 | 1 | 100 | 0 |
| [426.37 - 440.12) | 433.25 | 0 | 0.00 | 25345 | 1 | 100 | 0 |
| [440.12 - 453.88) | 447 | 0 | 0.00 | 25345 | 1 | 100 | 0 |
| [453.88 - 467.63] | 460.75 | 1 | 0.00 | 25346 | 1 | 100 | 0 |
| Totales | - | 25346 | 100.00 | - | - | - | - |
| Autor: Grupo 2 Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india | |||||||
# ==============================================================================
# 5. CÁLCULOS PARA LA DISTRIBUCIÓN SIMPLIFICADA (13 CLASES) - NOx
# ==============================================================================
# Se utiliza la función hist() para obtener los intervalos simplificados
Histograma_nox <- hist(nox, breaks = 13, plot = FALSE) # No mostrar la gráfica aún
# Extraer elementos simplificados
Lis_nox <- Histograma_nox$breaks[1:(length(Histograma_nox$breaks) - 1)]
Lss_nox <- Histograma_nox$breaks[2:length(Histograma_nox$breaks)]
MCs_nox <- (Lis_nox + Lss_nox) / 2
nis_nox <- Histograma_nox$counts
# Frecuencias relativas y acumuladas simplificadas
his_nox <- (nis_nox / N_nox) * 100
Nis_asc_nox <- cumsum(nis_nox)
His_asc_nox <- cumsum(his_nox)
Nis_desc_nox <- rev(cumsum(rev(nis_nox)))
His_desc_nox <- rev(cumsum(rev(his_nox)))
# Crear el Data Frame Simplificado
TDF_noxsimplificado <- data.frame(
Intervalo = paste0("[", round(Lis_nox, 2), " - ", round(Lss_nox, 2), ")"),
MC = round(MCs_nox, 2),
ni = nis_nox,
hi = round(his_nox, 2),
Ni_asc = Nis_asc_nox,
Hi_asc = round(His_asc_nox, 2),
Ni_desc = Nis_desc_nox,
Hi_desc = round(His_desc_nox, 2)
)
# Renombrar columnas con los nombres finales (usando comillas invertidas para % en R)
colnames(TDF_noxsimplificado) <- c("Intervalo", "MC", "ni", "hi(%)",
"Ni_asc", "Hi_asc (%)", "Ni_desc", "Hi_desc (%)")
# Agregar la fila de totales (Código Corregido)
totaless_nox <- data.frame(
Intervalo = "Totales",
MC = "-",
ni = sum(nis_nox),
`hi(%)` = sum(his_nox),
Ni_asc = "-",
`Hi_asc (%)` = "-",
Ni_desc = "-",
`Hi_desc (%)` = "-"
)
# Asegurar que las columnas de totaless coincidan con los nombres finales
colnames(totaless_nox) <- colnames(TDF_noxsimplificado)
# Unir los data frames
TDF_noxsimplificado_completa <- rbind(TDF_noxsimplificado, totaless_nox)
# ==============================================================================
# 6. TABLA DE FRECUENCIAS SIMPLIFICADA (Tabla Nro. 2)
# ==============================================================================
TDF_noxsimplificado_completa %>%
gt() %>%
tab_header(
title = "Tabla Nro. 2",
subtitle = "Distribución de frecuencia simplificada de concentración de Óxidos de Nitrógeno (NOₓ), estudio calidad del aire en India entre 2015-2020"
) %>%
tab_source_note(
source_note = "Autor: Grupo 2\n Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india"
) %>%
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 | |||||||
| Distribución de frecuencia simplificada de concentración de Óxidos de Nitrógeno (NOₓ), estudio calidad del aire en India entre 2015-2020 | |||||||
| Intervalo | MC | ni | hi(%) | Ni_asc | Hi_asc (%) | Ni_desc | Hi_desc (%) |
|---|---|---|---|---|---|---|---|
| [0 - 50) | 25 | 20762 | 81.91 | 20762 | 81.91 | 25346 | 100 |
| [50 - 100) | 75 | 3431 | 13.54 | 24193 | 95.45 | 4584 | 18.09 |
| [100 - 150) | 125 | 858 | 3.39 | 25051 | 98.84 | 1153 | 4.55 |
| [150 - 200) | 175 | 218 | 0.86 | 25269 | 99.7 | 295 | 1.16 |
| [200 - 250) | 225 | 57 | 0.22 | 25326 | 99.92 | 77 | 0.3 |
| [250 - 300) | 275 | 15 | 0.06 | 25341 | 99.98 | 20 | 0.08 |
| [300 - 350) | 325 | 1 | 0.00 | 25342 | 99.98 | 5 | 0.02 |
| [350 - 400) | 375 | 3 | 0.01 | 25345 | 100 | 4 | 0.02 |
| [400 - 450) | 425 | 0 | 0.00 | 25345 | 100 | 1 | 0 |
| [450 - 500) | 475 | 1 | 0.00 | 25346 | 100 | 1 | 0 |
| Totales | - | 25346 | 100.00 | - | - | - | - |
| Autor: Grupo 2 Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india | |||||||
# ==============================================================================
# 7. GENERACIÓN DE GRÁFICOS (NOx)
# ==============================================================================
# ==============================================================================
# 7. GRÁFICA N°1: Histograma Local (NOx)
# ==============================================================================
hist(nox, breaks = 13,
main = "Gr\u00E1fica N\u00B01: Distribuci\u00F3n de la Concentraci\u00F3n de Óxidos de Nitrógeno (NOₓ)\npresente en el estudio sobre calidad del aire en India entre 2015-2020",
xlab = "NOₓ (\u00B5g/m\u00B3)",
ylab = "Cantidad",
# max(nis_nox) es la altura máxima para el histograma 'local'
ylim = c(0, max(nis_nox)),
col = "darkseagreen3", # Nuevo color
cex.main = 0.9,
cex.lab = 1,
cex.axis = 0.9,
xaxt = "n")
axis(1, at = Histograma_nox$breaks,
labels = round(Histograma_nox$breaks, 0), las = 1,
cex.axis = 0.9)
# ----------------------------------
# Gráfica N°2: Histograma Global (Frecuencia Absoluta) - NOx
# ----------------------------------
hist(nox, breaks = 13,
main = "Gr\u00E1fica N\u00B02: Distribuci\u00F3n de la Concentraci\u00F3n de Óxidos de Nitrógeno (NOₓ)\npresente en el estudio sobre calidad del aire en India entre 2015-2020",
xlab = "NOₓ (\u00B5g/m\u00B3)",
ylab = "Cantidad",
# length(nox) es la altura máxima
ylim = c(0, length(nox)),
col = "darkseagreen",
cex.main = 1,
cex.lab = 1,
cex.axis = 0.9,
xaxt = "n")
axis(1, at = Histograma_nox$breaks,
labels = round(Histograma_nox$breaks, 0), las = 1,
cex.axis = 0.9)
# ------------------------------------------------------------------------------
# Gráfica N°3: Histograma Porcentual Global (NOx)
# ------------------------------------------------------------------------------
# Para esta gráfica, usaremos el 'hi(%)' de la tabla simplificada.
porcentajes_nox <- TDF_noxsimplificado$`hi(%)`[1:(nrow(TDF_noxsimplificado)-1)]
marcas_clase_nox <- TDF_noxsimplificado$MC[1:(nrow(TDF_noxsimplificado)-1)]
post_nox <- barplot(porcentajes_nox,
space = 0,
col = "skyblue",
main = "Gr\u00E1fica N\u00B03: Distribuci\u00F3n Porcentual Global de NOₓ\nEstudio Calidad del Aire en India, 2015-2020",
xlab = "NOₓ (\u00B5g/m\u00B3)",
ylab = "Porcentaje (%)",
ylim = c(0, 100),
cex.main = 0.9,
cex.lab = 1,
xaxt = "n",
yaxt = "n")
# Dibujamos las etiquetas del Eje X (Marca de Clase) rotadas y pequeñas
axis(side = 1,
at = post_nox,
labels = marcas_clase_nox,
tck = -0.02,
las = 2,
cex.axis = 0.6)
# Dibujamos las marcas del Eje Y de forma explícita
axis(side = 2,
at = seq(0, 100, by = 20),
las = 1,
cex.axis = 0.9)
# ------------------------------------------------------------------------------
# Gráfica N°4: Histograma Porcentual Local (NOx)
# ------------------------------------------------------------------------------
n_nox_sim <- as.numeric(nrow(TDF_noxsimplificado))
porcentajes_nox_local <- TDF_noxsimplificado$`hi(%)`[1:(n_nox_sim-1)]
marcas_clase_nox_local <- TDF_noxsimplificado$MC[1:(n_nox_sim-1)]
pos_nox <- barplot(
porcentajes_nox_local,
space = 0,
main = "Gr\u00E1fica N\u00B04: Distribuci\u00F3n Porcentual de Concentraci\u00F3n de NOₓ\nEstudio Calidad del Aire en India, 2015-2020",
ylab = "Porcentaje (%)",
xlab = "NOₓ (\u00B5g/m\u00B3)",
# Ajuste de Y para que la barra más alta sobresalga ligeramente si es > 80
ylim = c(0, max(porcentajes_nox_local) * 1.1),
col = "darkseagreen",
cex.main = 0.9,
cex.lab = 1,
# Ocultamos etiquetas automáticas para control manual
xaxt = "n",
yaxt = "n"
)
# Dibujamos las etiquetas del Eje X (Marca de Clase)
axis(side = 1,
at = pos_nox,
labels = marcas_clase_nox_local,
tck = -0.04,
las = 2,
cex.axis = 0.6)
# Dibujamos las marcas del Eje Y
axis(side = 2,
at = seq(0, round(max(porcentajes_nox_local) * 1.1), by = 20),
las = 1,
cex.axis = 0.9)
# ------------------------------------------------------------------------------
# Gráfica N°5: Diagrama de Caja (Box Plot) para NOx
# ------------------------------------------------------------------------------
CajaNOx <- boxplot(nox,
horizontal = T,
col = "turquoise",
border = "black",
main = "Gr\u00E1fica N\u00B05: Distribuci\u00F3n de la concentraci\u00F3n de Óxidos de Nitrógeno (NOₓ),\nestudio calidad del aire en India desde 2015-2020",
xlab = "NOₓ (\u00B5g/m\u00B3)",
cex.main = 0.9,
cex.lab = 1)
# ------------------------------------------------------------------------------
# Gráfica N°6: Ojiva Ascendente y Descendente (Cantidad) - NOx
# ------------------------------------------------------------------------------
# 1. Definir los límites de clase extendidos (añadiendo el punto cero)
Limites_X_nox <- c(Lis_nox[1], Lss_nox)
# 2. Definir frecuencias acumuladas extendidas (Cantidad)
Frec_Asc_Ext_nox <- c(0, Nis_asc_nox)
Frec_Desc_Ext_nox <- c(Nis_desc_nox, 0)
# Ojiva ascendente
plot(Limites_X_nox, Frec_Asc_Ext_nox,
type = "b",
main = "Gr\u00E1fica N\u00B06: Ojiva ascendente y descendente de la
distribuci\u00F3n de la concentraci\u00F3n de Óxidos de Nitrógeno (NOₓ)",
xlab = "NOₓ (\u00B5g/m\u00B3)",
ylab = "Cantidad",
pch = 19,
col = "turquoise",
ylim = c(0, N_nox),
xlim = c(0, max(Lss_nox)),
cex.main = 0.9,
cex.lab = 1,
cex.axis = 0.9
)
# Ojiva descendente
lines(Limites_X_nox, Frec_Desc_Ext_nox,
type = "b",
col = "black",
pch = 19)
# ------------------------------------------------------------------------------
# Gráfica N°7: Ojiva Ascendente y Descendente PORCENTUAL (NOx)
# ------------------------------------------------------------------------------
# 1. Definir los límites de clase extendidos
Limites_X_nox <- c(Lis_nox[1], Lss_nox)
# 2. Definir frecuencias PORCENTUALES acumuladas extendidas
Frec_H_Asc_Ext_nox <- c(0, His_asc_nox)
Frec_H_Desc_Ext_nox <- c(His_desc_nox, 0)
# Ojiva ascendente
plot(Limites_X_nox, Frec_H_Asc_Ext_nox,
type = "b",
main = "Gr\u00E1fica N\u00B07: Ojiva ascendente y descendente de la distribuci\u00F3n PORCENTUAL de Óxidos de Nitrógeno (NOₓ)",
xlab = "NOₓ (\u00B5g/m\u00B3)",
ylab = "Porcentaje (%)",
pch = 19,
col = "blue",
ylim = c(0, 100),
xlim = c(0, max(Lss_nox)),
cex.main = 0.9,
cex.lab = 1,
cex.axis = 0.9
)
# Ojiva descendente
lines(Limites_X_nox, Frec_H_Desc_Ext_nox,
type = "b",
col = "red",
pch = 19)
# Opcional: Añadir leyenda para claridad
legend("topright",
legend = c("Ojiva Ascendente", "Ojiva Descendente"),
col = c("blue", "red"),
pch = 19,
bty = "n")
# ==============================================================================
# 8. CÁLCULO DE INDICADORES ESTADÍSTICOS (NOx)
# ==============================================================================
# --------------------------------
# Indicadores de Tendencia Central
# --------------------------------
# Mediana (Me)
Me_nox <- median(nox)
# Media (X)
X_nox <- mean(nox)
# Moda (Mo)
moda_index_nox <- which.max(TDF_noxsimplificado$ni[1:(nrow(TDF_noxsimplificado)-1)])
Mo_nox <- TDF_noxsimplificado$Intervalo[moda_index_nox]
# --------------------------------
# Indicadores de Dispersión
# --------------------------------
# Varianza
Var_nox <- var(nox)
# Desviación estándar (sd)
desv_nox <- sd(nox)
# Coeficiente de variación (CV)
CV_nox <- (desv_nox / X_nox) * 100
# --------------------------------
# Indicadores de Forma
# --------------------------------
# Coeficiente de Asimetría (As)
As_nox <- skewness(nox)
# Curtosis (K)
K_nox <- kurtosis(nox)
# --------------------------------
# Creación del Data Frame (Tabla_indicadores_NOx)
# --------------------------------
Variable_NOx <- "Óxidos de Nitrógeno (NOₓ)"
Rango_NOx <- paste0("[", round(min_nox, 2), " - ", round(max_nox, 2), "]")
Tabla_indicadores_NOx <- data.frame(
Variable = Variable_NOx,
Rango = Rango_NOx,
X = round(X_nox, 3),
Me = round(Me_nox, 3),
Mo = Mo_nox,
sd = round(desv_nox, 2),
CV = round(CV_nox, 2),
As = round(As_nox, 2),
K = round(K_nox, 2)
)
# Renombrar columnas para la tabla
colnames(Tabla_indicadores_NOx) <- c("Variable", "Rango", "Media (X)", "Mediana (Me)", "Moda (Mo)", "Desv. Est. (sd)", "CV (%)", "Asimetría (As)", "Curtosis (K)")
# ==============================================================================
# 9. TABLA DE INDICADORES ESTADÍSTICOS (Tabla Nro. 3) - Usando GT
# ==============================================================================
Tabla_indicadores_NOx %>%
gt() %>%
tab_header(
title = md("Tabla Nro. 3"),
subtitle = md("*Indicadores Estadísticos de concentración de Óxidos de Nitrógeno (NOₓ), estudio calidad del aire en India entre 2015-2020 *")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 2\n Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india")
) %>%
# Agrupamos las columnas por categoría
tab_spanner(
label = "Tendencia Central",
columns = c("Media (X)", "Mediana (Me)", "Moda (Mo)")
) %>%
tab_spanner(
label = "Dispersión",
columns = c("Desv. Est. (sd)", "CV (%)")
) %>%
tab_spanner(
label = "Forma",
columns = c("Asimetría (As)", "Curtosis (K)")
) %>%
# Formateo de números
fmt_number(
columns = c("Media (X)", "Mediana (Me)", "Desv. Est. (sd)", "CV (%)", "Asimetría (As)", "Curtosis (K)"),
decimals = 2
) %>%
# Opciones de estilo
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 concentración de Óxidos de Nitrógeno (NOₓ), estudio calidad del aire en India entre 2015-2020 * | ||||||||
| Variable | Rango |
Tendencia Central
|
Dispersión
|
Forma
|
||||
|---|---|---|---|---|---|---|---|---|
| Media (X) | Mediana (Me) | Moda (Mo) | Desv. Est. (sd) | CV (%) | Asimetría (As) | Curtosis (K) | ||
| Óxidos de Nitrógeno (NOₓ) | [0 - 467.63] | 32.31 | 23.52 | [0 - 50) | 31.65 | 97.95 | 2.57 | 10.83 |
| Autor: Grupo 2 Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india | ||||||||