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