Nouveau dans

Modèles VAR bayésiens

Les modèles vectoriels autorégressifs (VAR) étudient les relations entre plusieurs séries temporelles, telles que les taux de chômage et d’inflation, en incluant les retards des variables de résultat comme prédicteurs du modèle. Autrement dit, le taux de chômage actuel serait modélisé à l’aide des taux de chômage et d’inflation des périodes précédentes. Et de même pour le taux d’inflation actuel.
Les modèles VAR sont connus pour avoir de nombreux paramètres : avec K variables de résultat et p retards, il y a au moins K(pK+1) paramètres. L’estimation fiable des paramètres du modèle peut s’avérer difficile, surtout avec de petits ensembles de données.
Vous pouvez utiliser la nouvelle commande bayes : var pour ajuster des modèles VAR bayésiens qui aident à surmonter ces difficultés en incorporant des informations préalables sur les paramètres du modèle. Cela stabilise souvent l’estimation des paramètres. (Pensez à une antériorité comme l’introduction d’une certaine quantité de rétrécissement pour les paramètres du modèle).
Vous pouvez étudier l’influence d’une hypothèse de marche aléatoire sur les résultats en faisant varier les paramètres de plusieurs variations supportées de la distribution antérieure originale du Minnesota. Vous pouvez vérifier l’hypothèse de stabilité des paramètres à l’aide de la nouvelle commande bayesvarstable. Une fois cette hypothèse vérifiée, vous pouvez générer des prévisions dynamiques à l’aide de bayesfcast et effectuer une analyse de la fonction de réponse aux impulsions (IRF) et de la décomposition de la variance des erreurs de prévision (FEVD) à l’aide de bayesirf.

Points forts

Estimation

  • Retards par défaut ou personnalisés
  • Variables exogènes
  • Distributions préalables du Minnesota
  • Contrôle flexible de l’échantillonnage MCMC
  • Chaînes multiples

Postestimation

  • Diagnostics MCMC
  • Vérifications de la stabilité des paramètres
  • Prévisions dynamiques bayésiennes
  • Analyse bayésienne de l’IRF et du FEVD
  • Prédictions bayésiennes en une étape.
  • Support complet des fonctions de post-estimation bayésienne

Voyons comment cela fonctionne

  • Estimation
  • Vérification de la stabilité des paramètres
  • Personnalisation de la priorité par défaut
  • Sélection du nombre de lags
  • Analyse IRF
  • Prévisions dynamiques
  • Nettoyage

Estimation
Considérons les macrodonnées économiques trimestrielles de la Réserve fédérale, du premier trimestre de 1954 au quatrième trimestre de 2010. Nous souhaitons étudier la relation entre l’inflation, l’écart de production et le taux des fonds fédéraux. Nous souhaitons évaluer comment chacune de ces variables macroéconomiques affecte les autres dans le temps. En particulier, nous sommes intéressés par les effets du taux des fonds fédéraux contrôlé par les décideurs politiques. Nous sommes également intéressés par l’obtention de prévisions dynamiques pour les trois variables de résultat.
Examinons d’abord nos données.

. webuse usmacro
(Federal Reserve Economic Data - St. Louis Fed)

. tsset

Time variable: date, 1954q3 to 2010q4
        Delta: 1 quarter

. tsline inflation ogap fedfunds

Nous souhaitons ajuster un modèle VAR bayésien pour étudier la relation entre les trois variables. Si vous êtes déjà familiarisé avec la commande var de Stata, qui ajuste des modèles VAR classiques, l’ajustement de modèles bayésiens sera particulièrement facile. Il suffit de préfixer la commande var par bayes :. Ci-dessous, nous spécifions également une graine de nombre aléatoire pour la reproductibilité.
La sortie de bayes : var est longue, nous allons donc la décrire par morceaux.

. bayes, rseed(17): var inflation ogap fedfunds

Burn-in ...
Simulation ...

