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

# --- PASO ADICIONAL DE LIMPIEZA ---
# Función para corregir el formato de latitud (ej: 4.313.352 -> 43.13352)
clean_lat <- function(val) {
  val <- as.character(val)
  val <- gsub("\\.", "", val) # Quitar puntos extra
  num <- as.numeric(val)
  if (is.na(num)) return(NA)
  if (num == 0) return(0)
  # Ajustar la escala a grados geográficos (aprox latitud 40-60 para Ontario)
  while (abs(num) > 90) {
    num <- num / 10
  }
  return(num)
}
# Aplicamos la limpieza
datos$SURFACE_LATITUDE_83 <- sapply(datos$SURFACE_LATITUDE_83, clean_lat)
datos$GROUND_ELEVATION <- as.numeric(datos$GROUND_ELEVATION)
# Extraer variables
elevacion <- datos$GROUND_ELEVATION
profundidad <- datos$TOTAL_DEPTH

# Filtrar NAs para asegurar que x e y tengan la misma longitud
datos_limpios <- na.omit(data.frame(elevacion, latitud=datos$SURFACE_LATITUDE_83))
# Filtramos también outliers (latitudes fuera de rango real) para mejorar la gráfica
datos_limpios <- subset(datos_limpios, latitud > 40 & latitud < 60)

# Reasignar variables limpias para el modelo
x <- datos_limpios$elevacion
y <- datos_limpios$latitud
elevacion <- x # Mantener nombre original para consistencia
latitud <- y   # Mantener nombre original para consistencia

longitud <- datos$SURFACE_LONGITUDE_83
longitud <- na.omit(longitud)

precision <- datos$LOCATION_ACCURACY
precision <- gsub("[^0-9,.]", "", precision)
precision <- as.numeric(gsub(",", "", precision))
verticalidad <- datos$TRUE_VERTICAL_DEPTH

# Generar el Modelo de Regresión (Grado 4)
regresionPolinomica <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4))

# Coeficientes
beta0 <- coef(regresionPolinomica)[1]
beta1 <- coef(regresionPolinomica)[2]
beta2 <- coef(regresionPolinomica)[3]
beta3 <- coef(regresionPolinomica)[4]
beta4 <- coef(regresionPolinomica)[5]

a <- beta0
b <- beta1
c <- beta2
d <- beta3
e <- beta4

# Gráfica
plot(x, y, col=5, pch=7,
     main = "Gráfica: Regresión polinómica",
     xlab = "Elevación (m)", 
     ylab = "Latitud (m)",
     xlim = c(0, 694),
     ylim = c(40, 58.50056944))

# Agregar curva de regresión
curve(a+(b*x)+(c*x^2)+(d*x^3)+(e*x^4), add=TRUE, col="red", lwd=2)

# Test de bondad (R cuadrado del modelo)
r2 <- summary(regresionPolinomica)$r.squared * 100
cat(paste("R^2 del modelo:", round(r2, 4), "%\n"))
## R^2 del modelo: 44.8919 %
cat(sprintf("Ecuación: y = %e + (%e * x) + (%e * x^2) + (%e * x^3) + (%e * x^4)\n", a, b, c, d, e))
## Ecuación: y = 5.525000e+01 + (-1.712229e-01 * x) + (8.044974e-04 * x^2) + (-1.493476e-06 * x^3) + (9.472679e-10 * x^4)
val_x <- 570
pred_y <- a + (b*val_x) + (c*val_x^2) + (d*val_x^3) + (e*val_x^4)
pred_y
## (Intercept) 
##    42.44637
# Conclusion

conclusion <-"La 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, permitiendo estimaciones geográficas aproximadas basadas únicamente en la altitud del terreno."