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.")
})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.
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)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")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$ypar(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")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)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"
)La ecuación resultante es: y = -11174.8669 + 1795.2067 · ln(x)
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)), "**"
)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"
)La ecuación resultante es: y = 0.8298x + 174.8675
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 | R² | 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 | ||||
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).