library(dplyr)
library(gt)
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.
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 | ||
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")
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))
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.
¿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
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 |
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.