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.
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.
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.
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_GEn 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)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"
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 |
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.
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)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"
)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.
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)## [1] 98.98376
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
## Valor Crítico: 5.9915
## ¿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.
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 | ||||
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"
## [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.
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.