遵循@tpetzoldt 的建议,我在前面的讨论(参数值作为另一个向量的函数。deSolve)之后将其作为一个问题打开。
我想要实现的是能够在每个时间步上将模型集成到一个向量上DailyTemperature
,然后每天的相应参数值是来自其他温度输出的数据帧的值的函数。
library(deSolve)
set.seed(1)
deriv <- function(t, state, pars) {
pars <- parameters[match(DailyTemperature[floor(t + 1)],parameters$TraitTemperature),2:5]
#print(pars)
with(as.list(c(state, pars)), {
d_x <- alpha * x - beta * x * y
d_y <- delta * beta * x * y - gamma * y
list(c(x = d_x, y = d_y), alpha=alpha, beta=beta, gamma=gamma, delta=delta)
})
}
state <- c(x = 1000, y = 10)
times = seq(0, 50, by = 1)
# Parameter datasets
parameters <- data.frame(
TraitTemperature = seq(0.1,40,0.1),
alpha = rtruncnorm(40,a=0,b=1,mean = 1,sd=2),
beta = rtruncnorm(40,a=0,b=1,mean = 1,sd=2),
delta = rtruncnorm(40,a=0,b=1,mean = 1,sd=2),
gamma = seq(0.025,1,0.025)
)
# random daily temperature dataset
DailyTemperature <- round(runif(51, 0, 40),1) # one more because start zero
DailyTemperature
out <- ode(y = state, times = times, func = deriv, parms = pars)
plot(out)
out
我实际上开始认为这是参数值而不是代码的问题。无论如何,我很想知道我的索引是否正确?