ループをなくして計算速度を上げるためにコードを最適化する方法を探しています。私はこの分野と R にかなり慣れていません。ローリング ウィンドウを使用して、線形時系列モデルでコンポーネントごとの勾配ブースティング回帰を実行します。各ウィンドウの X に対する回帰 y の係数を使用して、y の次の「ウィンドウ外」観測を予測します。(後で予測精度を評価します)
私のデータは、約 540 の観測値を持つ 1560 の異なる時系列 (元の系列のラグを含む) です (次元 540x1560 のデータ フレーム)
調べてみましrollapply
たが、うまくいきませんでした。特に、ウィンドウごと (反復ごと) に yhat を予測する方法がわかりません。
#Define windows size
w=100
##Starting Loop, rolling the window by one observation per iteration
#Predicting the next dependent variable y_hat(w+i) with the data from the "pseudo" most recent observation
for (i in 1:(nrow(df_all)-w)){
glm1 <- glmboost(fm, data=df_all[i:(w-1+i), ], center=TRUE, control=boost_control(mstop = 100, trace=TRUE))
ls_yhat[[i]] <- predict(glm1, newdata = df_all[w-1+i,])
}
ヒントをいただければ幸いです(私のラップトップで実行するには永遠にかかります)!
PS: multicore
orparallel
パッケージの使用も検討しています。特に b/c 後で停止基準に交差検証を使用します。しかし、私はそれを調べ始めたばかりです。ただし、それに関するヒントも大歓迎です。
編集:組み込みデータを使用した最小限の作業例(時系列ではありません):
library("mboost") ## load package
data("bodyfat", package = "TH.data") ## load data
##Initializing List for coefficients DFs
ls_yhat <- list()
#Define windows size
w=30
##Starting Loop, rolling the window by one observation per iteration
##Predicting the next dependent variable y_hat(w+i) with the data from the "pseudo" most recent observation
for (i in 1:(nrow(bodyfat)-w)){
glm1 <- glmboost(DEXfat~., data=bodyfat[i:(w-1+i), ], center=TRUE, control=boost_control(mstop = 15, trace=TRUE))
ls_yhat[[i]] <- predict(glm1, newdata = bodyfat[(w-1+i),])
i
}