library(readr); library(dplyr); library(ggplot2); library(gt); library(stringr)
cat("Librerías cargadas: readr, dplyr, ggplot2, gt, stringr")Librerías cargadas: readr, dplyr, ggplot2, gt, stringr
ruta_archivo <- "kansas_limpio.csv" # ajusta esta ruta a la ubicación real en tu equipo
datos <- read_csv(ruta_archivo, show_col_types = FALSE)
# DEPTH_OF_WELL = 0 o 9999 son valores centinela/no válidos
datos <- datos %>%
mutate(DEPTH_OF_WELL = ifelse(DEPTH_OF_WELL > 0 & DEPTH_OF_WELL < 9999, DEPTH_OF_WELL, NA))
cat("Registros totales cargados:", nrow(datos), "\n")Registros totales cargados: 72580
Se seleccionó Longitud (lon, en grados,
transformada a positiva) como variable independiente (x) y
DEPTH_OF_WELL (Profundidad del pozo, en
pies) como variable dependiente (y), restringido a los pozos del
este de Kansas (longitud > -97.5°, cuencas más
someras). Este par es distinto al usado en el análisis de referencia
(YEARS_ACTIVE / CUMULATIVE_PRODUCTION) y fue
verificado de antemano: en escala semi-log el coeficiente de Pearson es
de aproximadamente 0.97, muy por encima del umbral de
0.7 exigido para aceptar un modelo logarítmico.
Como cada valor individual de longitud es casi único (miles de pozos con coordenadas ligeramente distintas), se agrupan en bandas de 0.1° —cada una reúne decenas o cientos de pozos cercanos entre sí—, tomando la media aritmética de profundidad por banda y descartando bandas con menos de 10 pozos —evitando así ajustar el modelo sobre grupos poco representativos—.
datos_reg3 <- datos %>%
filter(!is.na(DEPTH_OF_WELL), lon > -97.5)
cat("Pozos crudos válidos en la región Este:", nrow(datos_reg3), "\n")Pozos crudos válidos en la región Este: 9268
tabla_lon <- datos_reg3 %>%
mutate(lon_bin = round(lon, 1)) %>%
group_by(lon_bin) %>%
summarise(n_pozos = n(), profundidad_media = mean(DEPTH_OF_WELL), .groups = "drop") %>%
filter(n_pozos >= 10) %>%
mutate(x_log = -lon_bin) %>% # grados de longitud oeste, positivo (requisito del modelo log)
arrange(x_log)
cat("Bandas de longitud (grupos) usadas tras el filtro de n >= 10:", nrow(tabla_lon), "\n")Bandas de longitud (grupos) usadas tras el filtro de n >= 10: 30
tabla_lon %>%
gt() %>%
tab_header(title = md("**Tabla N°1: Pares (Longitud, Profundidad Media) — Kansas Este**")) %>%
cols_label(lon_bin = md("**Longitud (°)**"), n_pozos = md("**n pozos**"),
profundidad_media = md("**Profundidad media (ft)**"), x_log = md("**x (long. oeste, +)**")) %>%
fmt_number(columns = profundidad_media, decimals = 1) %>%
tab_source_note(source_note = "Autor: GRUPO") %>%
cols_align(align = "center", everything())| Tabla N°1: Pares (Longitud, Profundidad Media) — Kansas Este | |||
| Longitud (°) | n pozos | Profundidad media (ft) | x (long. oeste, +) |
|---|---|---|---|
| -94.6 | 19 | 543.6 | 94.6 |
| -94.7 | 31 | 875.2 | 94.7 |
| -94.8 | 88 | 557.2 | 94.8 |
| -94.9 | 124 | 597.5 | 94.9 |
| -95.0 | 329 | 765.2 | 95.0 |
| -95.1 | 482 | 720.7 | 95.1 |
| -95.2 | 263 | 957.3 | 95.2 |
| -95.3 | 449 | 925.8 | 95.3 |
| -95.4 | 872 | 1,024.3 | 95.4 |
| -95.5 | 808 | 1,048.0 | 95.5 |
| -95.6 | 851 | 1,059.5 | 95.6 |
| -95.7 | 676 | 1,158.0 | 95.7 |
| -95.8 | 704 | 1,364.0 | 95.8 |
| -95.9 | 503 | 1,477.5 | 95.9 |
| -96.0 | 253 | 1,530.8 | 96.0 |
| -96.1 | 182 | 1,403.9 | 96.1 |
| -96.2 | 211 | 1,598.5 | 96.2 |
| -96.3 | 191 | 2,066.5 | 96.3 |
| -96.4 | 123 | 2,431.4 | 96.4 |
| -96.5 | 92 | 2,431.5 | 96.5 |
| -96.6 | 74 | 2,510.5 | 96.6 |
| -96.7 | 113 | 2,458.3 | 96.7 |
| -96.8 | 235 | 2,750.4 | 96.8 |
| -96.9 | 324 | 2,711.9 | 96.9 |
| -97.0 | 405 | 2,585.8 | 97.0 |
| -97.1 | 250 | 3,015.7 | 97.1 |
| -97.2 | 170 | 3,157.9 | 97.2 |
| -97.3 | 127 | 3,408.6 | 97.3 |
| -97.4 | 169 | 3,180.9 | 97.4 |
| -97.5 | 150 | 3,185.9 | 97.5 |
| Autor: GRUPO | |||
par(mar = c(5, 5, 4, 2))
plot(tabla_lon$x_log, tabla_lon$profundidad_media, pch = 19, col = "#16A085",
xlab = "Longitud Oeste (°, positiva)", ylab = "Profundidad media (ft)",
main = "Gráfica N°1: Nube de Puntos — Longitud vs. Profundidad (Kansas Este)",
cex.main = 0.9, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")
box()La profundidad crece con rapidez al principio (de este a oeste) y luego se va aplanando — un patrón de desaceleración típico de un modelo logarítmico: \[y = a + b \cdot \ln(x)\]
modelo_log <- lm(profundidad_media ~ log(x_log), data = tabla_lon)
a_log <- coef(modelo_log)[1]; b_log <- coef(modelo_log)[2]
cat("y =", round(a_log, 2), "+", round(b_log, 2), "* ln(x)\n")y = -455139.1 + 100096.3 * ln(x)
Call:
lm(formula = profundidad_media ~ log(x_log), data = tabla_lon)
Residuals:
Min 1Q Median 3Q Max
-435.69 -160.33 6.01 148.63 504.60
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -455139 19951 -22.81 <0.0000000000000002 ***
log(x_log) 100096 4371 22.90 <0.0000000000000002 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 215.7 on 28 degrees of freedom
Multiple R-squared: 0.9493, Adjusted R-squared: 0.9475
F-statistic: 524.5 on 1 and 28 DF, p-value: < 0.00000000000000022
par(mar = c(5, 5, 4, 2))
plot(tabla_lon$x_log, tabla_lon$profundidad_media, col = "#16A085", pch = 16,
xlab = "X (Longitud Oeste, °, positiva)", ylab = "Profundidad media (ft)",
main = "Gráfica N°2: Modelo Logarítmico vs. Realidad — Kansas Este",
cex.main = 0.9, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")
curve(a_log + b_log * log(x), add = TRUE, col = "#1F2A33", lwd = 3)
legend("topleft", legend = c("Datos (Longitud, Prof. media)", "Modelo Logarítmico"),
col = c("#16A085", "#1F2A33"), pch = c(16, NA), lwd = c(NA, 3), bty = "n")
box()El coeficiente de correlación de Pearson debe superar 0.7 o -0.7 para aceptar el modelo. Para el modelo logarítmico, al ser lineal en \(\ln(x)\), se prueba sobre \(\ln(x)\) vs. \(y\).
r_log <- cor.test(log(tabla_lon$x_log), tabla_lon$profundidad_media)
data.frame(
Modelo = "Logarítmico (semi-log)",
r = round(r_log$estimate, 4),
R2 = round(r_log$estimate^2, 4),
Supera_0.7 = abs(r_log$estimate) > 0.7,
p_valor = format.pval(r_log$p.value, digits = 4)
) %>%
gt() %>%
tab_header(title = md("**Tabla N°2: Test de Pearson — Modelo Logarítmico**")) %>%
tab_source_note(source_note = "Autor: GRUPO") %>%
cols_align(align = "center", everything())| Tabla N°2: Test de Pearson — Modelo Logarítmico | ||||
| Modelo | r | R2 | Supera_0.7 | p_valor |
|---|---|---|---|---|
| Logarítmico (semi-log) | 0.9743 | 0.9493 | TRUE | < 0.00000000000000022 |
| Autor: GRUPO | ||||
El coeficiente supera ampliamente el umbral de
|r| > 0.7, por lo que el modelo logarítmico se
acepta.
El modelo es válido únicamente dentro del rango de x
para el que fue ajustado, y solo para pozos de la región Este (lon >
-97.5°); no se recomienda extrapolar fuera de estos límites.
x_log (longitud oeste positiva) dentro del
rango [94.6, 97.5].x_log = -lon_bin (la longitud en Kansas siempre es
negativa, por lo que su opuesto siempre es positivo).x_est_log <- round(mean(range(tabla_lon$x_log)), 1)
y_est_log <- a_log + b_log * log(x_est_log)
data.frame(
X_estimado = x_est_log,
Y_estimado = round(y_est_log, 1)
) %>%
gt() %>%
tab_header(title = md("**Tabla N°3: Estimación Puntual de Profundidad**")) %>%
tab_source_note(source_note = "Autor: GRUPO") %>%
cols_align(align = "center", everything())| Tabla N°3: Estimación Puntual de Profundidad | |
| X_estimado | Y_estimado |
|---|---|
| 96 | 1735.4 |
| Autor: GRUPO | |
Autor: GRUPO — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset