library(readxl)
library(dplyr)
library(stringr)
library(gt)
library(e1071)
library(lubridate)
library(MASS)
library(knitr)
library(plotly)
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.")
})El diseño de este modelo responde a una lógica física de “Suma de Distancias” para pozos terrestres. Se busca explicar la longitud total del pozo como la consecuencia obligatoria de dos factores geométricos:
Variable Dependiente (Y): Profundidad de Perforación (m). Se eligió como la variable de respuesta porque representa el esfuerzo total de ingeniería (metros perforados y tubería utilizada). Es el resultado final de la operación, el cual no se elige arbitrariamente, sino que es consecuencia de la ubicación del yacimiento y del equipo.
Variable Independiente 1 (X1): Profundidad Vertical (m). Representa la necesidad geológica. Es la distancia vertical desde el nivel de referencia (Datum/Nivel del Mar) hasta el yacimiento objetivo. Es la variable principal porque dicta la profundidad neta a alcanzar bajo tierra.
Variable Independiente 2 (X2): Cota Altimétrica (m). Representa el obstáculo topográfico. Al estar en tierra, el equipo suele estar sobre una elevación positiva (montaña o meseta). Esta variable cuantifica los metros “extra” que se deben perforar desde la superficie solo para llegar al nivel de referencia (Datum).
Lógica del Modelo: La longitud del pozo (Y) es, esencialmente, la suma de atravesar la elevación del terreno (X2) más la profundidad para llegar al yacimiento (X1).
# Limpieza
datos_model <- Datos_Brutos %>%
select(PROFUNDIDADE_SONDADOR_M, PROFUNDIDADE_VERTICAL_M, COTA_ALTIMETRICA_M) %>%
mutate(
y = abs(as.numeric(str_replace(as.character(PROFUNDIDADE_SONDADOR_M), ",", "."))),
x1 = abs(as.numeric(str_replace(as.character(PROFUNDIDADE_VERTICAL_M), ",", "."))),
x2 = abs(as.numeric(str_replace(as.character(COTA_ALTIMETRICA_M), ",", ".")))
) %>%
filter(!is.na(x1) & !is.na(x2) & !is.na(y)) %>%
# Filtros
filter(x1 > 0 & x1 < 10000 & x2 >= 0 & x2 <= 500 & y > 0 & y < 12000)
# Asignación de variables
y <- datos_model$y
x1 <- datos_model$x1
x2 <- datos_model$x2Aquí puedes rotar el gráfico con el ratón y hacer zoom para explorar la distribución de los pozos.
# Gráfico 3D
plot_ly(x = ~x1, y = ~x2, z = ~y,
type = "scatter3d",
mode = "markers",
marker = list(
size = 5,
color = ~y,
colorscale = "Viridis",
opacity = 0.75
),
name = "Pozos") %>%
layout(
title = "Gráfica N°1: Topografía Profundidad (3D)",
scene = list(
xaxis = list(title = "Prof. Vertical (m) [X1]"),
yaxis = list(title = "Cota Altimétrica (m) [X2]"),
zaxis = list(title = "Prof. Perforación (m) [Y]"),
camera = list(eye = list(x = 1.5, y = 1.5, z = 1.5))
)
)Se plantea la ecuación del plano: Y=β0+β1⋅X1+β2⋅X2
modelo <- lm(y ~ x1 + x2)
summary_modelo <- summary(modelo)
coefs <- coef(modelo)
b0 <- coefs[1]
b1 <- coefs[2]
b2 <- coefs[3]
r2 <- summary_modelo$r.squared
r2_adj <- summary_modelo$adj.r.squared
ecuacion_latex <- paste0(
"Y = ",round(b0,2),
ifelse(b1>=0," + "," - "),abs(round(b1,4)),"X1",
ifelse(b2>=0," + "," - "),abs(round(b2,4)),"X2"
)
summary(modelo)##
## Call:
## lm(formula = y ~ x1 + x2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6987.5 -201.0 -130.9 -11.2 5432.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 206.395146 13.039215 15.829 < 2e-16 ***
## x1 1.030431 0.004576 225.190 < 2e-16 ***
## x2 -1.025694 0.148935 -6.887 6.35e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 501.2 on 5425 degrees of freedom
## Multiple R-squared: 0.9117, Adjusted R-squared: 0.9117
## F-statistic: 2.8e+04 on 2 and 5425 DF, p-value: < 2.2e-16
Se visualiza el plano matemático resultante sobre los datos reales.
grid_x1 <- seq(min(x1), max(x1), length.out = 50)
grid_x2 <- seq(min(x2), max(x2), length.out = 50)
z_plano <- t(outer(grid_x1, grid_x2, function(x1_val, x2_val) {
b0 + (b1 * x1_val) + (b2 * x2_val)
}))
# Generación del Gráfico
plot_ly() %>%
add_surface(
x = grid_x1,
y = grid_x2,
z = z_plano,
colorscale = "Viridis",
opacity = 0.75,
showscale = TRUE,
name = "Plano Ajustado"
) %>%
add_trace(
data = datos_model,
x = ~x1,
y = ~x2,
z = ~y,
type = "scatter3d",
mode = "markers",
marker = list(
size = 5,
color = ~y,
colorscale = "Viridis",
opacity = 0.8
),
name = "Datos Reales"
) %>%
layout(
title = "Gráfica N°2: Plano de Regresión y Datos (Interactivo)",
scene = list(
xaxis = list(title = "Prof. Vertical (m) [X1]"),
yaxis = list(title = "Cota Altimétrica (m) [X2]"),
zaxis = list(title = "Prof. Perforación (m) [Y]"),
camera = list(
eye = list(x = 1.8, y = 1.8, z = 1)
)
)
)# Tabla
tabla <- data.frame(
Parametro = c("Intercepto (b0)", "Coef. Vertical (b1)", "Coef. Cota (b2)"),
Valor = c(sprintf("%.2f", b0), sprintf("%.4f", b1), sprintf("%.4f", b2)),
R2_Adj = c(paste0(round(r2_adj*100,2), "%"), "", ""),
R2 = c(paste0(round(r2*100,2), "%"), "", ""),
Interpretacion = c("Valor Base", "Impacto Objetivo Geológico", "Impacto Topografía")
)
tabla %>%
gt() %>%
tab_header(
title = md("**RESUMEN DEL MODELO MÚLTIPLE**"),
subtitle = "Parámetros y Bondad de Ajuste"
) %>%
tab_source_note(source_note = "Fuente: Grupo 3") %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")),
locations = cells_title()
) %>%
tab_style(
style = list(cell_fill(color = "#ECF0F1"), cell_text(weight = "bold", color = "#2C3E50")),
locations = cells_column_labels()
) %>%
tab_options(
table.border.top.color = "#2C3E50",
table.border.bottom.color = "#2C3E50",
data_row.padding = px(8)
)| RESUMEN DEL MODELO MÚLTIPLE | ||||
| Parámetros y Bondad de Ajuste | ||||
| Parametro | Valor | R2_Adj | R2 | Interpretacion |
|---|---|---|---|---|
| Intercepto (b0) | 206.40 | 91.17% | 91.17% | Valor Base |
| Coef. Vertical (b1) | 1.0304 | Impacto Objetivo Geológico | ||
| Coef. Cota (b2) | -1.0257 | Impacto Topografía | ||
| Fuente: Grupo 3 | ||||
Se ha desarrollado un modelo de regresión lineal múltiple para estimar la Profundidad de Perforaciónr (Y) en función de la Profundidad Vertical (X1) y la Cota Altimétrica (X2).
El modelo presenta un coeficiente de determinación (R2 ) del 91.17%, lo que confirma la fuerte relación física existente: la longitud total perforada equivale, casi exactamente, a la suma del objetivo geológico más la elevación topográfica del terreno.
Por ejemplo, si tenemos un objetivo a 1750 m y una elevación de 39 m, el modelo estima una profundidad total de 1969.65 m.