Paso 1: Carga de Librerías

Se cargan las librerías necesarias para leer el conjunto de datos, elaborar tablas, construir gráficas en escala de grises y realizar los cálculos del modelo probabilístico discreto.

library(readr)
library(dplyr)
library(knitr)
library(kableExtra)
library(ggplot2)

Paso 2: Carga de Datos

Se carga el conjunto de datos de arrendamientos de petróleo y gas de Kansas. El código permite leer archivos separados por coma o por punto y coma.

rutas_posibles <- c(
  "oil_and_gas_leases_data (2)(2).csv",
  "oil_and_gas_leases_data (2)(1).csv",
  "oil_and_gas_leases_data (2).csv",
  "oil_and_gas_leases_data.csv",
  "kansas.csv"
)

ruta_csv <- rutas_posibles[file.exists(rutas_posibles)][1]
if (is.na(ruta_csv)) stop("No se encontró el archivo CSV. Coloca el archivo en la misma carpeta del Rmd.")

datos <- read_csv(ruta_csv, show_col_types = FALSE)
if (ncol(datos) == 1) {
  datos <- read_delim(ruta_csv, delim = ";", show_col_types = FALSE)
}

cat("Archivo cargado:", ruta_csv, "\n")
## Archivo cargado: oil_and_gas_leases_data (2).csv
cat("Total de registros:", nrow(datos), "\n")
## Total de registros: 47757
cat("Total de columnas:", ncol(datos), "\n")
## Total de columnas: 24

Paso 3: Conteo

Se analiza la variable PRODUCES_OIL, que tiene dos resultados posibles: 1 si el arrendamiento produce petróleo y 0 si no produce petróleo. Por ello se modela como una Binomial con un solo ensayo, es decir, Bernoulli como caso particular de la Binomial.

x <- datos %>%
  mutate(PRODUCE = suppressWarnings(as.integer(PRODUCES_OIL))) %>%
  filter(!is.na(PRODUCE), PRODUCE %in% c(0, 1)) %>%
  pull(PRODUCE)

n <- length(x)
conteo <- table(factor(x, levels = c(0, 1)))
cat("Total de observaciones válidas:", n, "\n")
## Total de observaciones válidas: 47757
cat("No produce petróleo:", conteo[1], "\n")
## No produce petróleo: 15117
cat("Produce petróleo:", conteo[2], "\n")
## Produce petróleo: 32640

Paso 4: Tabla de Distribución de Frecuencias

Se construye una sola tabla de distribución de frecuencias para la variable binaria PRODUCES_OIL.

TDF <- data.frame(
  Categoria = c("No produce petróleo (0)", "Produce petróleo (1)"),
  Valor = c(0, 1),
  ni = as.numeric(conteo)
) %>%
  mutate(
    hi = round(100 * ni / sum(ni), 2),
    Ni = cumsum(ni),
    Hi = round(cumsum(hi), 2)
  )

TDF_total <- bind_rows(
  TDF,
  data.frame(Categoria = "TOTAL", Valor = NA, ni = sum(TDF$ni), hi = round(sum(TDF$hi), 2), Ni = NA, Hi = 100)
)

kable(TDF_total, caption = "Tabla N°1: Distribución de Frecuencias — Produces Oil") %>%
  kable_styling(full_width = FALSE, position = "center")
Tabla N°1: Distribución de Frecuencias — Produces Oil
Categoria Valor ni hi Ni Hi
No produce petróleo (0) 0 15117 31.65 15117 31.65
Produce petróleo (1) 1 32640 68.35 47757 100.00
TOTAL NA 47757 100.00 NA 100.00

Paso 5: Gráfica

Se presenta el diagrama de barras de las frecuencias observadas en escala de grises.

ggplot(TDF, aes(x = Categoria, y = hi)) +
  geom_col(fill = "gray60", color = "black") +
  labs(title = "Gráfica N°1: Frecuencias observadas de Produces Oil", x = "Categoría", y = "hi (%)") +
  theme_bw()

Paso 6: Conjetura

La variable PRODUCES_OIL solo presenta dos posibles resultados: produce petróleo o no produce petróleo. Por esta razón, se propone un modelo Binomial con \(n=1\), donde el éxito corresponde a que el arrendamiento produzca petróleo.

