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. Cada uno de estos factores contribuye de manera diferenciada al costo global del evento, reflejando la complejidad multidimensional de la gestión de siniestros.
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.
En esta sección, estableceremos los cimientos de nuestro análisis importando la base de datos de incidentes a nuestro entorno de trabajo en R. Este paso es fundamental, ya que nos permite cargar la información cruda desde su fuente local en el equipo, verificar que su estructura inicial sea la correcta y dejarla completamente lista para las posteriores etapas de manipulación y exploración estadística.
# 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 desde la ruta local especificada
dataset_proyecto <- read.csv("C:/Users/hp/Desktop/Nueva carpeta/dataset proyecto.csv", sep = ";")
Una vez cargada la base completa, procederemos a aislar y seleccionar únicamente las variables específicas que protagonizarán nuestro estudio. Identificaremos claramente cuál actuará como nuestra variable dependiente (\(Y\)) y cuáles serán nuestras tres variables independientes (\(X_1, X_2, X_3\)), simplificando así el conjunto de datos para enfocar nuestro análisis sin distracciones.
# Selección y mapeo de variables del proyecto
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)
)
La confiabilidad de cualquier modelo estadístico depende directamente de la calidad de los datos ingresados. Por ello, en esta etapa realizaremos un proceso riguroso de limpieza y filtrado. Nos encargaremos de eliminar los valores perdidos (NAs) que puedan generar errores de cálculo y aplicaremos restricciones lógicas para descartar valores inconsistentes o negativos, garantizando que nuestra información sea matemáticamente válida.
# Filtrado de valores ausentes (NAs) y control de valores mayores o iguales a cero
data_clean <- data_clean %>%
filter(!is.na(Y) & !is.na(X1) & !is.na(X2) & !is.na(X3)) %>%
filter(Y >= 0 & X1 >= 0 & X2 >= 0 & X3 >= 0)
# Asignar variables finales al entorno
Y <- data_clean$Y
X1 <- data_clean$X1
X2 <- data_clean$X2
X3 <- data_clean$X3
# Crear versión logarítmica para mejorar la visualización de la dispersió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)
)
Una vez concluida la fase de depuración y filtrado, resulta indispensable conocer el tamaño exacto de nuestra muestra final. Determinar el número de observaciones útiles no es un mero formalismo; este conteo nos indicará el volumen de datos con el que construiremos nuestro modelo de regresión múltiple, lo cual impacta directamente en la significancia, el margen de error y el poder estadístico de nuestros futuros resultados.
# Verificar dimensiones y mostrar resumen de puntos evaluados
cat("========================================\n")
## ========================================
cat("RESUMEN DE CONTROL DE LA MUESTRA\n")
## RESUMEN DE CONTROL DE LA MUESTRA
cat("========================================\n")
## ========================================
cat("Puntos originales en el dataset:", nrow(dataset_proyecto), "\n")
## Puntos originales en el dataset: 2795
cat("Puntos válidos después de limpiar:", nrow(data_clean), "\n")
## Puntos válidos después de limpiar: 2780
Antes de realizar cualquier cálculo matemático complejo, es imprescindible realizar una inspección visual. Aquí construiremos un diagrama de dispersión tridimensional utilizando nuestros datos bajo escala logarítmica. Esta gráfica nos permitirá observar de manera intuitiva cómo se distribuyen los puntos en el espacio, revelando a simple vista el comportamiento de las variables principales.
Nota sobre la visualización tridimensional
El modelo incluye tres variables independientes (\(X_1, X_2, X_3\)). Sin embargo, por limitaciones gráficas físicas, se presenta la relación espacial entre \(X_1\), \(X_2\) y la respuesta \(Y\), manteniendo \(X_3\) constante en su valor medio. Esta es la práctica estándar en regresión múltiple para visualizar la dispersió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 Reales"
) %>%
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)
)
Basándonos en la fundamentación teórica y la estructura multidimensional de los costos componentales, formularemos nuestra hipótesis inicial sobre el comportamiento de los datos. Se define el diseño bajo un Modelo de Regresión Lineal Múltiple de tres variables predictoras independientes bajo la siguiente formulación matemática: \[Y = \beta_0 + \beta_1\cdot X_1 + \beta_2\cdot X_2 + \beta_3\cdot X_3\]Donde \(\beta_0\) representa el intercepto y los valores \(\beta_i\) corresponden a las pendientes parciales de cada costo asociado.
# Ajustar el modelo de regresión múltiple lineal
modelo <- lm(Y ~ X1 + X2 + X3, data = data_clean)
# Extracción de Coeficientes estimados
coefs <- coef(modelo)
b0 <- coefs[1]
b1 <- coefs[2]
b2 <- coefs[3]
b3 <- coefs[4]
Para validar visualmente el éxito de nuestros cálculos, integraremos la superficie teórica del plano ajustado sobre nuestro diagrama de dispersión espacial. Al superponer el plano matemático del modelo sobre la nube de puntos reales, podremos evaluar de forma directa qué tan bien logra la regresión lineal capturar y atravesar la tendencia general de la información real recopilada.
# Ajustar modelo en escala logarítmica exclusivamente para la visualización del plano
modelo_log_vis <- lm(log_Y ~ log_X1 + log_X2, data = data_log)
coefs_log_vis <- coef(modelo_log_vis)
# Crear grilla matricial simétrica 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 superficie teórica del plano ajustado
z_plano_log <- t(outer(grid_log_X1, grid_log_X2, function(x1_val, x2_val) {
coefs_log_vis[1] + (coefs_log_vis[2] * x1_val) + (coefs_log_vis[3] * x2_val)
}))
# Gráfico interactivo en escala logarítmica superponiendo el plano ajustado
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 Teórico",
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)
)
Más allá de la apreciación visual de los gráficos tridimensionales, necesitamos métricas cuantitativas robustas para evaluar la calidad, fuerza y precisión de nuestra conjetura matemática. Para ello, obtendremos tanto el coeficiente de correlación lineal como la proporción de variabilidad explicada del fenómeno económico.
# Predicción de valores y obtención de métricas de ajuste
y_pred <- predict(modelo)
r <- cor(Y, y_pred)
r2 <- summary(modelo)$r.squared
cat("El coeficiente de correlación múltiple (R) es: ", round(r, 4))
## El coeficiente de correlación múltiple (R) es: 0.9996
cat("El coeficiente de determinación (R²) es: ", round(r2, 4))
## El coeficiente de determinación (R²) es: 0.9991
ecuacion <- paste0(
"La ecuación estimada del modelo múltiple es:\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 múltiple es:
## Y = 11925.2523 + 0.9854·X₁ + 1.1969·X₂ + 1.0447·X₃
Tras haber depurado exhaustivamente la información y calculado las métricas correspondientes, en este apartado presentaremos una vista estructurada de los resultados globales del modelo estadístico a través de una tabla formal parametrizada.
# Formatear la ecuación de texto para la visualización tabular
ecuacion_tabla <- paste0("Y = ", round(b0, 4), " + ", round(b1, 4), "·X₁ + ", round(b2, 4), "·X₂ + ", round(b3, 4), "·X₃")
# Estructurar el Data Frame con los estadísticos calculados
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)
)
# Renderizar tabla formal con la librería 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] | ||||||||
La verdadera utilidad práctica de un modelo de regresión radica en su capacidad predictiva ante escenarios hipotéticos. En esta sección, pondremos a prueba la ecuación estimada para realizar una proyección económica.Caso de Estudio: Supongamos un incidente operativo que presenta las siguientes estimaciones iniciales de daños parciales:
Remediación Ambiental(\(X_1\)) = $50,000
Respuesta a Emergencia (\(X_2\)) = $30,000
Daños aPropiedad (\(X_3\)) = $20,000
¿Cuál es la proyección matemática del Costo Total (\(Y\)) resultante?
# Configuración de los valores experimentales del escenario
X1_test <- 50000
X2_test <- 30000
X3_test <- 20000
# Calcular la estimación del modelo predictivo
Y_est <- predict(modelo, newdata = data.frame(X1 = X1_test, X2 = X2_test, X3 = X3_test))
# Imprimir resultados formateados
cat("Para un incidente con los costos ingresados:\n")
## Para un incidente con los costos ingresados:
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 por el modelo es: $", format(round(Y_est, 2), big.mark = ","), "\n")
##
## El Costo Total estimado por el modelo 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 impacto económico se explica a partir de la combinación de los gastos de mitigación ambiental, la operatividad inicial y los daños materiales en el lugar. El resultado corroboró la relación económica esperada, en la que cada componente de gasto es un factor directo y aporta de forma complementaria al desembolso total del siniestro.
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.