Model summary
Likelihood:
inflation
ogap
fedfunds ~ mvnormal(3,xb_inflation,xb_ogap,xb_fedfunds,{Sigma,m})
 
Priors:
{inflation:L(1 2).inflation} (1)
{inflation:L(1 2).ogap} (1)
{inflation:L(1 2).fedfunds} (1)
{inflation:_cons} (1)
{ogap:L(1 2).inflation} (2)
{ogap:L(1 2).ogap} (2)
{ogap:L(1 2).fedfunds} (2)
{ogap:_cons} (2)
{fedfunds:L(1 2).inflation} (3)
{fedfunds:L(1 2).ogap} (3)
{fedfunds:L(1 2).fedfunds} (3)
{fedfunds:_cons} ~ varconjugate(3,2,1,_b0,{Sigma,m},_Phi0) (3)
{Sigma,m} ~ iwishart(3,5,_Sigma0)
(1) Parameters are elements of the linear form xb_inflation. (2) Parameters are elements of the linear form xb_ogap. (3) Parameters are elements of the linear form xb_fedfunds.

Comme avec un modèle VAR traditionnel, la vraisemblance est supposée être multivariée (trivariée dans notre exemple) normale avec la matrice de covariance des erreurs {Sigma,m}. La covariance des erreurs est un paramètre du modèle, elle apparaît donc entre accolades, {}.
Un modèle VAR bayésien nécessite en plus des prieurs pour tous les paramètres du modèle. bayes : var fournit des prieurs par défaut, mais vous pouvez les modifier pour les adapter à votre analyse.
Par défaut, les coefficients de régression VAR sont affectés d’une priorité Minnesota conjuguée, et la covariance des erreurs est affectée d’une priorité Wishart inverse. L’idée derrière une priorisation de Minnesota est de « rétrécir » les coefficients vers certaines valeurs (souvent des zéros ou des uns pour les premiers coefficients de décalage propre) tout en maintenant les relations sous-jacentes dépendantes du temps dans les données. Vous pouvez en savoir plus sur cette priorité dans Explication de la priorité de Minnesota dans [BAYES] bayes : var.
Ce qui suit est une sortie assez longue des résultats. Comme nous le verrons dans l’analyse IRF, les résultats d’un modèle VAR sont généralement interprétés en utilisant les IRF et d’autres fonctions. Mais nous montrons la sortie ci-dessous par souci d’exhaustivité.
L’en-tête rapporte les informations standard sur la procédure MCMC : le nombre d’itérations de burn-in, la taille de l’échantillon MCMC, et ainsi de suite. Les valeurs par défaut sont 2 500 itérations de burn-in et 10 000 pour la taille de l’échantillon MCMC, mais vous pouvez avoir besoin de moins ou de plus dans votre analyse. Parce que bayes : var utilise l’échantillonnage de Gibbs pour la simulation, les résultats MCMC auront généralement une efficacité élevée (proche de 1) ; voir la sortie ci-dessous sous Efficacité :.

Bayesian vector autoregression                   MCMC iterations  =     12,500
Gibbs sampling                                   Burn-in          =      2,500
                                                 MCMC sample size =     10,000
Sample: 1956q1 thru 2010q4                       Number of obs    =        220
                                                 Acceptance rate  =          1
                                                 Efficiency:  min =      .9621
                                                              avg =      .9968
Log marginal-likelihood = -803.40081                          max =          1

