我正在尝试弄清楚如何在使用deSolve时运行模拟变化参数值。我是R的新手,很难排除我遇到的错误。我创建了一组非常简单的微分方程,并尝试从均匀分布的参数中运行for循环采样。
我的模特:
sir <- function(time, state, parameters) {
with(as.list(c(state, parameters)), {
dS <- -beta1 * (S * I)/N
dI <- beta1 * (S * I)/N - gamma1 * I
dR <- gamma1 * I
return(list(c(dS, dI, dR)))
})
}
init <- c(S = 99999, I = 1, R = 0)
尝试for循环:
outlist <- list()
plist <- cbind(beta1 = runif(30, min = .1, max = .9),
gamma1 = runif(30, min = .1, max = .9))
for(i in 1:nrow(plist))
outlist[[i]] <- ode(y = init, times = times, func = sir, parms = plist[i])
plot(out, outlist)
我收到以下错误:
eval(expr,envir,enclos)中的错误:找不到对象'beta1'
我非常感谢您提供的任何帮助,
答案 0 :(得分:0)
您的代码有各种错误。我在评论中提到的更多。
R代码中的一个非常典型的错误:您使用plist[i]
来使用i
的行plist
。您应该使用plist[i,]
。
了解你的东西:
library(deSolve)
sir <- function(time, state, parameters) {
beta1 <- parameters[1]
gamma1 <- parameters[2]
with(as.list(c(state, parameters)), {
dS <- -beta1 * (S * I)/N
dI <- beta1 * (S * I)/N - gamma1 * I
dR <- gamma1 * I
return(list(c(dS, dI, dR)))
})
}
init <- c(S = 99999, I = 1, R = 0)
times <- seq(1,5,.5) # trial
N <- 10000000 # having a guess
outlist <- list()
plist <- cbind(beta1 = runif(30, min = .1, max = .9),
gamma1 = runif(30, min = .1, max = .9))
plist[c(1,2)]
for(i in 1:nrow(plist)) {
outlist[[i]] <- ode(y = init, times = times, func = sir, parms = plist[i,])
}
# just display the first item
outlist[[1]]
由您来分配变量out
并继续。