1 Carga de Librerías

library(dplyr)
library(gt)

2 Carga de Datos

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

EVENTOS_NOX <- as.numeric(datos$EVENTOS_NOX)
EVENTOS_NOX <- na.omit(EVENTOS_NOX)
n <- length(EVENTOS_NOX)
n
## [1] 2996

Nota: EVENTOS_NOX es una variable, ligada a EMIS_NOX real (minas con más NOx real tienden a más eventos), que representa el número de eventos de excedencia registrados por mina. Es un candidato natural para un modelo Poisson: conteo de eventos en un intervalo fijo.

3 Tabla de Distribución de Frecuencias

kcut <- 9

Fo <- sapply(0:(kcut - 1), function(k) sum(EVENTOS_NOX == k))
Fo <- c(Fo, sum(EVENTOS_NOX >= kcut))

Clase <- c(as.character(0:(kcut - 1)), paste0(kcut, " o más"))
hi <- round((Fo / n) * 100, 2)

TDF_eventos <- data.frame(Clase, Fo, hi)

fila_total <- data.frame(
  Clase = "TOTAL",
  Fo = sum(TDF_eventos$Fo),
  hi = round((sum(TDF_eventos$Fo) / n) * 100, 2)
)

TDF_eventos_total <- rbind(TDF_eventos, fila_total)

tabla_eventos <- TDF_eventos_total %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1**"),
    subtitle = md("Tabla de distribución de frecuencias de EVENTOS_NOX")
  ) %>%
  cols_label(
    Clase = "N° de eventos",
    Fo    = "Frecuencia absoluta",
    hi    = "Frecuencia relativa (%)"
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 4 - Minas")
  ) %>%
  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_eventos
Tabla N°1
Tabla de distribución de frecuencias de EVENTOS_NOX
N° de eventos Frecuencia absoluta Frecuencia relativa (%)
0 184 6.14
1 490 16.36
2 795 26.54
3 609 20.33
4 460 15.35
5 258 8.61
6 122 4.07
7 53 1.77
8 17 0.57
9 o más 8 0.27
TOTAL 2996 100.00
Autor: Grupo 4 - Minas

4 Gráfica de Distribución de Frecuencias

barplot(Fo,
        names.arg = Clase,
        main = "Gráfica N°1: Distribución de EVENTOS_NOX",
        xlab = "N° de eventos de excedencia de NOx",
        ylab = "Frecuencia",
        col  = "gray")

5 Conjetura del Modelo

lambda_hat <- mean(EVENTOS_NOX)
lambda_hat
## [1] 2.793725
varianza_muestral <- var(EVENTOS_NOX)
varianza_muestral
## [1] 2.92772
cat("Media:", round(lambda_hat, 3), " | Varianza:", round(varianza_muestral, 3), "\n")
## Media: 2.794  | Varianza: 2.928
x_vals <- 0:11
prob_teorica <- dpois(x_vals, lambda_hat)
obs_rel <- sapply(x_vals, function(k) sum(EVENTOS_NOX == k)) / n

barplot(rbind(obs_rel, prob_teorica),
        beside = TRUE,
        names.arg = x_vals,
        col = c("gray", "blue"),
        main = "Gráfica N°2: Comparación de la realidad con el modelo\nPoisson de EVENTOS_NOX",
        xlab = "N° de eventos",
        ylab = "Probabilidad / Frecuencia relativa",
        legend.text = c("Observado", "Modelo Poisson"),
        args.legend = list(x = "topright", cex = 0.8))

6 Test de Aprobación

Fo_1 <- Fo
Fo_1
##  [1] 184 490 795 609 460 258 122  53  17   8
Fe_1 <- sapply(0:(kcut - 1), function(k) n * dpois(k, lambda_hat))
Fe_1 <- c(Fe_1, n * (1 - ppois(kcut - 1, lambda_hat)))
Fe_1
##  [1] 183.333771 512.184134 715.450801 666.257589 465.335115 260.003666
##  [7] 121.063122  48.316724  16.872955   7.182124
Fo_pct <- (Fo_1/n)*100
Fe_pct <- (Fe_1/n)*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 Poisson de EVENTOS_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] 99.24815
grados_libertad_1 <- length(Fo_1) - 1 - 1
grados_libertad_1
## [1] 8
nivel_significancia <- 0.95

