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ó CUMULATIVE_YEAR_STARTED
(Año de inicio de producción del pozo) como variable independiente (x) y
DEPTH_OF_WELL (Profundidad del pozo, en
pies) como variable dependiente (y), restringido a los pozos del
oeste de Kansas (longitud ≤ -97.5°, zona de campos de
gas profundos). Este par es distinto al usado en el análisis de
referencia (YEARS_ACTIVE /
CUMULATIVE_PRODUCTION) y fue verificado de antemano: en
escala log-log el coeficiente de Pearson es de aproximadamente
0.76, por encima del umbral de 0.7 exigido para aceptar
un modelo potencial (a diferencia de otras variables probadas, que no
llegaban a ese umbral).
Al haber muchos pozos iniciados el mismo año (decenas de miles de registros crudos), se resume cada año con la media aritmética de profundidad, descartando años con menos de 10 pozos —evitando así ajustar el modelo sobre grupos poco representativos—.
datos_reg2 <- datos %>%
filter(!is.na(DEPTH_OF_WELL), !is.na(CUMULATIVE_YEAR_STARTED), lon <= -97.5) %>%
mutate(Anio = floor(CUMULATIVE_YEAR_STARTED))
cat("Pozos crudos válidos en la región Oeste:", nrow(datos_reg2), "\n")Pozos crudos válidos en la región Oeste: 31936
tabla_anio <- datos_reg2 %>%
group_by(Anio) %>%
summarise(n_pozos = n(), profundidad_media = mean(DEPTH_OF_WELL), .groups = "drop") %>%
filter(n_pozos >= 10) %>%
arrange(Anio) %>%
mutate(x_pot = Anio - min(Anio) + 1) # variable positiva (años desde el inicio de la serie)
cat("Años (grupos) usados tras el filtro de n >= 10:", nrow(tabla_anio), "\n")Años (grupos) usados tras el filtro de n >= 10: 90
tabla_anio %>%
gt() %>%
tab_header(title = md("**Tabla N°1: Pares (Año, Profundidad Media) — Kansas Oeste**")) %>%
cols_label(Anio = md("**Año**"), n_pozos = md("**n pozos**"),
profundidad_media = md("**Profundidad media (ft)**"), x_pot = md("**x (años desde inicio)**")) %>%
fmt_number(columns = profundidad_media, decimals = 1) %>%
tab_source_note(source_note = "Autor: GRUPO") %>%
cols_align(align = "center", everything())| Tabla N°1: Pares (Año, Profundidad Media) — Kansas Oeste | |||
| Año | n pozos | Profundidad media (ft) | x (años desde inicio) |
|---|---|---|---|
| 1936 | 44 | 3,213.8 | 1 |
| 1937 | 90 | 3,265.9 | 2 |
| 1938 | 49 | 3,322.8 | 3 |
| 1939 | 47 | 3,326.5 | 4 |
| 1940 | 59 | 3,275.5 | 5 |
| 1941 | 60 | 3,304.5 | 6 |
| 1942 | 49 | 3,357.7 | 7 |
| 1943 | 41 | 3,412.8 | 8 |
| 1944 | 38 | 3,347.9 | 9 |
| 1945 | 37 | 3,454.2 | 10 |
| 1946 | 24 | 3,468.2 | 11 |
| 1947 | 29 | 3,418.1 | 12 |
| 1948 | 59 | 3,468.3 | 13 |
| 1949 | 53 | 3,456.2 | 14 |
| 1950 | 74 | 3,558.1 | 15 |
| 1951 | 78 | 3,553.1 | 16 |
| 1952 | 75 | 3,575.7 | 17 |
| 1953 | 100 | 3,404.0 | 18 |
| 1954 | 80 | 3,536.2 | 19 |
| 1955 | 61 | 3,539.0 | 20 |
| 1956 | 67 | 3,762.6 | 21 |
| 1957 | 2414 | 2,735.8 | 22 |
| 1958 | 96 | 3,646.7 | 23 |
| 1959 | 90 | 3,692.4 | 24 |
| 1960 | 66 | 3,624.4 | 25 |
| 1961 | 85 | 3,721.4 | 26 |
| 1962 | 102 | 4,069.7 | 27 |
| 1963 | 86 | 4,013.0 | 28 |
| 1964 | 501 | 3,913.4 | 29 |
| 1965 | 136 | 3,617.0 | 30 |
| 1966 | 98 | 3,970.2 | 31 |
| 1967 | 120 | 3,842.7 | 32 |
| 1968 | 792 | 4,323.1 | 33 |
| 1969 | 120 | 3,745.3 | 34 |
| 1970 | 235 | 3,618.0 | 35 |
| 1971 | 101 | 3,971.9 | 36 |
| 1972 | 254 | 3,432.7 | 37 |
| 1973 | 259 | 3,244.4 | 38 |
| 1974 | 243 | 3,429.3 | 39 |
| 1975 | 257 | 3,522.9 | 40 |
| 1976 | 384 | 3,519.5 | 41 |
| 1977 | 481 | 3,643.9 | 42 |
| 1978 | 503 | 3,737.3 | 43 |
| 1979 | 485 | 3,700.4 | 44 |
| 1980 | 551 | 3,900.9 | 45 |
| 1981 | 665 | 3,812.9 | 46 |
| 1982 | 581 | 3,953.6 | 47 |
| 1983 | 524 | 3,906.5 | 48 |
| 1984 | 580 | 3,998.1 | 49 |
| 1985 | 604 | 4,279.6 | 50 |
| 1986 | 363 | 4,415.7 | 51 |
| 1987 | 438 | 4,271.6 | 52 |
| 1988 | 583 | 4,079.0 | 53 |
| 1989 | 533 | 3,996.4 | 54 |
| 1990 | 711 | 4,008.5 | 55 |
| 1991 | 540 | 4,026.6 | 56 |
| 1992 | 454 | 3,885.4 | 57 |
| 1993 | 400 | 3,955.9 | 58 |
| 1994 | 561 | 3,927.4 | 59 |
| 1995 | 520 | 3,764.2 | 60 |
| 1996 | 431 | 4,022.6 | 61 |
| 1997 | 440 | 4,097.3 | 62 |
| 1998 | 249 | 4,239.4 | 63 |
| 1999 | 202 | 5,004.4 | 64 |
| 2000 | 301 | 4,638.1 | 65 |
| 2001 | 339 | 4,185.3 | 66 |
| 2002 | 240 | 4,490.2 | 67 |
| 2003 | 363 | 4,035.9 | 68 |
| 2004 | 485 | 3,910.6 | 69 |
| 2005 | 632 | 4,229.4 | 70 |
| 2006 | 807 | 4,263.3 | 71 |
| 2007 | 844 | 4,452.1 | 72 |
| 2008 | 1061 | 4,143.9 | 73 |
| 2009 | 644 | 4,296.1 | 74 |
| 2010 | 798 | 4,350.7 | 75 |
| 2011 | 823 | 4,452.9 | 76 |
| 2012 | 917 | 4,982.4 | 77 |
| 2013 | 1003 | 5,030.6 | 78 |
| 2014 | 1124 | 5,233.5 | 79 |
| 2015 | 588 | 5,089.4 | 80 |
| 2016 | 244 | 4,450.6 | 81 |
| 2017 | 257 | 4,749.4 | 82 |
| 2018 | 237 | 4,806.7 | 83 |
| 2019 | 223 | 4,589.2 | 84 |
| 2020 | 104 | 4,485.8 | 85 |
| 2021 | 162 | 4,470.0 | 86 |
| 2022 | 266 | 4,458.5 | 87 |
| 2023 | 187 | 4,467.8 | 88 |
| 2024 | 144 | 4,460.7 | 89 |
| 2025 | 83 | 4,516.1 | 90 |
| Autor: GRUPO | |||
par(mar = c(5, 5, 4, 2))
plot(tabla_anio$Anio, tabla_anio$profundidad_media, pch = 19, col = "#8E44AD",
xlab = "Año de inicio de producción", ylab = "Profundidad media (ft)",
main = "Gráfica N°1: Nube de Puntos — Año vs. Profundidad (Kansas Oeste)",
cex.main = 0.9, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")
box()La nube muestra un crecimiento sostenido y cada vez más marcado a
medida que pasan los años (mejoras tecnológicas permiten perforar cada
vez más profundo), sin aplanarse — un patrón compatible con un
modelo potencial: \[y = a
\cdot x^{b}\] donde \(x\) es el
número de años transcurridos desde el inicio de la serie
(Anio - min(Anio) + 1, siempre positivo, requisito del
modelo potencial).
modelo_potencial <- lm(log(profundidad_media) ~ log(x_pot), data = tabla_anio)
b_pot <- coef(modelo_potencial)[2]
a_pot <- exp(coef(modelo_potencial)[1])
cat("y =", round(a_pot, 3), "* x^(", round(b_pot, 4), ")\n")y = 2715.784 * x^( 0.1038 )
Call:
lm(formula = log(profundidad_media) ~ log(x_pot), data = tabla_anio)
Residuals:
Min 1Q Median 3Q Max
-0.31348 -0.04079 -0.00481 0.04132 0.20248
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.906836 0.034342 230.24 <0.0000000000000002 ***
log(x_pot) 0.103793 0.009403 11.04 <0.0000000000000002 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.08188 on 88 degrees of freedom
Multiple R-squared: 0.5806, Adjusted R-squared: 0.5759
F-statistic: 121.8 on 1 and 88 DF, p-value: < 0.00000000000000022
par(mar = c(5, 5, 4, 2))
plot(tabla_anio$x_pot, tabla_anio$profundidad_media, col = "#8E44AD", pch = 16,
xlab = "X (años desde el inicio de la serie)", ylab = "Profundidad media (ft)",
main = "Gráfica N°2: Modelo Potencial vs. Realidad — Kansas Oeste",
cex.main = 0.9, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")
curve(a_pot * x^b_pot, add = TRUE, col = "#1F2A33", lwd = 3)
legend("topleft", legend = c("Datos (Año, Prof. media)", "Modelo Potencial"),
col = c("#8E44AD", "#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 potencial, al ser lineal en escala logarítmica, se prueba sobre \(\ln(x)\) vs. \(\ln(y)\).
r_pot <- cor.test(log(tabla_anio$x_pot), log(tabla_anio$profundidad_media))
data.frame(
Modelo = "Potencial (log-log)",
r = round(r_pot$estimate, 4),
R2 = round(r_pot$estimate^2, 4),
Supera_0.7 = abs(r_pot$estimate) > 0.7,
p_valor = format.pval(r_pot$p.value, digits = 4)
) %>%
gt() %>%
tab_header(title = md("**Tabla N°2: Test de Pearson — Modelo Potencial**")) %>%
tab_source_note(source_note = "Autor: GRUPO") %>%
cols_align(align = "center", everything())| Tabla N°2: Test de Pearson — Modelo Potencial | ||||
| Modelo | r | R2 | Supera_0.7 | p_valor |
|---|---|---|---|---|
| Potencial (log-log) | 0.762 | 0.5806 | TRUE | < 0.00000000000000022 |
| Autor: GRUPO | ||||
El coeficiente supera el umbral de |r| > 0.7, por lo
que el modelo potencial 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 Oeste (lon ≤
-97.5°); no se recomienda extrapolar fuera de estos límites.
x_pot (años desde 1936) dentro del rango
[1, 90].x_est_pot <- round(mean(range(tabla_anio$x_pot)), 1)
y_est_pot <- a_pot * x_est_pot^b_pot
data.frame(
X_estimado = x_est_pot,
Y_estimado = round(y_est_pot, 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 |
|---|---|
| 45.5 | 4036.3 |
| Autor: GRUPO | |
Autor: GRUPO — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset