1 Configuración y Carga de Datos

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

setwd("C:/Users/majke/Downloads/Proyecto Estadistica/RMARKDOWN")

tryCatch({
  Datos_Brutos <- read_excel("tabela_de_pocos_janeiro_2018.xlsx")
}, error = function(e) {
  stop("Error al leer el archivo Excel. Verifica la ruta y el nombre.")
})

2 Extracción y Depuración de Variables

Se analiza la relación entre la longitud perforada y la profundidad vertical.

Se estableció la Profundidad de Perforación como variable independiente (X), ya que cuantifica la longitud total de la trayectoria perforada. La Profundidad Vertical actúa como variable dependiente (Y), pues representa el avance neto hacia el objetivo en el subsuelo.

Esta relación modela la eficiencia direccional: a medida que la longitud del pozo aumenta significativamente, la ganancia de profundidad vertical tiende a desacelerarse debido a la inclinación y desviación horizontal.

  • Variable Independiente (X): Profundidad de Perforación (agrupada cada 100 m)
  • Variable Dependiente (Y): Profundidad Vertical Promedio (m)
datos_raw <- Datos_Brutos %>%
  dplyr::select(PROFUNDIDADE_SONDADOR_M, PROFUNDIDADE_VERTICAL_M) %>%
  mutate(
    x_raw = abs(as.numeric(str_replace(as.character(PROFUNDIDADE_SONDADOR_M), ",", "."))),
    y_raw = abs(as.numeric(str_replace(as.character(PROFUNDIDADE_VERTICAL_M), ",", ".")))
  ) %>%
  filter(!is.na(x_raw) & !is.na(y_raw) & x_raw > 0 & y_raw > 80) %>%
  filter(x_raw < 15000)

3 Análisis Visual de Datos

Antes de aplicar el agrupamiento, se observa la dispersión original para justificar el proceso de Binning.

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

plot(
  datos_raw$x_raw, datos_raw$y_raw,
  main  = "Gráfica N°1: Dispersión de Prof. Vertical en función de Prof. de Perforación",
  xlab  = "Profundidad de Perforación (m)",
  ylab  = "Profundidad Vertical (m)",
  col   = rgb(0.18, 0.25, 0.31, 0.4),
  pch   = 16, cex = 0.6, frame.plot = FALSE
)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")

4 Aplicación de Binning

Debido a la dispersión observada en la Gráfica N°1, se aplica Binning (cada 100 m) para reducir el ruido y extraer la tendencia de eficiencia direccional.

datos_model <- datos_raw %>%
  mutate(x_bin = round(x_raw / 100) * 100) %>%
  group_by(x_bin) %>%
  summarise(
    y      = mean(y_raw, na.rm = TRUE),
    conteo = n()
  ) %>%
  rename(x = x_bin) %>%
  filter(conteo >= 3)

lim_y       <- quantile(datos_model$y, c(0.05, 0.95))
datos_model <- datos_model %>%
  filter(y >= lim_y[1] & y <= lim_y[2])

x <- datos_model$x
y <- datos_model$y

5 Análisis Gráfico (Tendencia Agrupada)

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

plot(
  x, y,
  main  = "Gráfica N°2: Perfil de Prof. Vertical Promedio en función de Prof. de Perforación",
  xlab  = "Profundidad de Perforación Agrupada (m)",
  ylab  = "Profundidad Vertical Promedio (m)",
  col   = "#2E4053", pch = 16, cex = 1.2, frame.plot = FALSE
)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")

6 Modelo Logarítmico

Se plantea el modelo: y = a + b · ln(x)

modelo_log <- lm(y ~ log(x), data = datos_model)

a_log  <- coef(modelo_log)[1]
b_log  <- coef(modelo_log)[2]
r2_log <- summary(modelo_log)$r.squared
r_log  <- sqrt(r2_log)

signo_b_log <- ifelse(b_log >= 0, "+", "-")

ecuacion_log_simple <- paste0(
  "y = ", sprintf("%.4f", a_log), " ",
  signo_b_log, " ", sprintf("%.4f", abs(b_log)), " * ln(x)"
)
ecuacion_log_latex <- paste0(
  "**y = ", sprintf("%.4f", a_log), " ",
  signo_b_log, " ", sprintf("%.4f", abs(b_log)), " · ln(x)**"
)

x_restriccion <- exp(-a_log / b_log)

x_ejemplo  <- mean(x)
y_est_log  <- a_log + b_log * log(x_ejemplo)

6.1 Gráfica del Modelo con Intervalos de Confianza

Se presenta el ajuste incluyendo la banda de incertidumbre estadística (I.C. 95%).

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

plot(
  x, y,
  main  = "Gráfica N°3: Modelo Logarítmico: Prof. Vertical en función de Prof. de Perforación",
  xlab  = "Profundidad de Perforación (m)",
  ylab  = "Profundidad Vertical Promedio (m)",
  col   = "#2E4053", pch = 16, cex = 1.0, frame.plot = FALSE
)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")

x_seq    <- seq(min(x), max(x), length.out = 500)
pred_log <- predict(modelo_log,
                    newdata  = data.frame(x = x_seq),
                    interval = "confidence", level = 0.95)

polygon(
  c(x_seq, rev(x_seq)),
  c(pred_log[, "lwr"], rev(pred_log[, "upr"])),
  col = rgb(0.5, 0.5, 0.5, 0.2), border = NA
)
lines(x_seq, pred_log[, "fit"], col = "#C0392B", lwd = 3)

