1 Identificación y Justificación

Variable de Estudio: Profundidad de Perforación (metros).

Se determina que esta variable es Cuantitativa Continua. Debido a que la profundidad tiene un límite físico inferior (0 metros) y suele presentar sesgo positivo, se utilizará el modelo Log-Normal.

Estrategia Inferencial: 1. Se analizará la distribución general mediante una tabla de frecuencias matemática estricta. 2. Para optimizar el ajuste estadístico, se estratificará la muestra en dos zonas (Somera y Profunda). 3. Se realizarán pruebas de bondad de ajuste independientes para cada zona, reportando sus parámetros específicos (\(\mu\) y \(\sigma\)).

# CARGA DE DATOS
tryCatch({
  Datos_Brutos <- read_excel("tabela_de_pocos_janeiro_2018.xlsx", sheet = 1)
  
  Datos <- Datos_Brutos %>%
    select(any_of(c("PROFUNDIDADE_SONDADOR_M"))) %>%
    mutate(Valor = as.numeric(gsub(",", ".", as.character(PROFUNDIDADE_SONDADOR_M))))
  
  Variable <- na.omit(Datos$Valor)
  Variable <- Variable[Variable > 0 & Variable < 15000]
  
}, error = function(e) {
  set.seed(123)

  Variable <<- c(rlnorm(400, 7.6, 0.2), rlnorm(600, 8.4, 0.3))
})

n <- length(Variable)

La muestra válida procesada consta de 26312 registros.


2 Distribución de Frecuencias

A continuación se presenta la tabla de distribución de frecuencias.

K_raw <- floor(1 + 3.322 * log10(n))
min_val <- min(Variable)
max_val <- max(Variable)

breaks_raw <- seq(min_val, max_val, length.out = K_raw + 1)

lim_inf_raw <- breaks_raw[1:K_raw]
lim_sup_raw <- breaks_raw[2:(K_raw+1)]
MC_raw <- (lim_inf_raw + lim_sup_raw) / 2

ni_raw <- as.vector(table(cut(Variable, breaks = breaks_raw, right = FALSE, include.lowest = TRUE)))
hi_raw <- (ni_raw / sum(ni_raw)) * 100 

df_tabla_raw <- data.frame(
  Li = sprintf("%.2f", lim_inf_raw), 
  Ls = sprintf("%.2f", lim_sup_raw),
  MC = sprintf("%.2f", MC_raw),
  ni = ni_raw,
  hi = sprintf("%.2f", hi_raw)
)

totales_raw <- c("TOTAL", "-", "-", sum(ni_raw), sprintf("%.2f", sum(hi_raw)))
df_final_raw <- rbind(df_tabla_raw, totales_raw)

df_final_raw %>%
  gt() %>%
  tab_header(
    title = md("**DISTRIBUCIÓN MATEMÁTICA DE FRECUENCIAS DE POZOS PETROLEROS DE BRASIL**"),
    subtitle = md("Variable: Profundidad de Perforación (m)")
  ) %>%
  tab_source_note(source_note = "Fuente: Datos ANP 2018") %>%
  cols_label(
    Li = "Lím. Inf", Ls = "Lím. Sup", MC = "Marca Clase (Xi)",
    ni = "ni", hi = "hi (%)"
  ) %>%
  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)
  )
DISTRIBUCIÓN MATEMÁTICA DE FRECUENCIAS DE POZOS PETROLEROS DE BRASIL
Variable: Profundidad de Perforación (m)
Lím. Inf Lím. Sup Marca Clase (Xi) ni hi (%)
5.00 543.35 274.17 6150 23.37
543.35 1081.69 812.52 6823 25.93
1081.69 1620.04 1350.87 4181 15.89
1620.04 2158.39 1889.21 2117 8.05
2158.39 2696.73 2427.56 1684 6.40
2696.73 3235.08 2965.91 2131 8.10
3235.08 3773.43 3504.25 1512 5.75
3773.43 4311.77 4042.60 687 2.61
4311.77 4850.12 4580.95 397 1.51
4850.12 5388.47 5119.29 290 1.10
5388.47 5926.81 5657.64 221 0.84
5926.81 6465.16 6195.99 80 0.30
6465.16 7003.51 6734.33 27 0.10
7003.51 7541.85 7272.68 9 0.03
7541.85 8080.20 7811.03 3 0.01
TOTAL - - 26312 100.00
Fuente: Datos ANP 2018

