CARGAR LIBRERÍAS Y DATOS
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
setwd("D:/Data")
datos <- read.csv("derrames_globales_.csv", header = TRUE, sep = ";", dec =".")
# Limpieza de caracteres (Puntos de miles y comas decimales si es necesario)
# Nota: Si tu CSV ya viene limpio, esta parte solo asegura que sean numéricos.
x_raw <- as.numeric(gsub(",", ".", gsub("\\.", "", datos$Maximo_liberacion_galones)))
y_raw <- as.numeric(gsub(",", ".", gsub("\\.", "", datos$Respuesta_actual_galones)))
# Crear dataframe inicial y omitir nulos
datos_raw <- data.frame(x = x_raw, y = y_raw)
datos_clean <- na.omit(datos_raw)
# Escalar variables (Standardization)
datos_finales <- data.frame(x = scale(datos_clean$x),
y = scale(datos_clean$y))
plot(datos_finales$x, datos_finales$y,
col = rgb(0, 0, 1, 0.5),
pch = 16, cex = 0.8,
main = "Relación entre Máxima Liberación y respuesta actual",
xlab = "Máximo Liberación ",
ylab = "Respuesta Actual ")
abline(v=0, h=0, col="gray", lty=2) # Líneas de referencia en la media
\[ Y = \beta_0 + \beta_1 X + \beta_2 X^2 + \beta_3 X^3 \]
# Generar Modelo Polinómico de grado 3
# raw = TRUE usa los polinomios naturales, necesario para ver la ecuación clásica
modelo_poly <- lm(y ~ poly(x, 3, raw = TRUE), data = datos_finales)
# Resumen estadístico
res <- summary(modelo_poly)
res
##
## Call:
## lm(formula = y ~ poly(x, 3, raw = TRUE), data = datos_finales)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.846 -0.020 -0.020 -0.020 32.190
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.856e-02 9.815e-03 -1.891 0.0587 .
## poly(x, 3, raw = TRUE)1 1.481e-01 3.696e-02 4.006 6.29e-05 ***
## poly(x, 3, raw = TRUE)2 2.928e-02 3.014e-03 9.713 < 2e-16 ***
## poly(x, 3, raw = TRUE)3 -2.832e-04 5.213e-05 -5.433 5.91e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5806 on 3546 degrees of freedom
## Multiple R-squared: 0.6632, Adjusted R-squared: 0.6629
## F-statistic: 2327 on 3 and 3546 DF, p-value: < 2.2e-16
# Extracción de Coeficientes
coef_poli <- coef(modelo_poly)
a <- coef_poli[1] # Intercepto (beta 0)
b <- coef_poli[2] # Coeficiente x (beta 1)
c <- coef_poli[3] # Coeficiente x^2 (beta 2)
d <- coef_poli[4] # Coeficiente x^3 (beta 3)
# Secuencia para la curva suave
x_seq <- seq(min(datos_finales$x), max(datos_finales$x), length.out = 500)
# Predicción: a + bx + cx^2 + dx^3
y_pred <- a + b*x_seq + c*x_seq^2 + d*x_seq^3
plot(datos_finales$x, datos_finales$y,
col = rgb(0, 0, 1, 0.5),
pch = 16, cex = 0.8,
main = "Relación entre Máxima Liberación y respuesta actual (modelo)",
xlab = "Máximo Liberación (Escalado)",
ylab = "Respuesta Actual (Escalado)")
# Curva de regresión
lines(x_seq, y_pred, col = "red", lwd = 2)
pearson_r <- cor(datos_finales$x, datos_finales$y, method = "pearson")
cat("=== RESULTADO TEST DE PEARSON ===\n")
## === RESULTADO TEST DE PEARSON ===
cat("Coeficiente de Pearson (r):", round(pearson_r, 4), "\n")
## Coeficiente de Pearson (r): 0.7888
if(abs(pearson_r) > 0.7) {
cat("INTERPRETACIÓN: Correlación Lineal Fuerte.\n")
} else if(abs(pearson_r) > 0.4) {
cat("INTERPRETACIÓN: Correlación Lineal Moderada.\n")
} else {
cat("INTERPRETACIÓN: Correlación Lineal Débil.\n")
}
## INTERPRETACIÓN: Correlación Lineal Fuerte.
\[ Y = -0.0186 + 0.148 X + 0.0293 X^2 - 0.000283 X^3 \]
cat("\n=== ECUACIÓN FINAL (Unidades Escaladas) ===\n")
##
## === ECUACIÓN FINAL (Unidades Escaladas) ===
cat("y =", format(a, scientific = TRUE, digits = 3),
"+", format(b, scientific = TRUE, digits = 3), "* x",
"+", format(c, scientific = TRUE, digits = 3), "* x^2",
"+", format(d, scientific = TRUE, digits = 3), "* x^3\n")
## y = -1.86e-02 + 1.48e-01 * x + 2.93e-02 * x^2 + -2.83e-04 * x^3
x_nueva <- 2.5 # 2.5 desviaciones estándar por encima de la media
y_pred_estimada <- a + b*x_nueva + c*x_nueva^2 + d*x_nueva^3
cat("\n=== PREDICCIÓN ===\n")
##
## === PREDICCIÓN ===
cat("Si la liberación escalada (x) es =", x_nueva, "\n")
## Si la liberación escalada (x) es = 2.5
cat("La respuesta estimada escalada (y) es =", round(y_pred_estimada, 3), "\n")
## La respuesta estimada escalada (y) es = 0.53
Conclusiones
Entre la variable independiente máxima liberación (X) y la variable dependiente respuesta actual (Y) existe una relación matemática de tipo regresión polinomial de tercer grado. Esta relación se expresa mediante la fórmula del modelo:\(Y = -0.0186 + 0.148 X + 0.0293 X^2 - 0.000283 X^3\). Para una liberación 2.5 escalados, el modelo estima una respuesta de 0.53 galones escalados.