Modelo de Probabilidad de la Clasificación de los Pozos Petrolíferos

Introducción

La variable clasificación de los pozos petrolíferos se considera una variable cualitativa ordinal, ya que clasifica categorías no numéricas que pueden organizarse mediante un orden jerárquico basado en su frecuencia de ocurrencia. Este orden permite asignar identificadores numéricos (Xi) que representan una secuencia lógica entre las categorías, facilitando el análisis probabilístico y la comparación entre los valores observados y los estimados por el modelo geométrico.

1 Librerias

La preparación del entorno analítico y la correcta ejecución del modelo requieren la habilitación de paquetes especializados. Se emplea dplyr para la limpieza y recodificación de las bases de datos; tidyr y ggplot2 para la reestructuración y construcción de las gráficas probabilísticas comparativas; y gt para garantizar que la presentación de las matrices estadísticas cumpla con un formato académico estandarizado.

library(dplyr)
library(gt)
library(tidyr)
library(ggplot2)

2 Cargar datos

La evaluación cuantitativa arranca con la lectura del documento matriz. Este paso conserva el formato original de los registros y sus metadatos, facilitando la integración de los parámetros operativos y asegurando la integridad de la base empírica para la posterior inferencia probabilística.

3 Extrae la variable

Para focalizar el análisis estadístico, se aísla la variable categórica de interés principal (CATEGORIA). Esta extracción permite estructurar los datos operacionales de forma aislada para su posterior tabulación y jerarquización paramétrica.

clasif_pozo <-Datos$CATEGORIA
TDFClasificación_G <- as.data.frame(table(clasif_pozo))
TDFClasificación_G

4 Conteo

En esta etapa se procesa la tabulación inicial. Dado que las nomenclaturas originales están en portugués, se aplica un proceso de traducción. Adicionalmente, se ejecuta una recodificación estructurada, agrupando las tipologías en macro-categorías (Desarrollo, Descubrimiento, Operación, etc.) que simplifican el modelado probabilístico y enriquecen la interpretación del ciclo de vida del pozo.

TDFClasificación_G$clasif_pozo <- recode(TDFClasificación_G$clasif_pozo,
"Desenvolvimento"      = "Desarrollo",
"Especial"             = "Especial",
"Estratigráfico"       = "Estratigráfico",
"Extensão"             = "Extensión",
"Injeção"              = "Inyección",
"Jazida Mais Profunda" = "Yacimiento más profundo",
"Jazida Mais Rasa"     = "Yacimiento más somero",
"Pioneiro"             = "Pionero",
"Pioneiro Adjacente"   = "Pionero adyacente"
)
head(TDFClasificación_G)

4.1 Agrupación de categorías

Las clasificaciones se agrupan en categorías más generales para simplificar el análisis estadístico.

  • Desarrollo de Campo ← Desarrollo, Extensión
  • Descubrimiento ← Pionero, Pionero adyacente
  • Operación ← Especial, Inyección
  • Tipo de yacimiento ← Estratigráfico, Yacimiento más somero, Yacimiento más profundo
TDFClasificación_G$Clasificación <- ifelse(TDFClasificación_G$clasif_pozo %in% c("Desarrollo","Extensión"),
                                             "Desarrollo de Campo",
                                             ifelse(TDFClasificación_G$clasif_pozo %in% c("Pionero","Pionero adyacente"),"Descubrimiento",
                                                    ifelse(TDFClasificación_G$clasif_pozo %in% c("Especial","Inyección"),"Operación",
                                                           ifelse(TDFClasificación_G$clasif_pozo %in% c("Estratigráfico", "Yacimiento más somero", "Yacimiento más profundo"), "Tipo de yacimiento","Otros"))))
head(TDFClasificación_G$Clasificación)
## [1] "Desarrollo de Campo" "Operación"           "Tipo de yacimiento" 
## [4] "Desarrollo de Campo" "Operación"           "Tipo de yacimiento"

5 Tabla de frecuencia