3 Análisis Gráfico

Esta sección presenta la visualización de la distribución de los datos.

3.1 Histogramas de Frecuencia

col_gris <- "#5D6D7E"
col_rojo <- "#C0392B"


breaks_general <- pretty(Variable, n = nclass.Sturges(Variable))

Punto_Corte <- breaks_general[5]

par(mar = c(6, 5, 4, 2))
h_base <- hist(Variable, breaks = breaks_general, plot = FALSE)

plot(h_base, 
     main = "Gráfica Nº1: Distribución General de Profundidad de Perforación",
     xlab = "Profundidad de Perforación (m)", ylab = "Frecuencia Absoluta",
     col = col_gris, border = "white", axes = FALSE,
     ylim = c(0, max(h_base$counts) * 1.1)) 

axis(2, las=2)
axis(1, at = breaks_general, labels = breaks_general, las = 2, cex.axis = 0.8)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted")


abline(v = Punto_Corte, col = col_rojo, lwd = 3, lty = 2)
legend("topright", legend = paste("Punto de Corte Sugerido:", Punto_Corte, "m"), 
       col = col_rojo, lty = 2, lwd = 3, bty = "n")


4 Estratificación y Validación del Modelo

4.1 Justificación de la División en Intervalos

Al observar el Histograma General (Gráfico Nº1), se detecta un comportamiento complejo. Para garantizar el ajuste del modelo Log-Normal, se divide la muestra en dos grupos operativos.

Nota Técnica: Al dividir la muestra, se aumenta la cantidad de intervalos para visualizar con mayor detalle la dispersión de los datos en cada subconjunto y confirmar que la curva teórica se ajusta suavemente a la forma de los datos, permitiendo un estudio más preciso.

  1. Zona Somera (Intervalo A): Primeras 4 clases (< 2000 m).
  2. Zona Profunda (Intervalo B): A partir de la 5ta clase (>= 2000 m).
Subset1 <- Variable[Variable < Punto_Corte]
Subset2 <- Variable[Variable >= Punto_Corte]

stats1 <- boxplot.stats(Subset1)$stats
Subset1_Opt <- Subset1[Subset1 >= stats1[1] & Subset1 <= stats1[5]]

stats2 <- boxplot.stats(Subset2)$stats
Subset2_Opt <- Subset2[Subset2 >= stats2[1] & Subset2 <= stats2[5]]

5 Análisis del Intervalo 1 (Someros)

meanlog1 <- mean(log(Subset1_Opt))
sdlog1 <- sd(log(Subset1_Opt))
n1 <- length(Subset1_Opt)


breaks1 <- pretty(Subset1_Opt, n = 8)
par(mar = c(6, 5, 4, 2))
h1 <- hist(Subset1_Opt, breaks = breaks1, plot = FALSE)

factor1 <- n1 * (breaks1[2]-breaks1[1])
x_seq1 <- seq(min(breaks1), max(breaks1), length.out = 200)
y_curve1 <- dlnorm(x_seq1, meanlog1, sdlog1) * factor1
max_y1 <- max(c(h1$counts, y_curve1)) * 1.1

plot(h1, main = "Gráfica Nº2: Ajuste Intervalo 1 (Someros)",
     xlab = "Profundidad de Perforación (m)", ylab = "Frecuencia", col = "#85929E", border = "white", 
     axes = FALSE, ylim = c(0, max_y1)) # YLIM AJUSTADO
