我正在模拟流行病学的随机模拟。如何在离散时间内模拟它?我设法使用下面的编码获得连续时间。
library(GillespieSSA)
parms <- c(beta=0.591,sigma=1/8,gamma=1/7)
x0 <- c(S=50,E=0,I=1,R=0)
a <- c("beta*S*I","sigma*E","gamma*I")
nu <- matrix(c(-1,0,0, 1,-1,0, 0,1,-1, 0,0,1),nrow=4,byrow=TRUE)
set.seed(12345)
out <- lapply(X=1:10,FUN=function(x) ssa(x0,a,nu,parms,tf=50)$data)
out
我应该如何改变编码以获得离散时间?提前感谢。
答案 0 :(得分:2)
Gillespie算法(参见this paper)基本上模拟continuous-time Markov chain的轨迹(它是discrete-event simulation方法)。
粗略地说,这意味着out
中的每个事件都与连续时间相关联,并且这是您使用的模拟方法所固有的(即,不是< / em>易于改变。
然而,您可以在离散时间点轻松找到模型的状态 :它是之前模型的状态第一个具有更高时间戳的事件。
示例:您及时e_1
,1.932..
e_2
和1.999892..
及时观察反应事件e_3
2.00892..
。模型在t=2.0
时的状态是事件e_2
发生后的状态,事件e_3
发生之前的。