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 =".")
# Asignamos variables según el análisis requerido
x_raw <- as.numeric(as.character(datos$Respuesta_actual_galones)) # X
## Warning: NAs introducidos por coerción
y_raw <- as.numeric(as.character(datos$Maximo_liberacion_galones)) # Y
datos_raw <- data.frame(x = x_raw, y = y_raw)
datos_clean <- na.omit(datos_raw)
# Filtro global
datos_global <- subset(datos_clean, x > 0 & y > 0)
plot(datos_global$x, datos_global$y,
col = rgb(0, 0.75, 1, 0.5), pch = 16, cex = 0.8,
main = "Relación Respuesta Actual vs Máxima Liberación (Global)",
xlab = "Respuesta Actual (Galones)",
ylab = "Máxima Liberación (Galones)")
\[ Y = \beta_0 + \beta_1 X \]
# Modelo global
modelo_global <- lm(y ~ x, data = datos_global)
# Resumen estadístico
res_global <- summary(modelo_global)
res_global
##
## Call:
## lm(formula = y ~ x, data = datos_global)
##
## Residuals:
## Min 1Q Median 3Q Max
## -22753396 -55313 -54627 -54567 30654398
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.456e+04 5.066e+04 1.077 0.282
## x 1.037e+00 4.333e-03 239.450 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1671000 on 1091 degrees of freedom
## Multiple R-squared: 0.9813, Adjusted R-squared: 0.9813
## F-statistic: 5.734e+04 on 1 and 1091 DF, p-value: < 2.2e-16
# Extracción de Coeficientes (Globales)
coef_global <- coef(modelo_global)
a_global <- coef_global[1] # Intercepto (beta 0)
b_global <- coef_global[2] # Pendiente (beta 1)
plot(datos_global$x, datos_global$y,
col = rgb(0, 0.75, 1, 0.5), pch = 16, cex = 0.8,
main = "Modelo de Regresión Lineal (Global)",
xlab = "Respuesta Actual (Galones)",
ylab = "Máxima Liberación (Galones)")
abline(modelo_global, col = "red", lwd = 2)
pearson_global <- cor(datos_global$x, datos_global$y, method = "pearson")
r2_global <- pearson_global^2
cat("=== RESULTADO GLOBAL ===\n")
## === RESULTADO GLOBAL ===
cat("Pearson (R):", round(pearson_global, 4), "\n")
## Pearson (R): 0.9906
cat("Determinación (R²):", round(r2_global * 100, 2), "%\n")
## Determinación (R²): 98.13 %
Al evaluar la totalidad de los datos, el coeficiente de correlación de Pearson ya indicaba una relación global muy significativa. Sin embargo, con el objetivo de maximizar la precisión predictiva y alcanzar una confiabilidad superior, se acotó el análisis a un intervalo específico de [0 - 4000] galones. Al enfocar el modelo en este rango, logramos aislar el comportamiento de los datos, revelando un patrón altamente determinista. Esto demuestra que, en incidentes de esta escala particular, la relación entre la respuesta actual y la máxima liberación obedece a un modelo lineal simple.
# 1. Filtramos por el rango definido
datos_rango <- subset(datos_global, x <= 4000 & y <= 4000)
# 2. Aplicamos la limpieza de duplicados (Evita sobreajuste)
datos_unicos <- datos_rango[!duplicated(datos_rango), ]
datos_int <- datos_unicos[!duplicated(datos_unicos$x) & !duplicated(datos_unicos$y), ]
# 3. Generamos el modelo para el intervalo
modelo_int <- lm(y ~ x, data = datos_int)
summary(modelo_int)
##
## Call:
## lm(formula = y ~ x, data = datos_int)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1621.08 -41.67 -27.24 12.60 2155.39
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.28181 55.78067 0.812 0.419
## x 0.95489 0.03808 25.073 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 370.6 on 79 degrees of freedom
## Multiple R-squared: 0.8884, Adjusted R-squared: 0.887
## F-statistic: 628.7 on 1 and 79 DF, p-value: < 2.2e-16
# Extracción de Coeficientes del intervalo
a_int <- coef(modelo_int)[1] # Intercepto (beta 0)
b_int <- coef(modelo_int)[2] # Pendiente (beta 1)
plot(datos_int$x, datos_int$y,
col = rgb(0, 191, 255, 120, maxColorValue = 255), pch = 19, cex = 1.2,
main = "Modelo Lineal [0 - 4000] gal",
xlab = "Respuesta Actual (Galones)",
ylab = "Máxima Liberación (Galones)")
abline(modelo_int, col = "darkgreen", lwd = 3)
legend("topleft", legend = c("Datos Limpios", "Recta Regresión"),
col = c("deepskyblue3", "darkgreen"), pch = c(19, NA), lty = c(NA, 1), lwd = c(NA, 3), bty = "n")
pearson_int <- cor(datos_int$x, datos_int$y, method = "pearson")
r2_int <- pearson_int^2
cat("=== COMPARACIÓN DE AJUSTE ===\n")
## === COMPARACIÓN DE AJUSTE ===
cat("R² Global:", round(r2_global * 100, 2), "%\n")
## R² Global: 98.13 %
cat("R² Intervalo [0-4000]:", round(r2_int * 100, 2), "%\n\n")
## R² Intervalo [0-4000]: 88.84 %
if(r2_int > r2_global) {
cat("CONCLUSIÓN: El ajuste MEJORA notablemente aislando el intervalo y limpiando duplicados.\n")
cat("El modelo explica el", round(r2_int * 100, 2), "% de la variabilidad en este rango.\n")
}
\[ Y = 45.2818 + 0.9549 X \]
cat("\n=== ECUACIÓN FINAL (INTERVALO) ===\n")
##
## === ECUACIÓN FINAL (INTERVALO) ===
cat("Y =", round(a_int, 4), "+", round(b_int, 4), "* X\n")
## Y = 45.2818 + 0.9549 * X
x_nueva <- 2500
y_pred_estimada <- a_int + b_int * x_nueva
cat("\n=== PREDICCIÓN ===\n")
##
## === PREDICCIÓN ===
cat("Para una respuesta actual de", x_nueva, "galones:\n")
## Para una respuesta actual de 2500 galones:
cat("La máxima liberación estimada es =", round(y_pred_estimada, 2), "galones\n")
## La máxima liberación estimada es = 2432.51 galones
Conclusiones
Entre la variable independiente respuesta actual (X) y la variable máxima liberación dependiente (Y) existe una relación matemática de tipo regresión lineal simple, la cual indica un comportamiento directamente proporcional entre el la respuesta y la máxima liberación. Esta relación se expresa mediante la fórmula del modelo: \(Y = 45.2818 + 0.9549 X\) . El modelo permite realizar una estimación para una respuesta de 2500 galones, se estima una máxima liberación de 2432.51 galones.