Provavelmente, há mais de um mal-entendido sério nesta questão, mas não se destina a acertar os cálculos, mas a motivar o aprendizado de séries temporais com algum foco em mente.
Ao tentar entender a aplicação de séries temporais, parece que diminuir os dados torna implausível prever valores futuros. Por exemplo, a gtemp
série temporal do astsa
pacote se parece com isso:
A tendência de alta nas últimas décadas precisa ser levada em consideração ao traçar valores futuros previstos.
No entanto, para avaliar as flutuações das séries temporais, os dados precisam ser convertidos em séries temporais estacionárias. Se eu modelá-lo como um processo ARIMA com diferenciação (acho que isso é realizado por causa do meio 1
em order = c(-, 1, -)
) como em:
require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
Sem necessariamente abordar a otimização real dos parâmetros ARIMA específicos, como posso recuperar a tendência ascendente na parte prevista do gráfico?
Suspeito que exista um OLS "oculto" em algum lugar, o que explicaria essa não estacionariedade?
Eu me deparei com o conceito de drift
, que pode ser incorporado à Arima()
função do forecast
pacote, renderizando um gráfico plausível:
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)
o que é mais opaco quanto ao seu processo computacional. Estou buscando algum tipo de entendimento de como a tendência é incorporada nos cálculos de plotagem. É um dos problemas que não existe ( drift
em arima()
minúsculas)?
Em comparação, usando o conjunto de dados AirPassengers
, o número previsto de passageiros além do ponto final do conjunto de dados é plotado, contabilizando esta tendência de alta:
O código é:
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))
renderizando uma trama que faz sentido.