Pandillas y Carreras Armamentistas

Esta publicación es un modelado de la dinámica de un sistema delictivo del caso 6.6 Gangs and Arms Races del libro Small System Dynamics Model for Big Isues de Erick Pruyt

El Autor explica que el caso está basado en las carreras armamentisas, las cuales son procesos de escalada entre dos (o más) naciones o partes en conflicto que “se vigilan mutuamente y responden a las actividades de armamento (inciertas) de su oponente con actividades de armamento (relativamente mayores) propias” (Bossel 2007c, p. 36). Es decir el siguiente modelado muestra como es que la cantidad de armas mantenidas por una de las partes en conflicto puede disuadir a la otra parte de atacar y viceversa, lo que resulta en una situación de paz armada que va escalando (Pruyt, 2013).

Cómo primer paso se realizó el diagrama causal de la problemática.

1. Diagrama causal del problema

En el cual podemos observar como se relacionan las variables de la problemática, cuáles influyen positiva y negativamente en cada una y nos ayuda a identificar los ciclos de reforzamiento (R) y balanceo (B) en el sistema.

Posteriormente, se realiza el diagrama de flujo de la problemática.

2. Diagrama de flujo del problema

En este sintetizamos el digrama causal de la problemática e identificamos nuestras variables de estado las cuales son las que se encuentran en los rectángulos, estas son nuestras variables que guardan información, el diagrama gira al rededor de ellas.

Como tercer paso, se realiza el modelo del problema y comportamiento dinámico de las variables de estado.

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

# Primero paso: Cargar el paquete deSolve para utilizar funciones de resolución de ecuaciones diferenciales y el paquete ggplot2 para poder graficar
library("deSolve")
library(ggplot2)

# Segundo paso: Establecer las condiciones iniciales de la variable de estado, las cuales vienen descritas en el problema
inicial.conditions<-c(arms.stock.a=100/100,
                      arms.stock.b=100/100)#Kg

# Tercer paso: Definir el vector de tiempos para la simulación es decir, por cuanto tiempo estaremos analizando la simulación. 
times<-seq(0,100, by = 1)#Unidad de medida: Meses (100 meses e iremos analizandoño mes por mes)

# Cuarto paso: Definir la función del modelo, es decir el nombre especifico de este modelo
model_arms<-function(t, state, parameters){
  with(as.list(c(state, parameters)),{
    
#Definición de las variables auxiliares o endógenas, es decir las que están dentro del modelo pero no afectan directamente a las variables de estado
    relative.arming.rate.of.gang.a=overassesment.of.gang.b.arming.by.gang.a*arms.obsolenscence.of.gang.a*arms.stock.b-(arms.obsolenscence.of.gang.a*arms.stock.a) 
    relative.arming.rate.of.gang.b=overassesment.of.gang.a.arming.by.gang.b*arms.obsolenscence.of.gang.b*arms.stock.a-(arms.obsolenscence.of.gang.b*arms.stock.b) 
    
    #Definición de las variables de flujo es decir, aquellas que directamente modifican a las variables de estado
    arming.of.gang.a=autonomus.arming.rate.gang.a+relative.arming.rate.of.gang.a
    arming.of.gang.b=autonomus.arming.rate.gang.b+relative.arming.rate.of.gang.b
    
       
    #Definición de las variables de estado:se establece su ecuación diferencial de ahí viene la d
    darms.stock.a= arming.of.gang.a
    darms.stock.b= arming.of.gang.b
    
    #Código para que nos devuelva los resultados de la variable de estado
    return(list(c(darms.stock.a, 
                  darms.stock.b),
                arming.of.gang.a=arming.of.gang.a,
                arming.of.gang.b=arming.of.gang.b))
  })
}

# Definición de los parámetros del modelo, es decir con que condiciones sucederá la simulación, para este caso se definen dos tipos diferentes de parámetros para ver el comportamiento del los Gagns cuando hay sobrestimación y subestimación del armamento del otro gang
parameters<-c(arms.obsolenscence.of.gang.a= 10/100,
              arms.obsolenscence.of.gang.b= 10/100,
              overassesment.of.gang.b.arming.by.gang.a=110/100,
              overassesment.of.gang.a.arming.by.gang.b=100/100,
              autonomus.arming.rate.gang.a=5/100,
              autonomus.arming.rate.gang.b=5/100
              )#%Rate #variables exógenas

