1 Introducción y Metodología

El presente informe estadístico analiza la variable Lámina de Agua (en metros) de pozos petroleros de Brasil, aplicando técnicas descriptivas e inferenciales avanzadas de bondad de ajuste.

2 Tabla de Distribución de Frecuencia

Dado que la lámina de agua de los pozos abarca un rango muy amplio (desde pozos terrestres hasta aguas ultraprofundas de más de 3,000 metros), agrupamos los datos en intervalos de 500 metros para visualizar la tendencia estructural y facilitar el cálculo de probabilidades en los modelos continuos.

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

Datos <- Datos_Brutos %>%
  clean_names() %>% 
  mutate(lamina_d_agua_m = as.numeric(as.character(lamina_d_agua_m))) %>%
  filter(!is.na(lamina_d_agua_m) & lamina_d_agua_m >= 0 & lamina_d_agua_m <= 3500)

X <- Datos$lamina_d_agua_m

# TABLA DE FRECUENCIAS GENERAL
breaks_lamina <- seq(0, 3500, by = 500)
h_total       <- hist(X, breaks = breaks_lamina, plot = FALSE)

TDF_General <- data.frame(
  Rango = paste(head(breaks_lamina, -1), tail(breaks_lamina, -1), sep = "-"),
  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: **Lámina de Agua (m)**")
  ) %>%
  tab_source_note(source_note = "Fuente: Tabela de Poços 2018") %>%
  cols_label(
    Rango = "Lámina de Agua (m)",
    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: Lámina de Agua (m)
Lámina de Agua (m) Frecuencia Absoluta (ni) Frecuencia Relativa (hi%)
0-500 11037 81.96
500-1000 713 5.29
1000-1500 888 6.59
1500-2000 500 3.71
2000-2500 286 2.12
2500-3000 42 0.31
3000-3500 0 0.00
TOTAL 13466 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 de Lámina de Agua de Pozos Petroleros de 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.9)
title(xlab = "Intervalos de Lámina de Agua (m)", line = 4)
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 variable Lámina de Agua posee una distribución altamente bimodal y segmentada por la naturaleza física del entorno:

  • Fase Terrestre y Somera (0–50 m): Caracterizada por la mayor concentración de pozos en cuencas terrestres históricas y plataformas costeras someras convencionales.

  • Fase de Aguas Profundas y Ultraprofundas (50–3,500 m): Una distribución asimétrica continua con una cola extendida hacia la derecha que responde al desarrollo del Presalt y de aguas profundas.

Por lo tanto, segmentamos de forma óptima fijando el umbral de transición en los 50 metros para aislar el efecto del desarrollo terrestre y modelar adecuadamente el desafío marítimo.

4 Agrupación 1 (0–300 m)

En este bloque analizamos si las láminas de agua menores o iguales a 300 metros siguen un comportamiento ajustado a la Distribución Exponencial.

X1 <- X[!is.na(X) & X <= 300]

if(length(X1) > 0) {

hist(
    X1,
    breaks = seq(0, 300, by = 50),
    col    = col_barras,
    border = "white",
    main   = "Histograma Sección 1 (0–300 m)",
    xlab   = "Lámina de Agua (m)",
    ylab   = "Frecuencia"
  )
  
} else {
  print("¡Cuidado! No hay datos en el rango de 0 a 300 después de la limpieza.")
}

4.1 Conjetura del Modelo

Calculamos el parámetro fundamental de la distribución exponencial: la Tasa (rate) de este tramo, para generar una curva teórica y compararla con los datos reales. Dado que las frecuencias caen de manera abrupta desde el valor cero, este modelo es idóneo para capturar dicho decaimiento.

