1.Introducción

El presente análisis evalúa la relación entre la elevación del terreno y la latitud geográfica de pozos petroleros, con el objetivo de identificar tendencias espaciales mediante un modelo de regresión polinómica.

2.Carga y limpieza de datos

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

datos <- read.csv(
  "Petroleo_Ontaro.csv",
  sep = ";",
  header = TRUE,
  stringsAsFactors = FALSE
)

clean_lat <- function(val) {
  val <- as.character(val)
  val <- gsub("\\.", "", val)
  num <- as.numeric(val)
  if (is.na(num) || num == 0) return(NA)
  while (abs(num) > 90) {
    num <- num / 10
  }
  return(num)
}

3.Procesamiento

df_limpio <- datos %>%
  mutate(
    lat = sapply(SURFACE_LATITUDE_83, clean_lat),
    elev = as.numeric(GROUND_ELEVATION)
  ) %>%
  filter(
    !is.na(lat),
    !is.na(elev),
    lat > 42, lat < 46,
    elev > 150, elev < 400
  ) %>%
  mutate(elev_bin = round(elev / 10) * 10) %>%
  group_by(elev_bin) %>%
  summarise(lat_prom = mean(lat), .groups = "drop")

4.Modelo Polinómico

Se ajustó un modelo polinómico de grado 4 para describir la relación entre la elevación promedio y la latitud promedio.

modelo_poli <- lm(
  lat_prom ~ poly(elev_bin, 4, raw = TRUE),
  data = df_limpio
)

R <- cor(df_limpio$lat_prom, predict(modelo_poli))

coef <- coef(modelo_poli)
a <- coef[1]; b <- coef[2]; c <- coef[3]; d <- coef[4]; e <- coef[5]

ecuacion <- paste0(
  "y = ", round(a,5), " + ",
  round(b,5), "x + ",
  round(c,5), "x² + ",
  round(d,5), "x³ + ",
  round(e,5), "x⁴"
)

cat("Correlación (R):", round(R,3), "\n")
## Correlación (R): 0.887
cat("Ecuación del modelo:\n", ecuacion, "\n")
## Ecuación del modelo:
##  y = 80.71174 + -0.58566x + 0.00327x² + -1e-05x³ + 0x⁴

#curva

# Datos para la curva del modelo
x_curva <- seq(
  min(df_limpio$elev_bin),
  max(df_limpio$elev_bin),
  length.out = 300
)

df_curva <- data.frame(
  elev_bin = x_curva
)

df_curva$y_pred <- predict(modelo_poli, newdata = df_curva)

5.Visualización del modelo

# 1. Definir las variables que faltaban para el punto estimado
val_a_predecir <- 300  # Puedes ajustar este valor
prediccion <- predict(modelo_poli, newdata = data.frame(elev_bin = val_a_predecir))

# 2. Tu código exacto sin modificaciones
ggplot(df_limpio, aes(x = elev_bin, y = lat_prom)) +
  # Puntos reales
  geom_point(
    color = "steelblue",
    size = 3,
    alpha = 0.6
  ) +
  # CURVA DEL MODELO (LA REAL)
  geom_line(
    data = df_curva,
    aes(x = elev_bin, y = y_pred),
    color = "firebrick1",
    size = 1.3
  ) +
  # Punto estimado
  geom_point(
    aes(x = val_a_predecir, y = prediccion),
    color = "gold",
    size = 5,
    shape = 18
  ) +
  annotate(
    "text",
    x = val_a_predecir,
    y = prediccion,
    label = paste("Estimación:", round(prediccion, 2)),
    hjust = -0.2,
    vjust = -0.6,
    color = "darkgoldenrod",
    fontface = "bold"
  ) +
  labs(
    title = "Regresión Polinómica (Grado 4)",
    subtitle = paste("Modelo ajustado | R =", round(R, 3)),
    x = "Elevación del Terreno (bins de 10 m)",
    y = "Latitud Promedio (°)"
  ) +
  theme_minimal()

6.Conclusion

La elevación permite predecir la latitud con un R de 0.89 . El punto dorado muestra cómo el modelo puede estimar coordenadas geográficas basándose en la altitud.