1 Configuración y Carga de Datos

##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: LISS MURILLO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####

#### REGRESIÓN MÚLTIPLE 3D ####
## DATASET ##
setwd("~/SEBAS PROYECTO")
# Cargar dataset
Datos <- read.csv("oil_and_gas_leases_data.csv", sep = ",", fileEncoding = "latin1")
## Estructura de los datos
str(Datos)
'data.frame':   47757 obs. of  24 variables:
 $ KID                      : int  1001106903 1001106572 1001106590 1001107343 1001108234 1001106684 1001107377 1001107386 1001107740 1001106710 ...
 $ DEPTH_OF_WELL            : num  700 800 1400 1125 2940 ...
 $ CUMULATIVE_PRODUCTION    : num  47225 275063 82624 7544 681006 ...
 $ AVG_PRODUCTION           : num  859 5001 1758 377 24322 ...
 $ LATITUDE                 : num  37.1 38.8 37.5 37.8 37.1 ...
 $ LONGITUDE                : num  -95.9 -95.2 -96.3 -95.7 -101.3 ...
 $ YEARS_ACTIVE             : num  55 55 47 20 28 55 20 48 48 55 ...
 $ SECTION                  : num  33 11 34 8 30 4 26 28 11 17 ...
 $ COUNTY_CODE              : num  125 45 49 207 189 121 49 1 31 121 ...
 $ STATE_CODE               : int  15 15 15 15 15 15 15 15 15 15 ...
 $ TOWNSHIP                 : num  33 15 29 26 33 17 30 26 23 16 ...
 $ RANGE                    : num  14 20 10 16 36 25 12 21 16 24 ...
 $ PRODUCES_OIL             : num  1 1 1 1 0 1 1 1 1 1 ...
 $ PRODUCES_GAS             : num  0 0 0 0 1 0 0 0 0 0 ...
 $ OPERATOR_NAME            : chr  "Horton, John" "Whitlow Energy, Inc." "Suerte Oil Company" "Patterson-Blackford" ...
 $ FIELD_NAME               : chr  "WAYSIDE-HAVANA" "BALDWIN" "DUNKLEBERGER" "ROSE EAST" ...
 $ PRODUCING_FORMATION      : chr  "UNKNOWN" "UNKNOWN" "UNKNOWN" "UNKNOWN" ...
 $ LONGITUDE_LATITUDE_SOURCE: chr  "CENTER_OF_SECTION" "CENTER_OF_SECTION" "CENTER_OF_SECTION" "CENTER_OF_SECTION" ...
 $ PROD_LEVEL               : chr  "MEDIUM" "HIGH" "MEDIUM" "LOW" ...
 $ DEPTH_LEVEL              : chr  "SHALLOW" "SHALLOW" "SHALLOW" "SHALLOW" ...
 $ LIFE_STAGE               : chr  "OLD" "OLD" "OLD" "MATURE" ...
 $ AVG_PROD_LEVEL           : chr  "LOW" "MEDIUM" "MEDIUM" "LOW" ...
 $ TOWNSHIP_DIRECTION       : chr  "S" "S" "S" "S" ...
 $ RANGE_DIRECTION          : chr  "E" "E" "E" "E" ...
## Librerias 
library(dplyr)
library(ggplot2)
library(gt)
library(stringr)
library(plotly)

2 Extracción y Depuración de Variables

El diseño de este modelo responde a una lógica operacional de “Interacción de Factores de Producción” aplicada a la gestión de pozos petroleros. Se busca explicar la Producción Promedio como el resultado combinado de dos variables operativas fundamentales: la antigüedad del pozo y la producción acumulada a lo largo de su vida útil.

  • Variable Dependiente (Y): Producción Promedio. Se seleccionó como variable de respuesta porque representa la producción promedio estimada de un pozo, es decir, su desempeño operativo actual. Es el resultado final del comportamiento del pozo y no depende de decisiones arbitrarias, sino de factores históricos y operativos que reflejan su eficiencia.

  • Variable Independiente 1 (X₁): Años Activo. Indica el tiempo que el pozo ha estado en operación. Esta variable refleja la madurez del pozo, su experiencia operativa y la evolución de su rendimiento a lo largo del tiempo. Es la variable dominante, ya que determina de manera significativa la capacidad de producción promedio actual.

  • Variable Independiente 2 (X₂): Producción Acumulada. Representa la producción acumulada del pozo desde su inicio. Esta variable cuantifica el efecto histórico del rendimiento del pozo sobre su producción promedio actual, aportando información complementaria sobre su desempeño operativo.

