我希望建立一个人口动态模型,其中每个参数值对应于当天的温度。例如
简单模型
library(deSolve)
set.seed(1)
pars <- c(alpha = 1, beta = 0.2, delta = 0.5, gamma = 0.2)
lv_model <- function(pars, times = seq(0, 50, by = 1)) {
# initial state
state <- c(x = 1, y = 2)
# derivative
deriv <- function(t, state, pars) {
with(as.list(c(state, pars)), {
d_x <- alpha * x - beta * x * y
d_y <- delta * beta * x * y - gamma * y
return(list(c(x = d_x, y = d_y)))
})
}
# solve
ode(y = state, times = times, func = deriv, parms = pars)
}
lv_results <- lv_model(pars = pars, times = seq(0, 50, by = 1))
我现在想使用一系列每日温度
DailyTemperature<-floor(runif(50,0,40))
并使参数值成为温度的函数
TraitTemperature<-seq(1,40,1)
#trait responses to temperature
alpha<- abs(rnorm(40,mean = 0.5,sd=1))
beta<- abs(rnorm(40,mean = 0.2,sd=0.5))
delta<-abs(rnorm(40,mean=1,sd=2))
gamma<- seq(0.025,1,0.025)
parameters<-as.data.frame(cbind(TraitTemperature,alpha,beta,delta,gamma))
因此,对于迭代的每个时间步,它都会查看每日温度,然后在参数数据框中找到相应的温度值。
回顾档案,我看到if/else
想要在特定时间步更改单个参数和使用强制函数时使用的语句,但我认为它们不适用于这里。
我希望这是有道理的,我对如何使它起作用的想法很感兴趣。到目前为止,我还尝试使用 afor loop
来遍历每日温度列表,然后使用match
函数来识别值,但这并没有利用每日时间步长。