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.
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)
}
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")
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)
# 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()
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.