Comment utiliser DLM avec le filtrage de Kalman pour les prévisions

19

Quelqu'un pourrait-il me montrer un exemple sur la façon d'utiliser le filtrage DLM Kalman en R sur une série temporelle. Disons que j'ai ces valeurs (valeurs trimestrielles avec saisonnalité annuelle); comment utiliseriez-vous DLM pour prédire les prochaines valeurs? Et BTW, ai-je suffisamment de données historiques (quel est le minimum)?

89  2009Q1  
82  2009Q2  
89  2009Q3  
131 2009Q4  
97  2010Q1  
94  2010Q2  
101 2010Q3  
151 2010Q4  
100 2011Q1  
?   2011Q2

Je suis à la recherche d'un type de réponse étape par étape de style livre de cuisine de code R. La précision de la prédiction n'est pas mon objectif principal, je veux juste apprendre la séquence de code qui me donne un numéro pour 2011Q2, même si je n'ai pas assez de données.

datayoda
la source
3
Cela peut obtenir de meilleures réponses sur stats.stackexchange.com
Joshua Ulrich
Bump ... Je ne comprends toujours pas comment faire ça. Des preneurs de réponses au message d'origine?
datayoda
2
Avec un DLM, ce n'est pas aussi style de livre de cuisine que vous le souhaitez. Je prendrais la réponse de RockScience (la vignette DLM) et la parcourrais. Un DLM ressemble plus à la conception d'un programme qu'à d'autres techniques qui nécessitent simplement de brancher certaines données et de modifier certains paramètres. En fin de compte, vous concevez un ensemble de tableaux qui implémentent quelque chose comme un modèle de Markov caché, et le dlmpackage rend cela aussi simple que possible.
Wayne
Avez-vous une solution à votre problème? Je cherche une solution à un type similaire de problème de série temporelle mais je ne parviens pas à trouver une solution.
Avez-vous parcouru le document suggéré par @RockScience? Avez-vous regardé l' dlmemballage? Comme je l'ai dit dans ma réponse, les DLM ressemblent beaucoup plus à la création d'un programme qu'à la connexion de certaines variables à un appel de fonction. datayoda n'a jamais accepté de réponse, donc je ne suis pas sûr qu'ils aient dépassé cette observation.
Wayne

Réponses:

16

L'article de JSS 39-02 compare 5 différents packages de filtrage R de Kalman et donne un exemple de code.

G. Grothendieck
la source
16

Les DLM sont cool, mais ils ne sont pas aussi simples que, disons, ARIMA ou d'autres méthodes. Dans d'autres méthodes, vous branchez vos données, puis ajustez certains paramètres de l'algorithme, en vous référant peut-être à divers diagnostics pour guider vos paramètres.

Avec un DLM, vous créez une machine à espace d'état, qui se compose de plusieurs matrices qui implémentent essentiellement quelque chose comme un modèle de Markov caché. Certains packages ( sspirje pense, entre autres) s'attendent à ce que vous compreniez le concept et ce que font les matrices. Je vous recommande fortement de commencer par le dlmpackage et, comme le recommande @RockScience, de parcourir la vignette.

Avec dlmvous allez essentiellement prendre plusieurs mesures:

  1. Quels types de composants décrivent ma série? Une tendance? Saisonnalité? Variables exogènes? Vous utiliserez des dlmoutils comme dlmModPolypour implémenter ces composants, en utilisant l' +opérateur pour les assembler en un seul modèle.

  2. Créez un sous-programme R qui prend le nombre de paramètres requis par ce modèle, crée les composants avec ces paramètres, puis les additionne et renvoie le modèle résultant.

  3. Utilisez dlmMLEpour faire une recherche / optimisation pour trouver les paramètres appropriés (en utilisant MLE, qui est fondamentalement l'optimisation, avec les pièges qui peuvent survenir dans l'optimisation). dlmMLEappelle à plusieurs reprises votre sous-routine R avec des paramètres candidats pour créer des modèles, puis les teste.

  4. Créez votre modèle final, en utilisant le sous-programme R que vous avez créé ainsi que les paramètres que vous avez trouvés à l'étape 3.

  5. Filtrez vos données avec dlmFilter, puis lissez peut-être avec dlmSmooth.

  6. Si vous utilisez dlmModRegou faites quelque chose qui fait que le modèle a des paramètres variant dans le temps, vous ne pouvez pas utiliser dlmForecastpour prévoir votre série. Si vous vous retrouvez avec un modèle variant dans le temps, vous voudrez remplir vos données d'entrée avec des NA et laisser le dlmFilterremplissage des NA pour vous (les prévisions d'un pauvre), car dlmForecastcela ne fonctionne pas avec des paramètres variant dans le temps.

  7. Si vous souhaitez examiner les composants individuellement (par exemple la tendance, séparément de la saisonnalité), vous devrez comprendre les matrices et le contenu de chaque colonne, ainsi que comprendre un peu comment dlmles assembler (l'ordre compte!).

Il y a un autre package, dont le nom m'échappe, qui essaie de créer un frontal qui peut utiliser plusieurs de ces packages (y compris dlmcomme back-end). Malheureusement, je ne l'ai jamais réussi à bien fonctionner, mais c'est peut-être juste moi.

Je recommanderais vraiment d'avoir un livre sur les DLM. J'en ai eu quelques-uns et j'ai beaucoup joué avec dlmpour arriver là où je suis, et je ne suis en aucun cas l'expert.

Wayne
la source
Merci Wayne, je pense que mon cas est assez simple d'une manière que je n'ai pas repéré de tendances claires ou de saisonnalité dans l'inspection visuelle. (Cependant, si vous connaissez des tests dans R, faites-le moi savoir, je vais essayer de les exécuter). Mon problème est que je ne sais pas comment remplir les arguments comme (FF, V, GG, W, m0, C0, dV etc.) dans les fonctions dlm pour mes données? C'est le principal problème pour moi. Si j'ai une série de données bivariées (y = X1 + X2), par exemple (prix = demande + offre), alors comment pourrais-je procéder pour calculer ces arguments pour mes données? FF, V, GG, W, m0, C0, dV etc. qui sont requis dans les fonctions
dlm
1
@nclfinance Veuillez lire la FAQ et ne traitez pas cet endroit comme un forum.
@nclfinance: parcourez la dlmvignette du package. Vous apprendrez ce que vous devez savoir. C'est pourquoi je recommande dlm, car vous ne créez pas FF, etc., vous-même.
Wayne