Como usar o DLM com a filtragem Kalman para previsão

19

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.

datayoda
fonte
3
Isso pode obter melhores respostas em stats.stackexchange.com
Joshua Ulrich
Bump ... Ainda não consigo entender como fazer isso. Algum candidato a responder à postagem original?
precisa saber é o seguinte
2
Com um DLM, o estilo do livro de receitas não é o desejado. Eu pegava a resposta do RockScience (a vinheta do DLM) e a percorria. Um DLM é mais como projetar um programa do que outras técnicas que simplesmente exigem a inserção de alguns dados e o ajuste de alguns parâmetros. Por fim, você está projetando um conjunto de matrizes que implementam algo como um modelo Markov oculto, e o dlmpacote torna isso o mais fácil possível.
Wayne
Você tem solução para o seu problema? Estou procurando uma solução para um tipo semelhante de problema de série temporal, mas incapaz de encontrar uma solução.
Você já trabalhou no artigo sugerido por @RockScience? Você já olhou o dlmpacote? 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.
Wayne

Respostas:

16

O artigo no JSS 39-02 compara 5 pacotes R de filtragem Kalman diferentes e fornece um código de amostra.

G. Grothendieck
fonte
16

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 ( sspireu 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, dlmvocê basicamente seguirá várias etapas:

  1. Que tipos de componentes descrevem minha série? Uma tendência? Sazonalidade? Variáveis ​​exógenas? Você usará dlmferramentas como dlmModPolypara implementar esses componentes, usando o +operador para uni-los em um modelo.

  2. 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.

  3. Use dlmMLEpara 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). dlmMLEchama repetidamente sua sub-rotina R com parâmetros candidatos para criar modelos e os testa.

  4. Crie seu modelo final, usando a sub-rotina R que você criou, além dos parâmetros encontrados na etapa 3.

  5. Filtre seus dados com dlmFilter, e talvez com suavidade dlmSmooth.

  6. Se você usa dlmModRegou faz algo que faz com que o modelo tenha parâmetros de variação de tempo, não pode usar dlmForecastpara prever suas séries. Se você terminar com um modelo de variação de tempo, preencha seus dados de entrada com NAs e deixe que dlmFilterpreencha os NAs para você (previsão de um homem pobre), pois dlmForecastnão funciona com parâmetros que variam no tempo.

  7. 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 dlmos 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 dlmpara chegar aonde estou, e não sou especialista em nada.

Wayne
fonte
Obrigado Wayne, acho que meu caso é bastante simples, de forma que não identifiquei nenhuma tendência clara ou sazonalidade na inspeção visual. (No entanto, se você estiver ciente de algum teste no R, entre em contato, tentarei executá-lo). Meu problema é que não sei como preencher argumentos como (FF, V, GG, W, m0, C0, dV etc.) nas funções dlm para meus dados? Esta é a questão principal para mim. Se eu tenho dados de séries bivariadas (y = X1 + X2), por exemplo (preço = demanda + oferta), como posso calcular esses argumentos para os meus dados? FF, V, GG, W, m0, C0, dV, etc, necessários nas funções dlm
nclfinance
1
@ nclfinance Por favor, leia o FAQ e não trate este lugar como um fórum.
@ nclfinance: Trabalhe com a dlmvinheta do pacote. Você aprenderá o que precisa saber. É por isso que eu recomendo dlm, porque você não cria FF, etc.
Wayne