1 Configuración y Carga de Datos

archivo <- "tabela_de_pocos_janeiro_2018.xlsx"

tryCatch({
  datos <- read_excel(archivo)
}, error = function(e) {
  stop("Error")
})

2 Extracción y Depuración de Variables

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 (\(X_1\)): 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 (\(X_2\)): 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 (\(X_2\)) más la profundidad para llegar al yacimiento (\(X_1\)).

# Limpieza 
datos_model <- datos %>%
  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$x2

3 Análisis Gráfico (3D )

Aquí 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 = "#27AE60", line = list(color = '#1E8449', width = 1)),
        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)) 
    )
  )

4 Modelo de Regresión Múltiple

Se plantea la ecuación del plano: \[Y = \beta_0 + \beta_1 \cdot X_1 + \beta_2 \cdot X_2\]

modelo <- lm(y ~ x1 + x2)

# Extracción de Coeficientes
coefs <- coef(modelo)
b0 <- coefs[1] 
b1 <- coefs[2] 
b2 <- coefs[3] 

5 Visualización del Plano Ajustado (Interactivo)

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_trace(x = grid_x1, 
            y = grid_x2, 
            z = z_plano,
            type = "surface",
            colorscale = list(c(0, 1), c("#2ECC71", "#27AE60")), 
            opacity = 0.8,
            name = "Plano Ajustado",
            showscale = FALSE) %>% 
  
  add_trace(x = ~x1, 
            y = ~x2, 
            z = ~y,
            type = "scatter3d", 
            mode = "markers",
            marker = list(size = 4, color = "#2C3E50", line = list(color = 'black', width = 0.5)), 
            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))
    )
  )

6 Resultados y Ecuación

6.1 Bondad de Ajuste

cat(paste0("**Coeficiente de Determinación ($R^2$):** ", round(r2, 4), " (", round(r2*100, 2), "%)<br>"))

Coeficiente de Determinación (\(R^2\)): 0.9117 (91.17%)

cat(paste0("**$R^2$ Ajustado:** ", round(r2_adj, 4), " (", round(r2_adj*100, 2), "%)"))

\(R^2\) Ajustado: 0.9117 (91.17%)

6.2 Ecuación Matemática

cat(paste0("La ecuación resultante es: ", ecuacion_latex))

La ecuación resultante es: \[Y = 206.40 + 1.0304 X_1 - 1.0257 X_2\]

7 Tabla Resumen del Modelo

# 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

8 Conclusiones

texto_conclusion <- paste0(
  "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)**.<br><br>",
  "El modelo presenta un coeficiente de determinación ($R^2$) del **", round(r2*100, 2), "%**, ",
  "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.<br><br>",
  "Por ejemplo, si tenemos un objetivo a **", val_x1, " m** y una elevación de **", val_x2, " m**, ",
  "el modelo estima una profundidad total de **", round(estimacion, 2), " m**."
)

cat(texto_conclusion)

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 (\(R^2\)) 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.