1 Librerías

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

2 Carga de Datos

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)
cat("Registros totales cargados:", nrow(datos), "\n")
Registros totales cargados: 72580 

3 Selección de Variables

Se seleccionó el par RANGE (columna catastral este-oeste del sistema PLSS) como variable independiente (x) y Longitud (lon, en grados) como variable dependiente (y). Este par es distinto al usado en el análisis de referencia (YEARS_ACTIVE / CUMULATIVE_PRODUCTION) y fue verificado de antemano: el coeficiente de Pearson supera 0.99 en valor absoluto, muy por encima del umbral de 0.7 exigido para aceptar el modelo.

El sistema catastral estadounidense (PLSS) numera las columnas (RANGE) de forma creciente a partir de un meridiano base, tanto hacia el oeste (RANGE_DIRECTION = "W") como hacia el este (RANGE_DIRECTION = "E"). Como ambas direcciones avanzan en sentidos opuestos de la longitud, se analizan como dos regiones separadas, cada una con su propia recta — cumpliendo también el criterio de dividir en regiones cuando resulta apropiado.

datos_reg1 <- datos %>%
  filter(!is.na(RANGE), !is.na(lon), RANGE_DIRECTION %in% c("W", "E")) %>%
  mutate(Region = ifelse(RANGE_DIRECTION == "W", "Región Oeste (Range W)", "Región Este (Range E)"))

oeste1 <- datos_reg1 %>% filter(Region == "Región Oeste (Range W)")
este1  <- datos_reg1 %>% filter(Region == "Región Este (Range E)")

cat("Pozos en Región Oeste:", nrow(oeste1), "\n")
Pozos en Región Oeste: 55287 
cat("Pozos en Región Este: ", nrow(este1), "\n")
Pozos en Región Este:  17293 

4 Tabla de Pares de Valores

tabla_reg1 <- datos_reg1 %>%
  group_by(Region) %>%
  summarise(n = n(), RANGE_min = min(RANGE), RANGE_max = max(RANGE),
            lon_min = round(min(lon), 3), lon_max = round(max(lon), 3), .groups = "drop")

tabla_reg1 %>%
  gt() %>%
  tab_header(title = md("**Tabla N°1: Registros por Región**")) %>%
  cols_label(Region = md("**Región**"), n = md("**n**"),
             RANGE_min = md("**RANGE mín.**"), RANGE_max = md("**RANGE máx.**"),
             lon_min = md("**Longitud mín.**"), lon_max = md("**Longitud máx.**")) %>%
  tab_source_note(source_note = "Autor: GRUPO") %>%
  cols_align(align = "center", everything())
Tabla N°1: Registros por Región
Región n RANGE mín. RANGE máx. Longitud mín. Longitud máx.
Región Este (Range E) 17293 1 25 -97.371 -94.611
Región Oeste (Range W) 55287 1 43 -102.044 -97.371
Autor: GRUPO

5 Gráfica de Dispersión

