***********UNIVERSIDAD CENTRAL DEL *****************ECUADOR***************

***************FIGEMPA*****************************************

*******CARRERA DE GEOLOGIA*******************

*****ESTADÍSTICA Y PROBABILIDADADES****************

***************GRUPO2**************************

#CARGA Y LIMPIEZA DE DATOS

setwd("/cloud/project")
datos <- read.csv("1_oil-gas-other-regulated-wells-beginning-1860.csv", header = TRUE)

Convertir a numérico

datos$Surface.Latitude <- as.numeric(gsub(",", ".", datos$Surface.Latitude))
datos$Elevation.ft <- as.numeric(gsub(",", ".", datos$Elevation.ft))

Eliminar filas con NA

datos_limpios <- na.omit(datos[, c("Surface.Latitude", "Elevation.ft")])

Agrupar por rangos de latitud (de 0.2 en 0.2 grados)

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)

Calcular promedios por rango

datos_resumidos <- aggregate(cbind(Elevation.ft, Surface.Latitude) ~ rango, data = datos_limpios, FUN = mean)

Cambiar nombres para facilidad

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

Graficar modelo

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 polinómico de grado 6

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

Predicción para la nueva latitud

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

Test de Pearson

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

Tomar modelo

modelo_exp <- lm(elevacion.promedio ~ latitud.promedio + I(latitud.promedio^2) +
                   I(latitud.promedio^3) + I(latitud.promedio^4),
                 data = datos_resumidos)

Extraer coeficientes en notación científica

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 explícito

modelo_exp <- lm(elevacion.promedio ~ latitud.promedio + I(latitud.promedio^2) +
                   I(latitud.promedio^3) + I(latitud.promedio^4),
                 data = datos_resumidos)

Extraer coeficientes redondeados

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")

Predicción ejemplo para latitud 40.5

nueva_latitud <- data.frame(latitud.promedio = 40.5)
prediccion <- predict(modelo_exp, newdata = nueva_latitud)

Mostrar

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.