Paso 7: Cálculo de Parámetros y Probabilidades

Para el modelo Binomial se considera \(n=1\) y se estima \(p\) como la proporción de éxitos observada:

\[ \hat{p}=\frac{x}{n} \]

n_ensayos <- 1
p_hat <- mean(x)
prob <- dbinom(c(0, 1), size = n_ensayos, prob = p_hat)
esp <- n * prob
obs <- TDF$ni

pearson <- ifelse(sd(obs) > 0 && sd(esp) > 0, cor(obs, esp), NA)
pearson_porcentaje <- round(pearson * 100, 2)
chi_calculado <- sum((obs - esp)^2 / esp)
gl <- 1
p_valor <- pchisq(chi_calculado, df = gl, lower.tail = FALSE)
chi_critico <- qchisq(0.95, df = gl)
decision <- ifelse(p_valor > 0.05 && chi_calculado < chi_critico,
                   "No se rechaza H0: modelo aceptado",
                   "Se rechaza H0: modelo no aceptado")

TDF_modelo <- TDF %>%
  mutate(
    Probabilidad_Teorica = round(prob, 4),
    Frecuencia_Esperada = round(esp, 4),
    Porcentaje_Esperado = round(100 * Frecuencia_Esperada / sum(Frecuencia_Esperada), 2)
  )

TDF_modelo_total <- bind_rows(
  TDF_modelo,
  data.frame(Categoria = "TOTAL", Valor = NA, ni = sum(TDF_modelo$ni), hi = round(sum(TDF_modelo$hi), 2),
             Ni = NA, Hi = 100, Probabilidad_Teorica = round(sum(TDF_modelo$Probabilidad_Teorica), 4),
             Frecuencia_Esperada = round(sum(TDF_modelo$Frecuencia_Esperada), 4), Porcentaje_Esperado = 100)
)

kable(TDF_modelo_total, caption = "Tabla N°2: Probabilidades y frecuencias esperadas — Modelo Binomial") %>%
  kable_styling(full_width = FALSE, position = "center")
Tabla N°2: Probabilidades y frecuencias esperadas — Modelo Binomial
Categoria Valor ni hi Ni Hi Probabilidad_Teorica Frecuencia_Esperada Porcentaje_Esperado
No produce petróleo (0) 0 15117 31.65 15117 31.65 0.3165 15117 31.65
Produce petróleo (1) 1 32640 68.35 47757 100.00 0.6835 32640 68.35
TOTAL NA 47757 100.00 NA 100.00 1.0000 47757 100.00
resumen <- data.frame(
  Variable = "PRODUCES_OIL",
  Modelo = "Binomial",
  Parametros = paste0("n = 1; p = ", round(p_hat, 4)),
  Pearson = paste0(pearson_porcentaje, "%"),
  Chi_Cuadrado = round(chi_calculado, 4),
  GL = gl,
  Valor_p = round(p_valor, 4),
  Valor_Critico = round(chi_critico, 4),
  Decision = decision
)

kable(resumen, caption = "Tabla N°3: Resumen de Pearson y Chi-cuadrado") %>%
  kable_styling(full_width = FALSE, position = "center")
Tabla N°3: Resumen de Pearson y Chi-cuadrado
Variable Modelo Parametros Pearson Chi_Cuadrado GL Valor_p Valor_Critico Decision
PRODUCES_OIL Binomial n = 1; p = 0.6835 100% 0 1 1 3.8415 No se rechaza H0: modelo aceptado
ggplot(TDF_modelo, aes(x = Categoria, y = Porcentaje_Esperado)) +
  geom_col(fill = "gray35", color = "black") +
  labs(title = "Gráfica N°2: Frecuencias esperadas del modelo Binomial", x = "Categoría", y = "Porcentaje esperado (%)") +
  theme_bw()

Paso 8: Conclusiones

Se analizó la variable PRODUCES_OIL como una variable discreta binaria. Debido a que solo posee dos resultados posibles, se propuso un modelo Binomial con \(n=1\). El parámetro estimado fue \(\hat{p}=0.6835\). La prueba de Pearson obtuvo 100% y el estadístico Chi-cuadrado fue 0, con valor crítico 3.8415. Por tanto, No se rechaza H0: modelo aceptado.