2011-10-25 11 views
2

rugarchパッケージを使用して、拡張ベースでeGARCHモデルを適合させようとしています。私は6列のデータを持っており、各列に対して6000個のパラメータを再設定しようとしています。次のコードを実行すると、2番目の列のウィンドウにエラーが表示されます(これは、最初の内部ループがすべて成功していることを意味します)。 gc()をループ内で使用し、フィットしたオブジェクトを削除することで、メモリエラーを起こすのにかかる時間が長くなりました。また、このプロセスは一般的に非常に長い時間がかかり、私の終わりにそれを改善する方法があるのだろうかと思っています。パッケージ自体は、ほとんどのフィルタリングが低レベルのCで行われているので、かなり効率的に書かれているようです。私はおそらく30-60日ごとにモデルを修正することができます。 32ビットウィンドウでR 2.13.2を実行しています。前もって感謝します。編集:エラーは: "0x6c732a07"の命令は "0x00000008"のメモリを参照しました。メモリを "読み込めませんでした" "。R Windowsメモリエラーとコードの改善

library(rugarch) 
library(xts) 
e.spec <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1,1)), mean.model = list(armaOrder = c(1,0), include.mean = TRUE)) 
dly.xts <- xts(matrix(rnorm(8000*6), nrow = 8000, ncol = 6), as.Date(1:8000)) 
tst.xts <- tail(dly.xts, 6000) 
names(tst.xts) <- 1:6 
tst.idx <- index(tst.xts) 
dly.idx <- index(dly.xts) 
for(j in 1:ncol(tst.xts)){ 
    sig.est <- rep(NA, nrow(tst.xts)) 
    for(i in 1:nrow(tst.xts)){ 
     print(i) 
     dat <- dly.xts[dly.idx <= tst.idx[i], j] 
     fit <- try(ugarchfit(e.spec, data = dat[-nrow(dat), ], solver = "solnp", solver.control = list(trace = FALSE))) 
     if(class(fit) != "try-error"){ 
      spec.new <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1,1)), mean.model = list(armaOrder = c(1,0), include.mean = TRUE), fixed.pars = coef(fit)) 
      sig.est[i] <- as.numeric(tail(sigma(ugarchfilter(spec = spec.new, data = dat)),1)) 
      rm(spec.new) 
      rm(fit) 
      gc() 
     }else{ 
      sig.est[i] <- NA 
     } 
    } 
    save(sig.est, file = paste("egarch", names(tst.xts)[j], ".RData", sep = "")) 
} 
+0

メモリが唯一の問題であることを確認するために、6000未満のパラメータ数を減らすとコードは正常に実行されますか?実行された場合、問題が発生する前にいくつのパラメータを設定できますか? –

+0

カットオフがどこにあるかを知るのは難しいですが、内側の繰り返しをカットするとループは正常に動作します。ですから、内部ループの反復を1:6000から5990:6000に変更すると、うまく動作します。 – rlh2

答えて

1

データタイプをxtsから数値に変更すると、問題が解消され、処理速度が飛躍的に向上しました。 (後で明白なようです)