library(dplyr)
library(gt)

1 Carga de Datos y Librerías

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

# La columna de NOx viene con formato inconsistente: algunos valores usan el
# punto como separador de miles (ej. "40.103.865") y otros como separador
# decimal (ej. "14859.23"). Se limpia contando los puntos: si hay mas de uno,
# son separadores de miles y se eliminan; si hay uno solo, es decimal y se
# conserva.
limpiar_numero <- function(x) {
  x <- trimws(as.character(x))
  x[x %in% c("N/A", "N//A", "NA", "")] <- NA
  n_puntos <- lengths(regmatches(x, gregexpr("\\.", x)))
  x <- ifelse(n_puntos > 1, gsub("\\.", "", x), x)
  as.numeric(x)
}

EMIS_NOX <- limpiar_numero(datos$NOx.total.emissions..tons..by.state)
EMIS_NOX <- na.omit(EMIS_NOX)
n <- length(EMIS_NOX)
n
## [1] 2993

2 Tabla de Distribución de Frecuencias

k <- ceiling(1 + 3.322 * log10(n))
k
## [1] 13
breaks <- seq(min(EMIS_NOX), max(EMIS_NOX) + 1e-6, length.out = k + 1)

histograma_nox <- hist(EMIS_NOX, breaks = breaks, plot = FALSE)

lis <- round(histograma_nox$breaks[1:k], 2)
lss <- round(histograma_nox$breaks[2:(k+1)], 2)
MC  <- round(histograma_nox$mids, 2)
ni  <- histograma_nox$counts
hi  <- round((ni/sum(ni))*100, 2)

TDFnox <- data.frame(lis, lss, MC, ni, hi)

fila_total <- data.frame(
  lis = "TOTAL", lss = "", MC = "",
  ni  = sum(TDFnox$ni),
  hi  = round(sum(TDFnox$hi), 2)
)

TDFnox_total <- rbind(TDFnox, fila_total)

tabla_nox <- TDFnox_total %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1**"),
    subtitle = md("Tabla de distribución de frecuencias de EMIS_NOX (nivel-mina)")
  ) %>%
  cols_label(
    lis = "Límite inferior",
    lss = "Límite superior",
    MC  = "Marca de clase",
    ni  = "Frecuencia absoluta",
    hi  = "Frecuencia relativa (%)"
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 4")
  ) %>%
  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_nox
Tabla N°1
Tabla de distribución de frecuencias de EMIS_NOX (nivel-mina)
Límite inferior Límite superior Marca de clase Frecuencia absoluta Frecuencia relativa (%)
252.01 6857936.08 3429094.05 432 14.43
6857936.08 13715620.16 10286778.12 126 4.21
13715620.16 20573304.24 17144462.2 271 9.05
20573304.24 27430988.31 24002146.27 259 8.65
27430988.31 34288672.39 30859830.35 155 5.18
34288672.39 41146356.47 37717514.43 618 20.65
41146356.47 48004040.54 44575198.5 911 30.44
48004040.54 54861724.62 51432882.58 159 5.31
54861724.62 61719408.69 58290566.66 0 0.00
61719408.69 68577092.77 65148250.73 0 0.00
68577092.77 75434776.85 72005934.81 0 0.00
75434776.85 82292460.92 78863618.89 0 0.00
82292460.92 89150145 85721302.96 62 2.07
TOTAL 2993 99.99
Autor: Grupo 4

3 Gráfica de Distribución de Frecuencias

hist(EMIS_NOX,
     breaks = breaks,
     main = "Gráfica N°1: Distribución de EMIS_NOX (nivel-mina)",
     xlab = "Emisiones de NOx (toneladas)",
     ylab = "Frecuencia",
     col  = "gray")

4 Conjetura del Modelo

Las emisiones de NOx se registran a nivel estatal (no por mina), y cada una de las 2993 minas del dataset hereda el valor de su estado. Esto significa que, aunque la tabla y el histograma anteriores usan todas las filas (igual que en la fase Descriptiva), la muestra real e independiente para conjeturar y probar un modelo de probabilidad son los valores únicos por estado. Usar n = 2993 en el test de aprobación infla artificialmente el tamaño muestral y sobre-potencia el Chi-cuadrado (mismo criterio ya documentado para EMIS_CO2).

Por esta razón, desde aquí en adelante se trabaja con EMIS_NOX_edo.

