Modelado de la dinámica de un sistema delictivo por Alejandra Martínez Blackaller

Problema 6.6 del libro Small System Dynamics Models for Big Issues: Triple Jump towards Real-World Complexity de Erik Pruyt, Gangs and Arms Races

1. Diagrama causal del problema

2. Diagrama de flujo del problema

3. Modelo del problema y comportamiento dinámico de las variables de estado

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")

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.

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")

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.

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.

Referencias

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