这部分与我提出的另一个问题有关。 deSolve for R - Parameterise Events
我正在使用针对R的deSolve软件包编写SIR模型。该模型描述了社区内感染的传播,然后允许引入外部事件 - 这代表了整个社区的大规模处理。
这些被建模为在特定时间发生的事件。 理想情况下,我希望能够有两种不同类型的外部事件,这样你得到的就是
模型运行 时间点= X:触发事件A. 模型继续 时间点= Z:触发事件B. 等等
我尝试使用if命令,这样如果T = X,那么事件=事件A,如果T = Z,那么它会触发一个不同的事件但没有快乐。
感激地收到任何建议。
以下代码
#load deSolve
library(deSolve)
#generate an empty list for the data to be put into
simulationlist <- list()
#define the transmission model
SI1I2L <- function(t, y, parms) {
with(as.list(c(parms,y)),{
dS <- - Beta*S*I1 - Beta*S*I2 + treat*I1 + treat*I2 +latenttreat*L
dI1 <- + Beta*S*I1 + Beta*S*I2 - treat*I1 -second*I1 - latent*I1
dI2 <- + second*I1 - latent*I2 - treat*I2 + relapse*L
dL <- +latent*I1 + latent*I2 - relapse*L - latenttreat*L
der <- c(dS, dI1,dI2, dL)
list(der)
})
}
#define Total Community Treatment Parameters
eventtct <- function(t, y, parms){
with (as.list(y),{
S <- S + 0.95*L + 0.95*I1 + 0.95*I2
I1 <- I1*0.05
I2 <- I2*0.05
L <- L*0.05
return(c(S,I1,I2,L))
})
}
#Set the time frame for the model
dt <- seq(0,100,1)
#Define the spectrum of Parameters for transmission with Min/Max values and number of variations
plist <- cbind(Beta = runif(100,min = 0.00000167, max = 0.0000043),second = runif(100,min= 0.0278,max = 0.0556),latent = runif(100,min=0.004, max=0.009), treat = runif(100, min=0.01, max =0.03),latenttreat = runif(100,min=0.004,max=0.009),relapse = runif(100,min=0.012,max=0.028))
for (i in 1:nrow(plist))
#Define the spectrum of inital values for population size
initlist <- cbind(S = runif(100,min = 110681, max = 118636),I1 = runif(100,min=798, max=2926),I2 = runif(100,min=266,max=1463),L=runif(100,min=13300, max=27930))
for (i in 1:nrow(initlist))
#run multiple simulations
simulationlist[[i]] <- as.data.frame(lsoda(initlist[i,], dt, SI1I2L, parms=plist[i,],events = list(func = eventtct, time = c(2,12) )))