INTRODUCCION

Este estudio analiza la evolución temporal de los pozos petrolíferos en Brasil. La Variable Año de Inicio de los pozos petrolíferos es de tipo ordinal, pero se convirtió en discreta al asignarle identificadores numéricos (Xi ) para facilitar el análisis probabilístico y la comparación con el modelo.

1 _ Librerías

Carga de Paquetes

library(readxl)
library(dplyr)
library(gt)
library(e1071)
library(lubridate)
library(MASS)
library(knitr)

2 _ Carga Datos

Importación del archivo

setwd("~/SEGUNDO SEMESTRE/SEGUNDO SEMESTRE")
Datos_Brutos <- read.csv(  
  "tabela_de_pocos_janeiro_2018.csv",  
  header        = TRUE,  
  sep           = ",",  
  quote         = "\"",
  dec           = ".",  
  fileEncoding  = "Latin1",
  fill          = TRUE
)

3 _ Variables

Filtrado de fechas

Datos <- Datos_Brutos %>%
  mutate(
    Fecha_Limpieza = trimws(as.character(INICIO)),
    Fecha_Obj = if_else(
      grepl("-", Fecha_Limpieza),
      as.Date(Fecha_Limpieza, format = "%Y-%m-%d"),
      as.Date(Fecha_Limpieza, format = "%d/%m/%Y")
    ),
    Anio = year(Fecha_Obj)
  ) %>%
  filter(!is.na(Anio) & Anio >= 1920 & Anio <= 2020)

X <- Datos$Anio

if(length(X) == 0) {
  stop("¡ERROR! No hay datos válidos en la variable INICIO.")
}

4 _ Tabla distribución de frecuencia

breaks_dec <- seq(1920, 2020, by = 10)
h_total    <- hist(X, breaks = breaks_dec, plot = FALSE)
TDF_General <- data.frame(
  Decada = paste(head(breaks_dec, -1), tail(breaks_dec, -1), sep = "-"),
  ni     = h_total$counts,
  hi     = round((h_total$counts / sum(h_total$counts)) * 100, 2)
)
totales_simplificados <- c("TOTAL", sum(TDF_General$ni), 100)
TDF_Show_Simple <- rbind(mutate(TDF_General, across(everything(), as.character)), totales_simplificados)

TDF_Show_Simple %>%
  gt() %>%
  tab_header(title = md("TABLA DE FRECUENCIAS: INFERENCIA ESTADÍSTICA"), subtitle = md("Variable: **Inicio de Perforación**")) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  cols_label(Decada = "Periodo (Década)", 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: Inicio de Perforación
Periodo (Década) Frecuencia Absoluta (ni) Frecuencia Relativa (hi%)
1920-1930 2 0.01
1930-1940 15 0.05
1940-1950 218 0.74
1950-1960 1047 3.54
1960-1970 2398 8.11
1970-1980 2932 9.91
1980-1990 9348 31.61
1990-2000 3654 12.36
2000-2010 6079 20.55
2010-2020 3882 13.13
TOTAL 29575 100
Autor: Ashly Alzate

5 _ Gráfica de distribución de frecuencia

Diagrama de Barras (Escala Local)

col_barras <- "#5D6D7E"
col_ejes   <- "#2E4053"
par(mar = c(10, 5, 4, 2))
bp <- barplot(TDF_General$ni, main = "Gráfica N°1: Distribución de Fecha de Inicio", 
              cex.main = 0.9, ylab = "Cantidad de Pozos", col = col_barras, border = "white", 
              axes = FALSE, axisnames = FALSE)
axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp, labels = TDF_General$Decada, col = col_ejes, col.axis = col_ejes, las = 2, cex.axis = 0.9)
title(xlab = "Década", line = 8)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)

Agrupación 1

Analizamos la actividad exploratoria entre 1920 y 1979 para determinar si la frecuencia de perforaciones mantuvo una tendencia estable o presentó variaciones significativas en este periodo.

par(mar = c(8, 5, 4, 2)) 

col_barras <- "#5D6D7E"
col_ejes   <- "#2E4053"
X1 <- X[X >= 1920 & X < 1991] 

breaks_s1 <- seq(1920, 1990, by = 10)
h1_data <- hist(X1, breaks = breaks_s1, plot = FALSE)
etiquetas_1 <- paste(head(breaks_s1, -1), tail(breaks_s1, -1), sep="-")

bp1 <- barplot(h1_data$counts, 
               names.arg = etiquetas_1,
               col = col_barras, 
               border = "white", 
               main = "Gráfica: Distribución de Frecuencia (1920-1990)", 
               ylab = "Frecuencia",
               las = 2, 
               cex.names = 0.8,
               axes = FALSE)
axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp1, labels = etiquetas_1, col = col_ejes, col.axis = col_ejes, las = 2, cex.axis = 0.8)

title(xlab = "Periodo (Década)", line = 6) 

grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)

6 _ Conjetura del Modelo

X1 <- X[X >= 1920 & X < 1991]
h1 <- hist(X1, breaks = seq(1920, 1990, by = 10), plot = FALSE)

7 _ Parámetros

ajuste <- fitdistr(X1 - 1920, "negative binomial")
size_p <- ajuste$estimate["size"]
mu_p   <- ajuste$estimate["mu"]

# Cálculo exacto basado en la distribución ajustada para cada barra del histograma
Fe1 <- dnbinom(0:(length(h1$counts) - 1), size = size_p, mu = mu_p)
Fe1 <- Fe1 / sum(Fe1)
Fo1 <- h1$counts / sum(h1$counts)

8 _ Sobreposición de la realidad con el modelo

barplot(rbind(Fo1, Fe1), 
        beside = TRUE, 
        col = c("#5D6D7E", "#F2F3F4"), 
        border = "black", 
        names.arg = paste0(seq(1920, 1980, by=10), "s"), 
        main = "Gráfica N°2: Comparativa Modelo Binomial Negativa", 
        ylab = "Probabilidad",
        xlab = "Rango de años")
legend("topleft", legend = c("Real", "Modelo Binomial Negativa"), fill = c("#5D6D7E", "#F2F3F4"), bty = "n")

8.1 Test de Pearson

plot(Fo1, Fe1, main = "Gráfica N°3: Correlación de Pearson — Sección 1", xlab = "Frecuencia Observada", ylab = "Frecuencia Esperada", pch = 19, col = col_barras)
abline(lm(Fe1 ~ Fo1 + 0), col = "red", lwd = 2)

cor1 <- abs(cor(Fo1, Fe1)) * 100

8.2 Test de Chi-Cuadrado

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

9 _ Test de Bondad

tabla_1 <- data.frame(
  Modelo       = "Binomial Negativa",
  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 (Binomial Negativa)**")) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  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 (Binomial Negativa)
Modelo Pearson Chi_Cuadrado Umbral Decision
Binomial Negativa 97.14 2.7249 11.0705 Modelo aceptado
Autor: Ashly Alzate

9.1 Cálculo de Probabilidades (Sección 1)

Calculamos la probabilidad de que un pozo inicie antes de 1991 (60 años después de 1920)

mu_p <- ajuste$estimate["mu"]

prob_s1 <- pnbinom(1990 - 1920, size = size_p, mu = mu_p)
cat("La probabilidad calculada es del", round(prob_s1 * 100, 2), "%")
## La probabilidad calculada es del 87.52 %

Agrupación 2

Evaluamos el comportamiento de las perforaciones en la era moderna (2000–2020) para identificar patrones de crecimiento y establecer si la intensidad de la actividad fue constante.

X2 <- X[X >= 2000 & X <= 2020]
breaks_lustros <- seq(2000, 2020, by = 5)

h2_data <- hist(X2, breaks = breaks_lustros, plot = FALSE)
etiquetas_2 <- paste(head(breaks_lustros, -1), tail(breaks_lustros, -1), sep="-")

bp2 <- barplot(h2_data$counts, 
               names.arg = etiquetas_2,
               col = col_barras, 
               border = "white", 
               main = "Gráfica: Distribución de Frecuencia (2000-2020)", 
               xlab = "Periodo (Lustro)", 
               ylab = "Frecuencia",
               las = 1)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)

