#CARGA Y LIMPIEZA DE DATOS
setwd("/cloud/project")
datos <- read.csv("1_oil-gas-other-regulated-wells-beginning-1860.csv", header = TRUE)
datos$Surface.Latitude <- as.numeric(gsub(",", ".", datos$Surface.Latitude))
datos$Elevation.ft <- as.numeric(gsub(",", ".", datos$Elevation.ft))
datos_limpios <- na.omit(datos[, c("Surface.Latitude", "Elevation.ft")])
datos_limpios$rango <- cut(datos_limpios$Surface.Latitude,
breaks = seq(min(datos_limpios$Surface.Latitude),
max(datos_limpios$Surface.Latitude),
by = 0.2),
include.lowest = TRUE)
datos_resumidos <- aggregate(cbind(Elevation.ft, Surface.Latitude) ~ rango, data = datos_limpios, FUN = mean)
colnames(datos_resumidos) <- c("rango", "elevacion.promedio", "latitud.promedio")
#Modelo polinómico grado 6
modelo6 <- lm(elevacion.promedio ~ poly(latitud.promedio, 6), data = datos_resumidos)
#Comparar r² ajustado
cat("=== R² Ajustado ===\n")
## === R² Ajustado ===
cat("Grado 6:", summary(modelo6)$adj.r.squared, "\n\n")
## Grado 6: 0.6941426
cat("=== AIC ===\n")
## === AIC ===
cat("Grado 6:", AIC(modelo6), "\n")
## Grado 6: 249.5763
plot(datos_resumidos$latitud.promedio, datos_resumidos$elevacion.promedio,
pch = 19, col = "blue",
xlab = "Latitud Promedio",
ylab = "Elevación Promedio (ft)",
main = "Gráfica No.1: Modelo Polinómico Latitud vs Elevación")
curve(predict(modelo6, newdata = data.frame(latitud.promedio = x)), col = "green", lwd = 2, add = TRUE)
legend("topright", legend = c("Grado 6"),
col = c("green"), lwd = 2, bty = "n")
#Test de Pearson
cat("\n=== Correlación de Pearson entre observados y predichos ===\n")
##
## === Correlación de Pearson entre observados y predichos ===
pred6 <- predict(modelo6, newdata = datos_resumidos)
cor6 <- cor(datos_resumidos$elevacion.promedio, pred6, method = "pearson")
cat("Grado 6:", cor6, "\n")
## Grado 6: 0.8993548
modelo_exp <- lm(elevacion.promedio ~ latitud.promedio + I(latitud.promedio^2) +
I(latitud.promedio^3) + I(latitud.promedio^4) +
I(latitud.promedio^5) + I(latitud.promedio^6),
data = datos_resumidos)
summary(modelo_exp)
##
## Call:
## lm(formula = elevacion.promedio ~ latitud.promedio + I(latitud.promedio^2) +
## I(latitud.promedio^3) + I(latitud.promedio^4) + I(latitud.promedio^5) +
## I(latitud.promedio^6), data = datos_resumidos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -759.50 -106.24 -10.03 104.55 463.99
##
## Coefficients: (2 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.118e+09 4.669e+08 2.394 0.0339 *
## latitud.promedio -1.061e+08 4.416e+07 -2.404 0.0333 *
## I(latitud.promedio^2) 3.777e+06 1.566e+06 2.413 0.0328 *
## I(latitud.promedio^3) -5.973e+04 2.467e+04 -2.421 0.0322 *
## I(latitud.promedio^4) 3.540e+02 1.457e+02 2.430 0.0317 *
## I(latitud.promedio^5) NA NA NA NA
## I(latitud.promedio^6) NA NA NA NA
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 331.4 on 12 degrees of freedom
## Multiple R-squared: 0.727, Adjusted R-squared: 0.636
## F-statistic: 7.989 on 4 and 12 DF, p-value: 0.00222
nueva_latitud <- data.frame(latitud.promedio = 40.5) # Cambia este valor si deseas
prediccion <- predict(modelo_exp, newdata = nueva_latitud)
cat("Para una latitud de", nueva_latitud$latitud.promedio,
", la elevación estimada es:", round(prediccion, 2), "ft\n")
## Para una latitud de 40.5 , la elevación estimada es: 309.37 ft
pred6 <- predict(modelo6, newdata = datos_resumidos)
cor6 <- cor(datos_resumidos$elevacion.promedio, pred6, method = "pearson")
cat("Correlación de Pearson (grado 6):", cor6, "\n")
## Correlación de Pearson (grado 6): 0.8993548
modelo_exp <- lm(elevacion.promedio ~ latitud.promedio + I(latitud.promedio^2) +
I(latitud.promedio^3) + I(latitud.promedio^4),
data = datos_resumidos)
coefs <- signif(coef(modelo_exp), digits = 4)
#Construir ecuación como texto
ecuacion <- paste0("Elevación = ",
coefs[1], " + ",
coefs[2], "*x + ",
coefs[3], "*x^2 + ",
coefs[4], "*x^3 + ",
coefs[5], "*x^4")
cat("=== ECUACIÓN FINAL DEL MODELO GRADO 6 ==")
## === ECUACIÓN FINAL DEL MODELO GRADO 6 ==
cat(ecuacion, "\n")
## Elevación = 1.118e+09 + -106100000*x + 3777000*x^2 + -59730*x^3 + 354*x^4
#CONCLUSIÓN: # =============================== # ECUACIÓN FINAL DEL MODELO GRADO 6 # ===============================
modelo_exp <- lm(elevacion.promedio ~ latitud.promedio + I(latitud.promedio^2) +
I(latitud.promedio^3) + I(latitud.promedio^4),
data = datos_resumidos)
coefs <- signif(coef(modelo_exp), digits = 4)
ecuacion <- paste0("Elevación = ",
coefs[1], " + ",
coefs[2], "*x + ",
coefs[3], "*x^2 + ",
coefs[4], "*x^3 + ",
coefs[5], "*x^4")
nueva_latitud <- data.frame(latitud.promedio = 40.5)
prediccion <- predict(modelo_exp, newdata = nueva_latitud)
cat("Entre la Latitud Promedio y la Elevación Promedio (Elevation.ft) existe una relación polinómica de sexto grado con comportamiento no lineal,\n")
## Entre la Latitud Promedio y la Elevación Promedio (Elevation.ft) existe una relación polinómica de sexto grado con comportamiento no lineal,
cat("descrita por la ecuación:\n\n")
## descrita por la ecuación:
cat("=== ECUACIÓN FINAL DEL MODELO GRADO 6 ===\n")
## === ECUACIÓN FINAL DEL MODELO GRADO 6 ===
cat(ecuacion, "\n\n")
## Elevación = 1.118e+09 + -106100000*x + 3777000*x^2 + -59730*x^3 + 354*x^4
cat("Donde ELEVACIÓN es la variable dependiente y la Latitud Promedio la independiente.\n")
## Donde ELEVACIÓN es la variable dependiente y la Latitud Promedio la independiente.
cat("El modelo aprobó el test de Pearson con un 89.93%, sin restricciones en el dominio real.\n")
## El modelo aprobó el test de Pearson con un 89.93%, sin restricciones en el dominio real.
cat("Por ejemplo, a una latitud promedio de 40.5, la estimación de la elevación es de", round(prediccion, 2), "ft.\n")
## Por ejemplo, a una latitud promedio de 40.5, la estimación de la elevación es de 309.37 ft.