library(readr); library(dplyr); library(gt)
cat("Librerías cargadas correctamente.\n")
## Librerías cargadas correctamente.
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
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”.
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 | |||
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)
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.
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 | |
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)
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 | |
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 | ||
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