1. Librerías

library(tidyverse)
library(readr)
library(ggplot2)
library(gt)

2. Carga de datos y nombres de variables

datos_originales <- readr::read_csv2("Oil__Gas____Other_Regulated_Wells__Beginning_1860.csv")

# Línea de diagnóstico temporal para verificar los nombres exactos de las columnas en tu archivo
names(datos_originales)
##  [1] "API Well Number"                "County Code"                   
##  [3] "API Hole Number"                "Sidetrack"                     
##  [5] "Completion"                     "Well Name"                     
##  [7] "Company Name"                   "Operator Number"               
##  [9] "Well Type"                      "Map Symbol"                    
## [11] "Well Status"                    "Status Date"                   
## [13] "Permit Application Date"        "Permit Issued Date"            
## [15] "Date Spudded"                   "Date of Total Depth"           
## [17] "Completion Decade"              "Completion Year"               
## [19] "Completion Month"               "Completion Day"                
## [21] "Date Well Plugged"              "Date Well Confidentiality Ends"
## [23] "Confidentiality Code"           "Town"                          
## [25] "Quad"                           "Quad Section"                  
## [27] "Producing Field"                "Producing Formation"           
## [29] "Financial Security"             "Slant"                         
## [31] "County"                         "Region"                        
## [33] "State Lease"                    "Proposed Depth, ft"            
## [35] "Surface Longitude"              "Surface Latitude"              
## [37] "Bottom Hole Longitude"          "Bottom Hole Latitude"          
## [39] "True Vertical Depth, ft"        "Measured Depth, ft"            
## [41] "Kickoff, ft"                    "Drilled Depth, ft"             
## [43] "Elevation, ft"                  "Original Well Type"            
## [45] "Permit Fee"                     "Objective Formation"           
## [47] "Depth Fee"                      "Spacing"                       
## [49] "Spacing Acres"                  "Integration"                   
## [51] "Hearing Date"                   "Date Last Modified"            
## [53] "DEC Database Link"              "Location 1"                    
## [55] "Georeference"

3. Selección de variables

Para este análisis se seleccionan las siguientes variables:

  • Variable Independiente (\(X\) - Causa): measured_depth (Measured Depth, ft), que representa la longitud total de la trayectoria perforada desde la superficie hasta el fondo del pozo.
  • Variable Dependiente (\(Y\) - Efecto): tvd (True Vertical Depth, ft), que indica la profundidad vertical real. Se elige como efecto porque depende directamente de cómo se desvíe o se trace el pozo durante la perforación.

(Nota: Asegúrate de que los nombres entre comillas invertidas coincidan exactamente con los que imprima el comando names(datos_originales) de arriba, ya que en algunas versiones del archivo pueden cambiar las mayúsculas, tildes o espacios).

datos_modelo <- datos_originales %>%
  select(tvd = `True Vertical Depth, ft`, measured_depth = `Measured Depth, ft`) %>%
  mutate(tvd = as.numeric(tvd), measured_depth = as.numeric(measured_depth)) %>%
  drop_na()

4. Tabla de pares de valores

cat("Tamaño muestral:", nrow(datos_modelo))
## Tamaño muestral: 47379
head(datos_modelo, 5) %>%
  gt() %>%
  tab_header(
    title = "Muestra de Datos Originales",
    subtitle = "Profundidad Vertical Verdadera vs. Profundidad Medida (pies)"
  ) %>%
  cols_label(
    tvd = "TVD (ft)",
    measured_depth = "Measured Depth (ft)"
  )
Muestra de Datos Originales
Profundidad Vertical Verdadera vs. Profundidad Medida (pies)
TVD (ft) Measured Depth (ft)
2006 2006
0 0
0 0
0 0
1800 1800

5. Gráfica de dispersión

ggplot(datos_modelo, aes(x = measured_depth, y = tvd)) + 
  geom_point(alpha = 0.5, color = "steelblue") +
  labs(
    title = "Dispersión Inicial: TVD vs Measured Depth",
    x = "Profundidad Medida (ft)",
    y = "Profundidad Vertical Verdadera (ft)"
  ) +
  theme_minimal()

6. Conjetura

Se plantea utilizar un modelo de regresión lineal simple, el cual asume que existe una relación de dependencia directa y proporcional entre la profundidad medida (\(X\)) y la profundidad vertical verdadera (\(Y\)). La estructura matemática teórica que se propone para representar este comportamiento es:

\[y = \beta_0 + \beta_1 x + \epsilon\]

Donde \(\beta_0\) es el intercepto, \(\beta_1\) la pendiente y \(\epsilon\) el término de error.

6.1 Tratamiento de los datos

  • Omisión de outliers: Se eliminan registros donde la TVD es mayor a la MD (físicamente imposible).
  • Único x, y: Se agrupan los datos por MD para obtener el promedio de TVD por cada nivel de profundidad.
datos_limpios <- datos_modelo %>%
  filter(tvd <= measured_depth) %>%
  group_by(measured_depth) %>%
  summarise(tvd = mean(tvd))

6.2 Nueva gráfica de dispersión

ggplot(datos_limpios, aes(x = measured_depth, y = tvd)) + 
  geom_point(alpha = 0.5, color = "darkblue") +
  labs(
    title = "Dispersión Limpia y Agrupada",
    x = "Profundidad Medida (ft)",
    y = "Profundidad Vertical Verdadera (ft)"
  ) +
  theme_minimal()

6.3 Nueva conjetura

Tras limpiar y agrupar los datos, la gráfica de dispersión muestra una tendencia estrictamente creciente y alineada de forma muy marcada. Esto confirma que la relación entre ambas variables se ajusta adecuadamente a un modelo lineal, permitiendo plantear la siguiente función estimada de comportamiento:

\[\hat{y} = \beta_0 + \beta_1 x\]

Se espera que la pendiente (\(\beta_1\)) sea cercana y menor a 1, reflejando que la profundidad medida siempre es igual o mayor a la profundidad vertical debido a la desviación propia de los pozos.

7. Cálculo de parámetros

modelo <- lm(tvd ~ measured_depth, data = datos_limpios)

# Tabla estilizada para los coeficientes del modelo
broom::tidy(modelo) %>%
  gt() %>%
  tab_header(
    title = "Parámetros del Modelo de Regresión Lineal"
  ) %>%
  cols_label(
    term = "Coeficiente",
    estimate = "Estimación",
    std.error = "Error Estándar",
    statistic = "Estadístico t",
    p.value = "P-valor"
  ) %>%
  fmt_number(
    columns = c(estimate, std.error, statistic, p.value),
    decimals = 4
  )
Parámetros del Modelo de Regresión Lineal
Coeficiente Estimación Error Estándar Estadístico t P-valor
(Intercept) 369.2726 14.0287 26.3227 0.0000
measured_depth 0.8428 0.0033 253.4779 0.0000

8. Realidad y modelo

A continuación se muestra la gráfica interpuesta que contrasta los datos reales observados de los pozos frente a la línea del modelo matemático ajustado.

ggplot(datos_limpios, aes(x = measured_depth, y = tvd)) + 
  geom_point(alpha = 0.4, color = "gray40") + 
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(
    title = "Modelo Ajustado sobre la Realidad",
    x = "Profundidad Medida (ft)",
    y = "Profundidad Vertical Verdadera (ft)"
  ) +
  theme_minimal()

9. Test

# Resumen estadístico global del modelo en formato tabular
broom::glance(modelo) %>%
  gt() %>%
  tab_header(
    title = "Estadísticas de Bondad de Ajuste del Modelo"
  ) %>%
  cols_label(
    r.squared = "R²",
    adj.r.squared = "R² Ajustado",
    sigma = "Error Residual (Sigma)",
    statistic = "Estadístico F",
    p.value = "P-valor Global",
    df = "Grados de Libertad",
    logLik = "Log-Likelihood",
    AIC = "AIC",
    BIC = "BIC",
    deviance = "Desviación",
    df.residual = "DF Residuales"
  ) %>%
  fmt_number(
    columns = c(r.squared, adj.r.squared, sigma, statistic, p.value, AIC, BIC),
    decimals = 4
  )
Estadísticas de Bondad de Ajuste del Modelo
R² Ajustado Error Residual (Sigma) Estadístico F P-valor Global Grados de Libertad Log-Likelihood AIC BIC Desviación DF Residuales nobs
0.9262 0.9262 602.4624 64,251.0552 0.0000 1 -40052.85 80,111.7095 80,131.3334 1858360320 5120 5122
# Coeficiente de correlación de Pearson
correlacion <- cor(datos_limpios$measured_depth, datos_limpios$tvd)
cat("Coeficiente de correlación de Pearson:", correlacion)
## Coeficiente de correlación de Pearson: 0.9623897

10. Restricciones

  • El modelo de regresión lineal es estrictamente válido dentro del intervalo de profundidades medidas observadas en el registro histórico analizado; extrapolar fuera de este rango puede generar estimaciones físicamente incoherentes.
  • Se asume que la trayectoria de perforación mantiene una desviación continua y predecible, por lo que cambios drásticos o anómalos en la geología local no están contemplados de manera directa por la tendencia lineal global.

11. Estimación

# Cálculo de la estimación y del intervalo de confianza para las profundidades objetivo
nuevos_valores <- data.frame(measured_depth = c(5000, 7500, 10000))
predicciones_df <- predict(modelo, newdata = nuevos_valores, interval = "confidence", level = 0.95)

estimacion_resultado <- data.frame(
  measured_depth = nuevos_valores$measured_depth,
  tvd_estimada = predicciones_df[, "fit"],
  ic_inf = predicciones_df[, "lwr"],
  ic_sup = predicciones_df[, "upr"]
)

cat("Estimación de TVD para 5000 ft:", round(estimacion_resultado$tvd_estimada[1], 2), "ft\n")
## Estimación de TVD para 5000 ft: 4583.09 ft
cat("Intervalo de confianza (95%): [", round(estimacion_resultado$ic_inf[1], 2), ",", round(estimacion_resultado$ic_sup[1], 2), "]\n")
## Intervalo de confianza (95%): [ 4563.48 , 4602.7 ]

¿Cuál es la profundidad vertical verdadera estimada para un pozo con una profundidad medida de 5000 ft? 4583.09 ft La estimación indica que para una trayectoria medida de 5000 pies, se espera una profundidad vertical verdadera promedio de 4583.09 pies.

¿Entre qué valores se encuentra la verdadera profundidad vertical media con un 95% de confianza para dicha profundidad medida? Entre 4563.48 ft y 4602.7 ft Mediante la estimación por intervalos con un 95% de confianza, se determina que el valor poblacional esperado para la profundidad vertical verdadera se sitúa dentro de dicho margen.

12. Conclusión

Utilizando las variables de profundidad del dataset, se evaluó la conjetura del Modelo de Regresión Lineal junto con el coeficiente de correlación de Pearson (96.24%) y la significancia global del modelo (\(p < 0.05\)).

Las gráficas se estructuraron de manera clara para visualizar tanto los datos reales como el ajuste del modelo de forma superpuesta. Mediante el cálculo de estimaciones y la aplicación de intervalos de confianza del 95%, se comprobó que la relación lineal entre la profundidad medida y la profundidad vertical verdadera es estadísticamente sólida para describir el comportamiento de los pozos analizados.