Plotando valores previstos em séries temporais ARIMA em R

10

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 gtempsérie temporal do astsapacote se parece com isso:

insira a descrição da imagem aqui

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 1em order = c(-, 1, -)) como em:

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

50

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

insira a descrição da imagem aqui

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 forecastpacote, 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)

insira a descrição da imagem aqui

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 ( driftem 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:

insira a descrição da imagem aqui

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.

Antoni Parellada
fonte
11
Eu diria que, se você acha que tem uma série em que a tendência mudou com o tempo, os modelos ARIMA podem não ser a melhor maneira de abordar a previsão deles. Na ausência de conhecimento do assunto (o que pode levar a melhores modelos), eu estaria inclinado a olhar para os modelos de espaço de estado; em particular variantes do Modelo Estrutural Básico para algo assim. Muitas discussões sobre modelos de espaço de estados podem ser difíceis de seguir, mas os livros e documentos de Andrew Harvey são bastante legíveis (o livro Forecasting, Structural Time Series Models e o Kalman Filter é muito bom, por exemplo). ...
ctd
ctd ... Existem alguns outros autores que se saem razoavelmente bem, mas mesmo os melhores o tornam um pouco mais complicado do que realmente precisa para um iniciante.
Glen_b -Reinstala Monica 16/08
Obrigado, @Glen_b. Apenas tentando entender as séries temporais e, como em muitos tópicos de matemática, a falta de preâmbulos motivadores é um assassino. Todas as séries temporais com as quais realmente nos importamos parecem ter tendência para subir ou descer - populações, PIB, mercado de ações, temperaturas globais. E entendo que você deseja se livrar das tendências (pode demorar um segundo) para ver padrões cíclicos e sazonais. Porém, a junção das conclusões com a tendência abrangente de fazer previsões está implícita ou não é abordada como um objetivo.
Antoni Parellada
Os comentários de Rob Hyndman aqui são relevantes. Eu posso voltar e expandir um pouco isso.
Glen_b -Reinstala Monica 16/08
A publicação no blog de Rob J. Hyndman "Constantes e modelos ARIMA em R" é provavelmente tudo o que você precisa saber. Gostaria de saber sua opinião depois de explorar o post do blog.
Richard Hardy

Respostas:

1

É por isso que você não deve fazer ARIMA ou qualquer coisa com dados não estacionários.

Responder a uma pergunta sobre por que a previsão do ARIMA está ficando plana é bastante óbvio depois de analisar a equação do ARIMA e uma das suposições. Esta é uma explicação simplificada, não a trate como uma prova matemática.



yt=βyt1+α+ϵ
β|β|1βyt1=0yt=const=α

new.data=ytyt1new.data=yt/yt11

 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")

insira a descrição da imagem aqui

mbt
fonte
α
ααα
ESTÁ BEM. Vou ter que brincar um pouco com o seu código para ver o que ele está tentando ilustrar em relação à equação ts. Eu não trabalhei com ts, e já faz um tempo desde que publiquei a pergunta.
Antoni Parellada
Depois de brincar um pouco com o código, vejo o que está acontecendo. Você pode incluir os coeficientes de ajuste, que são AR1 = 0.257; MA = - 0.7854, na equação do modelo ARIMA para apreciar completamente o processo de geração da linha projetada ou prevista da inclinação da cauda no final de sua plotagem?
Antoni Parellada
y^t=ipβiyti+jqγjϵtj+α+ϵt
y^t=βyt1+γϵt1+α+ϵt
β=0.257γ=0.7854α=0.0064