x2_1 <- sum((Fo_1 - Fe_1)^2 / Fe_1)
x2_1
## [1] 15.36072
umbral_aceptacion_1 <- qchisq(nivel_significancia, grados_libertad_1)
umbral_aceptacion_1
## [1] 15.50731
Variable <- c("Eventos de excedencia de NOx")

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 Poisson)")) %>%
  tab_source_note(source_note = md("Autor: Grupo 4 - Minas"))
Tabla N°2
Resumen del test de bondad de ajuste (modelo Poisson)
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Eventos de excedencia de NOx 99.25 15.36 15.51
Autor: Grupo 4 - Minas

Con Chi² = 15.36 por debajo del umbral de aceptación 15.51 (95% de confianza, gl = 8), el modelo Poisson se acepta, aunque por un margen muy ajustado.

Nota sobre la correlación de Pearson (99.25%): con solo 10 categorías agrupadas, este estadístico tiende a mantenerse muy alto casi sin importar qué tan ajustado esté el Chi² — es una propiedad estructural del test con pocos puntos y bins de magnitudes muy dispares (desde 8 hasta 795 en frecuencia absoluta), no una señal de que el ajuste sea artificialmente perfecto. El Chi² es el estadístico que realmente distingue un ajuste bueno de uno al límite en este caso.

7 Cálculo de Probabilidades

¿Cuál es la probabilidad de que una mina registre a lo sumo 2 eventos de excedencia de NOx?

Probabilidad_1 <- ppois(2, lambda_hat) * 100
Probabilidad_1
## [1] 47.09508
x_vals_p <- 0:12
y_vals_p <- dpois(x_vals_p, lambda_hat)

plot(x_vals_p, y_vals_p,
     type = "h",
     lwd = 2,
     col  = "skyblue3",
     main = "Gráfica N°4: Cálculo de probabilidades",
     ylab = "Probabilidad",
     xlab = "N° de eventos de excedencia de NOx")

x_section <- 0:2
y_section <- dpois(x_section, lambda_hat)
points(x_section, y_section, type = "h", lwd = 3, col = "red")
points(x_section, y_section, pch = 19, col = "red")

legend("topright",
       legend = c("Modelo Poisson", "P(X ≤ 2)"),
       col = c("skyblue3", "red"),
       lwd = 2,
       cex = 0.7)

texto_prob <- paste0("P(X ≤ 2) = ", round(Probabilidad_1, 2), " %")
text(x = 8, y = max(y_vals_p)*0.85,
     labels = texto_prob,
     col = "black",
     cex = 0.85,
     font = 2)

cantidad_1 <- ppois(2, lambda_hat) * n
cantidad_1
## [1] 1410.969

8 Intervalos de Confianza

n_ic <- length(EVENTOS_NOX)
n_ic
## [1] 2996
se_lambda <- sqrt(lambda_hat / n_ic)
se_lambda
## [1] 0.03053662
e <- qnorm(0.975) * se_lambda
e
## [1] 0.05985067
li <- lambda_hat - e
li
## [1] 2.733874
ls <- lambda_hat + e
ls
## [1] 2.853576
tabla_lambda <- data.frame(Intervalo = sprintf("P [%.4f< λ <%.4f] = 95%%", li, ls))

tabla_lambda %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3**"),
             subtitle = md("Intervalo de confianza del parámetro λ (95%)")) %>%
  tab_source_note(source_note = md("Autor: Grupo 4 - Minas")) %>%
  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 N°3
Intervalo de confianza del parámetro λ (95%)
Intervalo
P [2.7339< λ <2.8536] = 95%
Autor: Grupo 4 - Minas

9 Conclusiones

EVENTOS_NOX se conjeturo como Poisson(lambda = 2.794), estimado por metodo de momentos y respaldado por la cercania entre media y varianza (2.93). El modelo se acepta, pero con margen ajustado: Chi-cuadrado = 15.36, apenas bajo el umbral de 15.51 (95%, gl = 8). La correlacion de Pearson (99.25%) se mantiene alta pese a ese ajuste limite, algo esperable con pocas categorias y no indica un resultado artificialmente perfecto. Una mina tiene 47.10% de probabilidad de registrar a lo sumo 2 eventos (~1411 de las 2996 minas). El lambda poblacional se estima, con 95% de confianza, entre 2.7339 y 2.8536.