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 gtemp
szereg czasowy z astsa
pakietu wygląda następująco:
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 1
IN 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:
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
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 forecast
pakietu, 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)
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 drift
w 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:
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.