1. Cargar Librerías

library(readr); library(dplyr); library(gt)
cat("Librerías cargadas correctamente.\n")
## Librerías cargadas correctamente.

2. Cargar Datos

Se utiliza el conjunto de datos de arrendamientos de hidrocarburos del estado de Kansas, EE.UU., registrado por el Kansas Geological Survey. (Este paso se conserva por trazabilidad; los conteos usados desde la Sección 3 en adelante son los ya registrados en el documento FUENTE_DE_COORDENADAS.Rmd — Cuadro N°1 — para no depender de recalcular contra el CSV.)

rutas_candidatas <- c(
  "C:/Users/thann/OneDrive/Escritorio/ESTADISTICA.LOL/datos_vale.csv",
  "C:/Users/thann/OneDrive/Escritorio/ESTADISTICA.LOL/daataset/datos_vale.csv",
  "C:/Users/thann/OneDrive/Escritorio/ESTADISTICA.LOL/dataset/datos_vale.csv"
)
ruta_archivo <- rutas_candidatas[file.exists(rutas_candidatas)][1]

if (!is.na(ruta_archivo)) {
  datos_vale <- read_delim(ruta_archivo, delim = ";", show_col_types = FALSE)
  cat("Base de datos cargada correctamente desde:", ruta_archivo, "\n")
  cat("Total de registros:", nrow(datos_vale), "\n")
} else {
  cat("Archivo no encontrado en las rutas candidatas; se continúa con los valores ya registrados.\n")
}
## Base de datos cargada correctamente desde: C:/Users/thann/OneDrive/Escritorio/ESTADISTICA.LOL/daataset/datos_vale.csv 
## Total de registros: 104173

3. Conteo

La variable de estudio es LONGITUDE_LATITUDE_SOURCE (Fuente de Coordenadas), que indica el método o sistema utilizado para registrar las coordenadas geográficas de cada arrendamiento. A diferencia de otras variables del dataset, esta es cualitativa nominal dicotómica: solo existen dos categorías registradas (CENTER_OF_SECTION y QUARTER_CALLS), por lo que no es necesario dicotomizar artificialmente una variable con múltiples categorías — la variable ya viene dividida en exactamente dos grupos, tal como quedó registrado en el Cuadro N°1 de FUENTE_DE_COORDENADAS.Rmd.

# Valores reales tomados del Cuadro N°1 de FUENTE_DE_COORDENADAS.Rmd
n_total   <- 47757                       # registros válidos totales (TOTAL del Cuadro N°1)
moda_val  <- "CENTER_OF_SECTION"         # categoría modal (mayor frecuencia)
ni_moda   <- 26553                       # frecuencia (ni) de la categoría modal
otro_val  <- "QUARTER_CALLS"             # única categoría restante
ni_otro   <- 21204                       # frecuencia (ni) de la categoría restante

etiqueta_si <- paste0("Es \"", moda_val, "\"")
etiqueta_no <- paste0("Es \"", otro_val, "\"")

p_hat <- ni_moda / n_total             # proporción muestral de la categoría modal
exito <- c(rep(1, ni_moda), rep(0, ni_otro))

cat("Categoría modal (éxito):", moda_val, "\n")
## Categoría modal (éxito): CENTER_OF_SECTION
cat("n total:                ", n_total, "\n")
## n total:                 47757
cat("ni categoría modal:      ", ni_moda, "\n")
## ni categoría modal:       26553
cat("ni categoría restante:   ", ni_otro, "\n")
## ni categoría restante:    21204
cat("p_hat:                   ", round(p_hat, 4), "\n")
## p_hat:                    0.556

La categoría de éxito es Es “CENTER_OF_SECTION” y la de fracaso es Es “QUARTER_CALLS”.

4. Tabla de Distribución de Frecuencias

Se presentan las 2 categorías completas de LONGITUDE_LATITUDE_SOURCE tal como quedaron registradas en el Cuadro N°1 de FUENTE_DE_COORDENADAS.Rmd (n total = 47.757).

tabla_top10 <- data.frame(
  Categoria = c(moda_val, otro_val),
  ni        = c(ni_moda, ni_otro),
  stringsAsFactors = FALSE
)
tabla_top10$hi <- tabla_top10$ni / n_total
tabla_top10$Probabilidad <- round(100 * tabla_top10$hi, 2)

total_top10 <- data.frame(Categoria = "TOTAL", ni = sum(tabla_top10$ni),
                           hi = sum(tabla_top10$ni) / n_total,
                           Probabilidad = round(100 * sum(tabla_top10$ni) / n_total, 2))

tabla_tdf <- bind_rows(tabla_top10, total_top10)
n_filas_tdf <- nrow(tabla_tdf)