Equal-tailed
Mean Std. dev. MCSE Median [95% cred. interval]
inflation
inflation
L1. 1.050509 .0406623 .000407 1.050519 .9709674 1.131497
L2. -.0983798 .038157 .000382 -.0982178 -.1732963 -.0242587
ogap
L1. .0738608 .0326438 .000318 .0738179 .011719 .1383346
L2. -.0047669 .0299874 .000296 -.0044935 -.06365 .0537368
fedfunds
L1. .0717713 .031543 .000315 .0715381 .0111944 .1340734
L2. -.054096 .0285518 .000286 -.0542693 -.1101743 .0019505
_cons .1360559 .0870247 .00087 .1357733 -.0358968 .3071866
ogap
inflation
L1. -.070946 .0504929 .000515 -.0713239 -.1695751 .0279189
L2. .0080639 .0471388 .000471 .0084353 -.0845188 .1001178
ogap
L1. 1.034557 .040881 .000409 1.034394 .9533511 1.113827
L2. -.1038247 .0379861 .00038 -.103874 -.1776099 -.0288752
fedfunds
L1. .0361347 .0388217 .000388 .0359872 -.0390069 .1130978
L2. -.0450505 .0351746 .000352 -.0447803 -.1138243 .0243874
_cons .2129268 .1080613 .001081 .2122609 -.0000164 .4277089
fedfunds
inflation
L1. .0259699 .0538047 .000527 .0256361 -.077736 .1331889
L2. .0468066 .0500692 .000501 .0470046 -.0512646 .1447051
ogap
L1. .1545118 .0437399 .000437 .1542643 .0695918 .2404831
L2. -.0954632 .0401437 .000401 -.0949833 -.1751912 -.0169302
fedfunds
L1. .998348 .0419964 .000425 .998391 .917987 1.080904
L2. -.0806434 .0380157 .00038 -.0804814 -.1541685 -.0075734
_cons .2036804 .1155176 .001155 .2048609 -.0246111 .4297876
Sigma_1_1 .4384999 .0416187 .000422 .435944 .3634841 .5272232
Sigma_2_1 .0569301 .0369788 .00037 .0569781 -.0143685 .1305416
Sigma_3_1 .1559746 .0407611 .000408 .1547395 .079231 .2400816
Sigma_2_2 .6777257 .0647212 .000647 .6736507 .5615162 .8158431
Sigma_3_2 .2506655 .0518798 .000519 .2481628 .1547145 .3596628
Sigma_3_3 .7746199 .0724508 .000725 .7701015 .6465796 .9287891

Par défaut, bayes : var inclut deux retards pour chaque variable de résultat, mais vous pouvez spécifier d’autres retards dans l’option lags() ; voir Sélection du nombre de retards.
Après la simulation, vous souhaiterez peut-être enregistrer vos résultats MCMC pour une analyse postimation ultérieure. Avec Bayes, cela peut être fait soit pendant, soit après l’estimation.

. bayes, saving(bvarsim2)
note: file bvarsim2.dta saved.

We also store the current bayes: var estimation results for later model comparison.

. estimates store lag2

Comme avec toute méthode MCMC, nous devons vérifier que la méthode MCMC a convergé avant de passer à d’autres analyses. Nous pouvons utiliser des vérifications graphiques,

. bayesgraph diagnostics {inflation:L1.ogap}

ou nous pouvons calculer la statistique de convergence de Gelman-Rubin en utilisant plusieurs chaînes. Le tracé ne présente pas de tendance et l’autocorrélation est faible. Notre MCMC semble avoir convergé.

Vérification de la stabilité des paramètres

L’inférence à partir d’un modèle VAR repose sur l’hypothèse de stabilité des paramètres, que vous pouvez vérifier après un modèle VAR bayésien en utilisant la nouvelle commande bayesvarstable.

. bayesvarstable

Eigenvalue stability condition                   Companion matrix size =     6
                                                 MCMC sample size      = 10000

Eigenvalue Equal-tailed
modulus Mean Std. dev. MCSE Median [95% cred. interval]
1 .9529782 .01603 .00016 .9533415 .920918 .9840033
2 .9486492 .0188851 .000189 .9504839 .9058018 .9807103
3 .8867184 .0361654 .000362 .8893334 .8093261 .9464411
4 .1746283 .0438198 .000438 .1709831 .0996019 .2688087
5 .1091889 .0400347 .0004 .1057698 .0401139 .1913403
6 .0519465 .0354457 .000354 .0472559 .0019949 .1240763
Pr(eigenvalues lie inside the unit circle) = 0.9978

