Descripción del caso:

Fuente: Pruyt, E. (2013). Small System Dynamics Models for Big Issues (Capítulo 6, Problema 6.7)

Este modelo simula la evolución de familias con múltiples problemas mediante gráficos y diagramas. Se analiza el flujo de personas a través de distintas etapas de vida (niñez, juventud, adultez y retiro), considerando cuánto tiempo permanecen en cada una y cómo cambian las proporciones con el tiempo.

También se incluye la natalidad, con tasas específicas para jóvenes y adultos, y la mortalidad, que solo afecta a los retirados. Además, se estudia la criminalidad dentro de estas familias, analizando qué porcentaje de cada grupo tiene comportamiento delictivo y cuántos delitos se cometen en promedio.

A través de diagramas y gráficos, se visualiza cómo estas dinámicas impactan la composición de la población y el comportamiento delictivo en estas familias.

1. Diagrama Causal

2. Diagrama de Flujo

3. Simulación del modelo a 50 años

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

times <- seq(0,#Inicio
             50,#Tiempofinal
             1) #Cadencia

prob6.7 <- function(t, state, parameters) {
  with(as.list(c(state,parameters)), {
    
    #Variables endogenas
    criminalkids= criminalkids_percentage*kids
    criminalyoungsters= criminalyoungsters_percentage*youngsters
    criminaladults= criminaladults_percentage*adults
    criminalretirees= criminalretirees_percentage*retirees
    crimes = otherscrimes + (crimes_perkids*criminalkids) + (crimes_peryoungsters*criminalyoungsters) + (crimes_peradults*criminaladults) + (crimes_perretirees*criminalretirees)
      
    #Variables de flujo
    birth= (fertility_youngsters*youngsters) + (fertility_adults*adults)
    kids2youngsters= kids/time_kids
    youngsters2adults= youngsters/time_youngsters
    adults2retirees= adults/time_adults
    death= retirees/time_retiree
    
      
    #Variables de estado (d)
    d.kids= birth - kids2youngsters
    d.youngs= kids2youngsters - youngsters2adults
    d.adults= youngsters2adults - adults2retirees
    d.retirees= adults2retirees - death
    
    list(c(d.kids,d.youngs,d.adults,d.retirees))
  })
}

###Variables exógenas
parameters<-c(time_kids= 12,
              time_youngsters= 12,
              time_adults= 40,
              time_retiree= 15,
              fertility_youngsters= 0.3/100,
              fertility_adults= 3/100,
              criminalkids_percentage= 5/100,
              criminalyoungsters_percentage= 50/100,
              criminaladults_percentage= 60/100,
              criminalretirees_percentage= 10/100,
              crimes_perkids= 2,
              crimes_peryoungsters= 4,
              crimes_peradults= 12,
              crimes_perretirees= 4,
              otherscrimes= 6000000
  )


intg.method<-c("rk4")

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

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