tabla_tdf %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N\u00b01: Distribución de Frecuencias**"),
    subtitle = md("*FUENTE DE COORDENADAS, Kansas \u2014 2 Categorías Completas*")
  ) %>%
  cols_label(Categoria = md("**FUENTE DE COORDENADAS**"), ni = md("**Frecuencia (ni)**"),
             hi = md("**Frecuencia relativa (hi)**"), Probabilidad = md("**Probabilidad (%)**")) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_column_labels()) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_title(groups = "title")) %>%
  tab_style(style = cell_fill(color = "#F5F5F5"), locations = cells_body(rows = seq(1, n_filas_tdf, by = 2))) %>%
  tab_style(style = list(cell_fill(color = "#D6D6D6"), cell_text(weight = "bold")),
            locations = cells_body(rows = Categoria == "TOTAL")) %>%
  fmt_number(columns = hi, decimals = 4) %>%
  cols_align(align = "center", columns = c(ni, hi, Probabilidad)) %>%
  cols_align(align = "left", columns = Categoria) %>%
  tab_source_note(source_note = md("*Autor: GRUPO*")) %>%
  tab_options(table.width = pct(90), table.font.size = px(13),
              heading.title.font.size = px(16), heading.subtitle.font.size = px(12),
              data_row.padding = px(6),
              column_labels.border.top.width = px(2),
              column_labels.border.bottom.width = px(2),
              table_body.border.bottom.width = px(2),
              table.border.top.style = "hidden", table.border.bottom.style = "hidden")
Tabla N°1: Distribución de Frecuencias
FUENTE DE COORDENADAS, Kansas — 2 Categorías Completas
FUENTE DE COORDENADAS Frecuencia (ni) Frecuencia relativa (hi) Probabilidad (%)
CENTER_OF_SECTION 26553 0.5560 55.6
QUARTER_CALLS 21204 0.4440 44.4
TOTAL 47757 1.0000 100.0
Autor: GRUPO

5. Gráfico General

par(mar = c(8, 5, 4, 2))
bp <- barplot(tabla_top10$Probabilidad, names.arg = tabla_top10$Categoria,
              col = c("#1B9E77", "#D95F02"),
              border = NA, las = 2, cex.names = 0.85,
              main = "Gráfica 1. Distribución empírica de FUENTE DE COORDENADAS",
              ylab = "Probabilidad (%)",
              ylim = c(0, max(tabla_top10$Probabilidad) * 1.18))
text(bp, tabla_top10$Probabilidad, labels = paste0(round(tabla_top10$Probabilidad, 2), "%"),
     pos = 3, cex = 0.85)

6. Conjetura

Como LONGITUDE_LATITUDE_SOURCE ya es una variable de exactamente dos categorías, cada registro se trata directamente como un ensayo de Bernoulli independiente, sin necesidad de agrupar varias categorías en un “resto”:

\[X_i \sim \text{Bernoulli}(p), \quad i = 1, \dots, n\]

donde \(p\) es la proporción poblacional de “Es”CENTER_OF_SECTION”“. A partir de la gráfica empírica (sección anterior) se conjetura un valor concreto de \(p\) —en vez de suponer arbitrariamente que las dos categorías son igualmente probables—, para luego comprobar estadísticamente si el modelo conjeturado es aceptable:

H0: p = 0.556 (valor conjeturado a partir de la proporción observada).
H1: p ≠ 0.556.

7. Cálculo de Parámetros y Probabilidades

7.1 Parámetros del Modelo Conjeturado

p0 <- round(p_hat, 3)                             # proporción conjeturada (sección "Conjetura")
error_estandar <- sqrt(p_hat * (1 - p_hat) / n_total)

tabla_parametros <- data.frame(
  Parametro = c("n (registros válidos)", "p\u0302 (proporción muestral)",
                "p0 (proporción bajo H0)", "Error estándar de p\u0302"),
  Valor = c(n_total, round(p_hat, 4), p0, round(error_estandar, 4))
)

tabla_parametros %>%
  gt() %>%
  tab_header(title = md("**Tabla N\u00b02: Parámetros del modelo Bernoulli(p) conjeturado**")) %>%
  cols_label(Parametro = md("**Parámetro**"), Valor = md("**Valor**")) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_column_labels()) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_title(groups = "title")) %>%
  tab_style(style = cell_fill(color = "#F5F5F5"), locations = cells_body(rows = seq(1, nrow(tabla_parametros), by = 2))) %>%
  cols_align(align = "center", columns = Valor) %>%
  cols_align(align = "left", columns = Parametro) %>%
  tab_source_note(source_note = md("*Autor: GRUPO*")) %>%
  tab_options(table.width = pct(90), table.font.size = px(13),
              heading.title.font.size = px(16),
              data_row.padding = px(6),
              column_labels.border.top.width = px(2),
              column_labels.border.bottom.width = px(2),
              table_body.border.bottom.width = px(2),
              table.border.top.style = "hidden", table.border.bottom.style = "hidden")
Tabla N°2: Parámetros del modelo Bernoulli(p) conjeturado
Parámetro Valor
n (registros válidos) 47757.0000
p̂ (proporción muestral) 0.5560
p0 (proporción bajo H0) 0.5560
Error estándar de p̂ 0.0023
Autor: GRUPO

7.2 Sobreponer la Realidad con el Modelo

Como la variable ya tiene exactamente dos categorías (no se dicotomizó artificialmente ninguna categoría modal frente a un “resto” heterogéneo), el modelo que más conviene aquí es el Bernoulli: las dos barras observadas se comparan directamente contra las probabilidades teóricas \(p_0\) y \(1-p_0\) bajo H0. Se muestran todos los valores (las dos categorías) tanto en la tabla como en la gráfica.

tabla_modelo <- data.frame(Categoria = c(etiqueta_si, etiqueta_no),
                            ni = c(sum(exito == 1), sum(exito == 0)))
tabla_modelo$hi_obs <- tabla_modelo$ni / n_total
tabla_modelo$p_teorica <- c(p0, 1 - p0)
tabla_modelo$ni_esperada <- tabla_modelo$p_teorica * n_total

tabla_modelo %>%
  gt() %>%
  tab_header(title = md(paste0("**Tabla N\u00b03: Frecuencias observadas frente al modelo Bernoulli(p0 = ", round(p0, 3), ")**"))) %>%
  cols_label(Categoria = md("**Categoría**"), ni = md("**ni observada**"),
             hi_obs = md("**hi observada**"), p_teorica = md("**P bajo H0**"),
             ni_esperada = md("**ni esperada bajo H0**")) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_column_labels()) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_title(groups = "title")) %>%
  tab_style(style = cell_fill(color = "#F5F5F5"), locations = cells_body(rows = seq(1, nrow(tabla_modelo), by = 2))) %>%
  fmt_number(columns = c(hi_obs, p_teorica), decimals = 4) %>%
  fmt_number(columns = ni_esperada, decimals = 2) %>%
  cols_align(align = "center", columns = c(ni, hi_obs, p_teorica, ni_esperada)) %>%
  cols_align(align = "left", columns = Categoria) %>%
  tab_source_note(source_note = md("*Autor: GRUPO*")) %>%
  tab_options(table.width = pct(90), table.font.size = px(13),
              heading.title.font.size = px(16),
              data_row.padding = px(6),
              column_labels.border.top.width = px(2),
              column_labels.border.bottom.width = px(2),
              table_body.border.bottom.width = px(2),
              table.border.top.style = "hidden", table.border.bottom.style = "hidden")
Tabla N°3: Frecuencias observadas frente al modelo Bernoulli(p0 = 0.556)
Categoría ni observada hi observada P bajo H0 ni esperada bajo H0
Es "CENTER_OF_SECTION" 26553 0.5560 0.5560 26,552.89
Es "QUARTER_CALLS" 21204 0.4440 0.4440 21,204.11
Autor: GRUPO
comparacion <- rbind(Observado = tabla_modelo$hi_obs * 100, `Esperado bajo H0` = tabla_modelo$p_teorica * 100)
colnames(comparacion) <- tabla_modelo$Categoria

bp <- barplot(comparacion, beside = TRUE, col = c("#1B9E77", "#D95F02"), border = NA,
              main = paste0("Gráfica 2. Realidad observada vs. modelo Bernoulli(p0 = ", round(p0, 3), ")"),
              ylab = "Probabilidad (%)", ylim = c(0, 100), legend.text = TRUE,
              args.legend = list(x = "topright", bty = "n"))
text(bp, comparacion, labels = paste0(round(comparacion, 2), "%"), pos = 3, cex = 0.8)

7.3 Cálculo de Probabilidades

Con \(\hat p = 0.556\), se calculan probabilidades para una muestra futura de 30 pozos, \(Y \sim \text{Binomial}(30, \hat p)\):

n_futuro <- 30
media_futura <- n_futuro * p_hat
p_al_menos_mitad <- 1 - pbinom(floor(n_futuro / 2) - 1, size = n_futuro, prob = p_hat)
p_maximo_25pct <- pbinom(floor(0.25 * n_futuro), size = n_futuro, prob = p_hat)

tabla_probabilidades <- data.frame(
  Evento = c(paste0("E[Y] esperado en n = ", n_futuro, " pozos"),
             "P(Y \u2265 mitad de la muestra)",
             "P(Y \u2264 25% de la muestra)"),
  Valor = round(c(media_futura, p_al_menos_mitad, p_maximo_25pct), 4)
)

tabla_probabilidades %>%
  gt() %>%
  tab_header(title = md(paste0("**Tabla N\u00b05: Probabilidades bajo el modelo Binomial(30, p\u0302 = ", round(p_hat, 4), ")**")),
             subtitle = md("*Para una muestra futura*")) %>%
  cols_label(Evento = md("**Evento**"), Valor = md("**Valor**")) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_column_labels()) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_title(groups = "title")) %>%
  tab_style(style = cell_fill(color = "#F5F5F5"), locations = cells_body(rows = seq(1, nrow(tabla_probabilidades), by = 2))) %>%
  cols_align(align = "center", columns = Valor) %>%
  cols_align(align = "left", columns = Evento) %>%
  tab_source_note(source_note = md("*Autor: GRUPO*")) %>%
  tab_options(table.width = pct(90), table.font.size = px(13),
              heading.title.font.size = px(16), heading.subtitle.font.size = px(12),
              data_row.padding = px(6),
              column_labels.border.top.width = px(2),
              column_labels.border.bottom.width = px(2),
              table_body.border.bottom.width = px(2),
              table.border.top.style = "hidden", table.border.bottom.style = "hidden")
Tabla N°5: Probabilidades bajo el modelo Binomial(30, p̂ = 0.556)
Para una muestra futura
Evento Valor
E[Y] esperado en n = 30 pozos 16.6801
P(Y ≥ mitad de la muestra) 0.7889
P(Y ≤ 25% de la muestra) 0.0003
Autor: GRUPO

8. Intervalo de Confianza

Intervalo de confianza al 95% para la proporción poblacional \(p\), calculado por los métodos de Wald y de Wilson, a partir de \(\hat p = 0.556\) y \(n = 4.7757\times 10^{4}\).

z <- qnorm(0.975)

wald_li <- p_hat - z * sqrt(p_hat * (1 - p_hat) / n_total)
wald_ls <- p_hat + z * sqrt(p_hat * (1 - p_hat) / n_total)

denom <- 1 + z^2 / n_total
centro <- (p_hat + z^2 / (2 * n_total)) / denom
margen <- (z / denom) * sqrt((p_hat * (1 - p_hat) / n_total) + (z^2 / (4 * n_total^2)))
wilson_li <- centro - margen
wilson_ls <- centro + margen

tabla_ic <- data.frame(Metodo = c("Wald", "Wilson"),
                        Lim_Inferior = round(c(wald_li, wilson_li), 4),
                        Lim_Superior = round(c(wald_ls, wilson_ls), 4))

tabla_ic %>%
  gt() %>%
  tab_header(title = md("**Tabla N\u00b06: Intervalo de Confianza al 95% para p**")) %>%
  cols_label(Metodo = md("**Método**"), Lim_Inferior = md("**Límite inferior**"),
             Lim_Superior = md("**Límite superior**")) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_column_labels()) %>%
  tab_style(style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
            locations = cells_title(groups = "title")) %>%
  tab_style(style = cell_fill(color = "#F5F5F5"), locations = cells_body(rows = seq(1, nrow(tabla_ic), by = 2))) %>%
  cols_align(align = "center", columns = c(Lim_Inferior, Lim_Superior)) %>%
  cols_align(align = "left", columns = Metodo) %>%
  tab_source_note(source_note = md("*Autor: GRUPO*")) %>%
  tab_options(table.width = pct(90), table.font.size = px(13),
              heading.title.font.size = px(16),
              data_row.padding = px(6),
              column_labels.border.top.width = px(2),
              column_labels.border.bottom.width = px(2),
              table_body.border.bottom.width = px(2),
              table.border.top.style = "hidden", table.border.bottom.style = "hidden")
Tabla N°6: Intervalo de Confianza al 95% para p
Método Límite inferior Límite superior
Wald 0.5515 0.5605
Wilson 0.5515 0.5605
Autor: GRUPO

9. Conclusiones

De los 47.757 registros válidos, la proporción estimada de Es “CENTER_OF_SECTION” es \(\hat p = 0.556\) (55.6%). La prueba Z para una proporción, contrastada contra el valor conjeturado \(p_0 = 0.556\), arrojó un estadístico de 0.001 con valor p de 0.9992, por lo que al 5% de significancia se acepta el modelo Bernoulli(p0) conjeturado. El intervalo de confianza al 95% para \(p\) (Wilson) es [0.5515, 0.5605].


Autor: GRUPO — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset