En este análisis exploramos la relación entre la Elevación del Terreno y la Latitud en la región de Ontario. Dado que la relación no es estrictamente lineal, se propone un Modelo Polinómico de Grado 4 para capturar las variaciones geográficas.
Se implementa una función de limpieza personalizada para corregir el formato de la latitud.
# Carga de datos
datos <- read.csv("Petroleo_Ontaro.csv",
sep = ";", header = TRUE, stringsAsFactors = FALSE)
# --- FUNCIÓN DE LIMPIEZA PERSONALIZADA ---
clean_lat <- function(val) {
val <- as.character(val)
val <- gsub("\\.", "", val) # Eliminar puntos extra
num <- as.numeric(val) # Convertir a número
if (is.na(num)) return(NA)
if (num == 0) return(0)
# Ajuste de escala: dividir hasta que sea una latitud válida (< 90)
while (abs(num) > 90) {
num <- num / 10
}
return(num)
}
# Aplicar limpieza
datos$SURFACE_LATITUDE_83 <- sapply(datos$SURFACE_LATITUDE_83, clean_lat)
datos$GROUND_ELEVATION <- as.numeric(gsub(",", ".", as.character(datos$GROUND_ELEVATION)))
# Filtrado de datos (Latitudes entre 40 y 60)
elevacion <- datos$GROUND_ELEVATION
latitud <- datos$SURFACE_LATITUDE_83
datos_limpios <- na.omit(data.frame(elevacion, latitud))
datos_limpios <- subset(datos_limpios, latitud > 40 & latitud < 60)
# Definición de variables para el modelo
x <- datos_limpios$elevacion
y <- datos_limpios$latitudAjustamos un modelo de cuarto orden: \(y = \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 + \beta_4 x^4\)
# Modelo de regresión polinómica grado 4
regresionPolinomica <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4))
# Extracción de coeficientes
coeficientes <- coef(regresionPolinomica)
a <- coeficientes[1] # Intercepto
b <- coeficientes[2] # x
c <- coeficientes[3] # x^2
d <- coeficientes[4] # x^3
e <- coeficientes[5] # x^4
# Bondad de ajuste
r2 <- summary(regresionPolinomica)$r.squared * 100Ecuación del modelo: \[ Latitud = 5.525000e+01 + -1.712229e-01x + ... + 9.472679e-10x^4 \]
# Configuración de márgenes
par(mar = c(4,4,2,1))
# Gráfico de dispersión
plot(x, y,
col = 5, # Color cian/azul claro
pch = 7, # Símbolo: cuadrado con X
main = "Regresión Polinómica (Grado 4)",
xlab = "Elevación (m)",
ylab = "Latitud (°)",
xlim = c(0, 694),
ylim = c(40, 58.5)
)
# Curva de ajuste
curve(a + b*x + c*x^2 + d*x^3 + e*x^4,
add = TRUE,
col = "red",
lwd = 2)
# Añadir rejilla para facilitar lectura
grid()Realizamos una predicción puntual para una elevación específica (570 m) y para la media de los datos.
# 1. Predicción manual para x = 570
val_x <- 570
pred_y_manual <- a + b*val_x + c*val_x^2 + d*val_x^3 + e*val_x^4
# 2. Predicción para la elevación promedio (para la conclusión)
elevacion_ejemplo <- mean(x)
nueva_obs <- data.frame(x = elevacion_ejemplo)
# Nota: Para predict() con poly manual, a veces es mejor recrear el dataframe
# pero aquí usamos el cálculo directo para consistencia con tu código
prediccion_promedio <- a + b*elevacion_ejemplo + c*elevacion_ejemplo^2 + d*elevacion_ejemplo^3 + e*elevacion_ejemplo^4La elevación es una variable útil pero parcial para predecir la latitud en esta región.
El modelo polinómico de grado 4 ofrece un ajuste superior al lineal (\(R^2 =\) 44.8919%), permitiendo estimaciones geográficas aproximadas basadas únicamente en la altitud del terreno.
Por ejemplo, para una elevación promedio de 198.3 metros, el modelo ubica la latitud en aproximadamente 42.75 grados.