EMIS_NOX_edo <- unique(EMIS_NOX)
n_edo <- length(EMIS_NOX_edo)
n_edo
## [1] 47
# Calculo del parametro Exponencial (metodo de momentos)
media_edo <- mean(EMIS_NOX_edo)
lambda_1  <- 1 / media_edo

media_edo
## [1] 21944217
lambda_1
## [1] 0.00000004557009
hist(EMIS_NOX_edo,
     freq = FALSE,
     ylim = c(0, max(hist(EMIS_NOX_edo, plot = FALSE)$density,
                      dexp(seq(min(EMIS_NOX_edo), max(EMIS_NOX_edo), length.out = 200),
                           rate = lambda_1)) * 1.05),
     main = "Gráfica N°2: Comparación de la realidad con el modelo Exponencial\nde EMIS_NOX (nivel-estado)",
     ylab = "Densidad de probabilidad",
     xlab = "Emisiones de NOx (toneladas)",
     col = "lightgray",
     border = "black")

x <- seq(min(EMIS_NOX_edo), max(EMIS_NOX_edo), length.out = 200)
curve(dexp(x, rate = lambda_1),
      col = "blue",
      lwd = 2,
      add = TRUE)

Nota: se conjeturó primero un modelo Normal, siguiendo el mismo tratamiento usado en el resto de variables continuas del proyecto. Sin embargo, ese modelo fue rechazado por el test de Chi-cuadrado (ver sección siguiente), debido a la asimetría positiva de los datos —la mayoría de los estados presenta emisiones bajas de NOx y unos pocos estados concentran emisiones muy altas. Por eso se reemplazó por un modelo Exponencial, adecuado para variables continuas positivas con una cola larga a la derecha como ésta.

5 Test de Aprobación

k_edo <- ceiling(1 + 3.322 * log10(n_edo))
k_edo
## [1] 7
breaks_edo <- seq(min(EMIS_NOX_edo), max(EMIS_NOX_edo) + 1, length.out = k_edo + 1)

cortes_edo <- cut(EMIS_NOX_edo, breaks = breaks_edo, include.lowest = TRUE, right = FALSE)

Fo_1 <- as.vector(table(cortes_edo))
Fo_1
## [1] 17 13  9  6  1  0  1
Fe_1 <- n_edo * diff(pexp(breaks_edo, rate = lambda_1))
Fe_1
## [1] 20.6941945 11.5823944  6.4825843  3.6282566  2.0307096  1.1365738  0.6361323
# Expresar Fo y Fe en porcentaje para comparar
Fo_pct <- (Fo_1/n_edo)*100
Fe_pct <- (Fe_1/n_edo)*100

plot(Fo_pct, Fe_pct,
     xlim = c(0, max(Fo_pct, Fe_pct)),
     ylim = c(0, max(Fo_pct, Fe_pct)),
     main = "Gráfica N°3: Correlación de frecuencias observadas y esperadas\ndel modelo Exponencial de EMIS_NOX",
     xlab = "Frecuencia Observada (%)",
     ylab = "Frecuencia Esperada (%)",
     col  = "blue3",
     pch  = 19)

abline(a = 0, b = 1, col = "red", lwd = 2)

Correlacion_1 <- cor(Fo_pct, Fe_pct)*100
Correlacion_1
## [1] 95.29
# Chi-cuadrado
grados_libertad_1 <- length(Fo_1) - 1 - 1   # 1 parametro estimado (rate)
grados_libertad_1
## [1] 5
nivel_significancia <- 0.95

x2_1 <- sum((Fo_1 - Fe_1)^2 / Fe_1)
x2_1
## [1] 5.228802
umbral_aceptacion_1 <- qchisq(nivel_significancia, grados_libertad_1)
umbral_aceptacion_1
## [1] 11.0705
# Tabla resumen
Variable <- c("Emisiones de NOx (ton)")

tabla_resumen_1 <- data.frame(
  Variable,
  round(Correlacion_1, 2),
  round(x2_1, 2),
  round(umbral_aceptacion_1, 2)
)

colnames(tabla_resumen_1) <- c("Variable", "Test Pearson (%)", "Chi Cuadrado", "Umbral de aceptación")

tabla_resumen_1 %>%
  gt() %>%
  tab_header(title = md("**Tabla N°2**"),
             subtitle = md("Resumen del test de bondad de ajuste (modelo Exponencial)")) %>%
  tab_source_note(source_note = md("Autor: Grupo 4"))
