#3. Modelo del problema y comportamiento dinámico de las variables de estado
# Cargar el paquete deSolve para utilizar funciones de resolución de ecuaciones diferenciales
library("deSolve")
library("ggplot2")
inicial.conditions <- c(arms_stock_gang_a = 1.0,
arms_stock_gang_b = 1.0) #animal
# Definir el vector de tiempos para la simulación
times <- seq(0,100, by = 1) #
# Definir la función del modelo. #parametros son las variables exógenas
model_arms<-function(t, state, parameters){
with(as.list(c(state, parameters)),{
#Variables Auxiliares o endógenas
relative_arming_rate_b=overassesment_factor_gang_a_by_b*obsolescence_rate_b*arms_stock_gang_a-obsolescence_rate_b*arms_stock_gang_b
relative_arming_rate_a=overassesment_factor_gang_b_by_a*obsolescence_rate_a*arms_stock_gang_b-obsolescence_rate_a*arms_stock_gang_a
#Variables de flujo
arming_gang_a=autonomous_arming_rate_a+relative_arming_rate_a
arming_gang_b=autonomous_arming_rate_b+relative_arming_rate_b
#variable de estado
darms_stock_gang_a=arming_gang_a
darms_stock_gang_b=arming_gang_b
#Devuelve los resultados de la variable de estado
return(list(c(darms_stock_gang_a, darms_stock_gang_b),
arming_gang_a = arming_gang_a,
arming_gang_b = arming_gang_b))
})
}
# Definir los parámetros del modelo.
parameters <- c(autonomous_arming_rate_a= 0.05,
autonomous_arming_rate_b =0.05 ,
overassesment_factor_gang_b_by_a =1.1 ,
overassesment_factor_gang_a_by_b =1.0 ,
obsolescence_rate_a=0.10,
obsolescence_rate_b=0.10)
# 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
out1 <- ode(
y = inicial.conditions,
times = times,
func = model_arms,
parms = parameters,
method = intg.method
)
out2 <- ode(
y = inicial.conditions,
times = times,
func = model_arms,
parms = parameters,
method = intg.method
)
out1 <- as.data.frame(out1)
out2 <- as.data.frame(out2)
# Graficar los resultados de la simulación
ggplot(out1, aes(x=time, y=arms_stock_gang_a )) + geom_line()
ggplot(out2, aes(x=time, y=arms_stock_gang_a )) + geom_line()
# Establecer las condiciones iniciales de la variable de estado.
inicial.conditions <- c(arms_stock_gang_a = 1.0,
arms_stock_gang_b = 1.0)
# Definir el vector de tiempos para la simulación
times <- seq(0,100, by = 1) #
# Definir la función del modelo. #parametros son las variables exógenas
model_arms<-function(t, state, parameters){
with(as.list(c(state, parameters)),{
#Variables Auxiliares o endógenas
relative_arming_rate_b=overassesment_factor_gang_a_by_b*obsolescence_rate_b*arms_stock_gang_a-obsolescence_rate_b*arms_stock_gang_b
relative_arming_rate_a=overassesment_factor_gang_b_by_a*obsolescence_rate_a*arms_stock_gang_b-obsolescence_rate_a*arms_stock_gang_a
#Variables de flujo (son las que modifican a las variables de estado)
arming_gang_a=autonomous_arming_rate_a+relative_arming_rate_a
arming_gang_b=autonomous_arming_rate_b+relative_arming_rate_b
#variable de estado
darms_stock_gang_a=arming_gang_a
darms_stock_gang_b=arming_gang_b
#Devuelve los resultados de la variable de estado
return(list(c(darms_stock_gang_a, darms_stock_gang_b),
arming_gang_a = arming_gang_a,
arming_gang_b = arming_gang_b))
})
}
# Definir los parámetros del modelo. Estan por fuera del sistema
parameters <- c(autonomous_arming_rate_a= 0.05,
autonomous_arming_rate_b =0.05 ,
overassesment_factor_gang_b_by_a =0.50 ,
overassesment_factor_gang_a_by_b =1.00 ,
obsolescence_rate_a=0.10,
obsolescence_rate_b=0.10)
# 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
out3 <- ode(
y = inicial.conditions,
times = times,
func = model_arms,
parms = parameters,
method = intg.method
)
out4 <- ode(
y = inicial.conditions,
times = times,
func = model_arms,
parms = parameters,
method = intg.method
)
out3 <- as.data.frame(out3)
out4 <- as.data.frame(out4)
# Graficar los resultados de la simulación
ggplot(out3, aes(x=time, y=arms_stock_gang_a )) + geom_line()
ggplot(out4, aes(x=time, y= arms_stock_gang_b)) + geom_line()
out1$Corrida <- "Sobreestimación"
out3$Corrida <- "Subestimación"
# Unir los datos de ambas corridas
out_combined <- rbind(out1, out3)
# Graficar los resultados combinados
ggplot(out_combined, aes(x = time, y = arms_stock_gang_a, color = Corrida)) +
geom_line() +
labs(x = "Tiempo", y = "Stock de Armas de la Pandilla 'A'", title = "Comparación de la subestimacion y sobreestimacion de la Pandilla 'A'") +
theme_minimal()
# Combinar los resultados de ambas corridas en un solo dataframe
out4$Corrida <- "Subestimación"
out2$Corrida <- "Sobreestimación"
# Unir los datos de ambas corridas
out_combined <- rbind(out4, out2)
# Graficar los resultados combinados
ggplot(out_combined, aes(x = time, y = arms_stock_gang_b, color = Corrida)) +
geom_line() +
labs(x = "Tiempo", y = "Stock de armas de la Pandilla 'B'", title = "Comparación de la subestimacion y sobreestimacion de la Pandilla 'B'") +
theme_minimal()