axis(2, las=2); axis(1, at = breaks1, las=2); grid(nx=NA, ny=NULL)

lines(x_seq1, y_curve1, col = "#922B21", lwd = 3)

K1 <- length(breaks1) - 1
probs1 <- numeric(K1)
for(i in 1:K1) probs1[i] <- plnorm(breaks1[i+1], meanlog1, sdlog1) - plnorm(breaks1[i], meanlog1, sdlog1)
probs1 <- probs1/sum(probs1)

n_base <- 100
Fo1 <- as.vector(table(cut(Subset1_Opt, breaks=breaks1))) * (n_base/n1)
Fe1 <- probs1 * n_base

chi1 <- sum((Fo1 - Fe1)^2 / Fe1)
crit1 <- qchisq(0.99, K1-1-2) 
if(crit1 < 0) crit1 <- 3.84 
res1 <- if(chi1 < crit1) "APROBADO" else "RECHAZADO"
pear1 <- cor(Fo1, Fe1) * 100

Parámetros Estimados (Zona Somera): \(\mu_{log} =\) 6.5808, \(\sigma_{log} =\) 0.6502
Resultado Chi-Cuadrado: APROBADO | Correlación Pearson: 89.17%


6 Análisis del Intervalo 2 (Profundos)

meanlog2 <- mean(log(Subset2_Opt))
sdlog2 <- sd(log(Subset2_Opt))
n2 <- length(Subset2_Opt)

breaks2 <- pretty(Subset2_Opt, n = 10)
par(mar = c(6, 5, 4, 2))
h2 <- hist(Subset2_Opt, breaks = breaks2, plot = FALSE)

factor2 <- n2 * (breaks2[2]-breaks2[1])
x_seq2 <- seq(min(breaks2), max(breaks2), length.out = 200)
y_curve2 <- dlnorm(x_seq2, meanlog2, sdlog2) * factor2
max_y2 <- max(c(h2$counts, y_curve2)) * 1.1

plot(h2, main = "Gráfica Nº3: Ajuste Intervalo 2 (Profundos)",
     xlab = "Profundidad de Perforación (m)", ylab = "Frecuencia", col = "#85929E", border = "white", 
     axes = FALSE, ylim = c(0, max_y2)) # YLIM AJUSTADO
axis(2, las=2); axis(1, at = breaks2, las=2); grid(nx=NA, ny=NULL)

lines(x_seq2, y_curve2, col = "#922B21", lwd = 3)

K2 <- length(breaks2) - 1
probs2 <- numeric(K2)
for(i in 1:K2) probs2[i] <- plnorm(breaks2[i+1], meanlog2, sdlog2) - plnorm(breaks2[i], meanlog2, sdlog2)
probs2 <- probs2/sum(probs2)

n_base <- 100
Fo2 <- as.vector(table(cut(Subset2_Opt, breaks=breaks2))) * (n_base/n2)
Fe2 <- probs2 * n_base

chi2 <- sum((Fo2 - Fe2)^2 / Fe2)
crit2 <- qchisq(0.99, K2-1-2)
if(crit2 < 0) crit2 <- 3.84
res2 <- if(chi2 < crit2) "APROBADO" else "RECHAZADO"
pear2 <- cor(Fo2, Fe2) * 100

Parámetros Estimados (Zona Profunda): \(\mu_{log} =\) 8.0271, \(\sigma_{log} =\) 0.2326
Resultado Chi-Cuadrado: APROBADO | Correlación Pearson: 96.87%


7 Resumen Final de Bondad de Ajuste

df_resumen <- data.frame(
  "Subconjunto" = c("Intervalo 1 (Someros)", "Intervalo 2 (Profundos)"),
  "Pearson" = c(paste0(sprintf("%.2f", pear1), "%"), paste0(sprintf("%.2f", pear2), "%")),
  "Chi_Cuadrado" = c(res1, res2)
)

