Alguém poderia me dar um exemplo de como usar a filtragem DLM Kalman no R em uma série temporal. Digamos que eu tenho esses valores (valores trimestrais com sazonalidade anual); como você usaria o DLM para prever os próximos valores? E, BTW, tenho dados históricos suficientes (qual é o mínimo)?
89 2009Q1
82 2009Q2
89 2009Q3
131 2009Q4
97 2010Q1
94 2010Q2
101 2010Q3
151 2010Q4
100 2011Q1
? 2011Q2
Estou procurando um tipo de resposta passo a passo no estilo R do livro de receitas do código R. A precisão da previsão não é meu objetivo principal, só quero aprender a sequência de código que me fornece um número para o 2011T2, mesmo que eu não tenha dados suficientes.
r
time-series
forecasting
datayoda
fonte
fonte
dlm
pacote torna isso o mais fácil possível.dlm
pacote? Como eu disse na minha resposta, os DLMs são muito mais parecidos com criar um programa do que conectar algumas variáveis em uma chamada de função. datayoda nunca aceitou uma resposta, então não tenho certeza de que eles passaram por essa observação.Respostas:
O artigo no JSS 39-02 compara 5 pacotes R de filtragem Kalman diferentes e fornece um código de amostra.
fonte
Os DLMs são legais, mas não são tão simples quanto, por exemplo, o ARIMA ou outros métodos. Em outros métodos, você conecta seus dados e depois ajusta alguns parâmetros do algoritmo, talvez se referindo a vários diagnósticos para orientar suas configurações.
Com um DLM, você está criando uma máquina de espaço de estado, que consiste em várias matrizes que basicamente implementam algo como um Modelo Markov Oculto. Alguns pacotes (
sspir
eu acho, entre outros) esperam que você entenda o conceito e o que as matrizes fazem. Eu recomendo que você comece com odlm
pacote e, como a @RockScience recomenda, passe pela vinheta.Com isso,
dlm
você basicamente seguirá várias etapas:Que tipos de componentes descrevem minha série? Uma tendência? Sazonalidade? Variáveis exógenas? Você usará
dlm
ferramentas comodlmModPoly
para implementar esses componentes, usando o+
operador para uni-los em um modelo.Crie uma sub-rotina R que use quantos parâmetros forem exigidos por este modelo, crie os componentes com esses parâmetros, adicione-os e retorne o modelo resultante.
Use
dlmMLE
para fazer uma pesquisa / otimização para encontrar os parâmetros apropriados (usando o MLE, que é basicamente otimização, com as armadilhas que podem ocorrer na otimização).dlmMLE
chama repetidamente sua sub-rotina R com parâmetros candidatos para criar modelos e os testa.Crie seu modelo final, usando a sub-rotina R que você criou, além dos parâmetros encontrados na etapa 3.
Filtre seus dados com
dlmFilter
, e talvez com suavidadedlmSmooth
.Se você usa
dlmModReg
ou faz algo que faz com que o modelo tenha parâmetros de variação de tempo, não pode usardlmForecast
para prever suas séries. Se você terminar com um modelo de variação de tempo, preencha seus dados de entrada com NAs e deixe quedlmFilter
preencha os NAs para você (previsão de um homem pobre), poisdlmForecast
não funciona com parâmetros que variam no tempo.Se você deseja examinar os componentes individualmente (diga a tendência, separadamente da sazonal), precisará entender as matrizes e o que está em cada coluna, além de entender um pouco de como
dlm
os reúne (a ordem é importante!).Há outro pacote, cujo nome me escapa, que tenta criar um front end que pode usar vários desses pacotes (incluindo
dlm
como back-end). Infelizmente, nunca consegui que funcionasse bem, mas isso poderia ser apenas eu.Eu realmente recomendo a compra de um livro sobre DLMs. Eu peguei alguns deles e brinquei muito
dlm
para chegar aonde estou, e não sou especialista em nada.fonte
dlm
vinheta do pacote. Você aprenderá o que precisa saber. É por isso que eu recomendodlm
, porque você não cria FF, etc.Sugiro que você leia a vinheta dlm http://cran.r-project.org/web/packages/dlm/vignettes/dlm.pdf, especialmente o capítulo 3.3
fonte