CARGAR LIBRERÍAS Y DATOS
library(dplyr)
##
## 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 =".")
x <- as.numeric(as.character(datos[, 20])) # Volumen Derramado
## Warning: NAs introducidos por coerción
y <- as.numeric(as.character(datos[, 17])) # Máximo Liberación
datos_raw <- data.frame(x = x, y = y)
datos_clean <- na.omit(datos_raw)
# Filtrar valores mayores a 0 para ambas variables
datos_finales <- subset(datos_clean, x > 0 & y > 0)
plot(datos_finales$x, datos_finales$y,
col = rgb(0, 0, 1, 0.5),
pch = 16, cex = 0.8,
main = "Relación entre Volumen Derramado y Máxima Liberación",
xlab = "Volumen Derramado (Galones)",
ylab = "Máxima Liberación Estimada (Galones)")
\[ Y = α \cdot X^{(β)} \]
# Ajuste del modelo lineal en escala logarítmica
modelo_pot <- lm(log(y) ~ log(x), data = datos_finales)
# Coeficientes
res <- summary(modelo_pot)
res
##
## Call:
## lm(formula = log(y) ~ log(x), data = datos_finales)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.5070 -1.4222 -0.3867 0.8669 10.9007
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.028493 0.067755 103.73 <2e-16 ***
## log(x) 0.221128 0.008236 26.85 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.104 on 1344 degrees of freedom
## Multiple R-squared: 0.3491, Adjusted R-squared: 0.3486
## F-statistic: 720.8 on 1 and 1344 DF, p-value: < 2.2e-16
# Recuperación de parámetros originales
# El intercepto del modelo lineal es ln(a), por lo tanto a = exp(intercepto)
a <- exp(coef(modelo_pot)[1]) #aplha
b <- coef(modelo_pot)[2] #beta
# Secuencia para la línea de tendencia
x_seq <- seq(min(datos_finales$x), max(datos_finales$x), length.out = 500)
# Predicción usando la fórmula de potencia: Y = a * X^b
y_pred <- a * x_seq ^ b
plot(datos_finales$x, datos_finales$y,
col = rgb(0, 0, 1, 0.5),
pch = 16, cex = 0.8,
main = "Relación entre Volumen Derramado y Máxima Liberación",
xlab = "Volumen Derramado (Galones)",
ylab = "Máxima Liberación Estimada (Galones)")
# Línea de regresión
lines(x_seq, y_pred, col = "red", lwd = 2)
Zoom de la curvatura [0-2000 gal]
# Configuración de límites para el zoom
limite_zoom_x <- 2000
# Predicción del techo en el límite del zoom
# Usamos exp(predict(...)) porque predict devuelve el logaritmo de Y
techo_linea <- exp(predict(modelo_pot, newdata = data.frame(x = limite_zoom_x)))
limite_zoom_y <- techo_linea * 1.5
# Generar datos para la curva en el zoom
x_seq_zoom <- seq(1, limite_zoom_x, length.out = 500)
y_pred_zoom <- a * x_seq_zoom ^ b
Gráfica 3: Zoom del modelo de regresión [0-2000gal]
plot(datos_finales$x, datos_finales$y,
xlim = c(0, limite_zoom_x),
ylim = c(0, limite_zoom_y),
col = rgb(0, 0, 1, 0.4),
pch = 19, cex = 1.5,
main = "Zoom al Modelo Potencial (0 - 2000 gal)",
xlab = "Volumen Derramado (Galones)",
ylab = "Máxima Liberación (Galones)")
grid(col = "gray", lty = "dotted")
lines(x_seq_zoom, y_pred_zoom, col = "red", lwd = 4)
legend("bottomright",
legend = c("Modelo Potencial"),
col = c("red"),
pch = c(19, NA),
lty = c(NA, 1),
lwd = c(NA, 4),
bg = "white")
# Calculamos la correlación entre log(x) y log(y) para el modelo potencial
pearson_r <- cor(log(datos_finales$x), log(datos_finales$y), method = "pearson")
# Imprimimos el resultado
cat("=== RESULTADO TEST DE PEARSON (Log-Log) ===\n")
## === RESULTADO TEST DE PEARSON (Log-Log) ===
cat("Coeficiente de Pearson (R):", round(pearson_r, 4), "\n")
## Coeficiente de Pearson (R): 0.5908
if(abs(pearson_r) > 0.7) {
cat("INTERPRETACIÓN: Correlación Fuerte.\n")
} else if(abs(pearson_r) > 0.4) {
cat("INTERPRETACIÓN: Correlación Moderada.\n")
} else {
cat("INTERPRETACIÓN: Correlación Débil.\n")
}
## INTERPRETACIÓN: Correlación Moderada.
\[ Y = 7.028 \cdot X^{(0.2211)} \]
cat("\n=== ECUACIÓN FINAL ===\n")
##
## === ECUACIÓN FINAL ===
cat(paste0("Y = ", round(a, 4), " * X ^ ", round(b, 4)), "\n")
## Y = 1128.3288 * X ^ 0.2211
nuevo_volumen <- 70000
# Predicción manual usando los coeficientes
prediccion <- a * nuevo_volumen ^ b
cat("\n=== PREDICCIÓN ===\n")
##
## === PREDICCIÓN ===
cat("Para un volumen derramado de", nuevo_volumen, "galones:\n")
## Para un volumen derramado de 70000 galones:
cat("Máxima liberación estimada:", round(prediccion, 2), "galones\n")
## Máxima liberación estimada: 13299.1 galones
Conclusiones Entre la variable independiente Volumen Derramado (X) y la variable dependiente Máxima Liberación (Y) existe una relación matemática de tipo regresión potencial, la cual describe cómo el riesgo máximo escala en función del volumen real derramado. Esta relación se expresa mediante la fórmula del modelo:\(Y = 7.028 \cdot X^{0.2211}\) (donde el exponente β=0.221128) sujeta a las restricciones de incluir únicamente valores mayores a cero.Para un derrame de 70,000 galones, el modelo estima una liberación máxima de 13299.1 galones.