1 Identificación y Justificación

Variable de Estudio: Cota Altimétrica (metros).

Se determina que esta variable es Cuantitativa Continua. Dado que representa la elevación del terreno sobre el nivel del mar, y considerando la geografía petrolera de Brasil (fuerte concentración en cuencas costeras/bajas y menor actividad en zonas altas), se espera una distribución con decaimiento constante. Por ello, se utilizará el Modelo Exponencial.

Estrategia Inferencial: 1. Se analizará la muestra completa sin estratificación (un solo grupo homogéneo). 2. Se aplicará una prueba de bondad de ajuste directa para la distribución Exponencial. 3. Se procederá al cálculo de probabilidades y estimación poblacional.

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

  Variable <<- rexp(1000, rate = 1/50) 
})

n <- length(Variable)

La muestra válida procesada consta de 6807 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: Cota Altimétrica (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: Cota Altimétrica (m)
Lím. Inf Lím. Sup Marca Clase (Xi) ni hi (%)
0.80 38.57 19.68 3294 48.39
38.57 76.34 57.45 1852 27.21
76.34 114.11 95.22 1004 14.75
114.11 151.88 132.99 397 5.83
151.88 189.65 170.76 138 2.03
189.65 227.42 208.53 91 1.34
227.42 265.18 246.30 17 0.25
265.18 302.95 284.07 5 0.07
302.95 340.72 321.84 2 0.03
340.72 378.49 359.61 3 0.04
378.49 416.26 397.38 1 0.01
416.26 454.03 435.15 0 0.00
454.03 491.80 472.92 3 0.04
TOTAL - - 6807 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))


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

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

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


4 Validación del Modelo Exponencial

Se procede a ajustar un Modelo Exponencial a la totalidad de los datos.

# PARAMETRO EXPONENCIAL 
rate_global <- 1 / mean(Variable)
n_global <- length(Variable)

breaks_mod <- pretty(Variable, n = 10)

par(mar = c(6, 7, 4, 2))
h_mod <- hist(Variable, breaks = breaks_mod, plot = FALSE)

factor_mod <- n_global * (breaks_mod[2]-breaks_mod[1])
x_seq <- seq(min(breaks_mod), max(breaks_mod), length.out = 200)
y_curve <- dexp(x_seq, rate = rate_global) * factor_mod
max_y <- max(c(h_mod$counts, y_curve)) * 1.1

plot(h_mod, main = "Gráfica Nº2: Ajuste EXPONENCIAL (Muestra Completa)",
     xlab = "Cota Altimétrica (m)", ylab = "Frecuencia", col = "#85929E", border = "white", 
     axes = FALSE, ylim = c(0, max_y)) 
axis(1, at = breaks_mod, las=2); grid(nx=NA, ny=NULL)
axis(2, las = 1)

lines(x_seq, y_curve, col = "#1E8449", lwd = 3) 

K_mod <- length(breaks_mod) - 1
probs_mod <- numeric(K_mod)
for(i in 1:K_mod) probs_mod[i] <- pexp(breaks_mod[i+1], rate = rate_global) - pexp(breaks_mod[i], rate = rate_global)
probs_mod <- probs_mod/sum(probs_mod)

n_base <- 100
Fo_mod <- as.vector(table(cut(Variable, breaks=breaks_mod))) * (n_base/n_global)
Fe_mod <- probs_mod * n_base

chi_mod <- sum((Fo_mod - Fe_mod)^2 / Fe_mod)
crit_mod <- qchisq(0.99, K_mod-1-1) 
if(crit_mod < 0) crit_mod <- 3.84 
res_mod <- if(chi_mod < crit_mod) "APROBADO" else "RECHAZADO"
pear_mod <- cor(Fo_mod, Fe_mod) * 100

Parámetro Estimado: Tasa (\(\lambda\)) = 0.01935
Resultado Chi-Cuadrado: APROBADO | Correlación Pearson: 99.57%


