##
## 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"
Tras el análisis estadístico del sector “Fallos de Material”, se concluye que la relación entre el Volumen Liberado (variable independiente \(X\)) y los Costos Totales (variable dependiente \(Y\)) se define mediante una fórmula polinomial cúbica (\(Y = \beta_0 + \beta_1 X + \beta_2 X^2 + \beta_3 X^3\)). El modelo está sujeto a las restricciones de aplicarse únicamente a incidentes de entre 0 y 500 barriles con costos inferiores a $500,000. Bajo estas condiciones, se realizó una estimación para un escenario de 200 barriles, proyectando un costo total de aproximadamente $235,000 , lo que confirma que el impacto económico crece de forma no lineal en este sector específico.