9.2 Conjetura del Modelo

Estimamos el parámetro λ para definir las frecuencias teóricas y contrastar el ajuste del modelo con la actividad observada en este periodo.

X2 <- X[X >= 2000 & X <= 2020]
breaks_lustros <- seq(2000, 2020, by = 5)
h2 <- hist(X2, breaks = breaks_lustros, plot = FALSE) 

lambda2 <- mean(X2 - 2000); Fe2 <- dpois(0:3, lambda2/5); Fe2 <- Fe2 / sum(Fe2)
Fo2 <- h2$counts / sum(h2$counts)

barplot(rbind(Fo2, Fe2), beside = TRUE, col = c(col_barras, "#F2F3F4"), names.arg = c("00-05", "05-10", "10-15", "15-20"), main = "Gráfica N°5: Modelo Poisson", ylab = "Probabilidad")
legend("topright", legend = c("Real", "Modelo Poisson"), fill = c(col_barras, "#F2F3F4"), bty = "n")

9.3 Test de Pearson

cor2 <- cor(Fo2, Fe2) * 100
plot(Fo2, Fe2, 
     main = "Gráfica N°6: Correlación de Pearson — Sección 2", 
     xlab = "Frecuencia Observada", 
     ylab = "Frecuencia Esperada", 
     pch = 19, 
     col = col_barras,
     xlim = c(0, max(Fo2) + 0.02), 
     ylim = c(0, max(Fe2) + 0.02))

abline(lm(Fe2 ~ Fo2 + 0), col = "red", lwd = 2)

9.4 Test de Chi-Cuadrado

x2_2 <- sum((Fo2 - Fe2)^2 / Fe2)
x2_2
## [1] 0.1180146
vc2  <- qchisq(0.95, length(Fo2) - 1)
vc2
## [1] 7.814728

Tabla de bondad de resumen

tabla_2 <- data.frame(
  Modelo       = "Poisson",
  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 (Poisson)**")) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  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 (Poisson)
Modelo Pearson Chi_Cuadrado Umbral Decision
Poisson 82.85 0.118 7.8147 Modelo aceptado
Autor: Ashly Alzate

10 _ Cálculo de Probabilidades

De cada 1,000 pozos perforados en la era moderna (2000–2020), ¿cuántos se estimó que iniciaron operaciones en el último lustro (2015–2020)?

p_ultimo <- ppois(20, lambda = lambda2) - ppois(15, lambda = lambda2)
p_ultimo
## [1] 0.01436936
cantidad_estimada <- round(p_ultimo * 100, 0) 

El modelo Poisson estimó que, por cada 1,000 pozos de este periodo, aproximadamente 1 correspondieron al último lustro (2015–2020).

11 _ Intervalo de confianza

n <- length(X)
media_mu <- mean(X)
desv_s <- sd(X)

# Cálculo del intervalo de confianza al 95% para la media
error_margin <- qt(0.975, df = n - 1) * (desv_s / sqrt(n))
ic_inferior <- media_mu - error_margin
ic_superior <- media_mu + error_margin

cat("Intervalo de Confianza (95%): [", round(ic_inferior, 2), ",", round(ic_superior, 2), "]")
## Intervalo de Confianza (95%): [ 1990.46 , 1990.83 ]

12 _ Conclusión

Los valores de la variable Inicio de Perforación se pueden explicar mediante un modelo binomial negativo y poisson por secciones, con una media observada de 1990.64 y una desviación estándar de 16.21. Podemos afirmar con un 95% de confianza que la media poblacional de esta variable se encuentra aproximadamente entre 1990.46 y 1990.83 años. Además, se evidencia una alta concentración de pozos en los últimos periodos, lo que es consistente con una tendencia de crecimiento sostenido en la actividad exploratoria de petróleo en Brasil.