# Limpiar memoria
rm(list = ls())
# Cargar librerías
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
##
## 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
library(plotly)
## Warning: package 'plotly' was built under R version 4.5.3
## Cargando paquete requerido: ggplot2
## Warning: package 'ggplot2' was built under R version 4.5.3
##
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(gt)
## Warning: package 'gt' was built under R version 4.5.3
# Cargar dataset
dataset_proyecto <- read.csv("C:/Users/hp/Desktop/Nueva carpeta/dataset proyecto.csv", sep = ";")
JUSTIFICACIÓN TEÓRICA DEL MODELO El diseño de este modelo responde a una lógica de “Impacto Económico y Ambiental” aplicada a la gestión de incidentes. Se busca explicar el Costo Total como el resultado combinado de tres variables fundamentales asociadas a los componentes que generan gastos en la gestión de un evento adverso.
Variable Dependiente (Y): Costo Total (All.Costs) Representa el impacto económico integral de un incidente. Es el resultado final de la gestión del evento, cuantificando la magnitud total del gasto asociado a su resolución.
Variable Independiente 1 (X₁): Remediación Ambiental (Environmental.Remediation.Costs) Representa los costos asociados a la limpieza, restauración y mitigación de los daños causados al medio ambiente. Constituye un componente crítico en incidentes que involucran derrames o contaminación.
Variable Independiente 2 (X₂): Respuesta a Emergencia (Emergency.Response.Costs) Representa los costos operativos inmediatos para atender el incidente, incluyendo movilización de personal, equipos de emergencia, materiales de contención y acciones de control inicial.
Variable Independiente 3 (X₃): Daños a Propiedad (Property.Damage.Costs) Representa los costos derivados de los daños materiales a infraestructura, equipos, instalaciones y bienes afectados por el incidente.
Relación entre las Variables El Costo Total (Y) es la suma de los costos de remediación ambiental (X₁), respuesta a emergencia (X₂) y daños a propiedad (X₃), junto con otros costos asociados. Cada uno de estos factores contribuye de manera diferenciada al costo global del evento, reflejando la complejidad multidimensional de la gestión de siniestros.
# Selección de variables
data_clean <- dataset_proyecto %>%
select(All.Costs, Environmental.Remediation.Costs,
Emergency.Response.Costs, Property.Damage.Costs) %>%
mutate(
Y = as.numeric(All.Costs),
X1 = as.numeric(Environmental.Remediation.Costs),
X2 = as.numeric(Emergency.Response.Costs),
X3 = as.numeric(Property.Damage.Costs)
) %>%
filter(!is.na(Y) & !is.na(X1) & !is.na(X2) & !is.na(X3)) %>%
filter(Y >= 0 & X1 >= 0 & X2 >= 0 & X3 >= 0)
# Asignar variables
Y <- data_clean$Y
X1 <- data_clean$X1
X2 <- data_clean$X2
X3 <- data_clean$X3
# Crear versión logarítmica para visualización
data_log <- data_clean %>%
mutate(
log_Y = log(Y + 1),
log_X1 = log(X1 + 1),
log_X2 = log(X2 + 1),
log_X3 = log(X3 + 1)
)
# Verificar dimensiones
cat("========================================\n")
## ========================================
cat("RESUMEN DE DATOS\n")
## RESUMEN DE DATOS
cat("========================================\n")
## ========================================
cat("Puntos originales:", nrow(dataset_proyecto), "\n")
## Puntos originales: 2795
cat("Puntos después de limpiar:", nrow(data_clean), "\n")
## Puntos después de limpiar: 2780
NOTA SOBRE LA VISUALIZACIÓN 3D
El modelo incluye tres variables independientes (X₁, X₂, X₃). Sin embargo, por limitaciones gráficas (un gráfico 3D solo permite visualizar dos variables independientes), se presenta la relación entre X₁, X₂ y Y, manteniendo X₃ constante en su valor medio. Esta es la práctica estándar en regresión múltiple para visualizar planos de regresión sin perder validez estadística.
# Gráfica N°1: Costo Total en función de Remediación y Respuesta
plot_ly(
x = ~data_log$log_X1,
y = ~data_log$log_X2,
z = ~data_log$log_Y,
type = "scatter3d",
mode = "markers",
marker = list(
size = 3,
color = "#3498DB",
line = list(color = '#1F618D', width = 0.5),
opacity = 0.6
),
name = "Incidentes"
) %>%
layout(
title = list(
text = "Gráfica N°1: Costo Total en función de Remediación y Respuesta (Escala Logarítmica)",
font = list(size = 12),
x = 0.5,
xanchor = 'center'
),
scene = list(
xaxis = list(title = list(text = "ln(Remediación Ambiental + 1)", font = list(size = 10))),
yaxis = list(title = list(text = "ln(Respuesta a Emergencia + 1)", font = list(size = 10))),
zaxis = list(title = list(text = "ln(Costo Total + 1)", font = list(size = 10))),
camera = list(eye = list(x = 1.6, y = 1.6, z = 1.2))
),
margin = list(t = 50)
)
# Se plantea la ecuación del modelo: Y = β₀ + β₁·X₁ + β₂·X₂ + β₃·X₃
# Ajustar el modelo de regresión múltiple
modelo <- lm(Y ~ X1 + X2 + X3, data = data_clean)
# Extracción de Coeficientes
coefs <- coef(modelo)
b0 <- coefs[1]
b1 <- coefs[2]
b2 <- coefs[3]
b3 <- coefs[4]
# Mostrar coeficientes
cat("\n========================================\n")
##
## ========================================
cat("COEFICIENTES DEL MODELO\n")
## COEFICIENTES DEL MODELO
cat("========================================\n")
## ========================================
cat("β₀ (Intercepto):", round(b0, 4), "\n")
## β₀ (Intercepto): 11925.25
cat("β₁ (Remediación Ambiental):", round(b1, 4), "\n")
## β₁ (Remediación Ambiental): 0.9854
cat("β₂ (Respuesta a Emergencia):", round(b2, 4), "\n")
## β₂ (Respuesta a Emergencia): 1.1969
cat("β₃ (Daños a Propiedad):", round(b3, 4), "\n")
## β₃ (Daños a Propiedad): 1.0447
cat("\nEcuación del modelo:\n")
##
## Ecuación del modelo:
cat("Y =", round(b0, 4), "+", round(b1, 4), "· X₁ +", round(b2, 4), "· X₂ +", round(b3, 4), "· X₃\n")
## Y = 11925.25 + 0.9854 · X₁ + 1.1969 · X₂ + 1.0447 · X₃
# Ajustar modelo en escala logarítmica para la visualización
modelo_log_vis <- lm(log_Y ~ log_X1 + log_X2, data = data_log)
# Extraer coeficientes del modelo logarítmico
coefs_log_vis <- coef(modelo_log_vis)
b0_log_vis <- coefs_log_vis[1]
b1_log_vis <- coefs_log_vis[2]
b2_log_vis <- coefs_log_vis[3]
# Crear grilla de valores en escala logarítmica
grid_log_X1 <- seq(min(data_log$log_X1), max(data_log$log_X1), length.out = 50)
grid_log_X2 <- seq(min(data_log$log_X2), max(data_log$log_X2), length.out = 50)
# Calcular plano ajustado
z_plano_log <- t(outer(grid_log_X1, grid_log_X2, function(x1_val, x2_val) {
b0_log_vis + (b1_log_vis * x1_val) + (b2_log_vis * x2_val)
}))
# Gráfico interactivo en escala logarítmica
plot_ly() %>%
add_trace(
x = grid_log_X1,
y = grid_log_X2,
z = z_plano_log,
type = "surface",
colorscale = list(c(0, 1), c("#F39C12", "#E67E22")),
opacity = 0.7,
name = "Plano Ajustado",
showscale = FALSE
) %>%
add_trace(
x = ~data_log$log_X1,
y = ~data_log$log_X2,
z = ~data_log$log_Y,
type = "scatter3d",
mode = "markers",
marker = list(size = 3, color = "#3498DB", line = list(color = '#1F618D', width = 0.5), opacity = 0.6),
name = "Datos Reales"
) %>%
layout(
title = list(
text = "Gráfica N°2: Plano de Regresión del Costo Total (Escala Logarítmica)",
font = list(size = 12),
x = 0.5,
xanchor = 'center'
),
scene = list(
xaxis = list(title = list(text = "ln(Remediación Ambiental + 1)", font = list(size = 10))),
yaxis = list(title = list(text = "ln(Respuesta a Emergencia + 1)", font = list(size = 10))),
zaxis = list(title = list(text = "ln(Costo Total + 1)", font = list(size = 10))),
camera = list(eye = list(x = 1.6, y = 1.6, z = 1.2))
),
margin = list(t = 60)
)
# MODELO EN ESCALA ORIGINAL
# Ajustar modelo con variables originales
modelo <- lm(Y ~ X1 + X2 + X3, data = data_clean)
y_pred <- predict(modelo)
r <- cor(Y, y_pred)
cat("El coeficiente de correlación múltiple es: ", round(r, 4))
## El coeficiente de correlación múltiple es: 0.9996
r2 <- summary(modelo)$r.squared
cat(paste0("\nEl coeficiente de determinación (R²) es: ", round(r2, 4)))
##
## El coeficiente de determinación (R²) es: 0.9991
coefs <- coef(modelo)
b0 <- coefs[1]
b1 <- coefs[2]
b2 <- coefs[3]
b3 <- coefs[4]
ecuacion <- paste0(
"\n\nLa ecuación estimada del modelo es:\n\n",
"Y = ", round(b0, 4),
" + ", round(b1, 4), "·X₁",
" + ", round(b2, 4), "·X₂",
" + ", round(b3, 4), "·X₃"
)
cat(ecuacion)
##
##
## La ecuación estimada del modelo es:
##
## Y = 11925.2523 + 0.9854·X₁ + 1.1969·X₂ + 1.0447·X₃
# Crear la ecuación con 4 decimales para la tabla
ecuacion_tabla <- paste0(
"Y = ", round(b0, 4),
" + ", round(b1, 4), "·X₁",
" + ", round(b2, 4), "·X₂",
" + ", round(b3, 4), "·X₃"
)
# Crear la tabla resumen
tabla_resumen <- data.frame(
Variable = c("Remediación Ambiental",
"Respuesta a Emergencia",
"Daños a Propiedad",
"Costo Total"),
Tipo = c("Independiente (X₁)",
"Independiente (X₂)",
"Independiente (X₃)",
"Dependiente (Y)"),
R_multiple = c("", "", "", round(r, 4)),
R2 = c("", "", "", round(r2, 4)),
Intercepto = c("", "", "", round(b0, 4)),
Beta1 = c("", "", "", round(b1, 4)),
Beta2 = c("", "", "", round(b2, 4)),
Beta3 = c("", "", "", round(b3, 4)),
Ecuación = c("", "", "", ecuacion_tabla)
)
# Mostrar la tabla con gt
tabla_resumen %>%
gt() %>%
tab_header(
title = md("**Tabla N°1: Resumen del Modelo de Regresión Múltiple**")
) %>%
tab_source_note(
source_note = "Autor: [DAVIS PIGUAVE]"
) %>%
cols_align(align = "center", everything())
| Tabla N°1: Resumen del Modelo de Regresión Múltiple | ||||||||
| Variable | Tipo | R_multiple | R2 | Intercepto | Beta1 | Beta2 | Beta3 | Ecuación |
|---|---|---|---|---|---|---|---|---|
| Remediación Ambiental | Independiente (X₁) | |||||||
| Respuesta a Emergencia | Independiente (X₂) | |||||||
| Daños a Propiedad | Independiente (X₃) | |||||||
| Costo Total | Dependiente (Y) | 0.9996 | 0.9991 | 11925.2523 | 0.9854 | 1.1969 | 1.0447 | Y = 11925.2523 + 0.9854·X₁ + 1.1969·X₂ + 1.0447·X₃ |
| Autor: [DAVIS PIGUAVE] | ||||||||
¿Cuál es el Costo Total estimado para un incidente con: Remediación Ambiental = $50,000 Respuesta a Emergencia = $30,000 Daños a Propiedad = $20,000?
# ¿Cuál es el Costo Total estimado para un incidente con:
# Remediación Ambiental = $50,000
# Respuesta a Emergencia = $30,000
# Daños a Propiedad = $20,000?
# Valores de prueba
X1_test <- 50000 # Remediación Ambiental
X2_test <- 30000 # Respuesta a Emergencia
X3_test <- 20000 # Daños a Propiedad
# Calcular la estimación usando el modelo
Y_est <- predict(modelo,
newdata = data.frame(X1 = X1_test,
X2 = X2_test,
X3 = X3_test))
# Mostrar el resultado
cat("Para un incidente con:\n")
## Para un incidente con:
cat(" • Remediación Ambiental: $", format(X1_test, big.mark = ","), "\n")
## • Remediación Ambiental: $ 50,000
cat(" • Respuesta a Emergencia: $", format(X2_test, big.mark = ","), "\n")
## • Respuesta a Emergencia: $ 30,000
cat(" • Daños a Propiedad: $", format(X3_test, big.mark = ","), "\n")
## • Daños a Propiedad: $ 20,000
cat("\nEl Costo Total estimado es: $", format(round(Y_est, 2), big.mark = ","), "\n")
##
## El Costo Total estimado es: $ 117,993.1
Se creó un modelo de regresión lineal múltiple para calcular el Costo Total (Y) a partir de la Remediación Ambiental (X₁), la Respuesta a Emergencia (X₂) y los Daños a Propiedad (X₃).
El coeficiente de determinación (R²) del modelo es del 99.91%, lo que señala que la variabilidad mayoritaria del costo total se explica a partir de la combinación de los tres componentes principales del incidente. El resultado corroboró la relación económica esperada, en la que cada componente contribuye de manera directa al costo global del evento.
En términos generales, el modelo demuestra una adecuada capacidad predictiva dentro del rango analizado, constituyendo una herramienta válida para la estimación preliminar del costo total de incidentes en distintas situaciones operativas y ambientales.