Les intervalles crédibles à 95% pour les modules des valeurs propres individuelles ne contiennent pas de valeurs supérieures ou égales à un, ce qui est bon signe. Et la probabilité a posteriori que toutes les valeurs propres se trouvent dans le cercle unitaire est proche de un. Nous n’avons aucune raison de suspecter une violation de l’hypothèse de stabilité.
Vous pouvez en savoir plus sur cette hypothèse dans [BAYES] bayesvarstable.

Personnalisation de la priorité par défaut

Par défaut, la priorité Minnesota conjuguée de bayes : var réduit les premiers coefficients de décalage propre à un. (Un premier coefficient de décalage propre est un coefficient pour le premier décalage de la variable de résultat dans sa propre équation. Dans notre exemple, il y a trois coefficients de ce type : {inflation:L1.inflation}, {ogap:L1.ogap}, et {fedfunds:L1.fedfunds}).
La priorité par défaut favorise l’hypothèse d’une marche aléatoire pour la variable de résultat. Cette hypothèse peut ou non correspondre à ce que vous souhaitez selon le type de données. Par exemple, avec des données différentielles, vous pouvez vouloir réduire tous les coefficients vers zéro.
Nous pouvons le faire en modifiant la spécification par défaut de l’option minnconjugate(), qui spécifie la priorité du Minnesota conjugué. L’antériorité par défaut suppose des moyennes antérieures de un uniquement pour les premiers coefficients de décalage propre. Les moyennes antérieures des autres coefficients sont déjà nulles. Nous devons donc spécifier des moyennes nulles uniquement pour les trois premiers coefficients de décalage propre. Nous pouvons le faire en spécifiant un vecteur de longueur 3 de 0s dans la sous-option mean() de minnconjprior().

. bayes, rseed(17) minnconjprior(mean(J(1,3,0))): var inflation ogap fedfunds

Burn-in ...
Simulation ...

Model summary
Likelihood:
inflation
ogap
fedfunds ~ mvnormal(3,xb_inflation,xb_ogap,xb_fedfunds,{Sigma,m})
 
Priors:
{inflation:L(1 2).inflation} (1)
{inflation:L(1 2).ogap} (1)
{inflation:L(1 2).fedfunds} (1)
{inflation:_cons} (1)
{ogap:L(1 2).inflation} (2)
{ogap:L(1 2).ogap} (2)
{ogap:L(1 2).fedfunds} (2)
{ogap:_cons} (2)
{fedfunds:L(1 2).inflation} (3)
{fedfunds:L(1 2).ogap} (3)
{fedfunds:L(1 2).fedfunds} (3)
{fedfunds:_cons} ~ varconjugate(3,2,1,(J(1,3,0)),{Sigma,m},_Phi0) (3)
{Sigma,m} ~ iwishart(3,5,_Sigma0)
(1) Parameters are elements of the linear form xb_inflation. (2) Parameters are elements of the linear form xb_ogap. (3) Parameters are elements of the linear form xb_fedfunds. Bayesian vector autoregression MCMC iterations = 12,500 Gibbs sampling Burn-in = 2,500 MCMC sample size = 10,000 Sample: 1956q1 thru 2010q4 Number of obs = 220 Acceptance rate = 1 Efficiency: min = .9633 avg = .9969 Log marginal-likelihood = -921.66714 max = 1
Equal-tailed
Mean Std. dev. MCSE Median [95% cred. interval]
inflation
inflation
L1. .8857357 .0485368 .000485 .885746 .790685 .9824396
L2. .0269907 .0455449 .000455 .0271839 -.0626737 .1155095
ogap
L1. .0761181 .0389651 .00038 .0760672 .0019879 .1531618
L2. .001521 .0357946 .000354 .0018469 -.0686749 .0713939
fedfunds
L1. .098638 .037651 .000377 .0983597 .0262863 .1730537
L2. -.055385 .0340805 .000341 -.0555918 -.1224443 .0115358
_cons .1544722 .1038773 .001039 .1541354 -.0510049 .3581968
ogap
inflation
L1. -.0675691 .0598816 .00061 -.0680522 -.1848906 .0498421
L2. -.0150082 .0559096 .000559 -.0145887 -.1250453 .0939403
ogap
L1. .8719911 .0484592 .000485 .871777 .7757726 .966344
L2. .0249191 .0450373 .00045 .0248376 -.0625478 .1135304
fedfunds
L1. .0631993 .0460222 .00046 .0629379 -.0258211 .1543138
L2. -.0643443 .0417046 .000417 -.0641588 -.1458078 .0178974
_cons .2199806 .128148 .001281 .2193497 -.0318993 .4743479
fedfunds
inflation
L1. .0734435 .0630289 .000617 .073388 -.0487301 .1981055
L2. .0493568 .0586613 .000587 .0494503 -.0655153 .1640052
ogap
L1. .1859435 .0512156 .000512 .185431 .0871488 .2868869
L2. -.1102205 .0469907 .00047 -.1097752 -.203735 -.0180675
fedfunds
L1. .8202078 .049201 .000497 .8202937 .7256878 .9166404
L2. .0450037 .0445312 .000445 .0450415 -.0415155 .1307499
_cons .308838 .1353585 .001354 .310172 .0415897 .5746537
Sigma_1_1 .6247714 .0593237 .000601 .6212457 .5183145 .7517009
Sigma_2_1 .0657255 .0522565 .000523 .0660805 -.034914 .1691783
Sigma_3_1 .1959076 .0566382 .000566 .1943097 .0884963 .3126778
Sigma_2_2 .9525887 .0909202 .000909 .9473281 .7902117 1.146957
Sigma_3_2 .3194013 .0714681 .000715 .3163695 .1868128 .468176
Sigma_3_3 1.062408 .0993678 .000994 1.056211 .8867977 1.273854

La nouvelle spécification antérieure ne semble pas modifier beaucoup les résultats. Cela signifie que l’information contenue dans les données observées sur les paramètres du modèle domine notre information préalable.

Sélection du nombre de décalages

La sélection des lags est une considération importante pour les modèles VAR. Les méthodes traditionnelles, telles que celles utilisant le critère AIC, surestiment souvent le nombre de lags. L’analyse bayésienne vous permet de calculer une probabilité réelle de chaque modèle étant donné la probabilité postérieure des données observées et du modèle.
Pour calculer les probabilités postérieures des modèles, nous devons d’abord ajuster tous les modèles qui nous intéressent. Nous considérons ici un, deux et trois retards, mais vous pouvez spécifier autant de modèles que vous le souhaitez dans votre propre analyse.
Nous avons déjà enregistré les résultats du modèle avec deux retards sous lag2. Nous ajustons maintenant des modèles avec un et trois décalages et enregistrons les résultats correspondants. Nous exécutons les modèles tranquillement.

. quietly bayes, rseed(17) saving(bvarsim1): var inflation ogap fedfunds, lags(1/1)
. estimates store lag1
. quietly bayes, rseed(17) saving(bvarsim3): var inflation ogap fedfunds, lags(1/3)
. estimates store lag3

Nous utilisons maintenant le modèle bayestest pour calculer les probabilités postérieures des modèles. Nous supposons que chaque modèle est également probable a priori (par défaut).

. bayestest model lag1 lag2 lag3

Bayesian model tests

log(ML) P(M) P(M|y)
lag1 -814.4808 0.3333 0.0000
lag2 -803.4008 0.3333 0.0047
lag3 -798.0420 0.3333 0.9953
Note: Marginal likelihood (ML) is computed using Laplace–Metropolis approximation.

Le modèle avec trois retards a la probabilité postérieure la plus élevée des trois modèles considérés.

Analyse IRF

