library(dplyr)
library(gt)

1 Carga de Datos y Librerías

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

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

2 Tabla de Distribución de Frecuencias

valores <- 0:4

ni <- as.vector(table(factor(SUBUNIT_NU, levels = valores)))
hi <- round((ni/sum(ni))*100, 2)

TDFsub <- data.frame(valores, ni, hi)

fila_total <- data.frame(
  valores = "TOTAL",
  ni  = sum(TDFsub$ni),
  hi  = round(sum(TDFsub$hi), 2)
)

TDFsub_total <- rbind(TDFsub, fila_total)

tabla_sub <- TDFsub_total %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1**"),
    subtitle = md("Tabla de distribución de frecuencias de SUBUNIT_NU")
  ) %>%
  cols_label(
    valores = "Número de subunidad",
    ni  = "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_sub
Tabla N°1
Tabla de distribución de frecuencias de SUBUNIT_NU
Número de subunidad Frecuencia absoluta Frecuencia relativa (%)
0 106 3.63
1 802 27.46
2 1134 38.82
3 749 25.64
4 130 4.45
TOTAL 2921 100.00
Autor: Grupo 4 - Minas

3 Gráfica de Distribución de Frecuencias

barplot(ni,
        names.arg = valores,
        main = "Gráfica N°1: Distribución de SUBUNIT_NU",
        xlab = "Número de subunidad",
        ylab = "Frecuencia",
        col  = "gray")

4 Conjetura del Modelo

Por tratarse de una variable de conteo, se conjetura primero un modelo Poisson, siguiendo el mismo criterio usado en el resto de variables discretas del proyecto.

lambda_1 <- mean(SUBUNIT_NU)
lambda_1
## [1] 1.998288
var(SUBUNIT_NU)   # var << lambda -> subdispersion, mala senal para Poisson
## [1] 0.8544491
barplot(ni, names.arg = valores,
        main = "Gráfica N°2a: Comparación con el modelo Poisson",
        xlab = "Número de subunidad", ylab = "Frecuencia", col = "lightgray")
points(seq(0.7, by = 1.2, length.out = 5),
       dpois(valores, lambda_1) * n,
       type = "b", pch = 19, col = "blue")

La varianza observada (0.85) es notablemente menor que λ (2), lo cual es un indicio de subdispersión incompatible con el supuesto de Poisson (media = varianza). Esto se confirma en el Test de Aprobación. Como alternativa, dado que SUBUNIT_NU está acotada entre 0 y 4, se conjetura un modelo Binomial(size = 4, p), coherente con un conteo con límite superior fijo.

p_1 <- mean(SUBUNIT_NU) / 4
p_1
## [1] 0.4995721
barplot(ni, names.arg = valores,
        main = "Gráfica N°2b: Comparación con el modelo Binomial(4, p)",
        xlab = "Número de subunidad", ylab = "Frecuencia", col = "lightgray")
points(seq(0.7, by = 1.2, length.out = 5),
       dbinom(valores, size = 4, prob = p_1) * n,
       type = "b", pch = 19, col = "red")

5 Test de Aprobación

Fo_1 <- ni

# --- Poisson (se rechaza) ---
Fe_pois <- dpois(valores, lambda_1) * n
x2_pois <- sum((Fo_1 - Fe_pois)^2 / Fe_pois)
gl_pois <- length(Fo_1) - 1 - 1
chi2_c_pois <- qchisq(0.95, gl_pois)
cat(sprintf("POISSON  -> chi2=%.2f  chi2_c=%.2f  %s\n",
            x2_pois, chi2_c_pois, ifelse(x2_pois < chi2_c_pois, "APRUEBA", "RECHAZA")))
## POISSON  -> chi2=522.86  chi2_c=7.81  RECHAZA

El modelo Poisson se rechaza (Chi² = 522.86 >> Chi² crítico = 7.81). Se prosigue con el modelo Binomial(4, p).

Fe_bin <- dbinom(valores, size = 4, prob = p_1) * n
Fe_bin
## [1]  183.1883  731.5000 1095.3734  729.0000  181.9383

Nota metodológica: las categorías extremas (0 y 4) tienen frecuencias esperadas bajas y generan alta sensibilidad en el Chi-cuadrado con n = 2921. Se agrupan en 3 categorías: {0,1}, {2}, {3,4} — mismo criterio de agrupación ya usado en STAT_DATE (terciles) para pruebas de bondad de ajuste con categorías poco pobladas.

Fo_g <- c(Fo_1[1] + Fo_1[2], Fo_1[3], Fo_1[4] + Fo_1[5])
Fe_g <- c(Fe_bin[1] + Fe_bin[2], Fe_bin[3], Fe_bin[4] + Fe_bin[5])

Fo_g
## [1]  908 1134  879
Fe_g
## [1]  914.6883 1095.3734  910.9383
Fo_pct <- (Fo_g/n)*100
Fe_pct <- (Fe_g/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 Binomial de SUBUNIT_NU (agrupado)",
     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.62817
grados_libertad_1 <- length(Fo_g) - 1 - 1   # 1 parametro estimado (p)
grados_libertad_1
## [1] 1
nivel_significancia <- 0.95

x2_1 <- sum((Fo_g - Fe_g)^2 / Fe_g)
x2_1
## [1] 2.530797
umbral_aceptacion_1 <- qchisq(nivel_significancia, grados_libertad_1)
umbral_aceptacion_1
## [1] 3.841459
Variable <- c("Número de subunidad (SUBUNIT_NU)")

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 Binomial, agrupado)")) %>%
  tab_source_note(source_note = md("Autor: Grupo 4 - Minas"))
Tabla N°2
Resumen del test de bondad de ajuste (modelo Binomial, agrupado)
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Número de subunidad (SUBUNIT_NU) 99.63 2.53 3.84
Autor: Grupo 4 - Minas

Con Chi² = 2.53 por debajo del umbral de aceptación 3.84 (95% de confianza, gl = 1), el modelo Binomial(4, p) se acepta.

6 Cálculo de Probabilidades

¿Cuál es la probabilidad de que una mina tenga 3 o más subunidades?

Probabilidad_1 <- (dbinom(3, 4, p_1) + dbinom(4, 4, p_1)) * 100
Probabilidad_1
## [1] 31.18584
x <- valores
y <- dbinom(x, 4, p_1)

plot(x, y,
     type = "h",
     lwd = 3,
     col = "skyblue3",
     main = "Gráfica N°4: Cálculo de probabilidades",
     ylab = "Probabilidad",
     xlab = "Número de subunidad")

points(x, y, pch = 19, col = "skyblue3")

x_section <- 3:4
y_section <- dbinom(x_section, 4, p_1)

segments(x_section, 0, x_section, y_section, col = "red", lwd = 3)
points(x_section, y_section, pch = 19, col = "red")

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

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

# De 300 futuras minas, cuantas tendrian 3 o mas subunidades
cantidad_1 <- (Probabilidad_1/100) * 300
cantidad_1
## [1] 93.55751

7 Intervalos de Confianza

n_ic <- n

e <- sqrt(p_1 * (1 - p_1) / (n_ic * 4))
e
## [1] 0.004625664
li <- p_1 - 1.96 * e
li
## [1] 0.4905058
ls <- p_1 + 1.96 * e
ls
## [1] 0.5086384
tabla_media <- data.frame(
  round(li, 4),
  Variable,
  round(ls, 4),
  round(e, 5)
)

colnames(tabla_media) <- c("Límite inferior", "Proporción poblacional (p)", "Límite superior", "Error estándar")

tabla_media %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3**"),
             subtitle = md("Intervalo de confianza de la proporción poblacional p (95%)")) %>%
  tab_source_note(source_note = md("Autor: Grupo 4 - Minas"))
Tabla N°3
Intervalo de confianza de la proporción poblacional p (95%)
Límite inferior Proporción poblacional (p) Límite superior Error estándar
0.4905 Número de subunidad (SUBUNIT_NU) 0.5086 0.00463
Autor: Grupo 4 - Minas

8 Conclusiones

SUBUNIT_NU es una variable discreta acotada entre 0 y 4. Se conjeturo primero un modelo Poisson(lambda = 2.00), el cual fue rechazado por el test de Chi-cuadrado (subdispersion: varianza observada de 0.85 muy por debajo de lambda). Como alternativa se ajusto un modelo Binomial(n = 4, p = 0.4996), agrupando las categorias poco pobladas {0,1}, {2}, {3,4} (mismo criterio usado en STAT_DATE), con el cual se obtuvo un Chi-cuadrado de 2.53, por debajo del umbral de aceptacion de 3.84 (95% de confianza), y una correlacion de Pearson de 99.63%. La probabilidad de que una mina tenga 3 o mas subunidades es de 31.19%, equivalente a aproximadamente 94 de cada 300 minas futuras. La proporcion poblacional p se estima, con 95% de confianza, entre 0.4905 y 0.5086.