La Producción Promedio (Y) es, esencialmente, el resultado de la interacción entre la antigüedad del pozo (X₁) y su producción acumulada (X₂). Ambos factores interactúan para determinar la producción promedio estimada, proporcionando un panorama integral del desempeño del pozo.

# Selección de variables
datos_model <- Datos %>%
  select(AVG_PRODUCTION, YEARS_ACTIVE, CUMULATIVE_PRODUCTION) %>%
  mutate(
    y  = as.numeric(AVG_PRODUCTION),
    x1 = as.numeric(YEARS_ACTIVE),
    x2 = as.numeric(CUMULATIVE_PRODUCTION)
  ) %>%
  filter(!is.na(y), !is.na(x1), !is.na(x2)) %>%
  filter(y > 0, x1 > 0, x2 > 0)

# Limpiea de outliers
datos_model <- datos_model %>%
  filter(
    between(x2, quantile(x2, 0.02), quantile(x2, 0.98)),
    between(y, quantile(y, 0.02), quantile(y, 0.98))
  )

y  <- datos_model$y
x1 <- datos_model$x1
x2 <- datos_model$x2

3 Análisis Gráfico Exploratorio (3D)

El gráfico 3D permite analizar la distribución y relación entre los Años de Actividad, la Producción Acumulada y la Producción Promedio.

# Gráfico 3D 
plot_ly(
  x = ~x1, 
  y = ~x2, 
  z = ~y,
  type = "scatter3d", 
  mode = "markers",
  marker = list(
    size = 4, 
    color = "#E67E22", 
    line = list(color = '#A04000', width = 0.5)
  ),
  name = "Pozos"
) %>%

layout(
    title = list(
      text = "Gráfica N°1: Producción Promedio en función de Años Activos y Producción Acumulada - 3D",
      font = list(size = 12),
      font = list(size = 12),
      x = 0.5,               
      xanchor = 'center'     
    ),
    scene = list(
      xaxis = list(title = list(text = "Años Activo [X₁]", font = list(size = 10))),
      yaxis = list(title = list(text = "Producción Acumulada [X₂]", font = list(size = 10))),
      zaxis = list(title = list(text = "Producción Promedio [Y]", font = list(size = 10))),
      camera = list(eye = list(x = 1.6, y = 1.6, z = 1.2))
    ),
    margin = list(t = 50)    
  )

4 Aplicación de Binning

Se aplicó un procedimiento de binning sobre la Producción Acumulada para agrupar los datos en intervalos homogéneos y reducir la variabilidad extrema. Cada grupo se representa por su valor promedio, lo que permite generar un conjunto más estable y representativo para el ajuste del modelo de regresión múltiple.

bin_width <- (max(datos_model$x2) - min(datos_model$x2)) / 25

datos_model <- datos_model %>%
  mutate(
    x2_bin = round(x2 / bin_width) * bin_width
  ) %>%
  group_by(x2_bin) %>%
  summarise(
    y = mean(y),
    x1 = mean(x1),
    .groups = "drop"
  ) %>%
  mutate(
    x2 = log(x2_bin)
  )

5 Conjetura del 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] 

6 Gráfica del Modelo Múltiple

Se visualiza el plano de regresión múltiple junto con los datos reales, permitiendo observar el ajuste del modelo y la relación conjunta entre los Años Activo, la Producción Acumulada y la Producción Promedio.

# Crear grilla de valores
grid_x1 <- seq(min(x1), max(x1), length.out = 50)   
grid_x2 <- seq(min(x2), max(x2), length.out = 50)   