La consolidación de los datos procesados se presenta a través de una matriz empírica de distribución. Este cuadro resume las frecuencias absolutas (\(n_i\)) y relativas (\(h_i\), \(f_i\)), proporcionando el marco referencial observado (realidad) que será contrastado frente al modelo teórico propuesto.

TDFClasificación_G$Freq <- as.numeric(as.character(TDFClasificación_G$Freq))

TDFClasificación_G1 <- TDFClasificación_G %>%
group_by(Clasificación) %>%
summarise(
  ni = sum(Freq),
  hi = round(sum(Freq) / sum(TDFClasificación_G$Freq)*100, 5))

TDFClasificación_G1 <- data.frame(TDFClasificación_G1)

TDFClasificación_G1$fi <- TDFClasificación_G1$ni / sum(TDFClasificación_G1$ni)

TDFClasificación_G1 <- TDFClasificación_G1[, c("Clasificación", "ni", "hi", "fi")]

total_ni <- sum(TDFClasificación_G1$ni)
total_hi <- sum(TDFClasificación_G1$hi)
total_fi <- sum(TDFClasificación_G1$fi)

TDFClasificación_G1.1 <- rbind(TDFClasificación_G1, data.frame(
  Clasificación = "Total",
  ni            = total_ni,
  hi            = total_hi,
  fi            = total_fi
))
print(TDFClasificación_G1.1)
##         Clasificación    ni        hi         fi
## 1 Desarrollo de Campo 20578  69.57904 0.69579036
## 2      Descubrimiento  4882  16.50719 0.16507185
## 3           Operación  3609  12.20287 0.12202874
## 4  Tipo de yacimiento   506   1.71090 0.01710904
## 5               Total 29575 100.00000 1.00000000
gt(TDFClasificación_G1.1) %>%
  tab_header(
    title    = md("**DISTRIBUCIÓN DE FRECUENCIAS DE POZOS PETROLEROS DE BRASIL**"),
    subtitle  = "Distribución de la clasificación de pozos petrolíferos en Brasil"
  ) %>%
  tab_spanner(
    label   = md("**Frecuencia Relativa**"),
    columns = c(hi, fi)
  ) %>%
  cols_label(
    ni = md("**ni**"),
    hi = md("Porcentual (%)"),
    fi = md("Fracción")
  ) %>%
  fmt_number(columns = hi, decimals = 2) %>%
  fmt_number(columns = fi, decimals = 4) %>%
  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_style(
    style     = list(cell_fill(color = "#2E4053"),
                     cell_text(color = "white", weight = "bold")),
    locations = cells_column_spanners()
  ) %>%
  tab_style(
    style     = list(cell_fill(color = "#D5D8DC"),
                     cell_text(weight = "bold", color = "#2E4053")),
    locations = cells_body(rows = nrow(TDFClasificación_G1.1))
  ) %>%
  tab_options(
    table.border.top.color          = "#2E4053",
    table.border.bottom.color       = "#2E4053",
    column_labels.border.bottom.color = "#2E4053",
    data_row.padding                = px(6),
    table.font.size                 = px(13)
  )
DISTRIBUCIÓN DE FRECUENCIAS DE POZOS PETROLEROS DE BRASIL
Distribución de la clasificación de pozos petrolíferos en Brasil
Clasificación ni
Frecuencia Relativa
Porcentual (%) Fracción
Desarrollo de Campo 20578 69.58 0.6958
Descubrimiento 4882 16.51 0.1651
Operación 3609 12.20 0.1220
Tipo de yacimiento 506 1.71 0.0171
Total 29575 100.00 1.0000

6 Gráficas

La visualización de los estadísticos es fundamental para identificar patrones distributivos. A continuación, se grafica la magnitud empírica observada y se superpone la parametrización de un modelo probabilístico geométrico.

6.1 Diagramas de Barras

Se representa gráficamente el volumen absoluto de pozos agrupados por clasificación operativa, evidenciando visualmente el sesgo de la industria hacia fases maduras de desarrollo.

TDFClasificación_G2 <- TDFClasificación_G1.1[TDFClasificación_G1.1$Clasificación != "Total", ]