Tabla N°2
Resumen del test de bondad de ajuste (modelo Exponencial)
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Emisiones de NOx (ton) 95.29 5.23 11.07
Autor: Grupo 4

Con Chi² = 5.23 por debajo del umbral de aceptación 11.07 (95% de confianza, gl = 5), el modelo Exponencial se acepta.

6 Cálculo de Probabilidades

¿Cuál es la probabilidad de que un estado productor tenga emisiones de NOx entre el primer y el tercer cuartil de la distribución observada?

q1 <- round(quantile(EMIS_NOX_edo, 0.25), 0)
q3 <- round(quantile(EMIS_NOX_edo, 0.75), 0)

Probabilidad_1 <- (pexp(q3, rate = lambda_1) - pexp(q1, rate = lambda_1)) * 100
Probabilidad_1
##      75% 
## 52.46669
x <- seq(min(EMIS_NOX_edo), max(EMIS_NOX_edo), length.out = 300)
plot(x,
     dexp(x, rate = lambda_1),
     col = "skyblue3",
     lwd = 1,
     type = "l",
     main = "Gráfica N°4: Cálculo de probabilidades",
     ylab = "Densidad de probabilidad",
     xlab = "Emisiones de NOx (toneladas)")

x_section <- seq(q1, q3, length.out = 200)
y_section <- dexp(x_section, rate = lambda_1)

lines(x_section, y_section, col = "red", lwd = 2)
polygon(c(x_section, rev(x_section)),
        c(y_section, rep(0, length(y_section))),
        col = rgb(1, 0, 0, 0.6))

legend("topright",
       legend = c("Modelo Exponencial", "Área de Probabilidad"),
       col = c("skyblue3", "red"),
       lwd = 2,
       cex = 0.7)

texto_prob <- paste0("Probabilidad = ", round(Probabilidad_1, 2), " %")
text(x = median(EMIS_NOX_edo), y = max(dexp(x, rate = lambda_1))*0.9,
     labels = texto_prob,
     col = "black",
     cex = 0.8,
     font = 2)

# De los estados productores con dato de NOx, cuantos tendrian emisiones en ese rango
cantidad_1 <- (pexp(q3, rate = lambda_1) - pexp(q1, rate = lambda_1)) * n_edo
cantidad_1
##      75% 
## 24.65934

7 Intervalos de Confianza

x_media <- mean(EMIS_NOX_edo)
x_media
## [1] 21944217
sigma <- sd(EMIS_NOX_edo)
sigma
## [1] 18995469
n_ic <- length(EMIS_NOX_edo)
n_ic
## [1] 47
e <- (sigma/sqrt(n_ic)) * qt(0.975, n_ic - 1)
e
## [1] 5577279
li <- x_media - e
li
## [1] 16366939
ls <- x_media + e
ls
## [1] 27521496
tabla_media <- data.frame(
  round(li, 2),
  Variable,
  round(ls, 2),
  round(e, 2)
)

colnames(tabla_media) <- c("Límite inferior", "Media poblacional", "Límite superior", "Error estándar")

tabla_media %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3**"),
             subtitle = md("Intervalo de confianza de la media poblacional (95%)")) %>%
  tab_source_note(source_note = md("Autor: Grupo 4"))
Tabla N°3
Intervalo de confianza de la media poblacional (95%)
Límite inferior Media poblacional Límite superior Error estándar
16366939 Emisiones de NOx (ton) 27521496 5577279
Autor: Grupo 4

8 Conclusiones

Las emisiones de NOx se registran a nivel estatal, por lo que la muestra real e independiente corresponde a n = 47 estados (no a las 2993 minas que heredan ese valor). Un primer modelo Normal fue descartado tras rechazar el test de Chi-cuadrado, debido a la asimetria positiva generada por unos pocos estados con emisiones muy altas. Bajo el criterio de muestra por estado, el modelo Exponencial(rate = 4.56e-08) ajusta adecuadamente a la distribucion de EMIS_NOX, con una correlacion de Pearson de 95.29% y un Chi-cuadrado de 5.23, por debajo del umbral de aceptacion de 11.07 (95% de confianza). La probabilidad de que un estado productor emita entre 7,113,451 y 35,486,680 toneladas de NOx es de 52.47%, equivalente a aproximadamente 25 de los 47 estados con dato valido. Finalmente, la media poblacional de emisiones se estima, con 95% de confianza, entre 16,366,939 y 27,521,496 toneladas.