parameters2<-c(arms.obsolenscence.of.gang.a= 10/100,
              arms.obsolenscence.of.gang.b= 10/100,
              overassesment.of.gang.b.arming.by.gang.a=50/100,
              overassesment.of.gang.a.arming.by.gang.b=100/100,
              autonomus.arming.rate.gang.a=5/100,
              autonomus.arming.rate.gang.b=5/100
              )
# 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, aquí se realizan 4 outs para ver el comportamiento de ambos gangs por separado en cada situación.
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 = parameters2 ,
  method = intg.method 
  
  )
  


# Graficar los resultados de la simulación

graph1 <-as.data.frame(out1)

graph2 <-as.data.frame(out1)

graph3 <-as.data.frame(out2)

graph4 <-as.data.frame(out2)


# Graficar los resultados de la simulación

ggplot(graph1, aes(x=time, y=arms.stock.a)) + geom_line()

ggplot(graph2, aes(x=time, y=arms.stock.b)) + geom_line()

ggplot(graph3, aes(x=time, y=arms.stock.a)) + geom_line()

ggplot(graph4, aes(x=time, y=arms.stock.b)) + geom_line()

4. Resultados por separado.

En la primera gráfica podemos observar el comportamiento del Gang A cuando hay una sobrestimación de su parte del 10% con respecto al armamento del Gang B, por otro lado, en la segunda gráfica podemos observar el comportamiento del Gang B con la sobrestimación del Gang A y una estmación excata del Gang B con respecto al armamento del Gang A.

En la tercera gráfica podemos observar el comportamiento del Gang A cuando hay una subestimaicón de su parte del 50% con respecto al armamento del Gang B, mientras que en la cuarta gráfica podemos observar el comportamiento del Gang B con la subestimación del Gang A y una estmación excata del Gang B con respecto al armamento del Gang A.

Más adelante explicaremos sus comportamientos en conjunto.

# Combinamos los data frames para hacer una sola gráfica con los 4 comportamientos
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
combined_data <- bind_rows(
  mutate(graph1, scenario = "Esenario 1 110% Gang A  - 100% Gang B"),
  mutate(graph3, scenario = "Esenario 2 50% Gang A  - 100% Gang B"),
)

# Graficamos los resultados de la simulación en conjunto
ggplot(combined_data, aes(x = time)) +
  geom_line(aes(y = arms.stock.a, color = scenario), size = 1) +
  geom_line(aes(y = arms.stock.b, color = scenario), size = 1, linetype = "dashed") +
  labs(title = "Gang A (línea continua) vs Gang B (línea punteada)",
    x = "Tiempo (Meses)", 
    y = "Stock de Armas", 
    color = "Escenario") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

5. Resultados en conjunto

Lo que está sucediendo en el primer escenario donde el Gang A sobrestima al Gang B por 10% es que ambos gangs van a armarse muchísimo puesto que en el ciclo de reforzamiento del modelo causal mientras más armas tiene uno más armas tomará el otro, esto claro por los parametros asignados a la variable overassesment.of.gang.b.arming.by.gang.b del 100%, puesto que el gang b va siguiendo de manera exacta la cantidad de armamento que el gang a tiene, por esta misma razón, en el segundo escenario cuando el gang a subestima al gang b por 50% el stock de ambos baja muchísimo, pues el gang a piensa que el gang b tiene un armamento 50% más pequeño entonces por ende adquiere también menos armamento, y el gang b al saber exactamente cuanto armamento tiene el gang a va armandose lo suficiente para vencerlo pero no adquiriendo más armamento del necesario.

Referencias:

Pruyt, Erik. (2013). Small System Dynamics Models for Big Issues (Edición 1.0). TU Delft Library. ISBN: 978-94-6186-195-5.