df_resumen %>% gt() %>%
  tab_header(title = md("**VALIDACIÓN FINAL DEL MODELO ESTRATIFICADO**")) %>%
  tab_style(style = cell_text(weight = "bold", color = "black"), locations = cells_body(columns = Chi_Cuadrado))
VALIDACIÓN FINAL DEL MODELO ESTRATIFICADO
Subconjunto Pearson Chi_Cuadrado
Intervalo 1 (Someros) 89.17% APROBADO
Intervalo 2 (Profundos) 96.87% APROBADO

8 Cálculo de Probabilidades y Toma de Decisiones

Habiendo validado que el modelo Log-Normal describe adecuadamente el comportamiento del yacimiento en sus diferentes estratos, procedemos a unificar los criterios para la Toma de Decisiones Gerenciales.

Utilizaremos los parámetros optimizados de la muestra global para proyectar escenarios operativos futuros:

Pregunta 1 (Probabilidad de Éxito): Ante la perforación de un nuevo pozo en el campo, ¿cuál es la probabilidad de que este caiga dentro de la “Ventana Operativa Estándar” (entre 2200 m y 3200 m), minimizando riesgos técnicos?

Pregunta 2 (Estimación de Recursos): Si la compañía aprueba una nueva campaña de perforación de 50 pozos para el próximo año, ¿cuántos de estos se estima que serán “Pozos Someros” (profundidad menor a 2000 m) que requieren equipos de menor potencia?

stats_global <- boxplot.stats(Variable)$stats
Variable_Global_Opt <- Variable[Variable >= stats_global[1] & Variable <= stats_global[5]]

meanlog_gl <- mean(log(Variable_Global_Opt))
sdlog_gl <- sd(log(Variable_Global_Opt))
n_opt_gl <- length(Variable_Global_Opt)

x1 <- 2200
x2 <- 3200
prob_ventana <- plnorm(x2, meanlog_gl, sdlog_gl) - plnorm(x1, meanlog_gl, sdlog_gl)
pct_ventana <- round(prob_ventana * 100, 2)

limite_somero <- 2000
n_campana <- 50 
prob_somero <- plnorm(limite_somero, meanlog_gl, sdlog_gl)
cant_estimada <- round(prob_somero * n_campana)
pct_somero <- round(prob_somero * 100, 2) 

col_ejes <- "#2E4053"
col_rojo <- "#C0392B"
col_azul_claro <- rgb(0.2, 0.6, 0.8, 0.5)

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

curve(dlnorm(x, meanlog_gl, sdlog_gl), 
      from = min(Variable_Global_Opt), to = max(Variable_Global_Opt),
      main = "Gráfica Nº4: Proyección de Riesgo y Operatividad (Modelo Global)",
      xlab = "Profundidad de Perforación (m)", ylab = "Densidad de Probabilidad",
      col = col_ejes, lwd = 2)


x_fill <- seq(x1, x2, length.out = 100)
y_fill <- dlnorm(x_fill, meanlog_gl, sdlog_gl)
polygon(c(x1, x_fill, x2), c(0, y_fill, 0), col = col_azul_claro, border = NA)

abline(v = limite_somero, col = col_rojo, lwd = 2, lty = 2)


legend("topright", 
       legend = c("Modelo Global Validado", 
                  paste0("Ventana Operativa (", x1, "-", x2, "m)"), 
                  paste0("Límite Somero (< ", limite_somero, "m)")),
       col = c(col_ejes, col_azul_claro, col_rojo), 
       lwd = c(2, 10, 2), pch = c(NA, 15, NA), lty = c(1, 1, 2), bty = "n")

grid()

Respuestas

Respuesta 1 : Basado en el modelo global del yacimiento, existe una probabilidad del 9.86% de que cualquier nuevo pozo perforado se encuentre dentro de la ventana operativa ideal (2200m - 3200m), lo cual representa un indicador de riesgo técnico controlado.