bp <- barplot(TDFClasificación_G2$ni,
        main = "Gráfica N°1: Distribución en Cantidad de la Clasificación General de los pozos petroliferos",
        ylab = "Cantidad",
        col = "#2E4053", names.arg = TDFClasificación_G2$Clasificación,
        las = 2, cex.names = 0.7, cex.axis = 0.8, cex.main = 0.9, xaxt = "n",)
text(x = bp,
     y = par("usr")[3] - 1000, 
     labels = TDFClasificación_G2$Clasificación,
     srt = 45,adj = 1, xpd = TRUE, cex = 0.9)

mtext("Clasificación General", side = 1, line = 7, adj = 0.4, cex = 1)

6.2 Conjetura de Modelo Geométrico

Se postula un modelo estocástico geométrico ordenando las clasificaciones de mayor a menor frecuencia. El parámetro de éxito (\(p\)) se ajusta empleando el método de los momentos (inverso de la media observada), permitiendo simular y comparar el vector de probabilidades esperado frente al comportamiento real de la actividad petrolera.

library(tidyr)
library(ggplot2)

# Crear variable ID
TDFClasificación_G2 <- TDFClasificación_G2 %>%
arrange(desc(ni))
TDFClasificación_G2$ID <- 1:nrow(TDFClasificación_G2)

# Estimación del parámetro p
media_observada <- sum(TDFClasificación_G2$ID * TDFClasificación_G2$ni) / sum(TDFClasificación_G2$ni)
p_estimado <- 1 / media_observada

# Probabilidades del modelo geométrico
prob_geom <- p_estimado * (1 - p_estimado)^(TDFClasificación_G2$ID - 1)

# Normalización
prob_geom <- prob_geom / sum(prob_geom)

TDFClasificación_G2$hi_modelo <- prob_geom * 100

# Preparar datos para gráfico
df_comparativo_hi <- pivot_longer(
  TDFClasificación_G2,
  cols = c("hi", "hi_modelo"),
  names_to = "Origen",
  values_to = "Valor"
)

df_comparativo_hi$Origen <- ifelse(df_comparativo_hi$Origen == "hi", "Realidad", "Modelo")

