2010-04-21 12 views
11

Próbuję wyjaśnić sobie wynik prognozowania, od zastosowania modelu ARIMA do zbioru danych z serii czasowych. Dane pochodzą z konkursu M1, seria to MNB65. Próbuję dopasować dane do modelu ARIMA (1,0,0) i uzyskać prognozy. Używam R. Oto niektóre fragmenty wyjściowe:Wyjaśnienie prognoz z modelu 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 

Mam kilka pytań:

(1) W jaki sposób można wyjaśnić, że chociaż zbiór danych wykazuje wyraźną tendencję spadkową, prognoza z tego modelu trendy w górę. Tak samo dzieje się w przypadku ARIMA (2,0,0), który jest najlepszym dopasowaniem ARIMA do danych przy użyciu auto.arima (pakiet prognozy) i modelu ARIMA (1,0,1).

(2) Wartość przecięcia dla modelu ARIMA (1,0,0) to 12260.298. Czy punkt przecięcia nie spełnia równania: C = średnia * (1 - suma (współczynniki AR)), w którym to przypadku wartość powinna wynosić 715,52. Muszę tu pomijać coś podstawowego.

(3) Jest to wyraźnie seria ze średnią niestacjonarną. Dlaczego model AR (2) jest nadal wybrany jako najlepszy model przez auto.arima? Czy może istnieć intuicyjne wyjaśnienie?

Dzięki.

+1

Głosowałem, aby to zamknąć, ponieważ nie jest to pytanie programistyczne. –

Odpowiedz

21
  1. Żaden model ARIMA (p, 0, q) nie zezwoli na trend, ponieważ model jest nieruchomy. Jeśli naprawdę chcesz uwzględnić trend, użyj ARIMA (p, 1, q) z określeniem dryfu lub ARIMA (p, 2, q). Fakt, że auto.arima() sugeruje 0 różnic, zwykle wskazuje, że nie ma wyraźnego trendu.

  2. Plik pomocy dla arima() pokazuje, że punkt przecięcia jest w rzeczywistości średnią. Oznacza to, że model AR (1) to (Y_t-c) = phi * (Y_ {t-1} - c) + e_t zamiast Y_t = c + phi * Y_ {t-1} + e_t jak można się spodziewać .

  3. auto.arima() używa testu głównego jednostki do określenia liczby wymaganych różnic. Sprawdź wyniki testu głównego jednostki, aby zobaczyć, co się dzieje. Zawsze możesz określić wymaganą liczbę różnic w auto.arima(), jeśli uważasz, że testy root jednostki nie prowadzą do rozsądnego modelu.

Oto wyniki z dwóch testów dla danych:

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 

Więc ADF mówi silnie niestacjonarne (hipoteza zerowa w tym przypadku), podczas gdy KPSS nie całkiem odrzucić stacjonarności (hipoteza zerowa dla tego testu). auto.arima() domyślnie używa tego ostatniego. Możesz użyć auto.arima (x, test = "adf"), jeśli chcesz mieć pierwszy test. W takim przypadku sugeruje model ARIMA (0,2,1), który ma tendencję.

+1

Dziękuję Prof. Hyndman za opracowane komentarze. –

+0

Prof. Hyndman, czy istnieje sposób, aby upewnić się, że seria to I (2), czy wymaga dwukrotnego różnicowania, aby stała się stacjonarna? Wyniki do dalszej analizy będą się różnić, jeśli seria zostanie zmieniona raz lub dwa razy. Twój post sugeruje użycie KPSS, ale czy są jakieś alternatywy? Dziękuję Ci. – Anusha