2016-12-19 4 views
0

ARMA 모델을 사용하여 모델 재 피팅을 사용하여 롤링 예측을 계산하는 다음 루프가 있다고 가정합니다. 나는 R에서 실행으로창 함수에서 빈도 인수 사용

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] 
    } 

, 내가 실행 (50) 경고 메시지를 얻을 :

window.default에서

"(USDlogreturns, 끝 = 1162 + I, 주파수 = 100) : '주파수'는 변경되지 "

내 문제는 창 기능을 통해 8 시간 동안 네 개의 ARMA 모델을 100 일마다 다시 수리하는 방법을 이해하는 데 어려움을 겪고 있다는 것입니다.

신참을위한 조언?

+1

'window'에 대한 호출에서 무엇을'frequency'로 사용하려고합니까? 창의 너비를 제어하려는 것 같지만 '빈도'는 사용되지 않습니다. 이는 시계열의주기를 지정하는 데 사용되며 '빈도 = 1'은 연간 데이터를 나타냅니다. – ulfelder

+0

예. 제 문제는 100 일마다 발생하는 모델 리 피팅으로 일일 예측을 생성하려고하지만 명령 창을 통해이를 알려주는 방법을 모르는 것입니다. – msmna93

+0

'lapply' 나'sapply'를 호출 할 때'(seq (0, 800, 100)'과 같은) 샘플 브레이크 포인트 벡터를 사용하여 함수를 작성하고자합니다. 그 전화. 해당 프로세스의 첫 번째 및 두 번째 반복 코드를 작성한 다음 두 번째로 변경 한 비트를 함수의 변수로 바꿔보십시오. – 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] 
    }