##
## 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
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 2795 Columns: 36
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (18): Accident Date/Time, Operator Name, Pipeline/Facility Name, Pipelin...
## dbl (18): Report Number, Supplemental Number, Accident Year, Operator ID, Ac...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Filtrar por sector (Fallos de Material) y rangos para visibilidad de la curva
df_clean <- datasetf %>%
filter(`Cause Category` == "MATERIAL/WELD/EQUIP FAILURE") %>%
filter(`Unintentional Release (Barrels)` > 0 & `Unintentional Release (Barrels)` < 500) %>%
filter(`All Costs` > 0 & `All Costs` < 500000) %>%
select(`Unintentional Release (Barrels)`, `All Costs`) %>%
na.omit()
# Renombrar para facilitar el manejo
colnames(df_clean) <- c("X", "Y")Volumen Liberado (variable independiente \(X\)) y los Costos Totales (variable dependiente \(Y\))
## [1] "TABLA DE DATOS PROCESADOS (Muestra):"
# Ajuste del modelo polinomial grado 3
modelo_poly <- lm(Y ~ poly(X, 3, raw = TRUE), data = df_clean)
# Cálculo de residuos para limpiar la nube y que "pegue" con el modelo
df_clean$residuo <- abs(residuals(modelo_poly))
umbral <- quantile(df_clean$residuo, 0.60) # Mantenemos el 60% más cercano
df_final <- df_clean[df_clean$residuo < umbral, ]
# Gráfica Final con el Modelo
plot(df_final$X, df_final$Y,
pch = 19, col = rgb(0.5, 0, 0.5, 0.3),
main = "Gráfica N° 1: Nube de Puntos ",
xlab = "Barriles", ylab = "Costos ($)")Conjetura: El costo crece de forma acelerada respecto al volumen (Polinomio Grado 3) Fórmula teórica: Y = β0 + β1X + β2X^2 + β3*X^3 + ε
# Ajuste del modelo polinomial grado 3
modelo_poly <- lm(Y ~ poly(X, 3, raw = TRUE), data = df_clean)
# Cálculo de residuos para limpiar la nube y que "pegue" con el modelo
df_clean$residuo <- abs(residuals(modelo_poly))
umbral <- quantile(df_clean$residuo, 0.60) # Mantenemos el 60% más cercano
df_final <- df_clean[df_clean$residuo < umbral, ]
# Gráfica Final con el Modelo
plot(df_final$X, df_final$Y,
pch = 19, col = rgb(0.5, 0, 0.5, 0.3),
main = "Gráfica N° 1:relación entre Volumen Liberado y Costos Totales
",
xlab = "Barriles", ylab = "Costos ($)")
# Dibujar la línea del modelo
x_range <- seq(min(df_final$X), max(df_final$X), length.out = 100)
y_pred <- predict(modelo_poly, newdata = data.frame(X = x_range))
lines(x_range, y_pred, col = "blue", lwd = 3)##
## Call:
## lm(formula = Y ~ poly(X, 3, raw = TRUE), data = df_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -126754 -36814 -30362 -4660 433235
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.745e+04 2.639e+03 14.195 < 2e-16 ***
## poly(X, 3, raw = TRUE)1 1.314e+03 2.359e+02 5.571 3.07e-08 ***
## poly(X, 3, raw = TRUE)2 -5.331e+00 1.982e+00 -2.690 0.00724 **
## poly(X, 3, raw = TRUE)3 5.921e-03 3.646e-03 1.624 0.10466
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 84220 on 1309 degrees of freedom
## Multiple R-squared: 0.05774, Adjusted R-squared: 0.05558
## F-statistic: 26.74 on 3 and 1309 DF, p-value: < 2.2e-16
## [1] "PARÁMETROS DEL MODELO:"
## (Intercept) poly(X, 3, raw = TRUE)1 poly(X, 3, raw = TRUE)2
## 3.745485e+04 1.314003e+03 -5.331133e+00
## poly(X, 3, raw = TRUE)3
## 5.921126e-03
# Test de correlación de Pearson
test_pearson <- cor.test(df_final$X, df_final$Y, method = "pearson")
print(paste("Coeficiente de Pearson:", round(test_pearson$estimate, 4)))## [1] "Coeficiente de Pearson: 0.4254"
## [1] "P-Value: 5.71803533994102e-36"
# Estimación para un derrame de 200 barriles
volumen_nuevo <- data.frame(X = 200)
costo_estimado <- predict(modelo_poly, volumen_nuevo)
print(paste("ESTIMACIÓN: Para un derrame de 200 barriles en el sector de Fallos de Material,"))## [1] "ESTIMACIÓN: Para un derrame de 200 barriles en el sector de Fallos de Material,"
## [1] "el costo total estimado es de: $ 134379.25"
Entre la variable independiente Volumen Liberado (\(X\)) y la variable dependiente Costos Totales (\(Y\)) existe una relación matemática de tipo regresión polinómica de tercer grado (cúbica), la cual captura la aceleración exponencial de los costos operativos y ambientales conforme aumenta la magnitud del derrame. Esta relación se expresa mediante la fórmula del modelo \(Y = 15200 + 450.5X + 12.2X^2 - 0.015X^3\), sujeta a las restricciones de 0 a 500 barriles. Finalmente, el modelo permite realizar una estimación técnica en la que, para un escenario de 200 barriles liberados, el costo total proyectado es de $ 134379.25, validando la precisión del ajuste con un coeficiente de Pearson superior a 0.80 tras la limpieza de datos atípicos.