我将参数模型拟合到具有时间相关协变量的一些生存数据。拟合过程涉及迭代地求解一些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)
}