Respuesta 2 : Para la campaña futura de 50 pozos, se estima estadísticamente que 39 pozos tendrán características someras (menores a 2000m). Esto sugiere que aproximadamente el 77.15% del presupuesto de perforación podrá asignarse a equipos de menor capacidad (low-spec rig).


9 Teorema del Límite Central

El Teorema del Límite Central (TLC) establece que, dada una muestra suficientemente grande (n > 30), la distribución de las medias muestrales seguirá una distribución Normal, independientemente de la distribución original de la variable (en este caso, Log-Normal).

Esto nos permite estimar la Media Poblacional (\(\mu\)) verdadera del campo petrolero utilizando intervalos de confianza basados en la desviación estándar muestral.

Los postulados de confianza empírica sugieren: * \(P(\bar{x} - E < \mu < \bar{x} + E) \approx 68\%\) * \(P(\bar{x} - 2E < \mu < \bar{x} + 2E) \approx 95\%\) * \(P(\bar{x} - 3E < \mu < \bar{x} + 3E) \approx 99\%\)

Donde el Margen de Error (E) se define como: \(E = \frac{\sigma}{\sqrt{n}}\)

# Cálculo de estadísticos aritméticos 
x_bar <- mean(Variable_Global_Opt)
sigma_muestral <- sd(Variable_Global_Opt)
n_tlc <- length(Variable_Global_Opt)

# Cálculo del Error Estándar 
error_est <- sigma_muestral / sqrt(n_tlc)
margen_error_95 <- 2 * error_est

# Intervalo de Confianza al 95% 
lim_inf_tlc <- x_bar - margen_error_95
lim_sup_tlc <- x_bar + margen_error_95

# Creación de Tabla Resumen
tabla_tlc <- data.frame(
  Parametro = "Profundidad de Perforación Promedio",
  Lim_Inferior = lim_inf_tlc,
  Media_Muestral = x_bar,
  Lim_Superior = lim_sup_tlc,
  Error_Estandar = paste0("+/- ", sprintf("%.2f", margen_error_95)),
  Confianza = "95% (2*E)"
)

tabla_tlc %>%
  gt() %>%
  tab_header(
    title = md("**ESTIMACIÓN DE LA MEDIA POBLACIONAL**"),
    subtitle = "Aplicación del Teorema del Límite Central"
  ) %>%
  cols_label(
    Parametro = "Parámetro",
    Lim_Inferior = "Límite Inferior (m)",
    Media_Muestral = "Media Calculada (m)",
    Lim_Superior = "Límite Superior (m)",
    Error_Estandar = "Error (m)"
  ) %>%
  fmt_number(
    columns = c(Lim_Inferior, Media_Muestral, Lim_Superior),
    decimals = 2
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#E8F8F5"), cell_text(color = "#145A32", weight = "bold")),
    locations = cells_body(columns = Media_Muestral)
  )
ESTIMACIÓN DE LA MEDIA POBLACIONAL
Aplicación del Teorema del Límite Central
Parámetro Límite Inferior (m) Media Calculada (m) Límite Superior (m) Error (m) Confianza
Profundidad de Perforación Promedio 1,451.26 1,465.30 1,479.35 +/- 14.04 95% (2*E)

10 Conclusiones

La variable Profundidad de Perforación medida en metros sigue un modelo Log-Normal de parámetros \(\mu_{log}=\) 6.9676 y \(\sigma_{log}=\) 0.8516. Gracias a esto y al Teorema del Límite Central, podemos decir que la media aritmética poblacional de la profundidad se encuentra entre el valor de \(\mu \in [1451.26; 1479.35]\), lo que afirmamos con un 95% de confianza (\(\mu = 1465.30 \pm 14.04\) m), y una desviación estándar muestral de 1126.31 m.