【发布时间】:2019-05-21 15:38:58
【问题描述】:
我正在使用 FME 包将猎物-捕食者模型拟合到我的数据中。目前我只是在学习和测试代码,还没有安装任何东西,下面这个例子:http://strimas.com/r/lotka-volterra/
在执行全局敏感性分析时,我得到一个错误,我不知道它来自哪里。
当我在我的 R 会话中复制粘贴上面的示例时,它可以工作。但我无法让自己的代码工作。 我根据 FME 上的另一个文档编写了我的函数,因此语法略有不同。
# model function
RMmodel <- function(t, y, parms) {
#y <- c(N = 30, P = 3)
derivs <- function(t, y, parms) {
with(as.list(c(y, parms)), {
dN <- r * N * (1 - N/K) - a * N * P / (1 + a*h*N)
dP <- e * a * N * P / (1 + a*h*N) - m * P
return(list(c(dN, dP)))
})
}
return(ode(y = y, times = t, parms = parms, func = derivs))
}
# input
parameters <- c(r = 0.4, # growth rate prey
K = 2200, # carrying capacity prey
a = 0.14, # search rate predator
h = 1, # handling time
e = 1.2, # assimilation efficiency predator
m = 0.2) # mortality rate predator
init <- c(N = 30, P = 3)
times <- seq(0, 120, by=1)
# calculate ODE
RM_result <- RMmodel(t = times, y = init, parms = parameters) # this works
# global sensitivity
par_ranges <- data.frame(min = c(0.18, 1500, 0.01, 0.01, 0.01, 0.01),
max = c(0.25, 3500, 2, 2, 2, 2),
row.names = c("r", "K", "a", "h", "e", "m"))
RM_glob_sens <- sensRange(func = RMmodel, parms = parameters,
dist = "grid",
sensvar = c("N", "P"), parRange = par_ranges,
num = 20, t = times)
当我运行上述代码时,出现以下错误:
Error in ode(y = y, times = t, parms = parms, func = derivs) :
argument "parms" is missing, with no default
我尝试了以下方法:将模型中的参数名称调整为“pars”而不是“parms”;在模型函数中添加了初始状态;将“parameters”的对象名称更改为“pars”;更改了 sensRange() 中的顺序;通过 c(a = , ...) 将参数直接放入 sensRange 中。
我显然错过了一些东西,但我一生都找不到它。 有人建议吗?
【问题讨论】: