1 Librerias

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

2 Carga de Datos

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.")
})

3 Selecció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 (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).

datos_base <- Datos_Brutos %>%
  filter(TERRA_MAR == "T") %>% # Filtro estricto para pozos terrestres
  dplyr::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), ",", ".")))
  ) %>%
  # Filtros físicos de viabilidad
  filter(!is.na(x1) & !is.na(x2) & !is.na(y)) %>%
  filter(x1 > 0 & x1 < 10000 & x2 >= 0 & x2 <= 500 & y > 0 & y < 12000)

4 Tabla de Pares de Valores

El tamaño muestral operativo es de 3871 pozos terrestres.

kable(head(datos_base %>% dplyr::select(x1, x2, y), 5),
      col.names = c("Prof. Vertical (X1)", "Cota Altimétrica (X2)", "Prof. Perforación (Y)"))
Prof. Vertical (X1) Cota Altimétrica (X2) Prof. Perforación (Y)
2686.47 135.22 2844
2994.51 97.77 3117
2364.00 50.90 2421
1679.70 3.50 1690
536.00 134.50 705

5 Gráfica de Dispersión

Se plantea la ecuación del plano: Y=β0+β1⋅X1+β2⋅X2

plot_ly(data = datos_base, x = ~x1, y = ~x2, z = ~y,
        type = "scatter3d", 
        mode = "markers",
        marker = list(
            size = 4,
            color = ~y,
            colorscale = "Viridis",
            opacity = 0.75
        ),      
        name = "Pozos Originales") %>%
  layout(
    title = "Gráfica N°1: Dispersión Espacial (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)) 
    )
  )

6 Tratamiento de Datos

Para garantizar la fiabilidad del plano de regresión sin alterar la naturaleza de los datos tridimensionales, se ajusta un modelo preliminar y se aplica el filtro del Rango Intercuartílico (IQR) sobre los residuos. Esto descarta aquellos pozos cuya longitud de perforación sea físicamente anómala respecto a la suma de su topografía y objetivo geológico.

# Ajuste preliminar del plano
modelo_preliminar <- lm(y ~ x1 + x2, data = datos_base)
datos_base$residuo <- resid(modelo_preliminar)

# Filtro estadístico IQR
filtrar_outliers <- function(residuos) {
  Q1  <- quantile(residuos, 0.25, na.rm = TRUE)
  Q3  <- quantile(residuos, 0.75, na.rm = TRUE)
  IQR <- Q3 - Q1
  k   <- 1.5 
  residuos >= (Q1 - k * IQR) & residuos <= (Q3 + k * IQR)
}

datos_estrictos <- datos_base %>% filter(filtrar_outliers(residuo))

x1_final <- datos_estrictos$x1
x2_final <- datos_estrictos$x2
y_final  <- datos_estrictos$y

El tamaño muestral depurado es de 3248 observaciones limpias.

7 Conjetura

La distribución espacial de los puntos sugiere una fuerte relación aditiva lineal. Se espera que la Profundidad de Perforación crezca de manera proporcional tanto al incremento de la Profundidad Vertical como al de la Cota Altimétrica, justificando el ajuste de un plano de regresión múltiple.

8 Parámetros

Modelo de regresión lineal múltiple (Plano):

\[Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2\]

Ajuste del modelo:

modelo_mult <- lm(y_final ~ x1_final + x2_final)

Parámetros:

param <- coef(modelo_mult)

b0_est <- unname(param[1]) # Intercepto
b0_est
## [1] 5.482063
b1_est <- unname(param[2]) # Coef. Profundidad Vertical
b1_est
## [1] 1.006929
b2_est <- unname(param[3]) # Coef. Cota Altimétrica
b2_est
## [1] 1.001392

9 Comparación de la realidad con el modelo

grid_x1 <- seq(min(x1_final), max(x1_final), length.out = 30) 
grid_x2 <- seq(min(x2_final), max(x2_final), length.out = 30)

z_plano <- t(outer(grid_x1, grid_x2, function(val_x1, val_x2) {
  b0_est + (b1_est * val_x1) + (b2_est * val_x2)
}))

plot_ly() %>%
  add_surface(
    x = grid_x1,
    y = grid_x2,
    z = z_plano,
    colorscale = "Viridis",
    opacity = 0.6,
    showscale = FALSE,
    name = "Plano Ajustado"
  ) %>%
  add_trace(
    data = datos_estrictos,
    x = ~x1_final,
    y = ~x2_final,
    z = ~y_final,
    type = "scatter3d",
    mode = "markers",
    marker = list(
      size = 4,
      color = ~y_final,
      colorscale = "Viridis",
      opacity = 0.9
    ),
    name = "Datos Depurados"
  ) %>%
  layout(
    title = "Gráfica N°2: Plano de Regresión vs Datos Reales",
    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.6, y = 1.6, z = 0.8))
    )
  )

10 Test de Bondad

