1. Cargar Librerías

library(readr)
library(dplyr)
library(knitr)
library(kableExtra)
library(gt)
library(htmltools)

2. Cargar Datos

Se carga el conjunto de datos de arrendamientos de hidrocarburos del estado de Kansas, EE.UU., registrados por el Kansas Geological Survey.

# --- CONFIGURACIÓN: el nombre de la variable se edita ÚNICAMENTE en el bloque
#     `params` del encabezado YAML; el resto del código y el título del
#     documento se adaptan automáticamente, sin nombres fijos aquí. ---
nombre_variable   <- params$nombre_variable
columna_variable  <- params$columna_variable
etiqueta_variable <- params$etiqueta_variable
ruta_archivo <- file.choose()
datos <- read_csv(ruta_archivo, show_col_types = FALSE)

cat("Dataset cargado correctamente.\n")
## Dataset cargado correctamente.
cat("Total de registros (filas):", nrow(datos), "\n")
## Total de registros (filas): 47757

3. Conteo

Se extrae la variable PRODUCES_GAS (Produce Gas), se filtran los valores válidos (Yes/No) y se traducen al español (Sí/No). Luego se realiza el conteo de observaciones por categoría.

x_raw <- datos %>%
  mutate(valor_limpio = trimws(toupper(as.character(.data[[columna_variable]])))) %>%
  filter(valor_limpio %in% c("YES", "NO", "Y", "N", "TRUE", "FALSE", "1", "0")) %>%
  mutate(
    valor_es = case_when(
      valor_limpio %in% c("YES", "Y", "TRUE", "1") ~ "Sí",
      valor_limpio %in% c("NO", "N", "FALSE", "0")  ~ "No"
    )
  ) %>%
  pull(valor_es)

x_raw <- factor(x_raw, levels = c("Sí", "No"))
n <- length(x_raw)

conteo <- table(x_raw)

cat("Observaciones válidas (n):", n, "\n")
## Observaciones válidas (n): 47757
cat("Categorías distintas:", length(conteo), "\n\n")
## Categorías distintas: 2
print(conteo)
## x_raw
##    Sí    No 
## 15117 32640

4. Tabla de Distribución de Frecuencias

categorias <- names(conteo)
ni         <- as.integer(conteo)
hi_pct     <- ni / n * 100
hi_frac    <- ni / n
k          <- length(categorias)

tabla_df <- data.frame(
  Categoria    = categorias,
  ni           = ni,
  hi_pct       = sprintf("%.2f%%", hi_pct),
  Probabilidad = sprintf("%.4f", hi_frac),
  stringsAsFactors = FALSE
)

