1 Introducción y Metodología

Este informe analiza la variable Latitud Base (latitude_base_dd) en pozos de Brasil (2018), segmentados en Tramo 1 (5° a -15°) y Tramo 2 (-15° a -30°). Utilizando los test de Pearson y Chi-cuadrado, se evalúa y determina el modelo matemático ideal para describir la densidad de pozos en cada sector.

2 Tabla de Distribución de Frecuencia

Debido a la gran extensión geográfica de las cuencas de Brasil, los datos reflejan una alta dispersión. Se agrupan en intervalos de 5 grados para capturar de manera óptima la distribución espacial de la infraestructura petrolera del país.

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 latitudinal real de Brasil
Datos <- Datos_Brutos %>%
  clean_names() %>% 
  mutate(latitude_base_dd = as.numeric(gsub(",", ".", as.character(latitude_base_dd)))) %>%
  filter(!is.na(latitude_base_dd) & latitude_base_dd >= -30 & latitude_base_dd <= 5)

X <- Datos$latitude_base_dd

# TABLA DE FRECUENCIAS GENERAL (De Norte a Sur: 5 a -30)
breaks_lat  <- seq(5, -30, by = -5)
h_total     <- hist(X, breaks = sort(breaks_lat), plot = FALSE)

# Organizamos las frecuencias para mantener el sentido geográfico de los intervalos
TDF_General <- data.frame(
  Rango = paste(head(breaks_lat, -1), tail(breaks_lat, -1), sep = " a "),
  ni    = rev(h_total$counts),
  hi    = round((rev(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: **Latitud Base (Grados Decimales)**")
  ) %>%
  tab_source_note(source_note = "Fuente: Tabela de Poços 2018") %>%
  cols_label(
    Rango = "Latitud 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: Latitud Base (Grados Decimales)
Latitud Base (DD) Frecuencia Absoluta (ni) Frecuencia Relativa (hi%)
5 a 0 122 0.41
0 a -5 2622 8.87
-5 a -10 8583 29.04
-10 a -15 11771 39.82
-15 a -20 2069 7.00
-20 a -25 3933 13.31
-25 a -30 460 1.56
TOTAL 29560 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 (Latitud) 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 Latitud 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 latitud 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:

  • Sector Norte / Nordeste (5° a -15°): Concentra pozos de menor dispersión ubicados en las cuencas terrestres históricas del noreste y los yacimientos iniciales de la margen ecuatorial.

  • Sector Sureste / Sur (-15° a -30°): Representa un volumen masivo de pozos perforados costa afuera (offshore), concentrados fuertemente en las provincias presalinas más productivas del país.

Fijamos el límite de segmentación operacional e industrial en los -15° de latitud para aislar ambos comportamientos espaciales.

4 Agrupación 1 (-7.5° a 5°)

Al evaluar la bimodalidad del sector norte, se identifica un comportamiento homogéneo y decreciente a partir de la latitud -7.5°. Por ello, se aísla este subtramo crítico (-7.5° a 5°) para modelar de forma precisa la dispersión de pozos mediante una Distribución Exponencial. Para garantizar que los datos sean estrictamente positivos, aplicamos una traslación sumando 7.501 unidades al intervalo.

X1 <- X[!is.na(X) & X >= -7.5 & X <= 5]

if(length(X1) > 0) {

hist(
    X1,
    breaks = seq(-7.5, 5, by = 2.5),
    col    = col_barras,
    border = "white",
    main   = "Histograma Subtramo Ajustado (-7.5° a 5°)",
    xlab   = "Latitud Base (Grados Decimales)",
    ylab   = "Frecuencia"
  )
  
} else {
  print("¡Cuidado! No hay datos en el rango seleccionado después de la limpieza.")
}

4.1 Conjetura del Modelo

Aplicamos la traslación lineal positiva (X1 + 7.501) y estimamos el parámetro de tasa (rate) de la distribución Exponencial por el método de máxima verosimilitud.

if(length(X1) > 1) {
  X1_trans <- X1 + 7.501
  
  fit_exp1 <- suppressWarnings(fitdistr(X1_trans, "exponential"))
  rate_e1  <- fit_exp1$estimate["rate"]
  
  breaks_s1 <- seq(-7.5, 5, by = 2.5)
  h1  <- hist(X1, breaks = breaks_s1, plot = FALSE)
  Fo1 <- h1$counts / sum(h1$counts)
  
  breaks_trans1 <- breaks_s1 + 7.501
  Fe1           <- diff(pexp(breaks_trans1, rate = rate_e1))
  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 Exponencial Ajustado (-7.5° a 5°)",
    cex.main  = 1.1,
    ylab      = "Probabilidad",
    xlab      = "Rangos de Latitud (DD)",
    las       = 2,
    cex.names = 0.65
  )
  legend("topright", legend = c("Real", "Modelo Exponencial"),
          fill = c(col_barras, "#F2F3F4"), border = "white", bty = "n")
  
} else {
  message("No hay datos suficientes en el subtramo para calcular el modelo.")
}

4.2 Test de Pearson

Evaluamos el coeficiente de correlación lineal entre las frecuencias observadas en tu gráfica y las calculadas analíticamente por la curva exponencial.

plot(
  Fo1, Fe1,
  main = "Gráfica N°3: Correlación de Pearson — Subtramo Exponencial",
  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] 99.47542

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.1111773
vc1  <- qchisq(0.95, length(Fo1) - 1)
vc1
## [1] 9.487729

4.4 Tabla Resumen de Test

tabla_1 <- data.frame(
  Modelo       = "Exponencial",
  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 Subtramo (Exponencial)**")) %>%
  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 Subtramo (Exponencial)
Modelo Pearson Chi_Cuadrado Umbral Decision
Exponencial 99.48 0.1112 9.4877 Modelo aceptado
Autor: Leonardo Ruiz

4.5 Cálculo de Probabilidades

¿Cuál es la probabilidad matemática de encontrar un pozo en este subtramo con una latitud menor a -2.5°?

p_25 <- pexp(-2.5 + 7.501, rate = rate_e1)
p_25
## [1] 0.8586404

La probabilidad es del 85.86%.

5 Agrupación 2 (-15° a -30°)

Analizamos la segunda etapa estructural aplicando un ajuste a la Distribución Beta. Debido a que la muestra del sureste presenta un fuerte repunte y sesgo debido a la concentración masiva de pozos marinos en los ejes de Santos y Campos, se requiere la flexibilidad de la distribución Beta, aplicada mediante la normalización del intervalo [-30, -15], para modelar con precisión esta marcada asimetría.

X2 <- X[X >= -30 & X < -15]
X2 <- X2[!is.na(X2)]

breaks_seccion2 <- seq(-30, -15, by = 2.5)

hist(
  X2,
  breaks = breaks_seccion2,
  col    = col_barras,
  border = "white",
  main   = "Histograma Sección 2 (-15° a -30°)",
  xlab   = "Latitud 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 de aguas profundas del sureste.

X2_norm <- (X2 - (-30)) / (-15 - (-30))
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 - (-30)) / (-15 - (-30))
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 Latitud Base (-15° a -30°)",
  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] 95.66075

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.03903695
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 95.66 0.039 11.0705 Modelo aceptado
Autor: Leonardo Ruiz

5.5 Cálculo de Probabilidades

De cada 1,000 pozos analizados en este segundo tramo latitudinal (-15° a -30°), ¿cuántos se estimó matemáticamente que pertenecen al intervalo geográfico crítico entre los -22° y -24° de latitud base?

lim_inf_norm <- (-24 - (-30)) / (-15 - (-30))
lim_sup_norm <- (-22 - (-30)) / (-15 - (-30))

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.2676103
cantidad_estimada <- round(p_critica * 1000, 0)

El modelo Beta estimó que, por cada 1,000 pozos del sureste, aproximadamente 268 se encuentran en el intervalo geográfico de alta densidad operativa entre los -22° y -24° de latitud (zona núcleo de la Cuenca de Campos y Santos).

6 Conclusiones

El análisis segmentado e inferencial de la variable Latitud Base permite concluir lo siguiente:

  • Tramo -7.5° a 5° (Sector Norte/Nordeste): Tras aislar el comportamiento decreciente de los datos, la Distribución Exponencial (aplicada mediante traslación lineal) demostró ser el modelo óptimo. Su estructura capturó con precisión la dispersión gradual de los pozos terrestres, maximizando el coeficiente de Pearson.

  • Tramo -15° a -30° (Sector Sureste/Sur): Para los yacimientos de la costa sur, la Distribución Beta (con normalización de rango) fue el modelo idóneo. Su flexibilidad matemática asimiló con éxito la fuerte asimetría y concentración de pozos en los megacampos marinos, validando estadísticamente el ajuste.