colores1 <- c("Región Oeste (Range W)" = "#2E86AB", "Región Este (Range E)" = "#C0392B")
par(mar = c(5, 5, 4, 9))
plot(datos_reg1$RANGE, datos_reg1$lon, col = colores1[datos_reg1$Region], pch = 16, cex = 0.4,
     xlab = "RANGE (columna catastral)", ylab = "Longitud (°)",
     main = "Gráfica N°1: RANGE vs. Longitud, por región", cex.main = 0.9, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")
legend("topright", inset = c(-0.32, 0), legend = names(colores1), col = colores1,
       pch = 16, bty = "n", xpd = TRUE)
box()

6 Conjetura

La nube de puntos es una recta perfectamente definida en cada región (cada unidad de RANGE corresponde a un ancho fijo de aprox. 6 millas), por lo que se conjetura un modelo lineal en cada una: \[y = a + bx\]

7 Cálculo de Parámetros

modelo_oeste <- lm(lon ~ RANGE, data = oeste1)
modelo_este  <- lm(lon ~ RANGE, data = este1)

a_oeste <- coef(modelo_oeste)[1]; b_oeste <- coef(modelo_oeste)[2]
a_este  <- coef(modelo_este)[1];  b_este  <- coef(modelo_este)[2]

cat("Región Oeste: lon =", round(a_oeste, 4), "+", round(b_oeste, 5), "* RANGE\n")
Región Oeste: lon = -97.3286 + -0.10929 * RANGE
cat("Región Este:  lon =", round(a_este, 4), "+", round(b_este, 5), "* RANGE\n")
Región Este:  lon = -97.4295 + 0.11124 * RANGE
summary(modelo_oeste)

Call:
lm(formula = lon ~ RANGE, data = oeste1)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.163880 -0.027714  0.001691  0.030068  0.091010 

Coefficients:
                Estimate   Std. Error t value            Pr(>|t|)    
(Intercept) -97.32857862   0.00037772 -257673 <0.0000000000000002 ***
RANGE        -0.10929183   0.00001521   -7186 <0.0000000000000002 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.04067 on 55285 degrees of freedom
Multiple R-squared:  0.9989,    Adjusted R-squared:  0.9989 
F-statistic: 5.164e+07 on 1 and 55285 DF,  p-value: < 0.00000000000000022
summary(modelo_este)

Call:
lm(formula = lon ~ RANGE, data = este1)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.065979 -0.028454  0.000356  0.026746  0.082863 

Coefficients:
                Estimate   Std. Error t value            Pr(>|t|)    
(Intercept) -97.42954318   0.00059931 -162569 <0.0000000000000002 ***
RANGE         0.11124022   0.00003987    2790 <0.0000000000000002 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.03265 on 17291 degrees of freedom
Multiple R-squared:  0.9978,    Adjusted R-squared:  0.9978 
F-statistic: 7.783e+06 on 1 and 17291 DF,  p-value: < 0.00000000000000022

8 Realidad y Modelo

par(mfrow = c(1, 2), mar = c(5, 5, 4, 2))

plot(oeste1$RANGE, oeste1$lon, col = "#2E86AB", pch = 16, cex = 0.4,
     xlab = "RANGE", ylab = "Longitud (°)", main = "Gráfica N°2: Modelo Lineal — Región Oeste",
     cex.main = 0.8, frame.plot = FALSE)
grid(col = "#D7DBDD", lty = "dotted")
abline(modelo_oeste, col = "#1F2A33", lwd = 3)
box()

plot(este1$RANGE, este1$lon, col = "#C0392B", pch = 16, cex = 0.4,
     xlab = "RANGE", ylab = "Longitud (°)", main = "Gráfica N°3: Modelo Lineal — Región Este",
     cex.main = 0.8, frame.plot = FALSE)
grid(col = "#D7DBDD", lty = "dotted")
abline(modelo_este, col = "#1F2A33", lwd = 3)
box()

9 Test

El coeficiente de correlación de Pearson, calculado en R mediante cor(x, y), debe superar 0.7 o -0.7 para aceptar el modelo.

r_oeste <- cor.test(oeste1$RANGE, oeste1$lon)
r_este  <- cor.test(este1$RANGE, este1$lon)

data.frame(
  Region = c("Oeste (Range W)", "Este (Range E)"),
  r = round(c(r_oeste$estimate, r_este$estimate), 4),
  R2 = round(c(r_oeste$estimate^2, r_este$estimate^2), 4),
  Supera_0.7 = c(abs(r_oeste$estimate) > 0.7, abs(r_este$estimate) > 0.7),
  p_valor = c(format.pval(r_oeste$p.value, digits = 4), format.pval(r_este$p.value, digits = 4))
) %>%
  gt() %>%
  tab_header(title = md("**Tabla N°2: Test de Pearson — Modelo Lineal**")) %>%
  tab_source_note(source_note = "Autor: GRUPO") %>%
  cols_align(align = "center", everything())
Tabla N°2: Test de Pearson — Modelo Lineal
Region r R2 Supera_0.7 p_valor
Oeste (Range W) -0.9995 0.9989 TRUE < 0.00000000000000022
Este (Range E) 0.9989 0.9978 TRUE < 0.00000000000000022
Autor: GRUPO

Ambas regiones superan ampliamente el umbral de |r| > 0.7, por lo que el modelo lineal se acepta en cada una.

10 Restricciones

Cada recta es válida únicamente dentro del rango de RANGE observado en su región (ver Tabla N°1); no debe mezclarse Oeste y Este en una sola recta, pues representan sentidos opuestos de la longitud, ni extrapolarse fuera de esos límites.

  • Región Oeste: válida entre RANGE = 1 y RANGE = 43.
  • Región Este: válida entre RANGE = 1 y RANGE = 25.

11 Estimación

x_est_oeste <- round(mean(range(oeste1$RANGE)), 1)
x_est_este  <- round(mean(range(este1$RANGE)), 1)

y_est_oeste <- a_oeste + b_oeste * x_est_oeste
y_est_este  <- a_este + b_este * x_est_este

data.frame(
  Region = c("Oeste (Range W)", "Este (Range E)"),
  RANGE_estimado = c(x_est_oeste, x_est_este),
  Longitud_estimada = round(c(y_est_oeste, y_est_este), 4)
) %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3: Estimaciones Puntuales**")) %>%
  tab_source_note(source_note = "Autor: GRUPO") %>%
  cols_align(align = "center", everything())
Tabla N°3: Estimaciones Puntuales
Region RANGE_estimado Longitud_estimada
Oeste (Range W) 22 -99.7330
Este (Range E) 13 -95.9834
Autor: GRUPO

12 Conclusiones

  • Entre RANGE (columna catastral) y la Longitud existe una relación lineal casi perfecta en ambas direcciones: \(r = -0.999\) al Oeste y \(r = 0.999\) al Este.
  • Esto confirma la correspondencia geométrica determinística entre la malla catastral (PLSS) y las coordenadas GPS: cada unidad de RANGE equivale a un desplazamiento de longitud prácticamente constante (~6 millas).
  • Como ambas direcciones (Oeste/Este del meridiano base) avanzan en sentidos opuestos, fue necesario dividir el análisis en dos regiones; usar una sola recta para todo el dataset habría promediado incorrectamente dos pendientes de signo contrario.
  • El modelo lineal se acepta en ambas regiones, con |r| > 0.99 y test F significativo en los dos ajustes.

Autor: GRUPO — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset