Określanie parametrów (p, d, q) do modelowania ARIMA

10

Jestem dość nowy w statystyce i R. Chciałbym poznać proces określania parametrów ARIMA dla mojego zestawu danych. Czy możesz mi pomóc dowiedzieć się tego samego, używając R i teoretycznie (jeśli to możliwe)?

Zakres danych od 12 stycznia do 14 marca przedstawia miesięczną sprzedaż. Oto zestaw danych:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60 105 87 93 110 71 158 52 33 68 82 88 84

A oto trend:

wprowadź opis zdjęcia tutaj

Dane nie wykazują trendu, sezonowości ani cykliczności.

Raunak87
źródło

Odpowiedzi:

9

Zasadniczo, zajrzyj do zaawansowanego podręcznika analizy szeregów czasowych (książki wprowadzające zwykle przekierują cię do zaufania swojemu oprogramowaniu), takiego jak Time Series Analysis by Box, Jenkins & Reinsel. Możesz również znaleźć szczegółowe informacje na temat procedury Boxa-Jenkinsa, przeglądając google. Zauważ, że istnieją inne podejścia niż Box-Jenkins, np. Oparte na AIC.

W R najpierw przekształcasz swoje dane w obiekt ts(szereg czasowy) i mówisz R, że częstotliwość wynosi 12 (dane miesięczne):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

Możesz wykreślić (częściowe) funkcje autokorelacji:

acf(sales)
pacf(sales)

Nie sugerują one zachowania AR ani MA.

Następnie dopasuj model i sprawdź go:

model <- auto.arima(sales)
model

Zobacz ?auto.arimapo pomoc. Jak widzimy, auto.arimawybiera prosty (0,0,0) model, ponieważ nie widzi w danych ani trendu, ani sezonowości, ani AR, ani MA. Wreszcie możesz prognozować i wykreślić szeregi czasowe i prognozę:

plot(forecast(model))

prognoza

Spójrz na ?forecast.Arima(zwróć uwagę na wielką literę A!).

Ten darmowy podręcznik online to świetne wprowadzenie do analizy szeregów czasowych i prognozowania za pomocą R. Bardzo zalecane.

Stephan Kolassa
źródło
Cześć Stephan. Dodałem dane i wykres do mojego zestawu danych. Jak widać, mam tylko 27 punktów danych, więc tutaj używam oparów. Czy mógłbyś coś tutaj zasugerować?
Raunak87,
Zredagowałem odpowiedź. Twoja seria nie ma zbyt dużej struktury, więc naprawdę niewiele możesz zrobić. Ponieważ zasadniczo masz hałas i niewiele więcej, otrzymujesz duże przedziały prognozowania.
Stephan Kolassa
4

Dwie rzeczy: Twoje szeregi czasowe są co miesiąc, potrzebujesz co najmniej 4 lat danych, aby rozsądnie oszacować ARIMA, ponieważ odzwierciedlone 27 punktów nie daje struktury autokorelacji. Może to również oznaczać, że na twoją sprzedaż wpływ mają pewne czynniki zewnętrzne, a nie korelacja z jej własną wartością. Spróbuj dowiedzieć się, jaki czynnik wpływa na sprzedaż i czy ten czynnik jest mierzony. Następnie możesz uruchomić regresję lub VAR (Vector Autoregression), aby uzyskać prognozy.

Jeśli absolutnie nie masz nic poza tymi wartościami, najlepszym sposobem jest zastosowanie wykładniczej metody wygładzania, aby uzyskać naiwną prognozę. Wygładzanie wykładnicze jest dostępne w języku R.

Po drugie, nie widzę sprzedaży produktu w oderwaniu, sprzedaż dwóch produktów może być skorelowana, na przykład wzrost sprzedaży kawy może odzwierciedlać spadek sprzedaży herbaty. użyj innych informacji o produkcie, aby poprawić swoją prognozę.

Zazwyczaj dzieje się tak w przypadku danych dotyczących sprzedaży w sprzedaży detalicznej lub łańcuchu dostaw. Nie wykazują dużej części struktury autokorelacji w serii. Z drugiej strony metody takie jak ARIMA lub GARCH zazwyczaj działają z danymi giełdowymi lub indeksami ekonomicznymi, w których zazwyczaj występuje autokorelacja.

NG_21
źródło
3

To jest naprawdę komentarz, ale przekracza dopuszczalny, więc zamieszczam go jako quasi-odpowiedź, ponieważ sugeruje prawidłowy sposób analizy danych szeregów czasowych. .

Dobrze znanym faktem, ale często ignorowanym tutaj i gdzie indziej, jest to, że teoretyczna ACF / PACF, która jest używana do sformułowania wstępnego modelu modelu ARIMA, nie zawiera pulsów / przesunięć poziomów / pulsów sezonowych / lokalnych trendów czasowych. Dodatkowo zakłada stałe parametry i stałą wariancję błędu w czasie. W tym przypadku 21. obserwacja (wartość = 158) jest łatwo oznaczana jako wartość odstająca / impuls, a sugerowana korekta -80 daje zmodyfikowaną wartość 78. Powstały ACF / PACF z zmodyfikowanej serii wykazuje niewiele lub nie ma dowodów na strukturę stochastyczną (ARIMA). W tym przypadku operacja zakończyła się powodzeniem, ale pacjent zmarł. Próbka ACF oparta jest na kowariancji / wariancji, a nadmiernie zawyżona / rozdęta wariancja powoduje obniżenie ACF. Prof. Keith Ord nazwał to kiedyś „efektem Alicji w Krainie Czarów”

IrishStat
źródło
2

Jak zauważył Stephan Kolassa, w twoich danych nie ma zbyt dużej struktury. Funkcje autokorelacji nie sugerują struktury ARMA (patrz acf(sales), pacf(sales)) i forecast::auto.arimanie wybierają żadnego zamówienia AR ani MA.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

Należy jednak zauważyć, że zerowa normalność w resztach jest odrzucana na poziomie istotności 5%.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

Na marginesie: JarqueBera.testopiera się na funkcji jarque.bera.testdostępnej w pakiecie tseries.

Uwzględnienie wartości odstającej dodatku w obserwacji 21, która jest wykrywana z tsoutliersrenderowaniem normalności w resztkach. Dlatego na obserwację zewnętrzną nie ma wpływu na oszacowanie przechwytywania i prognozę.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077
javlacalle
źródło
1
Nie ma sensu używać testu Jarque Bera n=12, ponieważ (i) opiera się na asymptotycznym przybliżeniu, które nie pojawia się do njest w setkach i (ii) formalny test hipotezy naprawdę odpowiada na złe pytanie (wiemy, że dane nie będą dokładnie normalne; chodzi o to, jak bardzo może wpłynąć na nas potencjalna nienormalność, którą test nie odzywa się
Glen_b