legend(
  "topleft",
  legend = c("Datos", "Modelo Logarítmico", "I.C. 95%"),
  col    = c("#2E4053", "#C0392B", "gray"),
  pch    = c(16, NA, 15), lwd = c(NA, 3, NA),
  pt.cex = c(1, NA, 2), bty = "n"
)

6.2 Resultados y Ecuación

  • Coeficiente de Determinación (R²): 0.75 (75%)
  • Correlación del modelo linealizado (r): 0.866

La ecuación resultante es: y = -11174.8669 + 1795.2067 · ln(x)

7 Modelo Lineal (Alternativo)

Se propone un modelo lineal simple para evaluar si es posible eliminar las restricciones matemáticas del logaritmo: y = m · x + b

modelo_lin <- lm(y ~ x, data = datos_model)

b_lin  <- coef(modelo_lin)[1]
m_lin  <- coef(modelo_lin)[2]
r2_lin <- summary(modelo_lin)$r.squared
r_lin  <- sqrt(r2_lin)

signo_b_lin <- ifelse(b_lin >= 0, "+", "-")

ecuacion_lin_simple <- paste0(
  "y = ", sprintf("%.4f", m_lin), "x ",
  signo_b_lin, " ", sprintf("%.4f", abs(b_lin))
)
ecuacion_lin_latex <- paste0(
  "**y = ", sprintf("%.4f", m_lin), "x ",
  signo_b_lin, " ", sprintf("%.4f", abs(b_lin)), "**"
)

7.1 Gráfica del Modelo con Intervalos de Confianza

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

plot(
  x, y,
  main  = "Gráfica N°4: Modelo Lineal: Prof. Vertical en función de Prof. de Perforación",
  xlab  = "Profundidad de Perforación (m)",
  ylab  = "Profundidad Vertical Promedio (m)",
  col   = "#2E4053", pch = 16, cex = 1.0, frame.plot = FALSE
)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")


pred_lin <- predict(modelo_lin,
                    newdata  = data.frame(x = x_seq),
                    interval = "confidence", level = 0.95)

polygon(
  c(x_seq, rev(x_seq)),
  c(pred_lin[, "lwr"], rev(pred_lin[, "upr"])),
  col = rgb(0.5, 0.5, 0.5, 0.2), border = NA
)
lines(x_seq, pred_lin[, "fit"], col = "#27AE60", lwd = 3)

legend(
  "topleft",
  legend = c("Datos", "Modelo Lineal", "I.C. 95%"),
  col    = c("#2E4053", "#27AE60", "gray"),
  pch    = c(16, NA, 15), lwd = c(NA, 3, NA),
  pt.cex = c(1, NA, 2), bty = "n"
)

7.2 Resultados y Ecuación

  • Coeficiente de Determinación (R²): 0.9495 (94.95%)
  • Coeficiente de Correlación (r): 0.9744

La ecuación resultante es: y = 0.8298x + 174.8675

8 Comparación de Modelos

tabla_comp <- data.frame(
  Modelo      = c("Logarítmico", "Lineal"),
  R2          = c(paste0(round(r2_log * 100, 2), "%"), paste0(round(r2_lin * 100, 2), "%")),
  Pearson_r   = c(paste0(round(r_log * 100, 2), "%"), paste0(round(r_lin * 100, 2), "%")),
  Ecuacion    = c(ecuacion_log_simple, ecuacion_lin_simple),
  Restriccion = c(paste0("x > ", round(x_restriccion, 2), " m"), "Ninguna")
)

tabla_comp %>%
  gt() %>%
  tab_header(
    title    = md("**COMPARACIÓN: MODELO LOGARÍTMICO vs. LINEAL**"),
    subtitle = "Evaluación de Ajuste y Restricciones Matemáticas"
  ) %>%
  tab_source_note(source_note = "Fuente: Anahi Macias") %>%
  cols_label(
    Modelo      = "Modelo",
    R2          = "R²",
    Pearson_r   = "Pearson (r)",
    Ecuacion    = "Ecuación",
    Restriccion = "Restricción"
  ) %>%
  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()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#D5F5E3")),
    locations = cells_body(
      rows = R2 == paste0(round(max(r2_log, r2_lin) * 100, 2), "%")
    )
  ) %>%
  tab_options(
    table.border.top.color            = "#2E4053",
    table.border.bottom.color         = "#2E4053",
    column_labels.border.bottom.color = "#2E4053",
    data_row.padding                  = px(8)
  )
COMPARACIÓN: MODELO LOGARÍTMICO vs. LINEAL
Evaluación de Ajuste y Restricciones Matemáticas
Modelo Pearson (r) Ecuación Restricción
Logarítmico 75% 86.6% y = -11174.8669 + 1795.2067 * ln(x) x > 505.14 m
Lineal 94.95% 97.44% y = 0.8298x + 174.8675 Ninguna
Fuente: Anahi Macias

9 Conclusiones

Entre la Profundidad de Perforación y la Profundidad Vertical existe una relación de tipo logarítmica, cuya ecuación matemática es: y = -11174.8669 + 1795.2067 · ln(x)

Siendo ‘x’ la profundidad de perforación en metros y ‘y’ la profundidad vertical en metros, con la restricción matemática de x > 505.14 m.

Por ejemplo, para una profundidad de perforación de 3600 m se estima una profundidad vertical de 3525.52 m.

Nota comparativa: El modelo lineal presenta un ajuste de 94.95% frente al 75% del logarítmico. Si bien el lineal tiene mayor R², el modelo logarítmico refleja mejor el comportamiento físico real de la eficiencia direccional (desaceleración del avance vertical a mayor profundidad de perforación).