6 Simulaciones del proceso de Markov
Hemos realizado simulaciones utilizando el programa R, el cual nos permitirá visualizar el proceso de toma de decisiones en cada caso, i.e., si las personas siguieron o abandonaron las medidas de prevención. Además, mostraremos cómo son las recompensas asociadas a estas acciones.
Primero, definiremos la función que almacenará nuestro sistema de ecuaciones diferenciales.
<- function(Time, State, Pars) {
EDO_SVVIR_Normalizado with(as.list(c(State, Pars)), {
<- mu - (vbeta * S * I) - (mu + phi) * S + (omega * V_plus) + (xi * R)
dS <- phi_plus * S - (mu + omega) * V_plus
dV_plus <- phi_minus * S - ((c * vbeta) * (V_minus * I)) - mu * V_minus
dV_minus <- (vbeta * S * I) + ((c * vbeta) * (V_minus * I)) - (mu + vgamma) * I
dI <- (vgamma * I) - (mu + xi) * R
dR
return(list(c(dS, dV_plus, dV_minus, dI, dR)))
}) }
Ahora definiremos los valores de los parámetros necesarios para el sistema de ecuaciones diferenciales
# Limpiar la memoria de las variables
rm(list = ls())
# Paquetes necesarios para simulación
library(deSolve)
library(plotly)
# Sistema de ecuaciones
source("EDO_SVVIR_Normalizado.R", local = FALSE)
# Parámetros iniciales
<- 1 / (70 * 365)
mu <- 0.02
omega <- 1 / 14
vgamma <- 0.7
p <- 0.75
vsigma <- p * vsigma
p_e <- 35
vT <- (-log(1 - p_e)) / vT
phi_plus <- (1 / vT) * log((1 - p_e) / (1 - p))
phi_minus <- phi_plus + phi_minus
phi <- 1 / 30
xi <- 0.270 vbeta
En el siguiente código, mostraremos los pasos a seguir para realizar las simulaciones del proceso de Markov.
# Simulaciones del modelo
for (k in 1:n) {
<- 0
t0 <- 65
T0 <- 1
t <- seq(from = t0, to = T0, by = 1 / t)
RejillaTiempo
<- numeric()
vecTime <- character()
velec <- numeric()
vpsi
<- runif(1, 0.5, 2)
psi0 1] <- psi0
vpsi[<- (1 - vsigma) * psi0
c
<- c(
vpar vbeta = vbeta, mu = mu, phi = phi, omega = omega,
xi = xi, phi_plus = phi_plus, phi_minus = phi_minus,
c = c, vgamma = vgamma
)
<- ode(yinicial, RejillaTiempo, EDO_SVVIR_Normalizado, vpar, method = "lsoda")
outSVVIR <- numeric()
vPI 1] <- outSVVIR[T0, 5] * 10000
vPI[
1] <- if (0.5 < psi0 && psi0 < 0.9) {
velec["bien"
else if (0.9 <= psi0 && psi0 <= 1.2) {
} "normal"
else {
} "mal"
}
1] <- T0
vecTime[
for (i in 1:3) {
<- 65 + (100 * i)
T0 <- seq(from = t0, to = T0, by = 1 / t)
RejillaTiempo + 1] <- T0
vecTime[i
<- runif(1, 0.5, 2)
psi0 <- (1 - vsigma) * psi0
c + 1] <- psi0
vpsi[i
<- c(
vpar vbeta = vbeta, mu = mu, phi = phi, omega = omega,
xi = xi, phi_plus = phi_plus, phi_minus = phi_minus,
c = c, vgamma = vgamma
)
<- ode(yinicial, RejillaTiempo, EDO_SVVIR_Normalizado, vpar, method = "lsoda")
outSVVIR + 1] <- outSVVIR[T0, 5] * 10000
vPI[i
+ 1] <- if (0.5 < psi0 && psi0 < 0.9) {
velec[i "bien"
else if (0.9 <= psi0 && psi0 <= 1.2) {
} "normal"
else {
} "mal"
}
}
<- vPI
MPI[, k] <- vpsi
Mpsi[, k] <- velec
Mnames[, k] }
Siguiendo los códigos anteriores, podemos desarrollar las simulaciones necesarias para ilustrar la dinámica del proceso de Markov. En el siguiente escenario, se toma una decisión cada 100 días durante un año, y cada simulación representa un año diferente. En la siguiente gráfica, se muestran los diferentes valores de \(\psi\) asociados a las decisiones tomadas por las personas, ya sea seguir o no las medidas de prevención
En la siguiente gráfica, mostramos cómo serían las recompensas correspondientes a cada una de las decisiones tomadas. Estas recompensas están relacionadas con la tabla presentada en la Sección 5 de este documento.
Finalmente, en esta última figura se muestran las consecuencias de tomar ese conjunto de decisiones en la prevalencia de la enfermedad.
Con las figuras anteriores, se puede observar cómo los años 2 y 3 pueden tener la misma recompensa, aunque la selección de los valores de $\psi$ sea diferente. Finalmente, concluimos este proyecto con un video que explica en detalle los resultados mencionados.