1 Librerías

El primer paso para el desarrollo del modelo es preparar nuestro entorno de trabajo cargando los paquetes necesarios para la manipulación de datos, generación de tablas formales y renderizado del documento.

library(readr)
library(rmarkdown)
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.5.3

2 Cargar datos

En esta primera sección, estableceremos los cimientos de nuestro análisis importando la base de datos original a nuestro entorno de trabajo en R. Este paso es fundamental, ya que nos permite cargar la información cruda desde su fuente, verificar que su estructura inicial sea la correcta (número de columnas, tipo de datos) y dejarla completamente lista para las posteriores etapas de manipulación y exploración.

# 1. Carga de datos
Datos_Brutos <- read.csv(
  "C:/Users/LEO/Documents/ESTA/R/Inferencial/tabela_de_pocos_janeiro_2018.csv",
  header         = TRUE,
  sep            = ",",
  dec            = ".", 
  fileEncoding = "UTF-8"
)

3 Selección de variables

Para entender la relación geométrica y operacional de los pozos, hemos seleccionado analizar la relación directa entre la ‘Profundidad Vertical’ y la ‘Profundidad del Sondador’.Justificación Causa-Efecto: La razón de esta elección radica en que la profundidad vertical real del pozo (nuestra variable independiente o causa, \(X\)) condiciona y guarda una estrecha correlación física con la profundidad total alcanzada por la sarta del sondador (nuestra variable dependiente o efecto, asignada a \(Y\)).

df_bruto <- data.frame(
  X = Datos_Brutos$PROFUNDIDADE_SONDADOR_M,
  Y = Datos_Brutos$PROFUNDIDADE_VERTICAL_M 
)

4 Tabla de pares de valores

Tras haber depurado exhaustivamente la información, en este apartado presentaremos una vista estructurada de los datos resultantes. Mostraremos una tabla limpia y consolidada que contiene exclusivamente los pares de observaciones \((X, Y)\) válidas. Este conjunto de datos definitivo será la materia prima exacta sobre la cual construiremos nuestras visualizaciones y ejecutaremos los cálculos matemáticos del modelo.

# Indicamos el tamaño muestral
tamaño_muestral_bruto <- nrow(df_bruto)
cat("El tamaño muestral inicial es de:", tamaño_muestral_bruto, "observaciones.\n\n")
## El tamaño muestral inicial es de: 29575 observaciones.
cat("--- PRIMERAS FILAS DE LA TABLA DE PARES ---\n")
## --- PRIMERAS FILAS DE LA TABLA DE PARES ---
head(df_bruto)
##      X        Y
## 1 4050 -3145.40
## 2 6925  6900.00
## 3 3809  2936.99
## 4 4575  2934.18
## 5 4570  2952.55
## 6 2844 -2686.47
paged_table(df_bruto)

5 Gráficas

5.1 Gráfica de nube de puntos

Antes de realizar cualquier cálculo complejo, es imprescindible realizar una inspección visual. Aquí construiremos un diagrama de dispersión (scatter plot) utilizando nuestros datos limpios. Esta gráfica nos permitirá observar de manera intuitiva cómo se distribuyen los puntos en un plano cartesiano, revelando a simple vista si existe alguna correlación preliminar y la dispersión general entre ambas variables.

plot(df_bruto$X, df_bruto$Y, 
     main="Gráfica N° 1: Dispersión Inicial",
     xlab="Profundidad del Sondador (X)", 
     ylab="Profundidad Vertical (Y)",
     pch=16, col=rgb(0.2, 0.4, 0.8, 0.5))

5.2 Conjetura del modelo

Al observar la gráfica inicial, notamos que la nube de puntos es compleja, con valores negativos o atípicos en la profundidad vertical, lo que impide ver una tendencia clara. Por lo tanto, debemos proceder con un refinamiento.

5.3 Tratamiento de los datos

Omitiremos valores nulos (NAs) y acotaremos las variables seleccionando únicamente registros con profundidades positivas mayores a cero para eliminar outliers extremos.

df_lin <- na.omit(df_bruto)
df_lin <- df_lin[df_lin$X > 0 & df_lin$Y > 0, ]

5.4 Nueva gráfica de dispersión

Graficamos nuevamente los datos tratados.

plot(df_lin$X, df_lin$Y, 
     main="Gráfica N° 2: Nube de Puntos Tratada (Tendencia Lineal)",
     xlab="Profundidad del Sondador (M)", 
     ylab="Profundidad Vertical (M)",
     pch=16, col=rgb(0.2, 0.4, 0.8, 0.5))

5.5 Nueva conjetura

Al aplicar el tratamiento, la nueva gráfica de dispersión revela una marcada extensión y tendencia ascendente. Por lo tanto, nuestra nueva conjetura es que existe una relación directamente proporcional de tipo lineal simple (\(Y = \beta_0 + \beta_1 X\)).

modelo_lineal <- lm(Y ~ X, data = df_lin)

6 Cálculo de parámetros

Procedemos a ejecutar el cálculo matemático para obtener los estimadores de nuestro modelo de regresión.

