Problema 6_6 “Gangs and Arms Races”

Introducción

En esta ocasión desarrollaré un modelo de simulación que explora la dinámica de armamento entre dos pandillas rivales a lo largo del tiempo, el modelo se basa en la premisa de que cada pandilla incrementa su stock de armas en respuesta al stock percibido de la pandilla rival entre otras variables, buscando mantener una ventaja relativa.

Este comportamiento puede generar ciclos de retroalimentación que llevan a carreras armamentistas descontroladas.

A continuación, se presenta el diagrama causal y el diagrama de flujo del modelo, seguidos del código en R para implementar y simular el modelo bajo dos escenarios diferentes.

Finalmente, se discuten los resultados y se extraen conclusiones sobre el impacto de las percepciones en la evolución de este sistema social complejo.

Problema 6_6 “Gangs and Arms Races”

Recuperado de System Dynamics Models for Big Issues escrito por Erik Pruyt

  1. Diagrama Causal

  1. Diagrama de Flujo

  1. Modelo del problema y comportamiento dinámico de las variables de estado
library(deSolve)

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

# Definir la función del modelo.
model_arms<-function(t, state, parameters){
  with(as.list(c(state, parameters)),{
    #Variables Auxiliares
    rel_arm_rate_a = overassesment_factor_by_a * obsolescence_rate_a * arms_stock_gang_b-obsolescence_rate_a * arms_stock_gang_a
    rel_arm_rate_b = overassesment_factor_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 + rel_arm_rate_a
    arming_gang_b = autonomous_arming_rate_b + rel_arm_rate_b

    #Variable de estado
    darms_stock_gang_a = arming_gang_a
    darms_stock_gang_b = arming_gang_b
    
    
    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. 
parameters1 <- c(autonomous_arming_rate_a = 0.05,
                autonomous_arming_rate_b = 0.05 ,
                overassesment_factor_by_a = 1.1 ,
                overassesment_factor_by_b = 1.0 ,
                obsolescence_rate_a = 0.10,
                obsolescence_rate_b = 0.10)

parameters2 <- c(autonomous_arming_rate_a = 0.05,
                autonomous_arming_rate_b = 0.05 ,
                overassesment_factor_by_a = 0.5 ,
                overassesment_factor_by_b = 1.0 ,
                obsolescence_rate_a = 0.10,
                obsolescence_rate_b = 0.10)
               
# Seleccionar el método de integración a utilizar en la simulación, en este caso 'rk4' (Runge-Kutta de 4to orden)
intg.method = c("rk4")

# Realizar la simulación utilizando la función 'ode' del paquete deSolve
sim_1 <- ode(
  y = inicial.conditions,  #condiciones iniciales
  times = times, #tiempo de simulación
  func = model_arms, #función del modelo
  parms = parameters1,
  method = intg.method
)

sim_2 <- ode(
  y = inicial.conditions,  #condiciones iniciales
  times = times, #tiempo de simulación
  func = model_arms, #función del modelo
  parms = parameters2,
  method = intg.method
)

sim_1 <- as.data.frame(sim_1)
sim_2 <- as.data.frame(sim_2)

library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)

# Combinar los datos de sim_1 y sim_2 en un solo data frame
sim_combined <- bind_rows(
  sim_1 %>% select(time, gang_a = arms_stock_gang_a, gang_b = arms_stock_gang_b) %>% 
    mutate(simulation = "Simulación 1"),
  sim_2 %>% select(time, gang_a = arms_stock_gang_a, gang_b = arms_stock_gang_b) %>% 
    mutate(simulation = "Simulación 2")
) %>%
  tidyr::pivot_longer(cols = c(gang_a, gang_b), names_to = "gang", values_to = "stock")

# Graficar los resultados de ambas simulaciones en una sola gráfica
ggplot(sim_combined, aes(x = time, y = stock, color = gang, linetype = simulation)) +
  geom_line(size = 1.2) +
  scale_color_manual(values = c("blue", "red"),
                     labels = c("Pandilla A", "Pandilla B")) +
  scale_linetype_manual(values = c("solid", "dotted"),
                        labels = c("Simulación 1", "Simulación 2")) +
  labs(title = "Resultados de las Simulaciones",
       x = "Tiempo (meses)",
       y = "Stock de Armas",
       color = "Pandilla",
       linetype = "Simulación") +
  theme_minimal() +
  theme(plot.title = element_text(size = 16, face = "bold"),
        axis.title = element_text(size = 14),
        axis.text = element_text(size = 12),
        panel.grid.major = element_line(color = "gray90"),
        panel.grid.minor = element_blank(),
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 12)) +
  guides(linetype = guide_legend(override.aes = list(linetype = c("solid", "1313"))))

Resultados y Discusión

La gráfica muestra los resultados de dos simulaciones diferentes del modelo de carrera armamentista entre pandillas, la diferencia clave entre las dos simulaciones radica en el factor de sobre/subestimación del stock de armas de la pandilla rival por parte de la Pandilla A.

En la Simulación 1, la Pandilla A sobreestima el stock de armas de la Pandilla B en un 10%., esto impulsa a la Pandilla A a acumular armas a un ritmo acelerado para mantenerse por delante, aunque la Pandilla B evalúa correctamente el stock de A, se ve arrastrada a una carrera armamentista para no quedarse atrás.

El resultado es un crecimiento exponencial en el stock de armas de ambas pandillas.

Por otro lado, en la Simulación 2, la Pandilla A subestima significativamente el stock de armas de B en un 50%, esto lleva a que A acumule armas a un ritmo mucho más lento, aunque B sigue evaluando correctamente el stock de A y responde en consecuencia, el ritmo general de armamento es mucho más moderado.

La subestimación por parte de A actúa como un “freno” en la carrera armamentista, manteniendo los stocks de armas en niveles más bajos y estables.

Conclusiones

Este modelo demuestra el papel crítico que juegan las percepciones y reacciones de los actores en la evolución de un sistema social complejo como la rivalidad entre pandillas, el factor clave es la percepción que tiene cada pandilla del armamento de su rival.

Una sobreestimación mutua puede desencadenar una peligrosa carrera armamentista con crecimiento exponencial, en contraste, si una pandilla subestima a la otra, puede ayudar a mantener el conflicto bajo control.

Estos hallazgos tienen importantes implicaciones para las políticas públicas y las intervenciones en situaciones de conflicto entre grupos armados, sugieren que las iniciativas que buscan reducir la violencia deberían enfocarse no solo en controlar el flujo de armas, sino también en influir en las percepciones y expectativas de los actores involucrados.

En futuras investigaciones, sería valioso extender este modelo para incorporar factores adicionales, como la influencia de terceros actores (por ejemplo, la percepción o en general la intervención de las fuerzas de seguridad), los efectos de diferentes estrategias de intervención, y las dinámicas espaciales del conflicto.

Esto podría proporcionar una comprensión aún más matizada del complejo sistema de la violencia urbana y guiar el desarrollo de políticas más efectivas para construir comunidades pacíficas y resilientes.