2016-12-19 6 views
0

ARMAモデルを使用してモデルの再フィッティングを実行して、ローリング予測を計算する次のループがあるとします。ウィンドウ関数の頻度引数の使用

library(forecast) 
    set.seed(1) 
    prices=rnorm(1963) 
    USDlogreturns=diff(log(prices)) 
    h <- 1 
    train <- window(USDlogreturns, end=1162, frequency=1) 
    test <- window(USDlogreturns, start=1163, frequency=1) 
    n <- length(test) - h + 1 
    fc1 <- ts(numeric(n), start=1163+1, freq=1) 
    fc2 <- ts(numeric(n), start=1163+1, freq=1) 
    fc3 <- ts(numeric(n), start=1163+1, freq=1) 
    fc4 <- ts(numeric(n), start=1163+1, freq=1) 
    fit1 <- Arima(train, order=c(0,0,0), include.mean=TRUE, method="ML") 
    fit2 <- Arima(train, order=c(0,0,1), include.mean=TRUE, method="ML") 
    fit3 <- Arima(train, order=c(1,0,0), include.mean=TRUE, method="ML") 
    fit4 <- Arima(train, order=c(1,0,1), include.mean=TRUE, method="ML") 
    for(i in 1:n){ 
     x <- window(USDlogreturns, end=1162 + i, frequency=100) 
     refit1 <- Arima(x, model=fit1, include.mean=TRUE, method="ML") 
     refit2 <- Arima(x, model=fit2, include.mean=TRUE, method="ML") 
     refit3 <- Arima(x, model=fit3, include.mean=TRUE, method="ML") 
     refit4 <- Arima(x, model=fit4, include.mean=TRUE, method="ML") 
     fc1[i] <- forecast(refit1, h=h)$mean[h] 
     fc2[i] <- forecast(refit2, h=h)$mean[h] 
     fc3[i] <- forecast(refit3, h=h)$mean[h] 
     fc4[i] <- forecast(refit4, h=h)$mean[h] 
    } 

私はRでそれを実行すると、私は実行50の警告メッセージ取得:

「window.defaultで(USDlogreturns、エンド= 1162 + I、周波数= 100): '周波数' は変更されません"

私の問題は、窓関数を通して8日間、100日間ごとに4つのARMAモデルを修復するようにRに指示する方法を理解するのに苦労していることです。

ルーキーのヒントはありますか?

+1

'window'の呼び出しで何を' frequency'としていますか?ウィンドウの幅を制御しようとしているように見えますが、「周波数」は使用されていません。これは時系列の周期性を指定するために使用され、「頻度= 1」は年次データを示します。 – ulfelder

+0

はい、私の問題は、100日ごとに発生するモデルのリフィルで1日前の予測を生成したいが、コマンドウィンドウからこれをどのように伝えるかわからないということです。 – msmna93

+0

私は 'lapply'や' sapply'の呼び出しの中で、 'seq(0、800、100)'などのサンプルブレークポイントのベクトルを 'その呼び出し。そのプロセスの最初と2番目の反復のコードを書いてみて、2番目に変更したビットを関数の変数に変換してください。 – ulfelder

答えて

0

私は自分で自分の問題を解決することができました。 "pos"コマンドを使用すると、ずっと柔軟で洗練されたソリューションが提供されます。

length_training <- 1162 
    start <- length_training + 1 
    end <- length(USDlogreturns) 
    forecast_length <- 1 
    for(pos in start:end) { 
     fit000 <- Arima(USDlogreturns[(pos-length_training):(pos-1)], order=c(0,0,0), include.mean=TRUE, method="ML") 
     fc000 <- forecast(fit000, h=forecast_length)$mean[forecast_length] 
     fit001 <- Arima(USDlogreturns[(pos-length_training):(pos-1)], order=c(0,0,1), include.mean=TRUE, method="ML") 
     fc001 <- forecast(fit001, h=forecast_length)$mean[forecast_length] 
     fit100 <- Arima(USDlogreturns[(pos-length_training):(pos-1)], order=c(1,0,0), include.mean=TRUE, method="ML") 
     fc100 <- forecast(fit100, h=forecast_length)$mean[forecast_length] 
     fit101 <- Arima(USDlogreturns[(pos-length_training):(pos-1)], order=c(1,0,1), include.mean=TRUE, method="ML") 
     fc101 <- forecast(fit101, h=forecast_length)$mean[forecast_length] 
    }