[PYTHON] Introduction aux modèles de retour automatique vectoriel (VAR) avec des modèles de statistiques

À propos de VAR basé sur [Économétrie de base] gujarati (http://www.unife.it/economia/lm.economics/lectures/applied-econometrics/materiale-didattico-2018-2019/gujarati_book.pdf) (BE) J'ai essayé ensemble. Il est basé sur l'exemple 17.13 et la section 22.9 de BE. La plupart de la traduction est 22.9, mais il sera difficile de lire sans BE, alors j'ai essayé de reproduire autant que possible l'expression gujarati. De nombreux livres de gujarati liés à l'économétrie sont utilisés comme manuels dans les universités et les écoles supérieures en Europe et aux États-Unis. C'est l'un des manuels les plus fiables car il décrit clairement ce que vous pouvez et ne pouvez pas faire en économie métrique.

De plus, nous organiserons une session d'étude en ligne gratuite (régression linéaire) le 16 juin 2020 (https://connpass.com/event/177556/edit/). On espère que vous allez nous rejoindre.

Avant d'apprendre VAR

La plupart des analyses de régression portent sur un modèle constitué d'une seule équation. Il se compose d'une variable dépendante et d'une ou plusieurs variables explicatives. De tels modèles mettent l'accent sur l'obtention de prévisions et de moyennes Y. S'il existe une relation de cause à effet, un tel modèle serait dans la direction de X à Y. Cependant, dans de nombreuses situations, il est considéré comme dénué de sens de discuter de la direction et de la relation entre la cause et l'effet. Cependant, il existe également un phénomène selon lequel Y est fixé par X et X est fixé par Y. Parfois, X et Y affectent les deux directions en même temps. Dans ce cas, la distinction entre les variables dépendantes et explicatives n'a pas de sens. Dans un tel modèle d'équation simultanée, chacun est fixé en même temps qu'un ensemble de variables. Dans un tel modèle, il existe une ou plusieurs équations et, dans un tel modèle, les variables mutuellement dépendantes sont appelées variables endogènes et sont des variables stochastiques. En revanche, les variables qui ne sont pas vraiment probabilistes sont des variables exogènes ou prédéterminées. En BE, les chapitres 18 à 20 sont expliqués en détail dans le modèle d'équation simultanée (18), le problème de discrimination (19) et la méthode d'équation simultanée (20). Considérons les prix de la masse monétaire (Q) et des biens (P). Le prix d'un produit et la quantité de masse monétaire sont déterminés par l'interaction du produit avec les courbes d'offre et d'offre. Nous représentons donc ces courbes linéairement et y ajoutons du bruit pour modéliser l'interaction. Fonction de demande $ Q_t ^ d = \ alpha_0 + \ alpha_1P_t + u_ {1t} $ Fournir la fonction $ Q_t ^ s = \ beta_0 + \ beta_1P_t + u_ {2t} $ Condition de solde $ Q_t ^ d = Q_t ^ s $ $ t $ est l'heure et $ \ alpha $, $ \ beta $ est le paramètre. La fonction de demande ($ Q_t ^ d ) et la fonction d'offre ( Q_t ^ s ) sont toutes deux composées de ces variables, et le lien entre ces deux équations est la condition d'équilibre ( Q_t ^ d = Q_t ^ s $). .. Il est facile d'imaginer que P et Q sont subordonnés. $ Q_t ^ d $ sera affecté par le revenu, la richesse et le goût. Ces effets sont inclus dans $ u_ {1t} $. De plus, $ Q_t ^ s $ est affecté par les conditions météorologiques, les grèves, les restrictions d'importation / exportation, etc., qui sont également incluses dans $ u_ {2t} $. Par conséquent, ces variables ne sont pas indépendantes. Il n'est pas approprié de gérer avec OLS. Les variables prédéterminées sont des variables exogènes, leurs retards et des variables endogènes retardées. Ces variables et les variables endogènes constituent l'équation structurelle. Ceux-ci ont des coefficients structurels. Cependant, il est difficile d'estimer un tel modèle, ce qui peut entraîner des estimations biaisées ou incohérentes. Par conséquent, un formulaire dérivé est créé à partir de ces derniers. Cette équation a un coefficient d'induction. Le coefficient structurel est estimé à partir de ce coefficient d'induction. C'est ce qu'on appelle le problème d'identification. Ceux-ci peuvent être divisés en identification modérée, sur-identification et indiscernable.

Modèle vectoriel à retour automatique (VAR)

Dans les équations simultanées (équations simultanées) ou les modèles structurels, les variables sont traitées comme des variables endogènes, certaines exogènes ou prédéterminées qui combinent des variables exogènes et endogènes retardées. Avant d'estimer un tel modèle, il est nécessaire de vérifier si les équations du système sont (précisément ou excessivement) identifiables. Cette distinction est obtenue en supposant que certaines des variables données ne sont présentes que dans certaines équations.

Cette décision est souvent subjective et a été sévèrement critiquée par Christopher Sims. Selon Sims, s'il existe une véritable simultanéité entre un ensemble de variables, elles devraient toutes être traitées de la même manière. Il ne doit y avoir aucune distinction préalable entre les variables endogènes et exogènes. C'est sur la base de cette idée que Sims a développé le modèle VAR.

image.png

(17.14.1) et (17.14.2) sont la valeur actuelle du PIB en termes de valeur passée de la masse monétaire et la valeur du PIB passé, et le présent en termes de valeur passée de la masse monétaire et de valeur passée du PIB. Décrit la valeur de la masse monétaire en. Il n'y a pas de variables exogènes dans ce système.

Examinons maintenant la nature de la relation causale entre la masse monétaire canadienne et les taux d'intérêt. L'équation de la masse monétaire comprend les valeurs passées de la masse monétaire et du taux d'intérêt, et l'équation du taux d'intérêt se compose des valeurs passées du taux d'intérêt et de la masse monétaire. Ces deux exemples sont des exemples de modèles de retour automatique vectoriel. Le terme d'auto-retour est dû à l'utilisation de valeurs passées, ou de valeurs différées, pour la variable dépendante à droite. Le terme vecteur est dû au fait que nous avons affaire à un vecteur de deux (ou plus) variables.

En utilisant les six valeurs différées de chaque variable comme variables indépendantes de la masse monétaire canadienne et des taux d'intérêt, comme nous le verrons plus loin, la relation causale entre la masse monétaire (M1) et les taux d'intérêt (taux d'intérêt des entreprises à 90 jours (R)) Nous ne pouvons pas rejeter l'hypothèse selon laquelle il y a, c'est-à-dire que M1 affecte R et R affecte M1. Cette situation est mieux utilisée avec VAR.

Pour illustrer comment estimer le VAR, nous supposerons que chaque équation a k retards de M (mesurés par M1) et R. Dans ce cas, OLS estime chacune des équations suivantes:

image.png Où u est un terme d'erreur probabiliste et est appelé impulsion, innovation ou choc dans le langage VAR.

Avant d'estimer (22.9.1) et (22.9.2), nous devons déterminer la longueur de retard maximale k. Ceci est déterminé empiriquement. Les données utilisées sont 40 observations de 1979.I à 1988.IV. L'inclusion de nombreuses valeurs retardées dans chaque équation réduit le degré de liberté. Il y a aussi la possibilité d'une colinéarité multiple. Si le nombre de retards est trop faible, les spécifications peuvent être incorrectes. Une façon de résoudre ce problème consiste à utiliser des normes d'information telles que Akaike et Schwartz et à sélectionner le modèle avec le plus bas de ces normes. Les essais et erreurs sont inévitables.

Les données suivantes sont copiées du tableau 17.5.

date=pd.date_range(start='1979/1/31',end='1988/12/31',freq='Q')

M1=[22175,22841,23461,23427,23811,23612.33,24543,25638.66,25316,25501.33,25382.33,24753,
    25094.33,25253.66,24936.66,25553,26755.33,27412,28403.33,28402.33,28715.66,28996.33,
    28479.33,28669,29018.66,29398.66,30203.66,31059.33,30745.33,30477.66,31563.66,32800.66,
    33958.33,35795.66,35878.66,36336,36480.33,37108.66,38423,38480.66]
R=[11.13333,11.16667,11.8,14.18333,14.38333,12.98333,10.71667,14.53333,17.13333,18.56667,
   21.01666,16.61665,15.35,16.04999,14.31667,10.88333,9.61667,9.31667,9.33333,9.55,10.08333,
   11.45,12.45,10.76667,10.51667,9.66667,9.03333,9.01667,11.03333,8.73333,8.46667,8.4,7.25,
   8.30,9.30,8.7,8.61667,9.13333,10.05,10.83333]

M1=(np.array(M1)).reshape(40,1)
R=(np.array(R)).reshape(40,1)
ts=np.concatenate([M1,R],axis=1)
tsd=pd.DataFrame(ts,index=date,columns={'M1','R'})
ts_r=np.concatenate([R,M1],axis=1)
tsd_r=pd.DataFrame(ts_r,index=date,columns={'R','M1'})
tsd.M1.plot()
tsd.R.plot()

image.png

image.png

Tout d'abord, utilisez quatre valeurs de retard (k = 4) pour chaque variable et utilisez statsmodels pour estimer les paramètres des deux équations. Les échantillons sont de 1979.I à 1988.IV, mais les échantillons de 1979.I à 1987.IV sont utilisés pour l'estimation et les quatre dernières observations sont utilisées pour diagnostiquer la précision de prédiction VAR optimisée.

Ici, nous supposons que M1 et R sont stationnaires. De plus, comme les deux équations ont la même longueur de retard maximale, nous utilisons OLS pour la régression. Chaque coefficient estimé peut ne pas être statistiquement significatif, probablement en raison de la colinéarité multiple, car il contient des retards pour la même variable. Mais dans l'ensemble, le modèle est significatif d'après les résultats du test F.

model = VAR(tsd.iloc[:-4])

results = model.fit(4)
results.summary()
 Summary of Regression Results   
==================================
Model:                         VAR
Method:                        OLS
Date:           Wed, 06, May, 2020
Time:                     22:50:28
--------------------------------------------------------------------
No. of Equations:         2.00000    BIC:                    14.3927
Nobs:                     32.0000    HQIC:                   13.8416
Log likelihood:          -289.904    FPE:                    805670.
AIC:                      13.5683    Det(Omega_mle):         490783.
--------------------------------------------------------------------
Results for equation M1
========================================================================
           coefficient       std. error           t-stat            prob
------------------------------------------------------------------------
const      2413.827162      1622.647108            1.488           0.137
L1.M1         1.076737         0.201737            5.337           0.000
L1.R       -275.029144        57.217394           -4.807           0.000
L2.M1         0.173434         0.314438            0.552           0.581
L2.R        227.174784        95.394759            2.381           0.017
L3.M1        -0.366467         0.346875           -1.056           0.291
L3.R          8.511935        96.917587            0.088           0.930
L4.M1         0.077603         0.207888            0.373           0.709
L4.R        -50.199299        64.755384           -0.775           0.438
========================================================================

Results for equation R
========================================================================
           coefficient       std. error           t-stat            prob
------------------------------------------------------------------------
const         4.919010         5.424158            0.907           0.364
L1.M1         0.001282         0.000674            1.901           0.057
L1.R          1.139310         0.191265            5.957           0.000
L2.M1        -0.002140         0.001051           -2.036           0.042
L2.R         -0.309053         0.318884           -0.969           0.332
L3.M1         0.002176         0.001160            1.877           0.061
L3.R          0.052361         0.323974            0.162           0.872
L4.M1        -0.001479         0.000695           -2.129           0.033
L4.R          0.001076         0.216463            0.005           0.996
========================================================================

Correlation matrix of residuals
            M1         R
M1    1.000000 -0.004625
R    -0.004625  1.000000

Bien que les valeurs de l'AIC et du BIC soient partiellement différentes, on obtient presque les mêmes résultats que BE. Regardons d'abord la régression de M1. Le délai 1 pour M1 et les délais 1 et 2 pour R sont respectivement statistiquement significatifs (niveau de 5%). Au regard du rendement des taux d'intérêt, les retards de M1 1,2,4 et les retards de premier ordre des taux d'intérêt sont importants (niveau de 5%).

À titre de comparaison, les résultats VAR basés sur deux retards pour chaque variable endogène sont présentés.

results = model.fit(2)
results.summary()
 Summary of Regression Results   
==================================
Model:                         VAR
Method:                        OLS
Date:           Wed, 06, May, 2020
Time:                     22:50:29
--------------------------------------------------------------------
No. of Equations:         2.00000    BIC:                    13.7547
Nobs:                     34.0000    HQIC:                   13.4589
Log likelihood:          -312.686    FPE:                    603249.
AIC:                      13.3058    Det(Omega_mle):         458485.
--------------------------------------------------------------------
Results for equation M1
========================================================================
           coefficient       std. error           t-stat            prob
------------------------------------------------------------------------
const      1451.976201      1185.593527            1.225           0.221
L1.M1         1.037538         0.160483            6.465           0.000
L1.R       -234.884748        45.522360           -5.160           0.000
L2.M1        -0.044661         0.155908           -0.286           0.775
L2.R        160.155833        48.528324            3.300           0.001
========================================================================

Results for equation R
========================================================================
           coefficient       std. error           t-stat            prob
------------------------------------------------------------------------
const         5.796432         4.338943            1.336           0.182
L1.M1         0.001091         0.000587            1.858           0.063
L1.R          1.069081         0.166599            6.417           0.000
L2.M1        -0.001255         0.000571           -2.199           0.028
L2.R         -0.223364         0.177600           -1.258           0.209
========================================================================

Correlation matrix of residuals
            M1         R
M1    1.000000 -0.054488
R    -0.054488  1.000000

De même, bien que les valeurs de AIC et BIC soient partiellement différentes, on obtient presque les mêmes résultats que BE. Ici, dans la régression de la masse monétaire, nous pouvons voir que le retard de premier ordre de la masse monétaire et le retard du terme du taux d'intérêt sont respectivement statistiquement significatifs. Dans le retour des taux d'intérêt, le retard de second ordre de la masse monétaire et le retard de premier ordre du taux d'intérêt sont importants.

Quel est le meilleur, si vous choisissez entre 4 et 2 modèles de délai? La quantité d'informations d'Akaike et Schwartz du 4e modèle est de 13,5683 et 14,3927, respectivement, et les valeurs correspondantes du 2e modèle sont 13,3058 et 13,7547. Plus les statistiques d'Akaike et Schwartz sont faibles, meilleur est le modèle, donc un modèle concis semble préférable. Là encore, la sélection est un modèle qui contient deux retards pour chaque variable endogène.

Prédiction VAR

Sélectionnez un modèle avec deux délais. Utilisé pour prédire les valeurs de M1 et R. Les données vont de 1979.I à 1989.IV, mais les valeurs de 1989 ne sont pas utilisées pour estimer le modèle VAR. Prédisons maintenant 1989.I, la valeur de M1 pour le premier trimestre de 1989. La valeur prévue de 1989 I peut être obtenue comme suit.

\hat{M_{1989I}}=1451.976201 +1.037538M_{1987IV}-0.044661M_{1987III}
-234.884748R_{1987IV}+160.155833R_{1987III}
mm=results.coefs_exog[0]+results.coefs[0,0,0]*tsd.iloc[-5,0]+results.coefs[1,0,0]*tsd.iloc[-6,0]+\
results.coefs[0,0,1]*tsd.iloc[-5,1]+results.coefs[1,0,1]*tsd.iloc[-6,1]

mm,M1[-4],mm-M1[-4],(mm-M1[-4])/M1[-4]

# (array([36995.50488527]),array([36480.33]),array([515.17488527]),array([0.01412199]))

Ici, le coefficient est obtenu à partir de summary.report.

En utilisant les valeurs appropriées pour M et R, nous pouvons voir que la quantité monétaire estimée pour le premier trimestre de 1988 est de 36995 (millions de dollars canadiens). La valeur réelle de M en 1988 était de 36480,33 (millions de dollars canadiens). Cela a surestimé la valeur réelle d'environ 515 (millions de dollars). Cela représente environ 1,4% du M réel en 1988. Bien entendu, ces estimations varieront en fonction du nombre de retards dans le modèle VAR.

Relation causale avec VAR

Expliquez Y avec X, et si Y change lorsque X change, on dit qu'il a une cause et un effet Granger. Utilisons les tests de causalité des producteurs des modèles de statistiques pour voir s'il existe une relation causale. Deux variables endogènes et l'ordre k sont des arguments. Teste si la deuxième colonne de la variable endogène est la causalité de Granger de la première colonne. L'hypothèse nulle des tests de causalité granger est que la série chronologique de la deuxième colonne x2 ne provoque pas la série chronologique de la première colonne x1. La relation causale de Grange signifie que la valeur passée de x1 a un effet statistiquement significatif sur la valeur actuelle de x1 avec la valeur passée de x1 comme variable indépendante. Si la valeur p est inférieure au niveau de signification souhaité, nous rejetons l'hypothèse nulle que x2 ne cause pas x1 par Granger.

from statsmodels.tsa.stattools import grangercausalitytests
grangercausalitytests(tsd, 8)
Granger Causality
number of lags (no zero) 1
ssr based F test:         F=15.1025 , p=0.0004  , df_denom=36, df_num=1
ssr based chi2 test:   chi2=16.3610 , p=0.0001  , df=1
likelihood ratio test: chi2=13.6622 , p=0.0002  , df=1
parameter F test:         F=15.1025 , p=0.0004  , df_denom=36, df_num=1

Granger Causality
number of lags (no zero) 2
ssr based F test:         F=12.9265 , p=0.0001  , df_denom=33, df_num=2
ssr based chi2 test:   chi2=29.7702 , p=0.0000  , df=2
likelihood ratio test: chi2=21.9844 , p=0.0000  , df=2
parameter F test:         F=12.9265 , p=0.0001  , df_denom=33, df_num=2

Granger Causality
number of lags (no zero) 3
ssr based F test:         F=7.7294  , p=0.0006  , df_denom=30, df_num=3
ssr based chi2 test:   chi2=28.5987 , p=0.0000  , df=3
likelihood ratio test: chi2=21.1876 , p=0.0001  , df=3
parameter F test:         F=7.7294  , p=0.0006  , df_denom=30, df_num=3

Granger Causality
number of lags (no zero) 4
ssr based F test:         F=5.5933  , p=0.0021  , df_denom=27, df_num=4
ssr based chi2 test:   chi2=29.8309 , p=0.0000  , df=4
likelihood ratio test: chi2=21.7285 , p=0.0002  , df=4
parameter F test:         F=5.5933  , p=0.0021  , df_denom=27, df_num=4

Granger Causality
number of lags (no zero) 5
ssr based F test:         F=4.1186  , p=0.0077  , df_denom=24, df_num=5
ssr based chi2 test:   chi2=30.0318 , p=0.0000  , df=5
likelihood ratio test: chi2=21.6835 , p=0.0006  , df=5
parameter F test:         F=4.1186  , p=0.0077  , df_denom=24, df_num=5

Granger Causality
number of lags (no zero) 6
ssr based F test:         F=3.5163  , p=0.0144  , df_denom=21, df_num=6
ssr based chi2 test:   chi2=34.1585 , p=0.0000  , df=6
likelihood ratio test: chi2=23.6462 , p=0.0006  , df=6
parameter F test:         F=3.5163  , p=0.0144  , df_denom=21, df_num=6

Granger Causality
number of lags (no zero) 7
ssr based F test:         F=2.0586  , p=0.1029  , df_denom=18, df_num=7
ssr based chi2 test:   chi2=26.4190 , p=0.0004  , df=7
likelihood ratio test: chi2=19.4075 , p=0.0070  , df=7
parameter F test:         F=2.0586  , p=0.1029  , df_denom=18, df_num=7

Granger Causality
number of lags (no zero) 8
ssr based F test:         F=1.4037  , p=0.2719  , df_denom=15, df_num=8
ssr based chi2 test:   chi2=23.9564 , p=0.0023  , df=8
likelihood ratio test: chi2=17.8828 , p=0.0221  , df=8
parameter F test:         F=1.4037  , p=0.2719  , df_denom=15, df_num=8

Les tests de causalité de Granger effectuent quatre tests.

«Params_ftest» et «ssr_ftest» utilisent la distribution F. «Ssr_chi2test» et «lrtest» utilisent la distribution du chi carré. Il s'avère que des retards allant jusqu'à 1-6 sont causaux de Granger avec R de M, mais avec des retards 7 et 8, il n'y a pas de relation causale entre les deux variables.

Ensuite, regardons la relation inverse.

grangercausalitytests(tsd_r, 8)
Granger Causality
number of lags (no zero) 1
ssr based F test:         F=0.2688  , p=0.6073  , df_denom=36, df_num=1
ssr based chi2 test:   chi2=0.2912  , p=0.5894  , df=1
likelihood ratio test: chi2=0.2902  , p=0.5901  , df=1
parameter F test:         F=0.2688  , p=0.6073  , df_denom=36, df_num=1

Granger Causality
number of lags (no zero) 2
ssr based F test:         F=3.2234  , p=0.0526  , df_denom=33, df_num=2
ssr based chi2 test:   chi2=7.4237  , p=0.0244  , df=2
likelihood ratio test: chi2=6.7810  , p=0.0337  , df=2
parameter F test:         F=3.2234  , p=0.0526  , df_denom=33, df_num=2

Granger Causality
number of lags (no zero) 3
ssr based F test:         F=2.7255  , p=0.0616  , df_denom=30, df_num=3
ssr based chi2 test:   chi2=10.0844 , p=0.0179  , df=3
likelihood ratio test: chi2=8.9179  , p=0.0304  , df=3
parameter F test:         F=2.7255  , p=0.0616  , df_denom=30, df_num=3

Granger Causality
number of lags (no zero) 4
ssr based F test:         F=2.4510  , p=0.0702  , df_denom=27, df_num=4
ssr based chi2 test:   chi2=13.0719 , p=0.0109  , df=4
likelihood ratio test: chi2=11.1516 , p=0.0249  , df=4
parameter F test:         F=2.4510  , p=0.0702  , df_denom=27, df_num=4

Granger Causality
number of lags (no zero) 5
ssr based F test:         F=1.8858  , p=0.1343  , df_denom=24, df_num=5
ssr based chi2 test:   chi2=13.7504 , p=0.0173  , df=5
likelihood ratio test: chi2=11.5978 , p=0.0407  , df=5
parameter F test:         F=1.8858  , p=0.1343  , df_denom=24, df_num=5

Granger Causality
number of lags (no zero) 6
ssr based F test:         F=2.7136  , p=0.0413  , df_denom=21, df_num=6
ssr based chi2 test:   chi2=26.3608 , p=0.0002  , df=6
likelihood ratio test: chi2=19.5153 , p=0.0034  , df=6
parameter F test:         F=2.7136  , p=0.0413  , df_denom=21, df_num=6

Granger Causality
number of lags (no zero) 7
ssr based F test:         F=2.8214  , p=0.0360  , df_denom=18, df_num=7
ssr based chi2 test:   chi2=36.2076 , p=0.0000  , df=7
likelihood ratio test: chi2=24.4399 , p=0.0010  , df=7
parameter F test:         F=2.8214  , p=0.0360  , df_denom=18, df_num=7

Granger Causality
number of lags (no zero) 8
ssr based F test:         F=1.6285  , p=0.1979  , df_denom=15, df_num=8
ssr based chi2 test:   chi2=27.7934 , p=0.0005  , df=8
likelihood ratio test: chi2=20.0051 , p=0.0103  , df=8
parameter F test:         F=1.6285  , p=0.1979  , df_denom=15, df_num=8

Ici, l'hypothèse nulle est rejetée dans les 6e et 7e ordres.

Les résultats varient. L'une des significations du théorème d'expression de Granger est que deux variables, Xt et Yt, sont dans une relation républicaine, chacune individuellement I (1) et somme, et chacune individuellement non stationnaire. Alors Xt peut avoir Granger causal Yt, ou Yt peut avoir Granger causal Xt.

Dans cet exemple, si M1 et R sont individuellement républicains avec I (1), alors M1 a Granger causal R ou R a Granger causal M1. Autrement dit, vous devez d'abord vérifier si les deux variables sont individuellement I (1), puis vérifier si elles sont républicaines. Si ce n'est pas le cas, tout le problème causal peut être fondamentalement suspecté. Quand on regarde réellement M1 et R, il n'est pas clair si ces deux variables sont républicaines. Par conséquent, les conséquences de la causalité de Granger varient également.

Quelques problèmes avec la modélisation VAR

Les partisans du VAR soulignent les avantages de cette méthode:

(1) La méthode est simple. Vous n'avez pas à vous demander quelles variables sont endogènes et lesquelles sont exogènes. Toutes les variables de VAR sont endogènes.

(2) La prédiction est facile. Autrement dit, la méthode OLS habituelle peut être appliquée à chaque équation.

(3) Les prédictions obtenues par cette méthode sont souvent supérieures à celles obtenues à partir de modèles d'équations simultanées plus complexes.

Cependant, les critiques de la modélisation VAR soulignent les problèmes suivants:

  1. Contrairement au modèle d'équation simultanée, le modèle VAR est théorique. C'est parce que je n'utilise pas beaucoup d'informations antérieures (expérience). Dans un modèle d'équation simultanée, l'inclusion ou non de certaines variables joue un rôle important dans l'identification du modèle.

  2. Le modèle VAR n'est pas bien adapté à l'analyse des politiques en raison de sa focalisation sur la prévision.

  3. Le plus grand défi pratique dans la modélisation VAR est de choisir la bonne longueur de retard. Supposons que vous ayez un modèle VAR à 3 variables et que vous décidiez d'inclure 8 retards pour chaque variable dans chaque équation. Chaque équation a 24 paramètres de retard et des termes constants, pour un total de 25 paramètres. L'estimation de nombreux paramètres, sauf si la taille de l'échantillon est grande, réduit beaucoup de liberté dans tous les problèmes connexes.

  4. Strictement parlant, dans le modèle VAR à m-variables, toutes les m-variables (ensemble) doivent être stationnaires. Sinon, les données doivent être transformées de manière appropriée (par exemple, par une différence de premier ordre). Comme le souligne Harvey, les résultats des données transformées peuvent être inadéquats. Il déclare en outre: «La méthode habituelle adoptée par les partisans du VAR est d'utiliser des niveaux, même si certains de ces délais ne sont pas stationnaires. Dans ce cas, l'effet des racines unitaires sur la distribution des estimations est important. Pour aggraver les choses, la conversion des données n'est pas facile si le modèle contient un mélange de variables I (0) et I (1), c'est-à-dire des variables constantes et non stationnaires.

  5. Étant donné que chaque coefficient du modèle VAR estimé est souvent difficile à interpréter, les partisans de cette technique estiment souvent ce que l'on appelle la fonction de réponse impulsionnelle (IRF). L'IRF suit la réponse de la variable dépendante du système VAR pour étudier les effets des termes d'erreur tels que u1 et u2 dans (22.9.1) et (22.9.2). Supposons que u1 dans l'équation M1 augmente d'un écart type. De tels chocs ou changements changeront M1 maintenant et à l'avenir. Cependant, puisque M1 apparaît dans la régression de R, les changements de u1 affectent également R. De même, une modification d'un écart-type de u2 de l'équation R affecte M1. L'IRF suivra les effets de ces chocs à l'avenir. Les chercheurs ont mis en doute l'utilité d'une telle analyse IRF, mais elle est au cœur de l'analyse VAR.

C'est la simple traduction de BE. Après cela, il est écrit en référence à Vector autorégression.

Condition du terme d'erreur

y_t=c+A_1y_{t-1}+A_1y_{t-2}+\cdots+A_1y_{t-p}+e_t

$ y_ {t-i} $ est le i-ième délai d'ordre de y. c est un vecteur de degré k. $ A_i $ est une matrice temporelle de kxk. u est un vecteur de termes d'erreur de degré k.

    1. $ E (e_t) = 0 $: La valeur moyenne des termes d'erreur est zéro.
  1. $ E (e_te_t ^ \ `) = \ Omega $: $ \ Omega $ est une matrice de covariance de termes d'erreur.
  2. $ E (e_te_ {t-k} ^ \ `) = 0 $: La corrélation est nulle par rapport au temps. Il n'y a pas d'autocorrélation des termes d'erreur.

L'ordre de la somme des variables

L'ordre de la somme de toutes les variables doit être le même.

  1. Toutes les variables sont I (0).
  2. Toutes les variables sont I (d), d> 0. Si la variable est républicaine, le modèle de correction d'erreur est inclus dans le VAR. b) Si les variables ne sont pas républicaines, prenez la différence jusqu'à ce qu'elle soit stable. Je (d)

Obtenir des données de FRED

Obtenez des données à long terme auprès de FRED et analysez-les dans une perspective à long terme. La masse monétaire canadienne utilise MANMM101CAM189S et le taux d'intérêt utilise IR3TCP01CAM156N.

start="1979/1"
end="2020/12"
M1_0 = web.DataReader("MANMM101CAM189S", 'fred',start,end)/1000000
R1_0 = web.DataReader("IR3TCP01CAM156N", 'fred',start,end)#IR3TIB01CAM156N
M1=M1_0.resample('Q').last()
R1=R1_0.resample('Q').last()
M1.plot()
R.plot()

image.png

image.png

Test ADF

Examinez la stabilité.

from statsmodels.tsa.stattools import adfuller
import pandas as pd
tsd=pd.concat([M1,R1],axis=1)
tsd.columns=['M1','R']

index=['ADF Test Statistic','P-Value','# Lags Used','# Observations Used']
adfTest = adfuller((tsd.M1), autolag='AIC',regression='nc')
dfResults = pd.Series(adfTest[0:4], index)
print('Augmented Dickey-Fuller Test Results:')
print(dfResults)
Augmented Dickey-Fuller Test Results:
ADF Test Statistic      -1.117517
P-Value                  0.981654
# Lags Used              5.000000
# Observations Used    159.000000
dtype: float64

Sans surprise, le M1 suit une marche aléatoire. C'est la même chose même si la régression est c, ct, ctt.

adfTest = adfuller((tsd.R), autolag='AIC',regression='nc')
dfResults = pd.Series(adfTest[0:4], index)
print('Augmented Dickey-Fuller Test Results:')
print(dfResults)
Augmented Dickey-Fuller Test Results:
ADF Test Statistic      -4.082977
P-Value                  0.006679
# Lags Used              3.000000
# Observations Used    161.000000
dtype: float64

Bien entendu, R est un processus constant tel qu'il est. C'est la même chose même si la régression est c, ct, ctt.

J'ai donc pris la logarithmique de M1.

adfTest = adfuller((np.log(tsd.M1)), autolag='AIC',regression='ct')
dfResults = pd.Series(adfTest[0:4], index)
print('Augmented Dickey-Fuller Test Results:')
print(dfResults)
Augmented Dickey-Fuller Test Results:
ADF Test Statistic      -3.838973
P-Value                  0.014689
# Lags Used             14.000000
# Observations Used    150.000000
dtype: float64

La logarithmique de M1 semble avoir une stabilité de tendance.

Supprimons la tendance.

# remove time trend
gap=np.linspace(np.log(M1.iloc[0]), np.log(M1.iloc[-1]), len(M1))
lnM1=np.log(M1)
lnM1.plot()

image.png

alnM1=lnM1.copy()
alnM1['a']=gap
alnM1=alnM1.iloc[:,0]-alnM1.a
alnM1.plot()

image.png

adfTest = adfuller(alnM1, autolag='AIC',regression='nc')
dfResults = pd.Series(adfTest[0:4], index)
print('Augmented Dickey-Fuller Test Results:')
print(dfResults)
Augmented Dickey-Fuller Test Results:
ADF Test Statistic      -1.901991
P-Value                  0.054542
# Lags Used             14.000000
# Observations Used    150.000000
dtype: float64

lnM est devenu un processus régulier avec la tendance supprimée.

Tout d'abord, analysons le long de BE.

tsd0=pd.concat([alnM1,R1],axis=1)
tsd0.columns=['alnM1','R']
tsd=pd.concat([lnM1,R1],axis=1)
tsd.columns=['lnM1','R']

model = VAR(tsd.iloc[:36])

results = model.fit(4)
results.summary()
  Summary of Regression Results   
==================================
Model:                         VAR
Method:                        OLS
Date:           Thu, 07, May, 2020
Time:                     11:57:17
--------------------------------------------------------------------
No. of Equations:         2.00000    BIC:                   -5.33880
Nobs:                     32.0000    HQIC:                  -5.88999
Log likelihood:           25.8004    FPE:                 0.00217196
AIC:                     -6.16328    Det(Omega_mle):      0.00132308
--------------------------------------------------------------------
Results for equation lnM1
==========================================================================
             coefficient       std. error           t-stat            prob
--------------------------------------------------------------------------
const           0.358173         0.225376            1.589           0.112
L1.lnM1         1.286462         0.194312            6.621           0.000
L1.R           -0.005751         0.001961           -2.933           0.003
L2.lnM1         0.025075         0.298562            0.084           0.933
L2.R            0.001647         0.002730            0.604           0.546
L3.lnM1        -0.278622         0.295859           -0.942           0.346
L3.R            0.006311         0.002814            2.243           0.025
L4.lnM1        -0.062508         0.195688           -0.319           0.749
L4.R           -0.004164         0.002222           -1.875           0.061
==========================================================================

Results for equation R
==========================================================================
             coefficient       std. error           t-stat            prob
--------------------------------------------------------------------------
const          38.199790        21.797843            1.752           0.080
L1.lnM1       -15.488358        18.793423           -0.824           0.410
L1.R            0.875018         0.189630            4.614           0.000
L2.lnM1         7.660621        28.876316            0.265           0.791
L2.R           -0.345128         0.263996           -1.307           0.191
L3.lnM1        35.719033        28.614886            1.248           0.212
L3.R            0.310248         0.272203            1.140           0.254
L4.lnM1       -31.044707        18.926570           -1.640           0.101
L4.R           -0.162658         0.214871           -0.757           0.449
==========================================================================

Correlation matrix of residuals
            lnM1         R
lnM1    1.000000 -0.135924
R      -0.135924  1.000000

Ensuite, utilisez les données avec la tendance supprimée.

model = VAR(tsd0.iloc[:36])

results = model.fit(4)
results.summary()
 Summary of Regression Results   
==================================
Model:                         VAR
Method:                        OLS
Date:           Thu, 07, May, 2020
Time:                     10:50:42
--------------------------------------------------------------------
No. of Equations:         2.00000    BIC:                   -5.31179
Nobs:                     32.0000    HQIC:                  -5.86298
Log likelihood:           25.3682    FPE:                 0.00223143
AIC:                     -6.13627    Det(Omega_mle):      0.00135930
--------------------------------------------------------------------
Results for equation alnM1
===========================================================================
              coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------
const            0.031290         0.024819            1.261           0.207
L1.alnM1         1.237658         0.189124            6.544           0.000
L1.R            -0.005209         0.001840           -2.831           0.005
L2.alnM1         0.035479         0.288928            0.123           0.902
L2.R             0.001341         0.002650            0.506           0.613
L3.alnM1        -0.267898         0.285970           -0.937           0.349
L3.R             0.006273         0.002722            2.304           0.021
L4.alnM1        -0.092060         0.190650           -0.483           0.629
L4.R            -0.004456         0.002161           -2.062           0.039
===========================================================================

Results for equation R
===========================================================================
              coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------
const            2.626115         2.588966            1.014           0.310
L1.alnM1       -18.059084        19.728553           -0.915           0.360
L1.R             0.945671         0.191924            4.927           0.000
L2.alnM1         7.182544        30.139598            0.238           0.812
L2.R            -0.342745         0.276454           -1.240           0.215
L3.alnM1        37.385646        29.831061            1.253           0.210
L3.R             0.319531         0.283972            1.125           0.260
L4.alnM1       -30.462525        19.887663           -1.532           0.126
L4.R            -0.141785         0.225455           -0.629           0.529
===========================================================================

Correlation matrix of residuals
            alnM1         R
alnM1    1.000000 -0.099908
R       -0.099908  1.000000

Les résultats montrent à peu près les mêmes caractéristiques, mais des améliorations sont observées en AIC et BIC.

Utilisons des données récentes.

model = VAR(tsd0.iloc[-40:])

results = model.fit(4)
results.summary()
 Summary of Regression Results   
==================================
Model:                         VAR
Method:                        OLS
Date:           Thu, 07, May, 2020
Time:                     11:06:09
--------------------------------------------------------------------
No. of Equations:         2.00000    BIC:                   -12.2865
Nobs:                     36.0000    HQIC:                  -12.8019
Log likelihood:           151.245    FPE:                2.13589e-06
AIC:                     -13.0783    Det(Omega_mle):     1.36697e-06
--------------------------------------------------------------------
Results for equation alnM1
===========================================================================
              coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------
const            0.019669         0.012024            1.636           0.102
L1.alnM1         0.706460         0.175974            4.015           0.000
L1.R            -0.015862         0.008523           -1.861           0.063
L2.alnM1        -0.046162         0.185186           -0.249           0.803
L2.R            -0.020842         0.011837           -1.761           0.078
L3.alnM1         0.568076         0.186205            3.051           0.002
L3.R             0.035471         0.011813            3.003           0.003
L4.alnM1        -0.461882         0.175777           -2.628           0.009
L4.R            -0.007579         0.009849           -0.769           0.442
===========================================================================

Results for equation R
===========================================================================
              coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------
const           -0.053724         0.308494           -0.174           0.862
L1.alnM1         1.054672         4.515026            0.234           0.815
L1.R             0.875299         0.218682            4.003           0.000
L2.alnM1        -5.332917         4.751384           -1.122           0.262
L2.R             0.257259         0.303711            0.847           0.397
L3.alnM1         3.412184         4.777534            0.714           0.475
L3.R            -0.263699         0.303088           -0.870           0.384
L4.alnM1         4.872672         4.509976            1.080           0.280
L4.R             0.032439         0.252706            0.128           0.898
===========================================================================

Correlation matrix of residuals
            alnM1         R
alnM1    1.000000 -0.168029
R       -0.168029  1.000000

Le résultat avant la suppression de la tendance est

 Summary of Regression Results   
==================================
Model:                         VAR
Method:                        OLS
Date:           Thu, 07, May, 2020
Time:                     11:07:32
--------------------------------------------------------------------
No. of Equations:         2.00000    BIC:                   -12.3214
Nobs:                     38.0000    HQIC:                  -12.5991
Log likelihood:           144.456    FPE:                2.90430e-06
AIC:                     -12.7524    Det(Omega_mle):     2.26815e-06
--------------------------------------------------------------------
Results for equation lnM1
==========================================================================
             coefficient       std. error           t-stat            prob
--------------------------------------------------------------------------
const           0.079744         0.100134            0.796           0.426
L1.lnM1         0.784308         0.174023            4.507           0.000
L1.R           -0.016979         0.009977           -1.702           0.089
L2.lnM1         0.211960         0.174036            1.218           0.223
L2.R            0.012038         0.009846            1.223           0.221
==========================================================================

Results for equation R
==========================================================================
             coefficient       std. error           t-stat            prob
--------------------------------------------------------------------------
const          -1.450824         2.077328           -0.698           0.485
L1.lnM1         0.736725         3.610181            0.204           0.838
L1.R            0.884364         0.206971            4.273           0.000
L2.lnM1        -0.617456         3.610443           -0.171           0.864
L2.R           -0.027052         0.204257           -0.132           0.895
==========================================================================

Correlation matrix of residuals
            lnM1         R
lnM1    1.000000 -0.260828
R      -0.260828  1.000000

Recommended Posts

Introduction aux modèles de retour automatique vectoriel (VAR) avec des modèles de statistiques
Introduction aux modèles de correction d'erreur vectorielle (VECM) avec des modèles de statistiques
Introduction aux tests d'hypothèses statistiques avec des modèles de statistiques
Introduction au modèle linéaire généralisé (GLM) par Python
Introduction à RDB avec sqlalchemy Ⅰ
Introduction à RDB avec sqlalchemy II
Introduction à l'apprentissage automatique: fonctionnement du modèle
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
[Introduction à Python] Utilisons foreach avec Python
[Introduction à Pytorch] J'ai joué avec sinGAN ♬
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Introduction à l'intelligence artificielle avec Python 1 «Théorie des algorithmes génétiques»
Markov Chain Artificial Brainless avec Python + Janome (1) Introduction à Janome
Introduction à l'intelligence artificielle avec Python 2 «Pratique de l'algorithme génétique»
[Introduction à StyleGAN2] Apprentissage indépendant avec 10 visages d'anime ♬
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Introduction au vol en formation avec Tello edu (Python)
[Introduction à minimiser] Analyse des données avec le modèle SEIR ♬
Introduction à Python avec Atom (en route)
[Introduction à l'application Udemy Python3 +] 9. Tout d'abord, imprimez avec print
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Introduction à Tkinter 1: Introduction
Introduction à PyQt
Introduction à Scrapy (2)
[Linux] Introduction à Linux
Introduction à Scrapy (4)
Introduction à discord.py (2)
[Introduction à Python] Comment itérer avec la fonction range?
[Introduction à WordCloud] Il est facile à utiliser même avec Jetson-nano ♬
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Introduction au traitement parallèle distribué Python par Ray
Introduction aux mathématiques à partir du mémo d'étude Python Vol.1
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage