Este informe analiza la variable Longitud Base (longitude_base_dd) en pozos petroleros de Brasil (2018). La muestra se dividió en sector continental (Tramo 1: -55° a -41°) y marítimo (Tramo 2: -41° a -35°). Utilizando los test de Pearson y Chi-cuadrado, se demuestra que la Distribución Beta es el modelo ideal para describir con precisión la densidad de pozos en ambos tramos.
Dado que las cuencas sedimentarias de Brasil abarcan una vasta extensión geográfica, los datos reflejan una dispersión longitudinal considerable. Agrupamos los datos en intervalos de 2 grados para capturar de manera óptima la distribución global de la infraestructura petrolera del país según los datos oficiales.
library(tidyverse)
library(gt)
library(MASS)
if(!require(janitor)) install.packages("janitor", quiet = TRUE)
library(janitor)
# 1. Carga de datos
Datos_Brutos <- read.csv(
"C:/Users/LEO/Documents/ESTA/R/Inferencial/tabela_de_pocos_janeiro_2018.csv",
header = TRUE,
sep = ",",
dec = ".",
fileEncoding = "UTF-8"
)
# Limpieza: Reemplazamos la coma por el punto para la conversión numérica y filtramos el rango real de Brasil en el dataset
Datos <- Datos_Brutos %>%
clean_names() %>%
mutate(longitude_base_dd = as.numeric(gsub(",", ".", as.character(longitude_base_dd)))) %>%
filter(!is.na(longitude_base_dd) & longitude_base_dd >= -55 & longitude_base_dd <= -35)
X <- Datos$longitude_base_dd
# TABLA DE FRECUENCIAS GENERAL
breaks_long <- seq(-55, -35, by = 2)
h_total <- hist(X, breaks = breaks_long, plot = FALSE)
TDF_General <- data.frame(
Rango = paste(head(breaks_long, -1), tail(breaks_long, -1), sep = " a "),
ni = h_total$counts,
hi = round((h_total$counts / sum(h_total$counts)) * 100, 2)
)
totales_simplificados <- data.frame(
Rango = "TOTAL",
ni = sum(TDF_General$ni),
hi = 100.00
)
TDF_Show_Simple <- rbind(TDF_General, totales_simplificados)
TDF_Show_Simple %>%
gt() %>%
tab_header(
title = md("TABLA DE FRECUENCIAS: INFERENCIA ESTADÍSTICA"),
subtitle = md("Variable: **Longitud Base (Grados Decimales)**")
) %>%
tab_source_note(source_note = "Fuente: Tabela de Poços 2018") %>%
cols_label(
Rango = "Longitud Base (DD)",
ni = "Frecuencia Absoluta (ni)",
hi = "Frecuencia Relativa (hi%)"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
locations = cells_title(groups = c("title", "subtitle"))
) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
)
| TABLA DE FRECUENCIAS: INFERENCIA ESTADÍSTICA | ||
| Variable: Longitud Base (Grados Decimales) | ||
| Longitud Base (DD) | Frecuencia Absoluta (ni) | Frecuencia Relativa (hi%) |
|---|---|---|
| -55 a -53 | 25 | 0.09 |
| -53 a -51 | 92 | 0.32 |
| -51 a -49 | 100 | 0.35 |
| -49 a -47 | 77 | 0.27 |
| -47 a -45 | 256 | 0.88 |
| -45 a -43 | 426 | 1.47 |
| -43 a -41 | 678 | 2.34 |
| -41 a -39 | 5294 | 18.26 |
| -39 a -37 | 14283 | 49.28 |
| -37 a -35 | 7754 | 26.75 |
| TOTAL | 28985 | 100.00 |
| Fuente: Tabela de Poços 2018 | ||
A continuación, presentamos el histograma de frecuencias.
col_barras <- "#5D6D7E"
col_ejes <- "#2E4053"
par(mar = c(6, 5, 4, 2))
vals_x <- TDF_General$Rango
vals_y <- TDF_General$ni
ylim_max <- max(vals_y) * 1.1
bp <- barplot(
vals_y,
main = "Gráfica N°1: Distribución Geográfica de Pozos en Brasil",
cex.main = 0.9,
ylab = "Cantidad de Pozos",
col = col_barras, border = "white",
axes = FALSE, ylim = c(0, ylim_max), axisnames = FALSE
)
axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp, labels = vals_x, col = col_ejes, col.axis = col_ejes, las = 2, cex.axis = 0.8)
title(xlab = "Intervalos de Longitud Base (DD)", line = 5)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)
Al observar la Gráfica N°1, se evidencia que la longitud geográfica cuenta con una distribución bimodal o desplazada, reflejando las dos grandes realidades geológicas y de explotación de la industria brasileña:
Fase Continental / Interior (-55° a -41°): Concentra pozos de menor dispersión ubicados en las cuencas terrestres históricas del país.
Fase Marítima / Margen Atlántico (-41° a -35°): Representa un volumen masivo de pozos perforados costa afuera (offshore), concentrados fuertemente en las plataformas continentales más productivas de las cuencas del sureste.
Fijamos el límite de segmentación operacional e industrial en los -41° de longitud para aislar ambos comportamientos espaciales.
En este bloque analizamos si las longitudes geográficas de pozos terrestres siguen un comportamiento ajustado a la Distribución Beta. Debido a la fluctuación bimodal interna que presenta la muestra continental en este rango, se aprovecha la altísima versatilidad matemática de la distribución Beta, aplicada mediante la normalización del intervalo [-55, -41], logrando moldear de forma óptima los picos de frecuencia del bloque.
X1 <- X[!is.na(X) & X <= -41]
if(length(X1) > 0) {
hist(
X1,
breaks = seq(-55, -41, by = 2),
col = col_barras,
border = "white",
main = "Histograma Sección 1 (-55° a -41°)",
xlab = "Longitud Base (DD)",
ylab = "Frecuencia"
)
} else {
print("¡Cuidado! No hay datos en el rango seleccionado después de la limpieza.")
}
Normalizamos los datos al rango [0,1] para estimar los parámetros de forma (shape1, shape2) de la distribución Beta mediante máxima verosimilitud en este primer tramo estructural.
if(length(X1) > 1) {
# Escalamos los datos al rango estricto (0, 1) para evitar indeterminaciones matemáticas
X1_norm <- (X1 - (-55)) / (-41 - (-55))
X1_norm <- pmax(pmin(X1_norm, 0.999), 0.001)
fit_beta1 <- suppressWarnings(fitdistr(X1_norm, "beta", start = list(shape1 = 1, shape2 = 1)))
s1_b1 <- fit_beta1$estimate["shape1"]
s2_b1 <- fit_beta1$estimate["shape2"]
breaks_s1 <- seq(-55, -41, by = 2)
h1 <- hist(X1, breaks = breaks_s1, plot = FALSE)
Fo1 <- h1$counts / sum(h1$counts)
# Calculamos las probabilidades teóricas usando los límites normalizados del Tramo 1
breaks_norm1 <- (breaks_s1 - (-55)) / (-41 - (-55))
Fe1 <- diff(pbeta(breaks_norm1, shape1 = s1_b1, shape2 = s2_b1))
Fe1 <- Fe1 / sum(Fe1)
barplot(
rbind(Fo1, Fe1),
beside = TRUE,
col = c(col_barras, "#F2F3F4"),
border = "black",
names.arg = paste0(head(breaks_s1, -1), " a ", tail(breaks_s1, -1)),
main = "Gráfica N°2: Modelo Beta de Longitud Continental (-55° a -41°)",
cex.main = 1.2,
ylab = "Probabilidad",
xlab = "Rangos de Longitud (DD)",
las = 2,
cex.names = 0.55
)
legend("topleft", legend = c("Real", "Modelo Beta"),
fill = c(col_barras, "#F2F3F4"), border = "white", bty = "n")
} else {
message("No hay datos suficientes en el Tramo 1 para calcular el modelo.")
}
Evaluamos el ajuste calculando el coeficiente de correlación lineal entre las proporciones de frecuencia empíricas observadas y las esperadas analíticamente por el modelo Beta calibrado.
plot(
Fo1, Fe1,
main = "Gráfica N°3: Correlación de Pearson — Sección 1 (Beta)",
xlab = "Frecuencia Observada",
ylab = "Frecuencia Esperada",
pch = 19, col = col_barras,
xlim = c(0, max(Fo1) * 1.05),
ylim = c(0, max(Fe1) * 1.05)
)
abline(lm(Fe1 ~ Fo1 + 0), col = "red", lwd = 2)
cor1 <- cor(Fo1, Fe1) * 100
cor1
## [1] 97.60914
Aplicamos la prueba de bondad de ajuste de Chi-Cuadrado (χ²) para comprobar la validez estadística del modelo Gamma adaptado a este tramo terrestre.
x2_1 <- sum((Fo1 - Fe1)^2 / Fe1)
x2_1
## [1] 0.05690925
vc1 <- qchisq(0.95, length(Fo1) - 1)
vc1
## [1] 12.59159
tabla_1 <- data.frame(
Modelo = "Beta",
Pearson = round(cor1, 2),
Chi_Cuadrado = round(x2_1, 4),
Umbral = round(vc1, 4),
Decision = ifelse(x2_1 < vc1, "Modelo aceptado", "Modelo rechazado")
)
gt(tabla_1) %>%
tab_header(title = md("**Tabla N°2: Resumen Bondad de Ajuste Sección 1 (Beta)**")) %>%
tab_source_note(source_note = "Autor: Leonardo Ruiz") %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
locations = cells_title()
) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
) %>%
tab_options(
table.border.top.color = "#2E4053",
table.border.bottom.color = "#2E4053",
column_labels.border.bottom.color = "#2E4053",
data_row.padding = px(6))
| Tabla N°2: Resumen Bondad de Ajuste Sección 1 (Beta) | ||||
| Modelo | Pearson | Chi_Cuadrado | Umbral | Decision |
|---|---|---|---|---|
| Beta | 97.61 | 0.0569 | 12.5916 | Modelo aceptado |
| Autor: Leonardo Ruiz | ||||
¿Cuál es la probabilidad matemática estimada de que un pozo de esta sección continental cuente con una longitud base menor (más al oeste) a los -45°?
lim_45_norm <- (-45 - (-55)) / (-41 - (-55))
p_45 <- pbeta(lim_45_norm, shape1 = s1_b1, shape2 = s2_b1)
p_45
## [1] 0.4077357
La probabilidad es del 40.77%.
Analizamos la segunda etapa estructural aplicando un ajuste a la Distribución Beta. Debido a que la muestra costera y marina presenta un fuerte repunte y sesgo hacia el este debido a la forma geográfica de la plataforma brasileña, se requiere la flexibilidad de la distribución Beta, aplicada mediante la normalización del intervalo [-41, -35], para modelar con precisión esta marcada asimetría costera.
X2 <- X[X > -41 & X <= -35]
X2 <- X2[!is.na(X2)]
breaks_seccion2 <- seq(-41, -35, by = 1)
hist(
X2,
breaks = breaks_seccion2,
col = col_barras,
border = "white",
main = "Histograma Sección 2 (-41° a -35°)",
xlab = "Longitud Base (DD)",
ylab = "Frecuencia"
)
Normalizamos los datos al rango [0,1] para estimar los parámetros de forma (shape1, shape2) de la distribución Beta mediante máxima verosimilitud, permitiendo capturar el fuerte sesgo del tramo marítimo profundo.
X2_norm <- (X2 - (-41)) / (-35 - (-41))
X2_norm <- pmax(pmin(X2_norm, 0.999), 0.001)
fit_beta2 <- suppressWarnings(fitdistr(X2_norm, "beta", start = list(shape1 = 1, shape2 = 1)))
s1_b2 <- fit_beta2$estimate["shape1"]
s2_b2 <- fit_beta2$estimate["shape2"]
h2 <- hist(X2, breaks = breaks_seccion2, plot = FALSE)
Fo2 <- h2$counts / sum(h2$counts)
# Calculamos las probabilidades teóricas usando los límites normalizados
breaks_norm <- (breaks_seccion2 - (-41)) / (-35 - (-41))
Fe2 <- diff(pbeta(breaks_norm, shape1 = s1_b2, shape2 = s2_b2))
Fe2 <- Fe2 / sum(Fe2)
etiquetas_prof2 <- paste0(head(breaks_seccion2, -1), " a ", tail(breaks_seccion2, -1))
barplot(
rbind(Fo2, Fe2),
beside = TRUE,
col = c(col_barras, "#F2F3F4"),
border = "black",
names.arg = etiquetas_prof2,
main = "Gráfica N°5: Modelo Beta de Longitud Base (-41° a -35°)",
cex.main = 0.85,
ylab = "Probabilidad",
las = 2,
cex.names = 0.7
)
legend("topleft", legend = c("Real", "Modelo Beta"),
fill = c(col_barras, "#F2F3F4"), border = "white", bty = "n")
Evaluamos la Correlación de Pearson para cuantificar la relación lineal entre las frecuencias observadas y las probabilidades teóricas generadas por la distribución Beta.
plot(
Fo2, Fe2,
main = "Gráfica N°6: Correlación de Pearson — Sección 2 (Beta)",
xlab = "Frecuencia Observada",
ylab = "Frecuencia Esperada",
pch = 19, col = col_barras,
xlim = c(0, max(Fo2) * 1.05),
ylim = c(0, max(Fe2) * 1.05)
)
abline(lm(Fe2 ~ Fo2 + 0), col = "red", lwd = 2)
cor2 <- cor(Fo2, Fe2) * 100
cor2
## [1] 85.64989
Aplicamos la prueba de bondad de ajuste Chi-Cuadrado (χ²) para validar estadísticamente el modelo con un 95% de confianza.
x2_2 <- sum((Fo2 - Fe2)^2 / Fe2)
x2_2
## [1] 0.1110824
vc2 <- qchisq(0.95, length(Fo2) - 1)
vc2
## [1] 11.0705
tabla_2 <- data.frame(
Modelo = "Beta",
Pearson = round(cor2, 2),
Chi_Cuadrado = round(x2_2, 4),
Umbral = round(vc2, 4),
Decision = ifelse(x2_2 < vc2, "Modelo aceptado", "Modelo rechazado")
)
gt(tabla_2) %>%
tab_header(title = md("**Tabla N°3: Resumen Bondad de Ajuste Sección 2 (Beta)**")) %>%
tab_source_note(source_note = "Autor: Leonardo Ruiz") %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
locations = cells_title()
) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
) %>%
tab_options(
table.border.top.color = "#2E4053",
table.border.bottom.color = "#2E4053",
column_labels.border.bottom.color = "#2E4053",
data_row.padding = px(6))
| Tabla N°3: Resumen Bondad de Ajuste Sección 2 (Beta) | ||||
| Modelo | Pearson | Chi_Cuadrado | Umbral | Decision |
|---|---|---|---|---|
| Beta | 85.65 | 0.1111 | 11.0705 | Modelo aceptado |
| Autor: Leonardo Ruiz | ||||
De cada 1,000 pozos marítimos analizados en este segundo tramo estructural (-41° a -35°), ¿cuántos se estimó matemáticamente que pertenecen al intervalo geográfico crítico entre los -40° y -38° de longitud base?
lim_inf_norm <- (-40 - (-41)) / (-35 - (-41))
lim_sup_norm <- (-38 - (-41)) / (-35 - (-41))
p_critica <- pbeta(lim_sup_norm, shape1 = s1_b2, shape2 = s2_b2) - pbeta(lim_inf_norm, shape1 = s1_b2, shape2 = s2_b2)
p_critica
## [1] 0.4428549
cantidad_estimada <- round(p_critica * 1000, 0)
El modelo Beta estimó que, por cada 1,000 pozos marinos, aproximadamente 443 se encuentran en el intervalo geográfico de alta densidad operativa entre los -40° y -38° de longitud.
El Teorema del Límite Central (TLC) establece que, dada una muestra suficientemente grande (\(n > 30\)), la distribución de las medias muestrales seguirá una distribución Normal, independientemente de la forma geométrica original de la variable.Esto nos permite estimar el verdadero valor central de la Longitud Base Geográfica (\(\mu\)) del total de perforaciones en Brasil mediante intervalos robustos guiados por los postulados empíricos.Los postulados de confianza empírica determinan las siguientes coberturas:\(P(\bar{x} - E < \mu < \bar{x} + E) \approx 68\%\)\(P(\bar{x} - 2E < \mu < \bar{x} + 2E) \approx 95\%\)\(P(\bar{x} - 3E < \mu < \bar{x} + 3E) \approx 99\%\)Donde el Error Estándar (\(E\)) se define formalmente en la guía como:\[E = \frac{\sigma}{\sqrt{n}}\]
# Estadísticos muestrales reales para la Longitud Base
x_bar <- mean(X, na.rm = TRUE)
sigma_muestral <- sd(X, na.rm = TRUE)
n_tlc <- length(X)
# Cálculo del Error Estándar (E de la guía) y Margen de Error al 95% (2*E)
error_est <- sigma_muestral / sqrt(n_tlc)
margen_error_95 <- 2 * error_est
# Intervalo de Confianza dinámico al 95%
lim_inf_tlc <- x_bar - margen_error_95
lim_sup_tlc <- x_bar + margen_error_95
# Construcción de la tabla de resultados del TLC
tabla_tlc <- data.frame(
Parametro = "Longitud Base Promedio",
Lim_Inferior = lim_inf_tlc,
Media_Muestral = x_bar,
Lim_Superior = lim_sup_tlc,
Error_Estandar = paste0("+/- ", sprintf("%.4f", margen_error_95)),
Confianza = "95% (2*E)"
)
tabla_tlc %>%
gt() %>%
tab_header(
title = md("**ESTIMACIÓN DE LA MEDIA POBLACIONAL**"),
subtitle = "Aplicación del Teorema del Límite Central (TLC)"
) %>%
tab_source_note(source_note = "Análisis Geográfico Operacional — Brasil 2018") %>%
cols_label(
Parametro = "Parámetro",
Lim_Inferior = "Límite Inferior (DD)",
Media_Muestral = "Media Calculada (DD)",
Lim_Superior = "Límite Superior (DD)",
Error_Estandar = "Margen de Error (DD)",
Confianza = "Nivel de Confianza"
) %>%
cols_align(align = "center", columns = everything()) %>%
fmt_number(
columns = c(Lim_Inferior, Media_Muestral, Lim_Superior),
decimals = 4
) %>%
tab_style(
style = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
locations = cells_title(groups = c("title", "subtitle"))
) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
) %>%
tab_style(
style = list(cell_fill(color = "#E8F8F5"), cell_text(color = "#145A32", weight = "bold")),
locations = cells_body(columns = Media_Muestral)
) %>%
tab_options(
table.border.top.color = "#2E4053",
table.border.bottom.color = "#2E4053",
column_labels.border.bottom.color = "#2E4053",
data_row.padding = px(7)
)
| ESTIMACIÓN DE LA MEDIA POBLACIONAL | |||||
| Aplicación del Teorema del Límite Central (TLC) | |||||
| Parámetro | Límite Inferior (DD) | Media Calculada (DD) | Límite Superior (DD) | Margen de Error (DD) | Nivel de Confianza |
|---|---|---|---|---|---|
| Longitud Base Promedio | −38.3317 | −38.3068 | −38.2819 | +/- 0.0249 | 95% (2*E) |
| Análisis Geográfico Operacional — Brasil 2018 | |||||
La variable Longitud Base medida en grados decimales sigue un modelo Beta segmentado con parámetros de forma \(\alpha_1 =\) 1.9979 y \(\beta_1 =\) 0.766 para el tramo continental, y \(\alpha_2 =\) 2.3143 junto a \(\beta_2 =\) 2.3224 para el tramo marítimo. Gracias a esto y al Teorema del Límite Central, podemos decir que la media aritmética poblacional de la longitud se encuentra entre el valor de \(\mu \in [\) -38.33 \(;\) -38.28 \(]\), lo que afirmamos con un 95% de confianza (\(\mu =\) -38.31 \(\pm\) 0.02°), y una desviación estándar muestral de 2.12°.