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.


1 Carga de Datos y Librerías

library(dplyr)
library(gt)
library(e1071)

datos <- read.csv("~/Estudio/TERCER SEMESTRE/Estadistica/Dataset.csv",
                   sep = ";", stringsAsFactors = FALSE)

2 Extraer y Limpiar la Variable

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

3 Tabla de Distribución de Parámetros por Sturges

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

4 Gráficas de Distribución de Cantidad

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")

5 Indicadores Estadísticos y Outliers

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

6 Conclusión

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."