2010-04-21 8 views
11

ARIMA 모델을 시계열 데이터 세트에 적용하여 예측 결과를 설명하려고합니다. 이 데이터는 M1-Competition의 데이터로 MNB65입니다. ARIMA (1,0,0) 모델에 데이터를 맞추고 예측을 얻으려고합니다. ARIMA 모델의 예측 설명

> arima(x, order = c(1,0,0)) 
Series: x 
ARIMA(1,0,0) with non-zero mean 
Call: arima(x = x, order = c(1, 0, 0)) 
Coefficients: 
     ar1 intercept 
     0.9421 12260.298 
s.e. 0.0474 202.717 

> predict(arima(x, order = c(1,0,0)), n.ahead=12) 
$pred 
Time Series: 
Start = 53 
End = 64 
Frequency = 1 
[1] 11757.39 11786.50 11813.92 11839.75 11864.09 11887.02 11908.62 11928.97 11948.15 11966.21 11983.23 11999.27 

내가 몇 가지 질문이 있습니다 : 내가 여기에 몇 가지 출력 미리보기를 R.를하고 있습니다 사용하고

(1) 내가 설명 할 방법이 데이터 세트는 명확한 하락 추세,이 모델에서 예측을 보여주고 있지만, 상승세. 이는 ARIMA (2,0,0)에서도 발생하며 auto.arima (예측 패키지) 및 ARIMA (1,0,1) 모델을 사용하는 데이터에 가장 적합합니다.

(2) ARIMA (1,0,0) 모델의 절편 값은 12260.298입니다. 절편이 다음 방정식을 만족하면 안됩니다 : C = mean * (1-sum (AR coeffs))이 경우 값은 715.52 여야합니다. 나는 여기서 기본적인 것을 놓치고있을 것입니다.

(3) 이것은 분명히 고정식이 아닌 일련의 시리즈입니다. auto.arima가 AR (2) 모델을 여전히 최고의 모델로 선택하는 이유는 무엇입니까? 직관적 인 설명이있을 수 있습니까?

감사합니다.

+1

프로그래밍 문제가 아니기 때문에이 문제를 해결하기 위해 투표했습니다. –

답변

21
  1. 아니요 모델이 고정되어있어 ARIMA (p, 0, q) 모델은 추세를 허용하지 않습니다. 경향을 포함시키려는 경우 드리프트 용어 ARIMA (p, 1, q) 또는 ARIMA (p, 2, q)를 사용하십시오. auto.arima()가 0 차이를 제시한다는 사실은 대개 명확한 추세가 없음을 나타냅니다.

  2. arima()에 대한 도움말 파일은 가로 채기가 실제로 평균임을 보여줍니다. 즉, AR (1) 모델은 예상대로 Y_t = c + phi * Y_ {t-1} + e_t가 아닌 (Y_t-c) = phi * (Y_ {t-1} - c) + e_t .

  3. auto.arima()는 필요한 차이 수를 결정하기 위해 단위근 테스트를 사용합니다. 따라서 단위 루트 테스트의 결과를 확인하여 현재 진행중인 작업을 확인하십시오. 단위근 테스트가 합리적인 모델로 이어지지 않는다고 생각하면 auto.arima()에서 필요한 차이 수를 항상 지정할 수 있습니다.

    R> adf.test(x) 
    
         Augmented Dickey-Fuller Test 
    
    data: x 
    Dickey-Fuller = -1.031, Lag order = 3, p-value = 0.9249 
    alternative hypothesis: stationary 
    
    R> kpss.test(x) 
    
         KPSS Test for Level Stationarity 
    
    data: x 
    KPSS Level = 0.3491, Truncation lag parameter = 1, p-value = 0.09909 
    

    KPSS은 아주 정상 성을 거부하지 않지만 그래서 ADF가 아닌 고정 (그 경우 귀무 가설) 강하게 말한다 : 여기

데이터에 대한 두 시험의 결과는 (해당 검사에 대한 귀무 가설). auto.arima()는 기본적으로 후자를 사용합니다. 첫 번째 테스트를 원한다면 auto.arima (x, test = "adf")를 사용할 수 있습니다. 이 경우 추세가있는 모델 ARIMA (0,2,1)가 제안됩니다.

+1

정교한 논평에 대해 Hyndman 교수에게 감사드립니다. –

+0

Hyndman 교수님, 시리즈가 I (2)인지, 아니면 고정시키기 위해 두 번 차이가 필요하다는 것을 확인하는 방법이 있습니까? 추가 분석을위한 결과는 시리즈가 한 번 또는 두 번 차이가 난다면 달라질 것입니다. 귀하의 게시물은 KPSS를 사용하여 제안하지만 어떤 대안이 있습니까? 고맙습니다. – Anusha