Les modèles VAR contiennent de nombreux coefficients de régression, ce qui rend difficile l’interprétation des résultats de ces modèles. Au lieu de coefficients individuels, on utilise des IRF pour résumer les résultats. Les IRF mesurent l’effet d’un choc dans une variable, une variable d’impulsion, sur une variable de réponse donnée à une période spécifique.
Dans notre exemple, nous sommes intéressés par l’impact du taux des fonds fédéraux sur les autres résultats du modèle. Utilisons les IRF pour évaluer l’effet de cette variable.
Nous utilisons ici le modèle avec trois retards que nous avons sélectionné dans la section précédente.

. estimates restore lag3
(results lag3 are active now)

Comme pour une analyse IRF standard dans Stata, nous créons d’abord les résultats IRF et les enregistrons dans un ensemble de données IRF pour une analyse ultérieure. Pour l’analyse IRF après bayes : var, nous utilisons la nouvelle commande bayesirf au lieu de la commande irf existante.
Cette nouvelle commande est nécessaire en raison des différences entre les IRF classiques et bayésiens. Pour une paire donnée de variables d’impulsion et de réponse, un IRF fréquentiste est une fonction unique, alors que les IRF bayésiens correspondent à un échantillon MCMC postérieur de fonctions. Cet échantillon est résumé pour produire une seule fonction. L’IRF moyen postérieur est rapporté par défaut, mais vous pouvez calculer l’IRF médian postérieur à la place.
Tout d’abord, nous utilisons bayesirf create pour créer des résultats IRF nommés birf et les enregistrer dans le fichier IRF birfex.irf.

. bayesirf create birf, set(birfex)
(file birfex.irf created)
(file birfex.irf now active)
(file birfex.irf updated)

Nous traçons les IRFs avec les fedfunds comme variable d’impulsion.

. bayesirf graph irf, impulse(fedfunds)

Ce graphique IRF montre qu’un choc sur le taux des fonds fédéraux a un effet positif sur lui-même qui diminue avec le temps mais reste positif après 8 trimestres. Le choc du taux des fonds fédéraux a peu d’effet sur l’écart de production et un petit effet positif sur l’inflation qui se dissipe après 2 trimestres.
Voir également l’analyse bayésienne de l’IRF et de la FEVD.

Prévisions dynamiques

Les modèles VAR sont couramment utilisés pour la prévision. Nous montrons ici comment calculer des prévisions dynamiques bayésiennes après avoir ajusté un modèle VAR bayésien.
Nous créons des prévisions après bayes : var comme nous le faisons après var, sauf que nous utilisons bayesfcast au lieu de fcast.
Comme pour les FIR bayésiens, les prévisions bayésiennes correspondent à l’échantillon MCMC postérieur de prévisions pour chaque période. La prévision moyenne postérieure est présentée par défaut, mais vous pouvez calculer la prévision médiane postérieure à la place.
Calculons une prévision dynamique bayésienne à 10 périodes de temps.

. bayesfcast compute f_, step(10)

Les prévisions de la moyenne postérieure, ainsi que d’autres variables de prévision, sont enregistrées dans l’ensemble de données dans des variables dont les noms de résultats sont préfixés par f_.
Nous pouvons utiliser le graphique bayesfcast pour tracer les prévisions calculées.

. bayesfcast graph f_inflation f_ogap f_fedfunds

D’après ce graphique, notre prévision d’inflation est faible pour le premier trimestre mais n’est pas statistiquement significative par la suite. (Les bandes crédibles à 95 % incluent zéro.) L’écart de production prévu est négatif pour la première année et est proche de zéro par la suite. Le taux des fonds fédéraux devrait être faible et proche de zéro pour toutes les périodes.
Voir également Prévisions dynamiques bayésiennes.

Nettoyer

Après votre analyse, pensez à supprimer les jeux de données générés par bayes : var et bayesirf, dont vous n’avez plus besoin.

. erase bvarsim1.dta
. erase bvarsim2.dta
. erase bvarsim3.dta
. erase birfex.irf