# Calcular plano ajustado
z_plano <- t(outer(grid_x1, grid_x2, function(x1_val, x2_val) {
  b0 + (b1 * x1_val) + (b2 * x2_val)
}))

# Gráfico interactivo
plot_ly() %>%
  
  add_trace(
    x = grid_x1, 
    y = grid_x2, 
    z = z_plano,
    type = "surface",
    colorscale = list(c(0, 1), c("#F39C12", "#E67E22")), 
    opacity = 0.7,
    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 Binned"
  ) %>%
  
  layout(
    title = list(
      text = "Gráfica N°2: Plano de Regresión de la Producción Promedio",
      font = list(size = 12),
      x = 0.5,               
      xanchor = 'center'     
    ),
    scene = list(
      xaxis = list(title = list(text = "Años Activo [X₁]", font = list(size = 10))),
      yaxis = list(title = list(text = "Producción Acumulada [X₂]", font = list(size = 10))),
      zaxis = list(title = list(text = "Producción Promedio [Y]", font = list(size = 10))),
      camera = list(eye = list(x = 1.6, y = 1.6, z = 1.2))
    ),
    margin = list(t = 50)    
  )

7 Test de Bondad del Modelo

7.1 Coeficiente de correlación múltiple

# Valores predichos
y_pred <- predict(modelo)

# Correlación múltiple
r <- cor(y, y_pred)

cat("El coeficiente de correlación múltiple es: ", round(r, 2))
El coeficiente de correlación múltiple es:  0.85

7.2 Coeficiente de determinación

El coeficiente de determinación (R²) es: 0.73

8 Ecuación del Modelo

La ecuación estimada del modelo es:

 y = 4637.1099 + -151.250941·X₁ + 0.033977·X₂

9 Tabla Resumen del Modelo

tabla_resumen <- data.frame(
  Variable = c("Años Activo", "Producción Acumulada", "Producción Promedio"),
  Tipo = c("Independiente (X₁)", "Independiente (X₂)", "Dependiente (Y)"),
  R_multiple = c("", "", round(r, 2)),
  R2 = c("", "", round(r2, 2)),
  Intercepto = c("", "", round(b0, 4)),
  Beta1 = c("", "", round(b1, 6)),
  Beta2 = c("", "", round(b2, 6)),
  Ecuación = c("", "", ecuacion)
)

tabla_resumen %>%
  gt() %>%
  tab_header(title = md("**Tabla N°1 del Resumen del Modelo de Regresión Múltiple**")) %>%
  tab_source_note(source_note = "Autor: Liss Murillo") %>%
  cols_align(align = "center", everything())
Tabla N°1 del Resumen del Modelo de Regresión Múltiple
Variable Tipo R_multiple R2 Intercepto Beta1 Beta2 Ecuación
Años Activo Independiente (X₁)
Producción Acumulada Independiente (X₂)
Producción Promedio Dependiente (Y) 0.85 0.73 4637.1099 -151.250941 0.033977 y = 4637.1099 + -151.250941·X₁ + 0.033977·X₂
Autor: Liss Murillo

10 Cálculo de Estimaciones

¿Cuál es la Producción Promedio estimada para un pozo con 10 años activo y 5,000 de Producción Acumulada?

Para un pozo con 10 años activo y 5000 de producción acumulada, la Producción Promedio estimada es: 3294.486

11 Conclusiones

Se creó un modelo de regresión lineal múltiple para calcular la Producción Promedio (Y) a partir de los Años Activo (X₁) y la Producción Acumulada (X₂).

El coeficiente de determinación (R²) del modelo es del 0.73, lo que indica que aproximadamente el 73% de la variabilidad de la Producción Promedio se explica por la combinación de la madurez del pozo y su producción histórica. El resultado confirma la relación esperada: los Años Activo influyen de manera significativa sobre el desempeño, mientras que la Producción Acumulada aporta un efecto complementario.

En términos generales, el modelo demuestra una adecuada capacidad predictiva dentro del rango analizado, constituyendo una herramienta válida para la estimación preliminar del desempeño promedio de los pozos.