Variable Original:
NOx total emissions (tons) by state
Nombre Variable: EMIS_NOX
Tipo: Cuantitativa Continua
Escala: Razón
Justificación de la variable: Las emisiones de NOx están registradas a nivel estatal para el año 2018, asociadas a la variable STATE. Cada instalación minera hereda el valor de emisión del estado administrativo al que pertenece, permitiendo correlacionar la actividad minera con las emisiones de óxidos de nitrógeno.
library(dplyr)
library(gt)
library(e1071)
datos <- read.csv("~/Estudio/TERCER SEMESTRE/Estadistica/Dataset.csv",
sep = ";", stringsAsFactors = FALSE)
NOTA: NOx requiere corrección DOBLE (punto = separador de miles, coma = decimal), a diferencia de CO2 que solo necesita corrección simple. Sin esta corrección, valores como “46.962.424” se leerían mal.
EMIS_NOX <- as.numeric(gsub(",", ".", gsub("\\.", "", datos$NOx.total.emissions..tons..by.state)))
## Warning: NAs introducidos por coerción
EMIS_NOX <- EMIS_NOX[!is.na(EMIS_NOX)]
n <- length(EMIS_NOX)
cat("n validos :", n, "\n")
## n validos : 2993
cat("Min :", round(min(EMIS_NOX), 2), "ton\n")
## Min : 157303 ton
cat("Max :", round(max(EMIS_NOX), 2), "ton\n")
## Max : 89150145 ton
k <- ceiling(1 + 3.322 * log10(n))
am <- round((max(EMIS_NOX) - min(EMIS_NOX)) / k, 2)
rango <- max(EMIS_NOX) - min(EMIS_NOX)
parametros_sturges <- data.frame(
Parametro = c("Rango (R)", "Número de datos (n)",
"Número de intervalos (k)", "Amplitud de clase (A)"),
Valor = c(round(rango, 2), n, k, am)
)
parametros_sturges %>%
gt() %>%
tab_header(title = md("**Tabla 1**"),
subtitle = "Parámetros de Sturges para EMIS_NOX") %>%
tab_source_note(md("Autor: Grupo 4 - Minas"))
| Tabla 1 | |
| Parámetros de Sturges para EMIS_NOX | |
| Parametro | Valor |
|---|---|
| Rango (R) | 88992842 |
| Número de datos (n) | 2993 |
| Número de intervalos (k) | 13 |
| Amplitud de clase (A) | 6845603 |
| Autor: Grupo 4 - Minas | |
breaks <- seq(min(EMIS_NOX), min(EMIS_NOX) + k * am, length.out = k + 1)
breaks[length(breaks)] <- max(EMIS_NOX) + 0.001
cortes <- cut(EMIS_NOX, breaks = breaks, include.lowest = TRUE, right = FALSE)
fi <- as.vector(table(cortes))
fri <- round(fi / n * 100, 2)
Ni <- cumsum(fi)
Nd <- rev(cumsum(rev(fi)))
Hi <- round(Ni / n * 100, 2)
Hd <- round(Nd / n * 100, 2)
mc <- round((breaks[-length(breaks)] + breaks[-1]) / 2, 2)
TDF <- data.frame(
Desde = round(breaks[-length(breaks)], 2),
Hasta = round(breaks[-1], 2),
MC = mc,
fi = fi, fri = fri,
Ni = Ni, Nd = Nd,
Hi = Hi, Hd = Hd
)
TDF %>%
gt() %>%
tab_header(
title = md("**Tabla 2**"),
subtitle = md("Distribución de frecuencias — Emisiones NOx (ton) por estado")
) %>%
cols_label(
Desde = "Desde (ton)", Hasta = "Hasta (ton)", MC = "Marca Clase",
fi = "fi", fri = "fri (%)",
Ni = "Ni Asc.", Nd = "Ni Desc.",
Hi = "Hi Asc. %", Hd = "Hi Desc. %"
) %>%
tab_source_note(md("Autor: Grupo 4 - Minas"))
| Tabla 2 | ||||||||
| Distribución de frecuencias — Emisiones NOx (ton) por estado | ||||||||
| Desde (ton) | Hasta (ton) | Marca Clase | fi | fri (%) | Ni Asc. | Ni Desc. | Hi Asc. % | Hi Desc. % |
|---|---|---|---|---|---|---|---|---|
| 157303 | 7002906 | 3580105 | 316 | 10.56 | 316 | 2993 | 10.56 | 100.00 |
| 7002906 | 13848509 | 10425708 | 126 | 4.21 | 442 | 2677 | 14.77 | 89.44 |
| 13848509 | 20694113 | 17271311 | 387 | 12.93 | 829 | 2551 | 27.70 | 85.23 |
| 20694113 | 27539716 | 24116914 | 259 | 8.65 | 1088 | 2164 | 36.35 | 72.30 |
| 27539716 | 34385319 | 30962518 | 155 | 5.18 | 1243 | 1905 | 41.53 | 63.65 |
| 34385319 | 41230922 | 37808121 | 618 | 20.65 | 1861 | 1750 | 62.18 | 58.47 |
| 41230922 | 48076526 | 44653724 | 911 | 30.44 | 2772 | 1132 | 92.62 | 37.82 |
| 48076526 | 54922129 | 51499327 | 159 | 5.31 | 2931 | 221 | 97.93 | 7.38 |
| 54922129 | 61767732 | 58344930 | 0 | 0.00 | 2931 | 62 | 97.93 | 2.07 |
| 61767732 | 68613335 | 65190534 | 0 | 0.00 | 2931 | 62 | 97.93 | 2.07 |
| 68613335 | 75458939 | 72036137 | 0 | 0.00 | 2931 | 62 | 97.93 | 2.07 |
| 75458939 | 82304542 | 78881740 | 0 | 0.00 | 2931 | 62 | 97.93 | 2.07 |
| 82304542 | 89150145 | 85727343 | 62 | 2.07 | 2993 | 62 | 100.00 | 2.07 |
| Autor: Grupo 4 - Minas | ||||||||
par(mar = c(5, 5, 4, 2))
hist(EMIS_NOX, breaks = breaks, col = "#ED7D31", border = "white",
main = "Gráfica 1: Frecuencia Absoluta Global — EMIS_NOX",
xlab = "Emisiones NOx (toneladas)", ylab = "Frecuencia absoluta")
p95 <- quantile(EMIS_NOX, 0.95)
NOX_z <- EMIS_NOX[EMIS_NOX <= p95]
k_z <- ceiling(1 + 3.322 * log10(length(NOX_z)))
br_z <- seq(min(NOX_z), max(NOX_z), length.out = k_z + 1)
par(mar = c(5, 5, 4, 2))
hist(NOX_z, breaks = br_z, col = "#ED7D31", border = "white",
main = paste0("Gráfica 2: Rango Principal — EMIS_NOX (hasta P95=",
round(p95/1000,1), "K ton)"),
xlab = "Emisiones NOx (toneladas)", ylab = "Frecuencia absoluta")
hist(NOX_z, breaks = br_z, col = "#ED7D31", border = "white",
freq = FALSE,
main = "Gráfica 3: Frecuencia Relativa Local — EMIS_NOX",
xlab = "Emisiones NOx (toneladas)", ylab = "Densidad")
par(mar = c(5, 5, 4, 2))
hist(EMIS_NOX, breaks = breaks, col = "#ED7D31", border = "white",
freq = FALSE,
main = "Gráfica 4: Frecuencia Relativa Global — EMIS_NOX",
xlab = "Emisiones NOx (toneladas)", ylab = "Densidad")
h <- hist(EMIS_NOX, breaks = breaks, col = "#ED7D31", border = "white",
main = "Gráfica 5: Histograma con Polígono de Frecuencias — EMIS_NOX",
xlab = "Emisiones NOx (toneladas)", ylab = "Frecuencia absoluta")
lines(h$mids, h$counts, type = "o", pch = 16, col = "darkred", lwd = 1.5)
ojiva <- data.frame(mc = mc, Ni = Ni, Nd = Nd)
plot(ojiva$mc, ojiva$Ni, type = "b", col = "black", pch = 16, lwd = 1.5,
main = "Gráfica 6: Ojivas Combinadas — EMIS_NOX",
xlab = "Emisiones NOx (toneladas)", ylab = "Frecuencia acumulada")
lines(ojiva$mc, ojiva$Nd, type = "b", col = "#ED7D31", pch = 16, lwd = 1.5)
legend("right", legend = c("Ascendente","Descendente"),
col = c("black","#ED7D31"), lwd = 2, pch = 16, bty = "n")
boxplot(EMIS_NOX, horizontal = TRUE, col = "#F9C49A", border = "#843D0A",
main = "Gráfica 7: Diagrama de Caja — EMIS_NOX",
xlab = "Emisiones NOx (toneladas)")
hist(EMIS_NOX, breaks = breaks, col = "lightgray", border = "white",
main = "Gráfica 8: Histograma con Diagrama de Caja Superpuesto — EMIS_NOX",
xlab = "Emisiones NOx (toneladas)", ylab = "Frecuencia absoluta")
boxplot(EMIS_NOX, horizontal = TRUE, add = TRUE,
at = par("usr")[4] * 0.08, boxwex = par("usr")[4] * 0.06,
col = rgb(1, 0.5, 0.2, 0.3), border = "#843D0A", xaxt = "n", yaxt = "n")
minimo <- min(EMIS_NOX)
maximo <- max(EMIS_NOX)
media <- mean(EMIS_NOX)
mediana <- median(EMIS_NOX)
moda <- as.numeric(names(sort(table(EMIS_NOX), decreasing = TRUE))[1])
rango2 <- maximo - minimo
varianza <- var(EMIS_NOX)
desv <- sd(EMIS_NOX)
cv <- desv / media * 100
if (cv < 15) {
interpretacion_cv <- "BAJA (CV < 15%)"
} else if (cv < 30) {
interpretacion_cv <- "MODERADA (15% <= CV < 30%)"
} else {
interpretacion_cv <- "ALTA (CV >= 30%)"
}
q1 <- quantile(EMIS_NOX, 0.25)
q2 <- quantile(EMIS_NOX, 0.50)
q3 <- quantile(EMIS_NOX, 0.75)
iqr_val <- q3 - q1
lim_inf <- q1 - 1.5 * iqr_val
lim_sup <- q3 + 1.5 * iqr_val
outliers <- EMIS_NOX[EMIS_NOX < lim_inf | EMIS_NOX > lim_sup]
n_outliers <- length(outliers)
porc_outliers <- round(n_outliers / n * 100, 2)
asimetria <- skewness(EMIS_NOX)
if (abs(asimetria) < 0.5) {
interpretacion_asimetria <- "Distribución simétrica"
} else if (asimetria > 0) {
interpretacion_asimetria <- "Asimetría positiva (sesgo a la derecha)"
} else {
interpretacion_asimetria <- "Asimetría negativa (sesgo a la izquierda)"
}
curtosis <- kurtosis(EMIS_NOX, type = 2) # excedente (normal = 0)
if (abs(curtosis) < 0.5) {
interpretacion_curtosis <- "Distribución mesocúrtica (normal)"
} else if (curtosis > 0) {
interpretacion_curtosis <- "Distribución leptocúrtica (picuda)"
} else {
interpretacion_curtosis <- "Distribución platicúrtica (aplanada)"
}
Tabla 3: Tendencia Central
data.frame(
Indicador = c("Mínimo","Media","Mediana","Moda","Máximo","Rango"),
Valor = round(c(minimo, media, mediana, moda, maximo, rango2), 2),
Unidad = rep("toneladas", 6)
) %>%
gt() %>%
tab_header(title = md("**Tabla 3**"),
subtitle = "Indicadores de Tendencia Central — EMIS_NOX") %>%
tab_source_note(md("Autor: Grupo 4 - Minas"))
| Tabla 3 | ||
| Indicadores de Tendencia Central — EMIS_NOX | ||
| Indicador | Valor | Unidad |
|---|---|---|
| Mínimo | 157303 | toneladas |
| Media | 33245382 | toneladas |
| Mediana | 40103865 | toneladas |
| Moda | 47356072 | toneladas |
| Máximo | 89150145 | toneladas |
| Rango | 88992842 | toneladas |
| Autor: Grupo 4 - Minas | ||
Tabla 4: Dispersión
data.frame(
Indicador = c("Varianza","Desviación Estándar","Coeficiente de Variación"),
Valor = c(round(varianza,2), round(desv,2), paste0(round(cv,2),"%")),
Interpretacion = c("Medida de dispersión al cuadrado",
"Dispersión promedio respecto a la media",
paste("Dispersión relativa:", interpretacion_cv))
) %>%
gt() %>%
tab_header(title = md("**Tabla 4**"),
subtitle = "Indicadores de Dispersión — EMIS_NOX") %>%
tab_source_note(md("Autor: Grupo 4 - Minas"))
| Tabla 4 | ||
| Indicadores de Dispersión — EMIS_NOX | ||
| Indicador | Valor | Interpretacion |
|---|---|---|
| Varianza | 326973740178542 | Medida de dispersión al cuadrado |
| Desviación Estándar | 18082415.22 | Dispersión promedio respecto a la media |
| Coeficiente de Variación | 54.39% | Dispersión relativa: ALTA (CV >= 30%) |
| Autor: Grupo 4 - Minas | ||
Tabla 5: Posición y Outliers
data.frame(
Indicador = c("Cuartil 1 (Q1)","Cuartil 2 (Q2-Mediana)","Cuartil 3 (Q3)",
"Rango Intercuartílico (IQR)","Límite Inferior Outliers",
"Límite Superior Outliers","Número de Outliers"),
Valor = c(round(q1,2), round(q2,2), round(q3,2), round(iqr_val,2),
round(lim_inf,2), round(lim_sup,2),
paste0(n_outliers, " (", porc_outliers, "%)"))
) %>%
gt() %>%
tab_header(title = md("**Tabla 5**"),
subtitle = "Indicadores de Posición y Outliers — EMIS_NOX") %>%
tab_source_note(md("Autor: Grupo 4 - Minas"))
| Tabla 5 | |
| Indicadores de Posición y Outliers — EMIS_NOX | |
| Indicador | Valor |
|---|---|
| Cuartil 1 (Q1) | 18874765 |
| Cuartil 2 (Q2-Mediana) | 40103865 |
| Cuartil 3 (Q3) | 46962424 |
| Rango Intercuartílico (IQR) | 28087659 |
| Límite Inferior Outliers | -23256723.5 |
| Límite Superior Outliers | 89093912.5 |
| Número de Outliers | 62 (2.07%) |
| Autor: Grupo 4 - Minas | |
Tabla 6: Forma de la Distribución
data.frame(
Indicador = c("Coeficiente de Asimetría (Fisher)","Interpretación Asimetría",
"Coeficiente de Curtosis (Excedente)","Interpretación Curtosis"),
Valor = c(round(asimetria,4), interpretacion_asimetria,
round(curtosis,4), interpretacion_curtosis)
) %>%
gt() %>%
tab_header(title = md("**Tabla 6**"),
subtitle = "Indicadores de Forma — EMIS_NOX") %>%
tab_source_note(md("Autor: Grupo 4 - Minas"))
| Tabla 6 | |
| Indicadores de Forma — EMIS_NOX | |
| Indicador | Valor |
|---|---|
| Coeficiente de Asimetría (Fisher) | 0.0438 |
| Interpretación Asimetría | Distribución simétrica |
| Coeficiente de Curtosis (Excedente) | 0.2982 |
| Interpretación Curtosis | Distribución mesocúrtica (normal) |
| Autor: Grupo 4 - Minas | |
Tabla 7: Resumen Completo
data.frame(
Categoria = c("Tendencia Central","Tendencia Central","Tendencia Central",
"Tendencia Central","Tendencia Central","Tendencia Central",
"Dispersión","Dispersión","Dispersión",
"Posición","Posición","Posición","Posición",
"Forma","Forma","Forma","Forma"),
Indicador = c("Mínimo","Media","Mediana","Moda","Máximo","Rango",
"Varianza","Desviación Estándar","Coeficiente de Variación",
"Cuartil 1 (Q1)","Cuartil 2 (Q2)","Cuartil 3 (Q3)","Rango Intercuartílico",
"Asimetría (g1)","Interpretación Asimetría",
"Curtosis (g2)","Interpretación Curtosis"),
Valor = c(round(minimo,2), round(media,2), round(mediana,2), round(moda,2),
round(maximo,2), round(rango2,2),
round(varianza,2), round(desv,2), paste0(round(cv,2),"%"),
round(q1,2), round(q2,2), round(q3,2), round(iqr_val,2),
round(asimetria,4), interpretacion_asimetria,
round(curtosis,4), interpretacion_curtosis)
) %>%
gt() %>%
tab_header(title = md("**Tabla 7**"),
subtitle = "Resumen Completo de Indicadores — EMIS_NOX") %>%
tab_source_note(md("Autor: Grupo 4 - Minas"))
| Tabla 7 | ||
| Resumen Completo de Indicadores — EMIS_NOX | ||
| Categoria | Indicador | Valor |
|---|---|---|
| Tendencia Central | Mínimo | 157303 |
| Tendencia Central | Media | 33245381.97 |
| Tendencia Central | Mediana | 40103865 |
| Tendencia Central | Moda | 47356072 |
| Tendencia Central | Máximo | 89150145 |
| Tendencia Central | Rango | 88992842 |
| Dispersión | Varianza | 326973740178542 |
| Dispersión | Desviación Estándar | 18082415.22 |
| Dispersión | Coeficiente de Variación | 54.39% |
| Posición | Cuartil 1 (Q1) | 18874765 |
| Posición | Cuartil 2 (Q2) | 40103865 |
| Posición | Cuartil 3 (Q3) | 46962424 |
| Posición | Rango Intercuartílico | 28087659 |
| Forma | Asimetría (g1) | 0.0438 |
| Forma | Interpretación Asimetría | Distribución simétrica |
| Forma | Curtosis (g2) | 0.2982 |
| Forma | Interpretación Curtosis | Distribución mesocúrtica (normal) |
| Autor: Grupo 4 - Minas | ||
cat("Numero de valores atipicos:", n_outliers, "\n")
## Numero de valores atipicos: 62
if (n_outliers > 0) {
cat("Minimo outlier:", round(min(outliers), 2), "ton\n")
cat("Maximo outlier:", round(max(outliers), 2), "ton\n")
}
## Minimo outlier: 89150145 ton
## Maximo outlier: 89150145 ton
conclusion <- sprintf(
"La variable EMIS_NOX registra las emisiones totales de óxidos de nitrógeno en toneladas por estado administrativo (STATE) para 2018. Cada instalación minera hereda el valor del estado al que pertenece administrativamente. Los valores oscilan entre %.2f y %.2f toneladas, con media de %.2f ton y mediana de %.2f ton. La asimetría (%s, As=%.4f) indica que la mayoría de los estados registran emisiones bajas mientras pocos estados con alta actividad minera concentran valores significativamente mayores. El CV de %.2f%% (%s) refleja heterogeneidad entre estados. Se identificaron %d valores atípicos (%.2f%% del total) correspondientes a estados con mayor densidad de instalaciones mineras activas, lo que refuerza la hipótesis de correlación entre actividad minera y emisiones de NOx del proyecto.",
min(EMIS_NOX), max(EMIS_NOX), media, mediana, interpretacion_asimetria, asimetria, cv, interpretacion_cv, n_outliers, porc_outliers
)
print(conclusion)
## [1] "La variable EMIS_NOX registra las emisiones totales de óxidos de nitrógeno en toneladas por estado administrativo (STATE) para 2018. Cada instalación minera hereda el valor del estado al que pertenece administrativamente. Los valores oscilan entre 157303.00 y 89150145.00 toneladas, con media de 33245381.97 ton y mediana de 40103865.00 ton. La asimetría (Distribución simétrica, As=0.0438) indica que la mayoría de los estados registran emisiones bajas mientras pocos estados con alta actividad minera concentran valores significativamente mayores. El CV de 54.39% (ALTA (CV >= 30%)) refleja heterogeneidad entre estados. Se identificaron 62 valores atípicos (2.07% del total) correspondientes a estados con mayor densidad de instalaciones mineras activas, lo que refuerza la hipótesis de correlación entre actividad minera y emisiones de NOx del proyecto."