resumen <- summary(modelo_mult)
r2 <- resumen$r.squared
r2_adj <- resumen$adj.r.squared
r <- sqrt(r2) # Correlación múltiple (R)
ecuacion_txt_simple <- paste0("Y = ", round(b0_est, 4), 
                              ifelse(b1_est >= 0, " + ", " - "), abs(round(b1_est, 4)), "X1",
                              ifelse(b2_est >= 0, " + ", " - "), abs(round(b2_est, 4)), "X2")

tabla_resumen <- data.frame(
  Parametro = c(
    "Tipo de Regresión",
    "Ecuación del Plano",
    "Correlación Múltiple (R)",
    "Coeficiente de Determinación (R²)",
    "R² Ajustado",
    "Intercepto (b0)",
    "Coef. Prof. Vertical (b1)",
    "Coef. Cota Altimétrica (b2)"
  ),
  Valor = c(
    "Lineal Múltiple",
    ecuacion_txt_simple,
    paste0(round(r * 100, 2), " %"),
    paste0(round(r2 * 100, 2), " %"),
    paste0(round(r2_adj * 100, 2), " %"),
    sprintf("%.4f", b0_est),
    sprintf("%.4f", b1_est),
    sprintf("%.4f", b2_est)
  )
)

tabla_resumen %>%
  gt() %>%
  tab_header(
    title = md("**RESUMEN DEL MODELO MÚLTIPLE**"),
    subtitle = md("**Parámetros y Bondad de Ajuste**")
  ) %>%
  tab_source_note(source_note = "Autor: Anahi Macias") %>%
  cols_label(
    Parametro = md("**Parámetro**"),
    Valor     = md("**Valor**")
  ) %>%
  cols_align(align = "left", columns = Parametro) %>%
  cols_align(align = "center", columns = Valor) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")),
    locations = cells_title(groups = "title")
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold", size = "small")),
    locations = cells_title(groups = "subtitle")
  ) %>%
  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",
    column_labels.border.bottom.color = "#2C3E50",
    data_row.padding = px(8)
  )
RESUMEN DEL MODELO MÚLTIPLE
Parámetros y Bondad de Ajuste
Parámetro Valor
Tipo de Regresión Lineal Múltiple
Ecuación del Plano Y = 5.4821 + 1.0069X1 + 1.0014X2
Correlación Múltiple (R) 99.95 %
Coeficiente de Determinación (R²) 99.9 %
R² Ajustado 99.9 %
Intercepto (b0) 5.4821
Coef. Prof. Vertical (b1) 1.0069
Coef. Cota Altimétrica (b2) 1.0014
Autor: Anahi Macias

11 Restricciones

Dominios:

\[ D_{X_1}=\{x_1\in\mathbb{R}:x_1\ge0\} \]

\[ D_{X_2}=\{x_2\in\mathbb{R}:x_2\ge0\} \]

\[ D_Y=\{y\in\mathbb{R}:y\ge0\} \]

¿Existe una combinación de \(X_1\) y \(X_2\) que reemplazados en el plano genere un valor fuera del dominio de Y?

No hay restricciones. Dado que \(X_1\) y \(X_2\) son variables de distancias físicas, no pueden tomar valores negativos. Analizando los parámetros del modelo, tanto el intercepto (\(5.48\)) como los coeficientes aditivos (\(b_1\) y \(b_2\)) son positivos. Por lo tanto, cualquier combinación de Profundidad Vertical y Cota Altimétrica positiva siempre generará una Profundidad de Perforación (\(Y\)) estrictamente positiva, manteniéndose siempre dentro de su dominio físico.

12 Estimación

# Pregunta de cantidad
x1_cantidad <- 1750
x2_cantidad <- 39

y_cantidad <- b0_est + (b1_est * x1_cantidad) + (b2_est * x2_cantidad)
par(mar = c(1, 1, 1, 1))

plot(0, 0,
     type = "n",
     xlim = c(0, 1),
     ylim = c(0, 1),
     axes = FALSE,
     xlab = "",
     ylab = "")

text(
  x = 0.5,
  y = 0.48,
  labels = paste(
    "Pregunta de cantidad\n\n",
    "¿Qué Profundidad de Perforación se espera al tener una Prof. Vertical\n",
    "de ", x1_cantidad, " m y una Cota Altimétrica de ", x2_cantidad, " m?\n\n",
    "Resultado: ", round(y_cantidad, 2), " m\n\n",
sep = ""
  ),
  cex = 1.1,
  col = "#1f384c",
  font = 2
)

13 Conclusión

Entre la Profundidad de Perforación (Y), la Profundidad Vertical (X₁) y la Cota Altimétrica (X₂) (medidas en metros) existe una relación de tipo lineal múltiple definida por la ecuación del plano \(Y=5.4821+1.0069X_1+1.0014X_2\), donde la Profundidad de Perforación está explicada en un 99.90% por la acción conjunta de la Profundidad Vertical y la Cota Altimétrica, mientras que el 0.10% restante se debe a factores externos no incluidos en el modelo. El modelo no presenta restricciones dentro del dominio físico de las variables.