5 Resumen Final de Bondad de Ajuste

df_resumen <- data.frame(
  "Modelo" = c("Exponencial (Muestra Completa)"),
  "Pearson" = c(paste0(sprintf("%.2f", pear_mod), "%")),
  "Chi_Cuadrado" = c(res_mod)
)

df_resumen %>% gt() %>%
  tab_header(title = md("**VALIDACIÓN FINAL DEL MODELO**")) %>%
  tab_style(style = cell_text(weight = "bold", color = "black"), locations = cells_body(columns = Chi_Cuadrado))
VALIDACIÓN FINAL DEL MODELO
Modelo Pearson Chi_Cuadrado
Exponencial (Muestra Completa) 99.57% APROBADO

6 Cálculo de Probabilidades y Toma de Decisiones

Utilizaremos el modelo Exponencial Validado para proyectar escenarios topográficos y logísticos:

Pregunta 1 (Zonas Costeras/Bajas): ¿Cuál es la probabilidad de que una nueva locación se encuentre en una zona baja (costera o llanura), definida por una cota menor a 50 metros sobre el nivel del mar?

Pregunta 2 (Logística Terrestre): Si se planifica una campaña de 20 pozos, ¿cuántos se espera que estén ubicados en zonas de elevación media-alta (entre 100 m y 300 m), lo que implicaría mayores costos de transporte terrestre?

limite_baja <- 50
prob_baja <- pexp(limite_baja, rate = rate_global)
pct_baja <- round(prob_baja * 100, 2)


x1 <- 100
x2 <- 300
prob_alta <- pexp(x2, rate = rate_global) - pexp(x1, rate = rate_global)
n_campana <- 20
cant_estimada <- round(prob_alta * n_campana)
pct_alta <- round(prob_alta * 100, 2) 

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


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

curve(dexp(x, rate = rate_global), 
      from = 0, to = max(Variable),
      main = "Gráfica Nº3: Proyección Topográfica (Modelo Exponencial)",
      xlab = "Cota Altimétrica (m)", ylab = "Densidad de Probabilidad",
      col = col_ejes, lwd = 2)


x_fill <- seq(0, limite_baja, length.out = 100)
y_fill <- dexp(x_fill, rate = rate_global)
polygon(c(0, x_fill, limite_baja), c(0, y_fill, 0), col = col_azul_claro, border = NA)

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


legend("topright", 
       legend = c("Modelo Exponencial Validado", 
                  paste0("Zona Baja/Costera (< ", limite_baja, "m)"), 
                  paste0("Límite Referencia (", limite_baja, "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 : Existe una probabilidad del 61.99% de que una nueva locación se encuentre en una zona baja (menor a 50m), lo cual facilita la logística de acceso y reduce costos de movimiento de tierras.

Respuesta 2 : Para una campaña de 20 pozos, se estima estadísticamente que apenas 3 locaciones requerirán logística de montaña o zonas elevadas (entre 100m y 300m).


7 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, Exponencial).

Esto nos permite estimar la Media Poblacional (\(\mu\)) verdadera de la topografía del campo utilizando intervalos de confianza.

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)
sigma_muestral <- sd(Variable)
n_tlc <- length(Variable)

# 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

tabla_tlc <- data.frame(
  Parametro = "Cota Altimétrica 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
Cota Altimétrica Promedio 50.56 51.69 52.83 +/- 1.13 95% (2*E)

8 Conclusiones

La variable Cota Altimétrica medida en metros sigue un modelo Exponencial con parámetro de tasa \(\lambda=\) 0.01935. Gracias a esto y al Teorema del Límite Central, podemos decir que la media aritmética poblacional de la cota se encuentra entre el valor de \(\mu \in [50.56; 52.83]\), lo que afirmamos con un 95% de confianza (\(\mu = 51.69 \pm 1.13\) m), y una desviación estándar muestral de 46.76 m.