if(length(X1) > 1) {
  rate_e1 <- 1 / mean(X1)
  h1  <- hist(X1, breaks = seq(0, 300, by = 50), plot = FALSE)
  Fo1 <- h1$counts / sum(h1$counts)
  Fe1 <- diff(pexp(seq(0, 300, by = 50), rate = rate_e1))
  Fe1 <- Fe1 / sum(Fe1)
  
  # Gráfica
  barplot(
    rbind(Fo1, Fe1),
    beside    = TRUE,
    col       = c(col_barras, "#F2F3F4"),
    border    = "black",
    names.arg = paste0(head(seq(0, 300, by = 50), -1), "-", tail(seq(0, 300, by = 50), -1)),
    main      = "Gráfica N°2: Modelo de Probabilidad Exponencial (0–300 m)",
    cex.main  = 0.85,
    ylab      = "Probabilidad",
    xlab      = "Rangos (m)"
  )
  legend("topright", legend = c("Real", "Modelo Exponencial"),
          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

Aplicamos el coeficiente de correlación para medir qué tan fuerte es la relación lineal entre la frecuencia observada (realidad) y la esperada (modelo Exponencial).

plot(
  Fo1, Fe1,
  main = "Gráfica N°3: Correlación de Pearson — Sección 1 (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.41081

4.3 Test de Chi-Cuadrado

Realizamos la prueba de bondad de ajuste de Chi-Cuadrado (χ²). Esta prueba indica si las diferencias entre el modelo y la realidad son aceptables (modelo válido) o si el modelo debe rechazarse.

x2_1 <- sum((Fo1 - Fe1)^2 / Fe1)
x2_1
## [1] 4.182982
vc1  <- qchisq(0.95, length(Fo1) - 1)
vc1
## [1] 11.0705

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 Sección 1**")) %>%
  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
Modelo Pearson Chi_Cuadrado Umbral Decision
Exponencial 99.41 4.183 11.0705 Modelo aceptado
Autor: Leonardo Ruiz

4.5 Cálculo de Probabilidades

¿Cuál fue la probabilidad calculada de que un pozo tenga una lámina de agua menor a 150 metros en este primer tramo?

p_150 <- pexp(150, rate = rate_e1)
p_150
## [1] 0.9983378

La probabilidad es del 99.83%.

5 Agrupación 2 (300–3,500 m)

Analizamos la segunda etapa probando un ajuste a la Distribución Log-Normal, ideal para modelar fenómenos físicos con sesgo positivo.

X2 <- X[X > 300 & X <= 3500]
X2 <- X2[!is.na(X2)]

breaks_seccion2 <- seq(300, 3500, by = 400)

hist(
  X2,
  breaks = breaks_seccion2,
  col    = col_barras,
  border = "white",
  main   = "Histograma Sección 2 (300–3,500 m)",
  xlab   = "Lámina de Agua (m)",
  ylab   = "Frecuencia"
)

5.1 Conjetura del Modelo (Log-Normal)

La distribución Log-Normal es ampliamente utilizada en la industria petrolera para modelar variables cuya tasa de crecimiento es proporcional al valor actual, lo que permite un ajuste preciso en ambientes de profundidad variable. Estimamos los parámetros (meanlog, sdlog) mediante máxima verosimilitud.

fit_ln <- fitdistr(X2, "lognormal")
m_log  <- fit_ln$estimate["meanlog"]
s_log  <- fit_ln$estimate["sdlog"]

h2  <- hist(X2, breaks = breaks_seccion2, plot = FALSE)
Fo2 <- h2$counts / sum(h2$counts)
Fe2 <- diff(plnorm(breaks_seccion2, meanlog = m_log, sdlog = s_log))
Fe2 <- Fe2 / sum(Fe2) 

etiquetas_prof <- paste0(head(breaks_seccion2, -1), "-", tail(breaks_seccion2, -1))

barplot(
  rbind(Fo2, Fe2),
  beside    = TRUE,
  col       = c(col_barras, "#F2F3F4"),
  border    = "black",
  names.arg = etiquetas_prof,
  main      = "Gráfica N°5: Modelo Log-Normal de Lámina de Agua (300–3,500 m)",
  cex.main  = 0.85,
  ylab      = "Probabilidad",
  las       = 2,
  cex.names = 0.7
)
legend("topright", legend = c("Real", "Modelo Log-Normal"),
       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 Log-Normal.

plot(
  Fo2, Fe2,
  main = "Gráfica N°6: Correlación de Pearson — Sección 2 (Log-Normal)",
  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] 97.0866

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.05318196
vc2  <- qchisq(0.95, length(Fo2) - 1)
vc2
## [1] 14.06714

5.4 Tabla Resumen de Test

tabla_2 <- data.frame(
  Modelo       = "Log-Normal",
  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**")) %>%
  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
Modelo Pearson Chi_Cuadrado Umbral Decision
Log-Normal 97.09 0.0532 14.0671 Modelo aceptado
Autor: Leonardo Ruiz

5.5 Cálculo de Probabilidades

De cada 1,000 pozos perforados en el tramo profundo (300–3,500 m), ¿cuántos se estimó que se encuentran en el intervalo crítico de ultraprofundidad (2,000–3,500 m)?

p_ultra <- plnorm(3500, meanlog = m_log, sdlog = s_log) - plnorm(2000, meanlog = m_log, sdlog = s_log)
p_ultra
## [1] 0.1138198
cantidad_estimada <- round(p_ultra * 1000, 0)

El modelo Log-Normal estimó que, por cada 1,000 pozos de este periodo, aproximadamente 114 correspondieron al intervalo de ultraprofundidad de 2,000 a 3,500 metros.

6 Conclusiones

El análisis segmentado e inferencial de la variable Lámina de Agua nos permite concluir lo siguiente:

  • Tramo 0–300 m: La fuerte concentración inicial de pozos terrestres y someros genera un decrecimiento drástico e inmediato de las frecuencias. Este comportamiento se modeló de manera óptima bajo la distribución Exponencial, demostrando que la probabilidad disminuye de forma constante a medida que nos alejamos de la costa hacia la plataforma continental interna.

  • Tramo 300–3,500 m: Para describir la transición hacia las regiones de talud, aguas profundas y ultraprofundas del Presalt, el modelo Log-Normal resultó ser el más eficiente. Gracias a su capacidad para modelar variables con sesgo positivo, capturó con alta fidelidad la distribución natural de los tirantes de agua, superando con éxito todas las pruebas rigurosas de bondad de ajuste de Chi-Cuadrado y Pearson.