Análisis de las Condiciones Operativas de los Pozos Petrolíferos en Brasil
El presente análisis estudia la distribución de los estados operativos de los pozos petrolíferos en Brasil. A partir de los datos disponibles, se clasifican los pozos en categorías generales con el fin de analizar su frecuencia y representación porcentual. Posteriormente se utilizan tablas y gráficos para visualizar la estructura de la actividad petrolera según la condición operativa de cada pozo.
Importación del conjunto de datos y verificación de su estructura.
Obtención de la frecuencia de los estados operativos registrados.
Status <- Datos$SITUACAO
TDFSituación <- as.data.frame(table(Status))
TDFSituación
## Status
## 1
## 2 ABANDONADO AGUARDANDO ABANDONO DEFINITIVO/ARRASAMENTO
## 3 ABANDONADO AGUARDANDO REINÍCIO DE PERFURAÇÃO
## 4 ABANDONADO DEFINITIVAMENTE
## 5 ABANDONADO POR LOGÍSTICA EXPLORATÓRIA
## 6 ABANDONADO/PARADO AGUARDANDO INTERVENÇÃO PARA AVALIAÇÃO, COMPLETAÇÃO OU RESTAURAÇÃO
## 7 ARRASADO
## 8 CEDIDO PARA PRODUÇÃO DE ÁGUA
## 9 DE DESCARTE
## 10 DEVOLVIDO
## 11 EM ABANDONO
## 12 EM INTERVENÇÃO PARA AVALIAÇÃO, COMPLETAÇÃO OU RESTAURAÇÃO
## 13 EM PERFURAÇÃO
## 14 EQUIPADO AGUARDANDO INÍCIO DE INJEÇÃO
## 15 EQUIPADO AGUARDANDO INÍCIO DE PRODUÇÃO
## 16 INJETOR
## 17 OUTRO
## 18 PRODUÇÃO DE AGUA PARA INJEÇÃO
## 19 PRODUTOR
## Freq
## 1 824
## 2 3120
## 3 2
## 4 5074
## 5 719
## 6 253
## 7 2193
## 8 262
## 9 40
## 10 1446
## 11 8
## 12 2711
## 13 6
## 14 9
## 15 60
## 16 2653
## 17 96
## 18 187
## 19 9912
View(TDFSituación)
Traducción y estandarización de las categorías originales.
library(dplyr)
TDFSituación$Status[TDFSituación$Status == ""] <- "Sin registro"
TDFSituación$Status <- recode(TDFSituación$Status,
"ABANDONADO AGUARDANDO ABANDONO DEFINITIVO/ARRASAMENTO" = "En proceso de cierre definitivo",
"ABANDONADO AGUARDANDO REINÍCIO DE PERFURAÇÃO" = "En espera de reinicio de perforación",
"ABANDONADO DEFINITIVAMENTE" = "Abandonado definitivamente",
"ABANDONADO POR LOGÍSTICA EXPLORATÓRIA" = "Abandonado por logística",
"ABANDONADO/PARADO AGUARDANDO INTERVENÇÃO PARA AVALIAÇÃO, COMPLETAÇÃO OU RESTAURAÇÃO" = "Suspendido en espera de intervención",
"ARRASADO" = "Desmantelado",
"CEDIDO PARA PRODUÇÃO DE ÁGUA" = "Cedido para producción de agua",
"DE DESCARTE" = "Descartado",
"DEVOLVIDO" = "Devuelto",
"EM ABANDONO" = "En proceso de abandono",
"EM INTERVENÇÃO PARA AVALIAÇÃO, COMPLETAÇÃO OU RESTAURAÇÃO" = "En intervención activa",
"EM PERFURAÇÃO" = "En perforación",
"EQUIPADO AGUARDANDO INÍCIO DE INJEÇÃO" = "Equipado esperando inyección",
"EQUIPADO AGUARDANDO INÍCIO DE PRODUÇÃO" = "Equipado esperando producción",
"INJETOR" = "Pozo inyector",
"PRODUÇÃO DE AGUA PARA INJEÇÃO" = "Producción de agua para inyección",
"PRODUTOR" = "Pozo productor")
En este bloque se recodifican los valores originales en grupos operativos más generales.
library(dplyr)
TDFSituación <- TDFSituación %>%
mutate(Condición = case_when(
Status %in% c("En perforación", "Equipado esperando producción", "Equipado esperando inyección", "Pozo productor", "Pozo inyector", "Producción de agua para inyección") ~ "Activos y en Desarrollo",
Status %in% c("En intervención activa", "Suspendido en espera de intervención", "En espera de reinicio de perforación", "Cedido para producción de agua", "Devuelto") ~ "Suspendidos o Inactivos",
Status %in% c("En proceso de abandono", "En proceso de cierre definitivo", "Abandonado por logística") ~ "En Proceso de Abandono",
Status %in% c("Abandonado definitivamente", "Desmantelado", "Descartado") ~ "Clausura Definitiva", TRUE ~ "Sin registro"
))
head(TDFSituación$Status)
## [1] <NA> En proceso de cierre definitivo
## [3] En espera de reinicio de perforación Abandonado definitivamente
## [5] Abandonado por logística Suspendido en espera de intervención
## 19 Levels: ... Pozo productor
TDFSituación$Condición <- factor(TDFSituación$Condición,
levels = c("Activos y en Desarrollo",
"Suspendidos o Inactivos",
"En Proceso de Abandono",
"Clausura Definitiva",
"Sin registro"),
ordered = TRUE)
Se calculan las frecuencias absolutas (ni) y relativas (hi) para cada condición operativa de los pozos petrolíferos.
TDFSituación$Freq <- as.numeric(as.character(TDFSituación$Freq))
library(dplyr)
TDFSituación1 <- Datos$TDFSituación
TDFSituación1 <- TDFSituación %>%
group_by(Condición) %>%
summarise(
ni = sum(Freq),
hi = round(sum(Freq) / sum(TDFSituación$Freq)*100, 2))
TDFSituación1 <- data.frame(TDFSituación1)
Se agrega la fila acumulada y se forma la tabla final.
TDFSituación1$fi <- TDFSituación1$ni / sum(TDFSituación1$ni)
TDFSituación1 <- TDFSituación1 [, c("Condición", "ni", "hi", "fi")]
total_ni <- sum(TDFSituación1$ni)
total_hi <- sum(TDFSituación1$hi)
total_fi <- sum(TDFSituación1$fi)
TDFSituacióncompleta <- rbind(TDFSituación1, data.frame( Condición = "Total",
ni = total_ni,
hi = total_hi,
fi = total_fi))
print(TDFSituacióncompleta)
## Condición ni hi fi
## 1 Activos y en Desarrollo 12827 43.37 0.43371090
## 2 Suspendidos o Inactivos 4674 15.80 0.15803888
## 3 En Proceso de Abandono 3847 13.01 0.13007608
## 4 Clausura Definitiva 7307 24.71 0.24706678
## 5 Sin registro 920 3.11 0.03110735
## 6 Total 29575 100.00 1.00000000
Se genera un cuadro formal utilizando gt.
library(gt)
gt(TDFSituacióncompleta) %>%
tab_header(
title = md("**Cuadro No.1**"),
subtitle = "Situación de los 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(TDFSituacióncompleta))
) %>%
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)
)
| Cuadro No.1 | |||
| Situación de los pozos petrolíferos en Brasil | |||
| Condición | ni |
Frecuencia Relativa
|
|
|---|---|---|---|
| Porcentual (%) | Fracción | ||
| Activos y en Desarrollo | 12827 | 43.37 | 0.4337 |
| Suspendidos o Inactivos | 4674 | 15.80 | 0.1580 |
| En Proceso de Abandono | 3847 | 13.01 | 0.1301 |
| Clausura Definitiva | 7307 | 24.71 | 0.2471 |
| Sin registro | 920 | 3.11 | 0.0311 |
| Total | 29575 | 100.00 | 1.0000 |
Este gráfico muestra la cantidad de pozos por categoría, sin incluir el total.
TDFSituaciónfinal <- TDFSituacióncompleta[TDFSituacióncompleta$Condición != "Total", ]
par(mar = c(9, 4, 4, 2))
bp <- barplot(TDFSituaciónfinal$hi,
main = "Gráfica N°1: Distribución Porcentual de la Clasificación General",
ylab = "Porcentaje",
col = "#2E4053",
xaxt = "n",
cex.axis = 0.8, cex.main = 0.9)
text(x = bp, y = -1500,
labels = TDFSituaciónfinal$Condición,
srt = 45, adj = 1, xpd = TRUE, cex = 0.8)
mtext("Condición", side = 1, line = 6, cex = 1)
Se propone un modelo geométrico ordenando las condiciones por frecuencia descendente.
library(tidyr)
library(ggplot2)
library(dplyr)
TDFSituaciónfinal <- TDFSituacióncompleta[TDFSituacióncompleta$Condición != "Total", ]
TDFSituaciónfinal$ni <- as.numeric(TDFSituaciónfinal$ni)
TDFSituaciónfinal$hi <- as.numeric(TDFSituaciónfinal$hi)
TDFSituaciónfinal <- TDFSituaciónfinal %>%
arrange(desc(ni))
TDFSituaciónfinal$ID <- 1:nrow(TDFSituaciónfinal)
# Estimación del parámetro p por método de momentos
media_observada <- sum(TDFSituaciónfinal$ID * TDFSituaciónfinal$ni) / sum(TDFSituaciónfinal$ni)
p_estimado <- 1 / media_observada
# Probabilidades del modelo geométrico
prob_geom <- p_estimado * (1 - p_estimado)^(TDFSituaciónfinal$ID - 1)
prob_geom <- prob_geom / sum(prob_geom)
TDFSituaciónfinal$hi_modelo <- prob_geom * 100
# Gráfico comparativo observado vs modelo
df_comparativo <- pivot_longer(
TDFSituaciónfinal,
cols = c("hi", "hi_modelo"),
names_to = "Origen",
values_to = "Valor"
)
df_comparativo$Origen <- ifelse(df_comparativo$Origen == "hi", "Realidad", "Modelo")
ggplot(df_comparativo, aes(x = Condició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 = "Gráfica N°2: Modelo de Probabilidad Geométrico de la Situación de Pozos",
subtitle = paste("p estimado =", round(p_estimado, 4)),
x = "Condición Operativa",
y = "Probabilidad (%)",
fill = "Origen"
)
Se calcula la correlación de Pearson entre las frecuencias observadas y las estimadas.
Fo_Geo <- TDFSituaciónfinal$hi
Fe_Geo <- TDFSituaciónfinal$hi_modelo
plot(Fo_Geo, Fe_Geo,
main = "Gráfica N°3: Correlación del Modelo Observado y Esperado\nde la Situación Operativa de los Pozos Petrolíferos",
cex.main = 0.78,
xlab = "Frecuencia Observada (hi)",
ylab = "Frecuencia Esperada (hi modelo)",
pch = 19, col = "#2E4053")
abline(lm(Fe_Geo ~ 0 + Fo_Geo), col = "red", lwd = 2)
Correlacion_Geo_S <- cor(Fo_Geo, Fe_Geo) * 100
Correlacion_Geo_S
## [1] 98.49423
Se normaliza a N=100 con frecuencias relativas para evitar hipersensibilidad por el gran tamaño muestral.
Fo_Norm <- TDFSituaciónfinal$hi
Fe_Norm <- TDFSituaciónfinal$hi_modelo
x2_Norm_S <- sum(((Fo_Norm - Fe_Norm)^2) / Fe_Norm)
gl_Norm_S <- length(Fo_Norm) - 2
vc_Norm_S <- qchisq(0.95, gl_Norm_S)
cat("Chi-Cuadrado Normalizado:", round(x2_Norm_S, 4), "\n")
## Chi-Cuadrado Normalizado: 6.6299
cat("Valor Crítico:", round(vc_Norm_S, 4), "\n")
## Valor Crítico: 7.8147
cat("¿El modelo geométrico es aceptado?:", x2_Norm_S < vc_Norm_S, "\n")
## ¿El modelo geométrico es aceptado?: TRUE
tabla_resumen_S <- data.frame(
Variable = "Situación Operativa",
Pearson = round(Correlacion_Geo_S, 2),
Chi2 = round(x2_Norm_S, 2),
Umbral = round(vc_Norm_S, 2),
Resultado = x2_Norm_S < vc_Norm_S
)
tabla_resumen_S %>%
gt() %>%
cols_label(
Variable = "Variable",
Pearson = "Test Pearson (%)",
Chi2 = "Chi Cuadrado",
Umbral = "Umbral de Aceptación",
Resultado = "Resultado"
) %>%
tab_header(
title = md("**Tabla N°X: 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°X: Resumen del Test de Bondad al Modelo de Probabilidad | ||||
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de Aceptación | Resultado |
|---|---|---|---|---|
| Situación Operativa | 98.49 | 6.63 | 7.81 | TRUE |
| Autor: Anahi Macias | ||||
¿Cuál es la probabilidad de que un pozo seleccionado al azar se encuentre en condición “Activos y en Desarrollo”?
prob_activos <- TDFSituaciónfinal$hi[TDFSituaciónfinal$Condición == "Activos y en Desarrollo"]
prob_activos
## [1] 43.37
La probabilidad estimada indica que aproximadamente 43.37% de los pozos se encuentran en condición Activos y en Desarrollo, siendo la categoría operativa más frecuente.
¿Cuántos pozos se encuentran en proceso de abandono o clausura definitiva?
pozos_abandono <- sum(TDFSituaciónfinal$ni[
TDFSituaciónfinal$Condición %in% c("En Proceso de Abandono", "Clausura Definitiva")
])
pozos_abandono
## [1] 11154
En la base de datos analizada, aproximadamente 11154 pozos se encuentran entre las condiciones de abandono progresivo y clausura definitiva, lo que representa una porción relevante del inventario total.
La mayoría de los pozos se concentra en “Activos y en Desarrollo” (≈43.37%), lo que refleja una actividad petrolera significativa. No obstante, existe un número importante de pozos en abandono o clausura, evidenciando el avance del ciclo productivo.