我正在将参数模型拟合到一些具有时间相关协变量的生存数据。拟合过程涉及迭代求解一些 ODE - 每个受试者每个时间间隔一个 ODE,但是手头间隔上 ODE 的初始条件是前一个间隔上 ODE 解的最后一个值。从这个意义上说,ODE 相互依赖。
我的问题归结为:现在,我正在通过循环迭代地求解这些 ODE,因为我需要使用前一个解决方案的最后一个值作为下一个解决方案的起点。问题是这种循环对于大型数据集会消耗大量时间。有什么方法可以让我使用 vapply 或其他矢量化函数来做同样的事情吗?
我一直在搜索档案,但没有任何方法可以解决矢量化依赖于先前值的操作的问题。
这是一个代码示例,它本身不会产生任何具有统计意义的东西,但说明了我的问题:
require(odeSolve)
param <- c(a=1)
df <- function(t, state, param){
with( as.list(c(state, param)), {dX<-a*X; list(c(dX))} )
}
Data.i <- data.frame( lt=seq(0, 5, length=10)[-10],rt=seq(0, 5, length=10)[2:10], X=rnorm(9) )
Result <- vector(length=10)
Result[1] <- Data.i$X[1]
init <- c(X=Data.i$X[1])
for (k in 1:9){
t.seq <- seq(Data.i$lt[k],Data.i$rt[k],length=10)
sol <- as.numeric(ode(y = init, times = t.seq, func = df, parms = param)[10,-1])
Result[k+1] <- log(sol+X[k+1])
init <- c(X=sol)
}