Por: Arturo Nepomuceno
Bienvenidxs de nuevo a la nueva publicación de mi blog Investigación Social. En esta edición, les traigo un ejemplo de Modelación de Sistemas aplicado, es decir, un caso hipotético con datos hipotéticos, esto para tener más claro cuál es la utilidad de esta metodología de investigación.
En esta publicación, se trabajó con el ejemplo 6.6 Gangs and Arms Races del libro Small System Dynamics Models for Big Issues: Triple Jump towards Real-World Dynamic Complexity de Erik Pruyt, en el que se detalla un proceso de carrera armamentística entre dos pandillas, A y B, es decir, un proceso en el cual dos actores en conflicto responden a las actividades armamentísticas del rival a través de la adopción propia de actividades armamentísticas (Pruyt, 2013, p. 95).
El siguiente diagrama causal se propone para explicar el comportamiento del almacenamiento de armas de las pandillas rivales A y B con base en el almacenamiento de armas del rival y otras variables establecidas en el caso 6.6.
Este diagrama causal tiene 3 ciclos de retroamlimentación:
Almacenamiento de armas de pandilla A: Este ciclo describe el ritmo de almacenamiento de armas que tiene la pandilla A. En él, influye el armado de la pandilla A, es decir, el proceso de conseguir armas. Además, el almacenamiento influye en la tasa de armado relativa de la pandilla A, es decir, qué tanto armamento intentará conseguir la pandilla A con base en sus perspectivas de cuánto armamento tiene almacenado la pandilla B. Por último, al armado de la pandilla A le afecta una variable exógena que se conoce como la tasa de armado autónoma de la pandilla A, y a la tasa relativa le afecta qué tanto la pandilla A sobreestima el armado de la pandilla B y la tasa de obsolescencia de armas de la pandilla A.
Almacenamiento de armas de pandilla B: Es un proceso espejo del almacenamiento de armas de la pandilla A, es decir, describen todos los mismos procesos, pero ahora describiendo a la pandilla B. El único cambio es en la variable de tasa relativa de armado de la pandilla B y en qué tanto la pandilla B sobreestima el armado de la pandilla A, puesto que ahora estas variables tienen la perspectiva de qué es lo que piensa la pandilla B sobre A.
Influencia de almacenamiento de armas de pandilla rival: Este es un ciclo que describe la relación entre ambos procesos de armado de las pandillas A y B, y cómo estos se interconectan a través de las perspectivas del armado de una pandilla sobre otra. Es decir, este sistema se interconecta, puesto que la tasa de armado relativo de cada pandilla depende del almacenamiento de armas de cada pandilla. Entre más almacenamiento tenga la pandilla rival, la otra pandilla procurará igualar o superar esto.
Se propone también un diagrama de flujo del mismo sistema. Esto con el fin de simplificar las visualización de las relaciones causales del anterior diagrama.
Con base en el anterior sistema, podemos empezar a trabajar en el código que simulará cuál será la evolución del armamento de cada pandilla a través del tiempo, según las relaciones causales establecidas.
# Cargar el paquete deSolve para utilizar funciones de resolución de ecuaciones diferenciales
library(deSolve)
library(tidyverse)
library(ggplot2)
# Librería para arreglar gráficos en un mismo panel
library(ggpubr)
# Establecer las condiciones iniciales de la variable de estado
inicial.conditions <- c(armsStockGangA = 1, # Es decir, 100% de las armas necesarias para
# destruir a la pandilla B
armsStockGangB = 1) # Es decir, 100% de las armas necesarias para
# destruir a la pandilla A
# Definir el vector de tiempos para la simulación
times <- seq(0, 100, by = 1) # Periodo de 100 meses, con saltos cada mes
# Definir la función del modelo
model_gangs <-function(t, state, parameters){
with(as.list(c(state, parameters)),{
# Variables Auxiliares o endógenas
relative.arming.rate.of.gang.a <- overassesment.factor.of.gang.b.arming.by.gang.a * arms.obsolescence.rate.of.gang.a * armsStockGangB - (arms.obsolescence.rate.of.gang.a * armsStockGangA)
relative.arming.rate.of.gang.b <- overassesment.factor.of.gang.a.arming.by.gang.b * arms.obsolescence.rate.of.gang.b * armsStockGangA - (arms.obsolescence.rate.of.gang.b * armsStockGangB)
# Variables de flujo (son las que modifican a las variables de estado)
arming.of.gang.a <- autonomous.arming.rate.of.gang.a + relative.arming.rate.of.gang.a
arming.of.gang.b <- autonomous.arming.rate.of.gang.b + relative.arming.rate.of.gang.b
# Variable de estado (se establece su ecuación diferencial de ahí viene la d)
darmsStockGangA <- arming.of.gang.a
darmsStockGangB <- arming.of.gang.b
# Devuelve los resultados de la variable de estado
return(list(c(darmsStockGangA, darmsStockGangB),
arming.of.gang.a = arming.of.gang.a,
arming.of.gang.b = arming.of.gang.b))
})
}
Con el código base de la simulación, podemos establecer variaciones en los valores de los parámetros del modelo, es decir, las variables exógenas, para así simular escenarios y comparar los resultados de estos, y así tener un mejor entendimiento de las relaciones causales en el sistema.
En este escenario, se simuló una situación en la que la pandilla A sobreestima el armamento de la pandilla B en un 10%, es decir, que la variable overassessment factor del armamento de la pandilla B por la pandilla A es igual a 110%, y que la pandilla B evalúa correctamente el armamento de la pandilla A, es decir, que la variable overassessment factor del armamento de la pandilla A por la pandilla B es igual a 100%.
# Definir los parámetros del modelo (variables exógenas)
parameters <- c(autonomous.arming.rate.of.gang.a = 0.05,
autonomous.arming.rate.of.gang.b = 0.05,
overassesment.factor.of.gang.b.arming.by.gang.a = 1.1,
overassesment.factor.of.gang.a.arming.by.gang.b = 1,
arms.obsolescence.rate.of.gang.a = 0.1,
arms.obsolescence.rate.of.gang.b = 0.1)
# 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
out <- ode(
y = inicial.conditions, #condiciones iniciales
times = times, #tiempo de simulación
func = model_gangs, #función del modelo
parms = parameters,
method = intg.method
)
# Graficar los resultados de la simulación
# Gráfico del stock de armas de la pandilla A
graph1 <- as.data.frame(out) %>%
ggplot(aes(x = time, y = armsStockGangA)) +
geom_line() +
labs(title = "Stock de armas de A en el tiempo",
x = "Tiempo",
y = "Stock de armas de A (Caso 1)") +
theme_minimal() +
theme(axis.title.y = element_text(size = 9))
# Gráfico del stock de armas de la pandilla B
graph2 <- as.data.frame(out) %>%
ggplot(aes(x = time, y = armsStockGangB)) +
geom_line() +
labs(title = "Stock de armas de B en el tiempo",
x = "Tiempo",
y = "Stock de armas de B (Caso 1)") +
theme_minimal() +
theme(axis.title.y = element_text(size = 9))
# Arreglar ambos gráficos en un mismo panel
ggarrange(graph1, graph2)
En el gráfico anterior, se puede observar un comportamiento de crecimiento exponencial en el almacenamiento de armamento de cada una de las pandillas. Esto se da gracias a que este modelo no cuenta con una variable de salida, es decir, no hay ninguna variable que impacte negativamente a la variable de estado almacenamiento de armamento de las pandillas. Por lo tanto, este escenario describe una situación en la que cada pandilla entra en una carrera armamentística sin un fin claro, puesto que, como evalúan que la pandilla rival tiene siempre el suficiente armamento para destruir a su pandilla, deciden ellos mismos seguir armándose por si llegara a suceder un conflicto.
Cabe resaltar que, debido a que la pandilla A sobreestima el armamento de la pandilla B, esta tiene un crecimiento un poco más grande que el de su pandilla rival.
En este escenario, se simuló una situación en la que la pandilla A subestima el armamento de la pandilla B en un 50%, es decir, que la variable overassessment factor del armamento de la pandilla B por la pandilla A es igual a 50%, y que la pandilla B evalúa correctamente el armamento de la pandilla A, es decir, que la variable overassessment factor del armamento de la pandilla A por la pandilla B es igual a 100%.
# Definir los parámetros del modelo (variables exógenas)
parameters2 <- c(autonomous.arming.rate.of.gang.a = 0.05,
autonomous.arming.rate.of.gang.b = 0.05,
overassesment.factor.of.gang.b.arming.by.gang.a = 0.5,
overassesment.factor.of.gang.a.arming.by.gang.b = 1,
arms.obsolescence.rate.of.gang.a = 0.1,
arms.obsolescence.rate.of.gang.b = 0.1)
# Realizar la simulación utilizando la función 'ode' del paquete deSolve
out2 <- ode(
y = inicial.conditions, #condiciones iniciales
times = times, #tiempo de simulación
func = model_gangs, #función del modelo
parms = parameters2,
method = intg.method
)
# Gráfico del stock de armas de la pandilla A
graph3 <- as.data.frame(out2) %>%
ggplot(aes(x = time, y = armsStockGangA)) +
geom_line() +
labs(title = "Stock de armas de A en el tiempo",
x = "Tiempo",
y = "Stock de armas de A (Caso 2)") +
theme_minimal() +
theme(axis.title.y = element_text(size = 9))
# Gráfico del stock de armas de la pandilla B
graph4 <- as.data.frame(out2) %>%
ggplot(aes(x = time, y = armsStockGangB)) +
geom_line() +
labs(title = "Stock de armas de B en el tiempo",
x = "Tiempo",
y = "Stock de armas de B (Caso 2)") +
theme_minimal() +
theme(axis.title.y = element_text(size = 9))
# Arreglar ambos gráficos en un mismo panel
ggarrange(graph3, graph4)
En el gráfico anterior, se pueden observar dos comportamientos distintos según la pandilla. La pandilla A tiene un comportamiento de crecimiento logístico, es decir, un crecimiento exponencial inicial hasta alcanzar un nivel de equilibrio de almacenamiento de armas. La pandilla B tiene un comportamiento de estabilización de un objetivo, es decir, un proceso de auto-regulación que lleva a un objetivo específico.
Cabe resaltar que el objetivo de estabilización de la pandilla B es mayor que el de la pandilla B, ya que ellos evalúan correctamente cuánto armamento tiene almacenado la pandilla A, mientras que esta subestima la cantidad de armamento almacenado de la pandilla B. Esto puede explicarse con base en la relación entre la variable exógena overassessment factor del armamento de la pandilla B por la pandilla A y la tasa relativa de armado de la pandilla A. Debido a que el valor de la primera variable es menor que su contraparte en la pandilla rival, el efecto que se tiene en el resultado final del almacenamiento de armamento de la pandilla A es menor también.
Ahora, comparemos ambos modelos para tener una mejor perspectiva de la influencia de las variables en este modelo.
ggarrange(graph1, graph2, graph3, graph4, nrow = 2, ncol = 2) %>%
annotate_figure(plot, top = text_grob("Comparación de Simulaciones: Caso 1 y Caso 2",
color = "red", face = "bold", size = 14))
Gracias al gráfico anterior, podemos notar que el efecto que tienen variables exógenas en el comportamiento final de cada pandilla es de suma importancia. Si se subestima el armamento de la pandilla rival, esto puede resultar en que se almacenen menos armas, y a su vez impactar negativamente a la pandilla con menor armamento en una situación de conflicto armado.
Por lo tanto, podemos concluir que, aunque una variable no impacte directamente a una variable, si se tiene una perspectiva de dinámica de sistemas, esta variable tendrá impacto en el resultado final del sistema. Es necesario contar con un análisis de dinámica de sistemas para el estudio de variables cuyo impacto en otra parece no ser intuitivo, pero que, al introducir esta perspectiva, puede ser el factor de cambio de una situación.
Pruyt, E. (2013). Small System Dynamics Models for Big Issues: Triple Jump towards Real-World Dynamic Complexity. TU Delft Library.