2016-11-24 8 views
0

4つのARMAモデルのセットからのモデルリフィリングを使用して、ローリング予測を生成するために、以下の "for"ループがRにあるとします。次のコードは、様々な予測精度の措置を(:http://127.0.0.1:15135/library/forecast/html/accuracy.htmlこれらの対策の説明については、このリンクを参照)を計算Forループ内でのモデルの順序付け

h <- 1 
train <- window(USDlogreturns, end=1162) 
test <- window(USDlogreturns, start=1163) 
n <- length(test) - h + 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") 
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) 
for(i in 1:n) 
{ 
x <- window(USDlogreturns, end=1162 + i) 
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] 
} 
result.fc<-cbind(fc1, fc2, fc3, fc4) 

:私は(https://stats.stackexchange.com/questions/208985/selecting-arima-order-using-rolling-forecastこのリンクを参照してください)トピックの前のポストに基づいてコードを構築しました。

accuracy(fc1, test)[,1:5] 
accuracy(fc2, test)[,1:5] 
accuracy(fc3, test)[,1:5] 
accuracy(fc4, test)[,1:5] 

私の質問は:

は、どのように私は5つの別個の行列で、上記のように5つの予測精度の対策により4つの推定モデルをランク付けするためにループを伝えることができますか?

ありがとうございました。

答えて

0

私の解決策ですが、私はあなたが得たい結果を正しく理解しているかどうかわかりません。

# empty vectors 
acc_fc1=c() 
acc_fc2=c() 
acc_fc3=c() 
acc_fc4=c() 

h <- 1 
train <- window(USDlogreturns, end=1162) 
test <- window(USDlogreturns, start=1163) 
n <- length(test) - h + 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") 
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) 
for(i in 1:n) 
{ 
    x <- window(USDlogreturns, end=1162 + i) 
    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] 

    acc_fc1=rbind(acc_fc1, accuracy(fc1, test)[,1:5]) 
    acc_fc2=rbind(acc_fc2, accuracy(fc2, test)[,1:5]) 
    acc_fc3=rbind(acc_fc3, accuracy(fc3, test)[,1:5]) 
    acc_fc4=rbind(acc_fc4, accuracy(fc4, test)[,1:5]) 
} 
result.fc<-cbind(fc1, fc2, fc3, fc4) 

# 5 matrices with accuracy measures 
result.acc1<-cbind(acc_fc1[,1], acc_fc2[,1], acc_fc3[,1], acc_fc4[,1]) 
result.acc2<-cbind(acc_fc1[,2], acc_fc2[,2], acc_fc3[,2], acc_fc4[,2]) 
result.acc3<-cbind(acc_fc1[,3], acc_fc2[,3], acc_fc3[,3], acc_fc4[,3]) 
result.acc4<-cbind(acc_fc1[,4], acc_fc2[,4], acc_fc3[,4], acc_fc4[,4]) 
result.acc5<-cbind(acc_fc1[,5], acc_fc2[,5], acc_fc3[,5], acc_fc4[,5]) 

# if you want to know which model is the best 
t(apply(result.acc1, 1, order)) 
t(apply(result.acc2, 1, order)) 
t(apply(result.acc3, 1, order)) 
t(apply(result.acc4, 1, order)) 
t(apply(result.acc5, 1, order)) 
+0

まさに私が得たいものです。ありがとうございました! – msmna93

関連する問題