# Gráfica comparativa
ggplot(df_comparativo_hi, aes(x = Clasificación, y = Valor, fill = Origen)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  scale_fill_manual(values = c("Modelo" = "skyblue", "Realidad" = "#2E4053")) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(
    title = "Modelo de probabilidad geométrico de la Clasificación de Pozos",
    subtitle = paste("p estimado =", round(p_estimado,4)),
    x = "Clasificación",
    y = "Probabilidad (%)",
    fill = "Origen"
  )

7 Indicadores Estadísticos

Para avalar científicamente la aplicabilidad del modelo geométrico, se realizan pruebas de hipótesis formales que cuantifican la varianza y la correlación entre la distribución empírica observada y las probabilidades esperadas.

7.1 Test de Pearson

Se traza la dispersión lineal y se calcula el coeficiente de correlación de Pearson (\(r\)), determinando la intensidad paramétrica del ajuste del modelo respecto a los datos censados.

Fo_Geo <- TDFClasificación_G2$hi
Fe_Geo <- TDFClasificación_G2$hi_modelo

plot(Fo_Geo, Fe_Geo,
     main = "Gráfica N°5: Correlación del Modelo Observado y Esperado de la Clasificación de los Pozos Petrolíferos",
     cex.main = 0.78,
     xlab = "Frecuencia Observada (hi)",
     ylab = "Frecuencia Esperada",
     pch = 19, col = "#2E4053")
abline(lm(Fe_Geo ~ Fo_Geo), col = "red", lwd = 2)

#  Cálculo de la Correlación de Pearson
Correlacion_Geo <- cor(Fo_Geo, Fe_Geo) * 100
Correlacion_Geo
## [1] 98.98376

7.2 Test Chi-Cuadrado

Para mitigar la hipersensibilidad intrínseca del estadístico Chi-Cuadrado frente a muestras de gran tamaño (N), se aplica el contraste sobre una base probabilística normalizada al 100% (empleando \(h_i\)), evaluando el ajuste estocástico con un nivel de confianza del 95%.

# Se normaliza la muestra a N=100 utilizando las frecuencias relativas (hi).
Fo_Norm <- TDFClasificación_G2$hi        
Fe_Norm <- TDFClasificación_G2$hi_modelo 

# Cálculo del estadístico con muestra normalizada
x2_Norm <- sum(((Fo_Norm - Fe_Norm)^2) / Fe_Norm)

# Grados de libertad 
gl_Norm <- length(Fo_Norm) - 2

# Valor crítico con 95% de confianza 
vc_Norm <- qchisq(0.95, gl_Norm)

# Resultados
cat("Chi-Cuadrado Normalizado:", round(x2_Norm, 4), "\n")
## Chi-Cuadrado Normalizado: 5.5158
cat("Valor Crítico:", round(vc_Norm, 4), "\n")
## Valor Crítico: 5.9915
cat("¿El modelo geométrico es aceptado?:", x2_Norm < vc_Norm, "\n")
## ¿El modelo geométrico es aceptado?: TRUE

Debido al gran tamaño de la muestra, el test Chi-Cuadrado tradicional resulta muy sensible. Por ello se utilizó una versión normalizada con frecuencias relativas (N = 100) para evaluar el ajuste del modelo.

7.3 Tabla Resumen del Test

Matriz consolidada de los fallos estadísticos y métricas resultantes aplicadas para validar la conjetura del modelo.

tabla_resumen_C <- data.frame(
  Variable = "Clasificación General",
  Pearson = round(Correlacion_Geo, 2),
  Chi2 = round(x2_Norm, 2),
  Umbral = round(vc_Norm, 2),
  Resultado = x2_Norm < vc_Norm
)

tabla_resumen_C %>% 
  gt() %>% 
  cols_label(
    Variable = ("Variable"),       
    Pearson  = "Test Pearson (%)",
    Chi2     = ("Chi Cuadrado"), 
    Umbral   = "Umbral de Aceptación",
    Resultado = "Resultado"
  ) %>%
  tab_header(
    title = md("**Tabla N°4: Resumen del Test de Bondad al Modelo de Probabilidad**")) %>%
  tab_source_note(
    source_note = "Autor: Anahi Macias") %>%
  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°4: Resumen del Test de Bondad al Modelo de Probabilidad
Variable Test Pearson (%) Chi Cuadrado Umbral de Aceptación Resultado
Clasificación General 98.98 5.52 5.99 TRUE
Autor: Anahi Macias

8 Cálculo de Probabilidades

Una vez validado el modelo e interpretada la distribución, se resuelven consultas probabilísticas y de magnitud aplicadas al ecosistema analizado.

¿Cuál es la probabilidad de que un pozo petrolífero seleccionado al azar pertenezca a la categoría Desarrollo de campo?

prob_desarrollo <- TDFClasificación_G2$hi[TDFClasificación_G2$Clasificación == "Desarrollo de Campo"]

prob_desarrollo
## [1] 69.57904

La probabilidad estimada indica que aproximadamente 69.57% de los pozos pertenecen a la categoría Desarrollo de Campo, siendo la clasificación más frecuente..

¿Cuántos pozos petrolíferos pertenecen a la categoría con mayor frecuencia en la clasificación general?

max_pozos <- max(TDFClasificación_G2$ni)

categoria_max <- TDFClasificación_G2$Clasificación[TDFClasificación_G2$ni == max_pozos]

categoria_max
## [1] "Desarrollo de Campo"
max_pozos
## [1] 20578

En la base de datos analizada, aproximadamente 20578 pozos pertenecen a la categoría Desarrollo de Campo, siendo la clasificación con mayor frecuencia.

9 Conclusión

La variable de clasificación operativa de los pozos exhibe un decaimiento estructural asimétrico que converge exitosamente con las propiedades de un modelo de probabilidad geométrico (estimado a través del parámetro \(p\) y corroborado por robustas pruebas de correlación y bondad de ajuste normalizadas). Esta caracterización estocástica facilita la simulación predictiva de inventarios futuros y explica cuantitativamente el estado predominante del sector extractivo en Brasil.