1 Introducción y Metodología

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.

2 Tabla de Distribución de Frecuencia

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

3 Gráficas

3.1 Diagrama de Barras (Escala Local)

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.

4 Agrupación 1 (-55° a -41°)

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.")
}

4.1 Conjetura del Modelo

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.")
}

4.2 Test de Pearson

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

4.3 Test de Chi-Cuadrado

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

4.4 Tabla Resumen de Test

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

4.5 Cálculo de Probabilidades

¿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%.

5 Agrupación 2 (-41° a -35°)

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"
)

5.1 Conjetura del Modelo

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")

5.2 Test de Pearson

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

5.3 Test de Chi-Cuadrado

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

5.4 Tabla Resumen de Test

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

5.5 Cálculo de Probabilidades

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.

6 Teorema del Límite Central

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

7 Conclusiones

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°.