2

時間依存の共変量を使用して、いくつかの生存データにパラメトリック モデルを当てはめています。当てはめ手順には、いくつかの ODE を反復的に解くことが含まれます。つまり、被験者ごとに時間間隔ごとに 1 つの 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)

}
4

0 に答える 0