Wykreślanie przewidywanych wartości w szeregach czasowych ARIMA w R.

10

Prawdopodobnie istnieje więcej niż jedno poważne nieporozumienie w tym pytaniu, ale nie ma ono na celu poprawnego obliczenia, ale raczej zmotywowanie uczenia się szeregów czasowych z pewnym uwzględnieniem.

Próbując zrozumieć zastosowanie szeregów czasowych, wydaje się, że usunięcie danych z trendów czyni prognozowanie przyszłych wartości niemożliwym. Na przykład gtempszereg czasowy z astsapakietu wygląda następująco:

wprowadź opis zdjęcia tutaj

Tendencja wzrostowa w ostatnich dziesięcioleciach musi być uwzględniona przy opracowywaniu przewidywanych przyszłych wartości.

Jednak aby ocenić fluktuacje szeregów czasowych, dane należy przekonwertować na stacjonarne szeregi czasowe. Gdybym modelować go jako procesu ARIMA z różnicowych (myślę, że to jest przeprowadzane ze względu na środkowym 1IN order = c(-, 1, -)), jak w:

require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))

a następnie spróbuj przewidzieć przyszłe wartości ( lat), brakuje mi komponentu trendu wzrostowego:50

pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))

wprowadź opis zdjęcia tutaj

Jak mogę odzyskać trend wzrostowy w przewidywanej części wykresu, niekoniecznie dotykając faktycznej optymalizacji poszczególnych parametrów ARIMA ?

Podejrzewam, że gdzieś jest „ukryty” OLS, co tłumaczy tę niestacjonarność?

Natknąłem się na koncepcję drift, która może zostać włączona do Arima()funkcji forecastpakietu, czyniąc prawdopodobną fabułę:

par(mfrow = c(1,2))
fit1 = Arima(gtemp, order = c(4,1,1), 
             include.drift = T)
future = forecast(fit1, h = 50)
plot(future)
fit2 = Arima(gtemp, order = c(4,1,1), 
             include.drift = F)
future2 = forecast(fit2, h = 50)
plot(future2)

wprowadź opis zdjęcia tutaj

co jest bardziej nieprzejrzyste co do procesu obliczeniowego. Dążę do pewnego rodzaju zrozumienia, w jaki sposób trend jest uwzględniany w obliczeniach wykresu. Jest jednym z problemów, że nie ma driftw arima()(małe litery)?


Dla porównania, przy użyciu zestawu danych AirPassengers, wykreślana jest przewidywana liczba pasażerów poza punktem końcowym zestawu danych uwzględniająca ten trend wzrostowy:

wprowadź opis zdjęcia tutaj

Kod jest:

fit = arima(log(AirPassengers), c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,exp(pred$pred), log = "y", lty = c(1,3))

renderowanie sensownej fabuły.

Antoni Parellada
źródło
1
Powiedziałbym, że jeśli uważasz, że masz serię, w której trend zmieniał się w czasie, modele ARIMA mogą nie być najlepszym sposobem na ich przewidywanie. Wobec braku wiedzy merytorycznej (która mogłaby prowadzić do lepszych modeli) skłaniałbym się ku modelom przestrzeni stanów; w poszczególnych wariantach podstawowego modelu konstrukcyjnego dla czegoś takiego. Wiele dyskusji na temat modeli przestrzeni stanów może być trudnych do naśladowania, ale książki i artykuły Andrew Harveya są dość czytelne (na przykład książka Prognozowanie, modele szeregów czasowych i filtr Kalmana ). ... ctd
Glen_b -Reinstate Monica
ctd ... Istnieje kilku innych autorów, którzy radzą sobie dość dobrze, ale nawet ci lepsi sprawiają, że jest to nieco bardziej skomplikowane, niż powinno być dla początkującego.
Glen_b
Dziękuję, @Glen_b. Po prostu staram się uzyskać talent do szeregów czasowych i, jak w wielu tematach matematycznych, brak motywującej preambuły jest zabójcą. Wszystkie szeregi czasowe, na których nam naprawdę zależy, wydają się wykazywać tendencję wzrostową lub spadkową - populacje, GOP, giełda, globalne temperatury. Rozumiem, że chcesz pozbyć się trendów (może potrwać chwilę), aby zobaczyć cykliczne i sezonowe wzorce. Ale łączenie wyników z nadrzędną tendencją do prognozowania jest albo implikowane, albo nie jest traktowane jako cel.
Antoni Parellada,
Komentarze Roba Hyndmana tutaj są istotne. Mogę wrócić i rozwinąć to trochę.
Glen_b
Blog Roba Hyndmana „Stałe i modele ARIMA w R” to prawdopodobnie wszystko, co musisz wiedzieć. Byłbym ciekawy usłyszeć twoją opinię po przejrzeniu posta na blogu.
Richard Hardy,

Odpowiedzi:

1

Dlatego nie powinieneś robić ARIMA ani niczego na niestacjonarnych danych.

Odpowiedź na pytanie, dlaczego prognoza ARIMA spada, jest dość oczywista po spojrzeniu na równanie ARIMA i jedno z założeń. Jest to uproszczone wyjaśnienie, nie traktuj go jako dowód matematyczny.



yt=βyt-1+α+ϵ
β|β|1βyt-1=0yt=doonst=α

nmiw.rezatza=yt-yt-1nmiw.rezatza=yt/yt-1-1

 require(tseries)
 require(forecast)
 require(astsa)
 dif<-diff(gtemp)
 fit = auto.arima(dif)
 pred = predict(fit, n.ahead = 50)
 ts.plot(dif, pred$pred, lty = c(1,3), col=c(5,2))
 gtemp_pred<-gtemp[length(gtemp)]
 for(i in 1:length(pred$pred)){
   gtemp_pred[i+1]<-gtemp_pred[i]+pred$pred[i]
 }
 plot(c(gtemp,gtemp_pred),type="l")

wprowadź opis zdjęcia tutaj

mbt
źródło
α
ααα
OK. Będę musiał trochę zagrać z twoim kodem, aby zobaczyć, co próbuje zilustrować w odniesieniu do równania ts. Nie pracowałem z ts i minęło trochę czasu odkąd opublikowałem pytanie.
Antoni Parellada
Po odrobinie gry kodem widzę, co się dzieje. Czy możesz uwzględnić współczynniki dopasowania, które są AR1 = 0.257; MA = - 0.7854, w równaniu modelu ARIMA, aby w pełni docenić proces generowania rzutowanej lub przewidywanej linii nachylenia ogona na końcu wykresu?
Antoni Parellada
y^t=japβjayt-ja+jotqγjotϵt-jot+α+ϵt
y^t=βyt-1+γϵt-1+α+ϵt
β=0,257γ=-0,7854α=0,0064