modelo_lineal <- lm(Y ~ X - 1, data = df_lin)
coeficientes <- coef(modelo_lineal)

beta_0 <- 0 # Intercepto forzado a 0
beta_1 <- coeficientes[1] # Pendiente (Slope)

cat("La ecuación del modelo es: Y =", round(beta_1, 4), "* X (con intercepto en 0,0)\n")
## La ecuación del modelo es: Y = 0.8852 * X (con intercepto en 0,0)

6.1 Realidad y modelo

Para validar visualmente nuestros parámetros, superponemos la línea de tendencia matemática sobre la realidad de nuestros datos empíricos.

plot(df_lin$X, df_lin$Y, 
     main="Gráfica N° 3: Realidad y Modelo Lineal",
     xlab="Profundidad Vertical (M)", 
     ylab="Profundidad del Sondador (M)",
     pch=16, col=rgb(0.2, 0.4, 0.8, 0.5))

abline(modelo_lineal, col="red", lty=1, lwd=3)

7 Test de bondad del modelo

Más allá de la apreciación visual, necesitamos una métrica cuantitativa robusta para evaluar nuestra conjetura. Por lo tanto, calcularemos el coeficiente de correlación lineal de Pearson. Este indicador estadístico nos proporcionará un valor numérico exacto que medirá tanto la fuerza como la dirección (positiva o negativa) de la asociación lineal existente entre nuestra variable independiente y la dependiente.

pearson_val <- cor(df_lin$X, df_lin$Y)
r2_val <- summary(modelo_lineal)$r.squared

cat("Coeficiente de correlación de Pearson (R):", round(pearson_val, 4), "\n")
## Coeficiente de correlación de Pearson (R): 0.8575
cat("Coeficiente de Determinación (R2):", round(r2_val, 4), "\n")
## Coeficiente de Determinación (R2): 0.8912
ecuacion_final <- paste0("y = ", round(beta_1, 4), "x")

tabla_modelo <- data.frame(
  Variable = c("Profundidad del Sondador", "Profundidad Vertical"),
  Tipo = c("Independiente (x)", "Dependiente (y)"),
  Pearson = c("", as.character(round(pearson_val, 4))),
  R2 = c("", as.character(round(r2_val, 4))),
  Intercepto = c("", "0"),
  Pendiente = c("", as.character(round(beta_1, 4))),
  Ecuacion = c("", ecuacion_final)
)

colnames(tabla_modelo) <- c("Variable", "Tipo", "Pearson", "R²", "Intercepto", "Pendiente", "Ecuación")

tabla_modelo %>%
  kable(format = "html", caption = "<b>Tabla N°1: Resumen del Modelo de Regresión (Desde el Origen)</b>", align = "c", escape = FALSE) %>%
  kable_styling(bootstrap_options = c("hover", "condensed"), full_width = FALSE, position = "center") %>%
  row_spec(0, bold = TRUE, background = "#F2F2F2", color = "#333333") %>%
  footnote(general = "Autor: Ashly Alzate", footnote_as_chunk = TRUE)
Tabla N°1: Resumen del Modelo de Regresión (Desde el Origen)
Variable Tipo Pearson Intercepto Pendiente Ecuación
Profundidad del Sondador Independiente (x)
Profundidad Vertical Dependiente (y) 0.8575 0.8912 0 0.8852 y = 0.8852x
Note: Autor: Ashly Alzate

7.1 Restricciones

Dominio Acotado: El modelo solo es confiable para los escenarios de perforación con los que fue diseñado y dentro del rango de profundidades válidas analizadas.

Condición de No Negatividad: Dado que el modelo calcula una profundidad geométrica, el resultado final nunca puede ser menor o igual a cero.

8 Estimación

Supongamos un escenario donde la profundidad vertical es de 2,500 metros, se estima una profundidad del sondador de:

# Supongamos un incidente donde se liberan 2,500 barriles
val_x <- 2500
prediccion_y <- predict(modelo_lineal, newdata = data.frame(X = val_x))

cat("\n--- ESTIMACIÓN ---\n")
## 
## --- ESTIMACIÓN ---
cat("Para una profundidad del sondador de", val_x, "metros, se estima una profundidad vertical de:", 
    round(prediccion_y, 2), "metros.\n")
## Para una profundidad del sondador de 2500 metros, se estima una profundidad vertical de: 2212.94 metros.

9 Conclusión

Entre la Profundidad Vertical y la Profundidad del Sondador existe una relación de tipo lineal cuya ecuación matemática está representada por \(y = 0.7444x + 244.3067\), siendo ‘x’ la Profundidad Vertical y ‘y’ la Profundidad del Sondador. El modelo estimado muestra que por cada metro que aumenta la Profundidad Vertical, la Profundidad del Sondador aumenta en aproximadamente \(0.7444\) metros. El intercepto representa el valor estimado cuando la Profundidad Vertical es 0, y su presencia mejora el ajuste estadístico del modelo. El coeficiente de determinación indica un nivel adecuado de explicación y asociación lineal de las observaciones petroleras evaluadas.