library("deSolve")
library(ggplot2)
# Establecer las condiciones iniciales de la variable de estado. En este caso 1
inicial.conditions <- c(arms_stock_gang_a = 1.0,
arms_stock_gang_b = 1.0)
# Definir el vector de tiempos para la simulación
times <- seq(0,100, by = 1) #meses
# Definir la función del modelo.
#parametros son las variables exógenas
model_arms<-function(t, state, parameters){
with(as.list(c(state, parameters)),{
#Variables Auxiliares o endógenas
relative_arming_rate_a= overassesment_factor_gang_b_by_a*obsolescence_rate_a*arms_stock_gang_b-obsolescence_rate_a*arms_stock_gang_a
relative_arming_rate_b=overassesment_factor_gang_a_by_b*obsolescence_rate_b*arms_stock_gang_a-obsolescence_rate_b*arms_stock_gang_b
#Variables de flujo
arming_gang_a=autonomous_arming_rate_a+relative_arming_rate_a
arming_gang_b=autonomous_arming_rate_b+relative_arming_rate_b
#SE EMPIEZA DE AQUI: variable de estado
darms_stock_gang_a=arming_gang_a
darms_stock_gang_b=arming_gang_b
#Devuelve los resultados de la variable de estado
return(list(c(darms_stock_gang_a, darms_stock_gang_b),
arming_gang_a = arming_gang_a,
arming_gang_b = arming_gang_b))
})
}
# Definir los parámetros del modelo.
## Simulación 1
### Supongamos que la gang A sobreestima el armamento de la banda B en un 10%, es decir, que el "overassessment factor of gang B arming by gang A" es 110%, y que la banda B evalúa correctamente el armado de la banda A, es decir, el "overassessment factor of gang A arming by gang B" es 100%. Modela este sistema y simula el modelo durante un periodo de 100 meses. Describe el comportamiento que muestra la simulación y relacionalo con los ciclos de causalidad que hayas encontrado en el diagrama causal.
parameters <- c(autonomous_arming_rate_a= 0.05,
autonomous_arming_rate_b =0.05 ,
overassesment_factor_gang_b_by_a =1.1 ,
overassesment_factor_gang_a_by_b =1.0 ,
obsolescence_rate_a=0.10,
obsolescence_rate_b=0.10)
## Simulación 2
### Ahora supongamos que la gang A subestima el armamento de la banda B en un 50%, es decir, que el "overassessment factor of gang B arming by gang A" es 50%, y que la banda B evalúa correctamente el armado de la banda A, es decir, el "overassessment factor of gang A arming by gang B" es 100%. Haz una nueva corrida del modelo durante un periodo de 100 meses. Describe el comportamiento que muestra la simulación y relacionalo con los ciclos de causalidad que hayas encontrado en el diagrama causal.
parameters2 <- c(autonomous_arming_rate_a= 0.05,
autonomous_arming_rate_b =0.05 ,
overassesment_factor_gang_b_by_a =0.50 ,
overassesment_factor_gang_a_by_b =1.00 ,
obsolescence_rate_a=0.10,
obsolescence_rate_b=0.10)
# Seleccionar el método de integración a utilizar
intg.method = c("rk4")
# Realizar la simulación utilizando la función 'ode' del paquete deSolve
out1 <- ode(
y = inicial.conditions, #condiciones iniciales
times = times, #tiempo de simulación
func = model_arms, #función del modelo
parms = parameters,
method = intg.method
)
out2 <- ode(
y = inicial.conditions, #condiciones iniciales
times = times, #tiempo de simulación
func = model_arms, #función del modelo
parms = parameters,
method = intg.method
)
out3 <- ode(
y = inicial.conditions, #condiciones iniciales
times = times, #tiempo de simulación
func = model_arms, #función del modelo
parms = parameters2,
method = intg.method
)
out4 <- ode(
y = inicial.conditions, #condiciones iniciales
times = times, #tiempo de simulación
func = model_arms, #función del modelo
parms = parameters2,
method = intg.method
)
out1 <- as.data.frame(out1)
out2 <- as.data.frame(out2)
out3 <- as.data.frame(out3)
out4 <- as.data.frame(out4)
ggplot() +
geom_line(data = out1, aes(x = time, y = arms_stock_gang_a, color = "arms_stock_gang_a"), show.legend = TRUE) +
geom_line(data = out2, aes(x = time, y = arms_stock_gang_b, color = "arms_stock_gang_b"), show.legend = TRUE) +
scale_color_manual(name = "Legend",
values = c("arms_stock_gang_a" = "blue", "arms_stock_gang_b" = "red"),
labels = c("arms_stock_gang_a" = "Blue: Arms stock of gang A", "arms_stock_gang_b" = "Red: Arms stock of gang B")) +
labs(title = "Sobre estimación del armamento de la gang B \n y evaluación correcta del armado de la gang A",
y = "Arms stock of gangs")
En la gráfica de la primera simulación, donde el grupo A sobreestima el armamento del grupo B mientras que este último evalúa correctamente el armamento del grupo A, se puede observar un crecimiento lineal en ambos stocks de armas. Cuando el grupo A intenta protegerse, su armamento continuará aumentando mientras sobreestime el armamento de su oponente. Este fenómeno se observa en el modelo causal en el bucle de balanceo al que nos referimos como “arming loop of gang a”. Por otro lado, mientras que el grupo B continúe percibiendo correctamente el armamento del grupo A y que este continúe aumentando, también aumentarán su propio armamento, tal como se ilustra en el bucle de balanceo del modelo causal al que denominamos “arming loop of gang b”.
Ambos stocks de armas están en aumento. Sin embargo, debido a la sobreestimación del grupo A, su stock de armas alcanza cantidades más altas que el del grupo B.
ggplot() +
geom_line(data = out3, aes(x = time, y = arms_stock_gang_a, color = "arms_stock_gang_a"), show.legend = TRUE) +
geom_line(data = out4, aes(x = time, y = arms_stock_gang_b, color = "arms_stock_gang_b"), show.legend = TRUE) +
scale_color_manual(name = "Legend",
values = c("arms_stock_gang_a" = "blue", "arms_stock_gang_b" = "red"),
labels = c("arms_stock_gang_a" = "Blue: Arms stock of gang A", "arms_stock_gang_b" = "Red: Arms stock of gang B")) +
labs(title = "Subestimación del armamento de la gang B \n y evaluación correcta del armado de la gang A",
y = "Arms stock of gangs")
En este segundo escenario, donde la gang A subestima el armamento de la gang B en un 50% (considera que está menos armada de lo que realmente está), se observa un comportamiento logarítmico en la gráfica. Esta percepción errónea por parte de la pandilla A puede resultar perjudicial, ya que no se preparará adecuadamente para igualar a su enemigo. Como resultado, en la gráfica se puede apreciar claramente que el armamento de la gang B supera considerablemente al de la gang A.
En resumen, tanto la sobreestimación como la subestimación del armamento entre las pandillas pueden desencadenar diferentes escenarios, como se ilustra en los diagramas causales y de flujo. Esto confirma que la dinámica de sistemas es una herramienta útil para prever resultados dados ciertas variables.
Pruyt, E. (2013). Small system dynamics models for big issues: Triple jump towards real-world complexity (1st ed.). TU Delft Library. ISBN 978-94-6186-195-5