library(tidyverse)
library(readr)
library(ggplot2)
library(gt)
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"
Para este análisis se seleccionan las siguientes variables:
measured_depth (Measured Depth, ft), que
representa la longitud total de la trayectoria perforada desde la
superficie hasta el fondo del pozo.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()
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 |
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()
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.
datos_limpios <- datos_modelo %>%
filter(tvd <= measured_depth) %>%
group_by(measured_depth) %>%
summarise(tvd = mean(tvd))
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()
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.
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 |
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()
# 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² | 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
# 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.
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.