Introducción

En este estudio se analiza el caso 6.7 Unintended Family Planning Benefits del libro Small System Dynamics Models for Big Issues de Erik Pruyt. El caso se enfoca en la dinámica de familias con múltiples problemas y su relación con los crímenes. Se modela una población dividida en 4 grupos: niños, jóvenes, adultos y jubilados, con transiciones entre cada una de las etapas y considera que únicamente los jubilados mueren.

Se estudia el crimen diferenciando entre delitos cometidos por individuos dentro de estas familias y los cometidos por otros.Sin embargo, se hace énfasis en los cometidos por individuos de estas familias y los cometidos por otros son una variable exógena.

A continuación se presenta el diagrama de causalidad, el diagrama de flujo y la simulación del modelo.

Diagrama de Causalidad

Diagrama de Flujo

Simulación del Modelo

En esta sección se corre el modelo en Rstudio utilizando los valores iniciales y parámetros expresados en el caso. La simulación se hace a 50 años para analizar los comportamientos de las variables de estado.

library(deSolve)
## Warning: package 'deSolve' was built under R version 4.4.3
InitialConditions <- c(kids= 1000000,
                       youngs= 1000000,
                       adults= 3000000,
                       retirees= 750000
  )

times <- seq(0,#initial time
             50,#end time
             1) #time step

case_6_7 <- function(t, state, parameters) {
  with(as.list(c(state,parameters)), {
    #Endogenous auxiliary variables
    criminal.kids= criminal.kids.percentage*kids
    criminal.youngs= criminal.youngs.percentage*youngs
    criminal.adults= criminal.adults.percentage*adults
    criminal.retirees= criminal.retirees.percentage*retirees
    crimes = crimes.others + (crimes.per.kid*criminal.kids) + (crimes.per.young*criminal.youngs) + (crimes.per.adult*criminal.adults) + (crimes.per.retiree*criminal.retirees)
      
    #Flow variables
    birth= (fertility.youngs*youngs) + (fertility.adults*adults)
    kids.to.youngs= kids/time.kid
    youngs.to.adults= youngs/time.young
    adults.to.retirees= adults/time.adult
    death= retirees/time.retiree
    
      
    #State (stock) variables (d)
    d.kids= birth - kids.to.youngs
    d.youngs= kids.to.youngs - youngs.to.adults
    d.adults= youngs.to.adults - adults.to.retirees
    d.retirees= adults.to.retirees - death
    
    list(c(d.kids,d.youngs,d.adults,d.retirees))
  })
}

###exogenas
parameters<-c(time.kid= 12,
              time.young= 12,
              time.adult= 40,
              time.retiree= 15,
              fertility.youngs= 0.3/100,
              fertility.adults= 3/100,
              criminal.kids.percentage= 5/100,
              criminal.youngs.percentage= 50/100,
              criminal.adults.percentage= 60/100,
              criminal.retirees.percentage= 10/100,
              crimes.per.kid= 2,
              crimes.per.young= 4,
              crimes.per.adult= 12,
              crimes.per.retiree= 4,
              crimes.others= 6000000
  )


intg.method<-c("rk4")

out <- ode(y = InitialConditions,
           times = times,
           func = case_6_7,
           parms = parameters,
           method =intg.method )

plot(out,
     col=c("blue"))