kable(
  tabla_df,
  caption = paste0(
    "Tabla de Distribución de Frecuencias — ", etiqueta_variable, " (n = ",
    format(n, big.mark = ","), " registros válidos)."
  ),
  col.names = c(etiqueta_variable, "Frecuencia (ni)", "Porcentaje (hi %)", "Probabilidad"),
  align = c("l", "c", "c", "c"), escape = FALSE
) %>%
  kable_styling(bootstrap_options = c("striped", "condensed", "bordered"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#d3d3d3", color = "black")
Tabla de Distribución de Frecuencias — Produce Gas (n = 47,757 registros válidos).
Produce Gas Frecuencia (ni) Porcentaje (hi %) Probabilidad
15117 31.65% 0.3165
No 32640 68.35% 0.6835

5. Gráfico de Probabilidad (%)

par(mar = c(6, 6, 5, 2))
bp <- barplot(
  hi_pct,
  names.arg = categorias,
  col = gray(seq(0.30, 0.75, length.out = k)),
  border = "black",
  ylim = c(0, max(hi_pct) * 1.2),
  xlab = "", ylab = "", main = "", las = 1
)
text(bp, hi_pct, labels = paste0(round(hi_pct, 1), "%"), pos = 3, cex = 0.9)
mtext("Probabilidad (%)", side = 2, line = 4.2, cex = 1)
mtext(etiqueta_variable, side = 1, line = 4, cex = 1)
mtext(paste0("Gráfica de Probabilidad — ", etiqueta_variable, ", Kansas, EE.UU."),
      side = 3, line = 1.5, cex = 0.95, font = 2)

6. Conjetura

Al ser una variable dicotómica (2 categorías), se comparan internamente los modelos Bernoulli, Binomial, Poisson, Geométrico y Uniforme, usando X = 0, 1 para representar cada categoría. Los parámetros se estiman por el método de momentos a partir de la media observada.

Doble criterio de validación: dado que con muestras grandes (n = 47,757) la prueba Chi-cuadrado se vuelve muy sensible, un modelo se considera aceptado si cumple al menos uno de estos dos criterios: Correlación de Pearson (observado vs. teórico) > 70%, o Chi-cuadrado con p-valor > 0.05. Se elige el modelo de mayor correlación de Pearson que además quede aceptado.

Modelo conjeturado: Binomial (Pearson = 100 % — APROBADO | Chi-cuadrado p-valor = 1 — APROBADO )
Parámetro estimado (método de momentos / MLE): 0.6835

comparacion <- rbind(hi_pct, ajuste_global$p_elegido * 100)
rownames(comparacion) <- c("Observado", paste0("Modelo ", ajuste_global$modelo, " (estimado)"))

par(mar = c(6, 6, 6, 2))
bp2 <- barplot(comparacion, beside = TRUE,
               col = c(gray(0.35), gray(0.75)), border = "black", las = 1,
               names.arg = categorias, ylim = c(0, max(comparacion) * 1.25),
               ylab = "", xlab = "")
mtext("Probabilidad (%)", side = 2, line = 4.2, cex = 1)
mtext(etiqueta_variable, side = 1, line = 4, cex = 1)
mtext(paste0("Probabilidad — Modelo ", ajuste_global$modelo, " Sobrepuesto a la Frecuencia Observada"), side = 3, line = 1.5, cex = 1, font = 2)
text(bp2, comparacion, labels = paste0(round(comparacion, 1), "%"), pos = 3, cex = 0.8)
legend("topright", legend = rownames(comparacion), fill = c(gray(0.35), gray(0.75)), bty = "n", cex = 0.9)

Con base en el mayor valor de correlación de Pearson entre los modelos aceptados, se conjetura el modelo Binomial como el que mejor describe la distribución de probabilidad de la variable Produce Gas.

7. Test

Se aplica el doble criterio de validación —Correlación de Pearson (> 70%) y Chi-cuadrado de bondad de ajuste (p > 0.05)— sobre el modelo conjeturado (Binomial), para validar formalmente la hipótesis.

\(H_0\): los datos siguen el modelo Binomial   |   \(H_1\): los datos NO siguen el modelo Binomial

construir_tabla_test(ajuste_global, n) %>%
  tabla_test_gt(
    titulo    = paste0("Tabla: Validación de la Conjetura (Modelo ", ajuste_global$modelo, ")"),
    subtitulo = paste0(etiqueta_variable, " — parámetro estimado = ", round(ajuste_global$parametro, 4))
  )
Tabla: Validación de la Conjetura (Modelo Binomial)
Produce Gas — parámetro estimado = 0.6835
Prueba Estadístico G.L. p-valor Validación
Correlación de Pearson (hi acum. vs. p teórica acum.) 100 - - APROBADO
Chi-Cuadrado (n=47757) 0 1 1 APROBADO
Autor: Valeska Araujo

8. Conclusiones

La variable Produce Gas es cualitativa nominal dicotómica, con categorías Sí y No. Su moda es No, con 68.35% de participación. Tras comparar los modelos Bernoulli, Binomial, Poisson, Geométrico y Uniforme, el modelo aceptado —bajo el criterio de Pearson y/o Chi-cuadrado— fue Binomial (Pearson = 100%, Chi² = 0, p-valor = 1), por lo cual no se rechaza la hipótesis de que los datos siguen dicho modelo.


Autor: Araujo Valeska | Análisis Estadístico Inferencial — Kansas Hydrocarbon Leases Dataset