[PYTHON] Introduction aux modèles de correction d'erreur vectorielle (VECM) avec des modèles de statistiques

Dans le modèle de correction d'erreur (ECM) introduit par Granger, Newbold (1974) et Yule (1936), les données analysées ont une tendance probabiliste à long terme connue sous le nom de république. La correction d'erreur exprime que les écarts ou les erreurs par rapport à l'équilibre à long terme affectent la dynamique à court terme. Si la série chronologique économique contient des racines unitaires, la série chronologique n'est pas stationnaire. Deux séries chronologiques non stationnaires et non liées peuvent montrer une relation significative lors de l'utilisation de la méthode des moindres carrés dans l'analyse de régression. Le modèle de correction d'erreur analyse les effets entre les données de séries chronologiques à long terme et à court terme et prédit le temps nécessaire au retour de la variable dépendante à l'équilibre, mais la méthode d'Engel-Granger pose de nombreux problèmes. Johansen a résolu le problème en annonçant le modèle de correction d'erreur vectorielle (VECM). VECM est un modèle de correction d'erreurs avec le concept d'un modèle vectoriel à retour automatique (VAR), qui est l'un des modèles de séries temporelles multiples qui supposent une causalité bidirectionnelle. Par conséquent, le modèle de correction d'erreur vectorielle est également l'un des multiples modèles de séries chronologiques.

ECM (traduction simple wiki)

Le modèle de correction d'erreurs (ECM) est un modèle de séries chronologiques multiples dans lequel plusieurs variables sous-jacentes sont utilisées pour les données avec des tendances probabilistes à long terme appelées réconciliations. L'ECM aide à estimer les effets à court et à long terme d'une série chronologique sur une autre, et est théoriquement soutenu. La correction des erreurs saisit le fait que les erreurs précoces de l'équilibre à long terme affectent la dynamique à court terme. Par conséquent, l'ECM peut estimer directement le taux auquel la variable dépendante revient à l'équilibre après des changements dans d'autres variables.

histoire

Yule (1936) et Granger et Newbold (1974) se sont d'abord concentrés sur le problème de la corrélation apparente et ont trouvé une solution dans l'analyse des séries chronologiques. Dans deux processus de somme (non stationnaires) totalement indépendants, l'un tend à montrer une relation statistiquement significative par rapport à l'autre par analyse de régression. Par conséquent, il peut être erroné qu'il existe une véritable relation entre ces variables. La méthode habituelle des moindres carrés est incohérente et les statistiques de test couramment utilisées ne sont pas valides. En particulier, les simulations de Monte Carlo ont montré que l'on obtient des $ R ^ 2 $ très élevés, des statistiques t très élevées individuellement et des statistiques de Durbin-Watson faibles. Techniquement parlant, Phillips (1986) prouve qu'à mesure que la taille de l'échantillon augmente, les estimations des paramètres ne convergent pas de manière probabiliste, les sections divergent et le gradient devient une distribution non dégénérée. Cependant, parce qu'elle reflète les relations à long terme entre ces variables, il est possible qu'il existe une tendance probabiliste commune dans les deux séries chronologiques qui intéresse vraiment le chercheur.

En raison de la nature probabiliste des tendances, le processus de sommation ne peut pas être divisé en séries temporelles stationnaires contenant des tendances déterministes (prévisibles) et des écarts par rapport aux tendances. Même une marche aléatoire avec les tendances déterministes supprimées finira par montrer une fausse corrélation. Par conséquent, la suppression des tendances ne résout pas le problème d'estimation. Dans la méthode de Box-Jenkins, dans de nombreuses séries temporelles (économie, etc.), on considère généralement que la différence de premier ordre est constante, et la différence des données de séries chronologiques est prise pour estimer un modèle tel que ARIMA. Les prévisions de tels modèles reflètent la périodicité et la saisonnalité des données, mais les informations sur les ajustements à long terme des niveaux (série originale, prix) sont perdues et les prévisions à long terme deviennent peu fiables. En conséquence, Sargan (1964) a développé une méthodologie ECM qui conserve les informations contenues dans le niveau.

Estimé

Plusieurs méthodes sont connues pour estimer le modèle dynamique sophistiqué décrit ci-dessus. Parmi ceux-ci figurent l'approche en deux étapes d'Engle et Granger et la VECM vectorielle utilisant la méthode d'estimation de l'ECM de Johansen en une seule étape.

L'approche en deux étapes d'Engle et Granger

La première étape consiste à tester à l'avance si la série chronologique individuelle utilisée est non stationnaire. Utilisez les tests DF et ADF de racine unitaire standard (pour résoudre le problème de l'erreur de corrélation en série). Prenons le cas de deux séries temporelles différentes $ x_ {t} $ et $ y_ {t} $. Si les deux sont I (0), l'analyse de régression standard est valide. Pour des sommes d'ordres différents, par exemple si l'un est I (1) et l'autre est I (0), le modèle doit être transformé. Si les deux sont des sommes du même ordre (généralement I (1)), alors un modèle ECM de la forme peut être estimé:

A(L)\Delta y_{t}=\gamma +B(L)\Delta x_{t}+\alpha (y_{t-1}-\beta_{0}-\beta_{1}x_{t-1})+\nu_{t}

Si les deux sont des sommes et que cet ECM existe, on dit qu'elles sont des républiques par le théorème d'expression d'Engle-Granger. Puis utilisez la méthode habituelle des moindres carrés pour estimer le modèle $ y_ {t} = \ beta_ {0} + \ beta_ {1} x_ {t} + \ varepsilon_ {t} $. Si la régression ne se fait pas passer pour celle déterminée par les critères de test ci-dessus, non seulement les moindres carrés habituels sont valides, mais en fait il y a super-appariement (Stock, 1987). Enregistrez ensuite le résidu prédit $ \ hat {\ varepsilon_ {t}} = y_ {t} - \ beta_ {0} - \ beta_ {1} x_ {t} $ de cette régression, ainsi que la variable de différence et le délai Utilisé pour la régression du terme d'erreur.

A(L)\Delta y_{t}=\gamma +B(L)\Delta x_{t}+\alpha {\hat {\varepsilon }}_{t-1}+\nu _{t}

Testez ensuite la réconciliation en utilisant les statistiques t standard de $ \ alpha $. Cette méthode est simple, mais présente un certain nombre de problèmes.

-La puissance de détection statistique du test de racine unitaire univarié utilisé dans la première étape est faible.

VECM L'approche d'Engle-Granger décrite ci-dessus présente de nombreuses faiblesses. Autrement dit, une variable est limitée à une seule équation désignée comme variable dépendante. Cette variable s'explique par une autre variable supposée faiblement exogène au paramètre d'intérêt. Vérifiez également si la série chronologique est I (0) ou I (1) par un test préliminaire. Ces faiblesses peuvent être corrigées par la méthode de Johansen. L'avantage est qu'aucun prétest n'est requis, il n'y a pas de problème avec un grand nombre de relations républicaines, toutes sont traitées comme des variables endogènes, et des tests liés aux paramètres à long terme sont possibles. En conséquence, le modèle ajoute des capacités de correction d'erreur au modèle exogène connu sous le nom d'auto-retour vectoriel (VAR) et est connu sous le nom de modèle de correction d'erreur vectorielle (VECM). La procédure est la suivante.

Étape 1: Estimer un VAR sans contrainte pouvant contenir des variables non stationnaires Étape 2: test de Kyowa à l'aide du test de Johansen Étape 3: Créez et analysez VECM.

Exemple d'ECM

L'idée de républicanisation peut être illustrée par un simple exemple macroéconomique. Supposons que $ C_ {t} $ de consommation et $ Y_ {t} $ de revenu disponible sont des séries chronologiques macroéconomiques avec des relations à long terme. Plus précisément, la tendance moyenne à la consommation est fixée à 90%. En d'autres termes, $ C_ {t} = 0.9Y_ {t} $ tient à long terme. Du point de vue d'un économiste métrique, l'erreur $ \ varepsilon_ {t} (= C_ {t} - \ beta Y_ {t}) $ de la régression est une série temporelle stationnaire, $ Y_ {t} $ et $ C_ {t} Si $ n'est pas stationnaire, cette relation à long terme (également appelée républicaine) existe. De plus, si $ Y_ {t} $ change soudainement de $ \ Delta Y_ {t} $, on suppose que $ C_ {t} $ change. $ \ Delta C_ {t} = 0,5 \ Delta Y_ {t} $, c'est-à-dire que la tendance de consommation marginale est de 50%. L'hypothèse finale est que l'écart entre la consommation actuelle et la consommation équilibrée diminuera de 20% sur chaque période.

Avec ce paramètre, modifiez le niveau de consommation $ \ Delta C_ {t} = C_ {t} --C_ {t-1} $ en $ \ Delta C_ {t} = 0,5 \ Delta Y_ {t} -0,2 (C_ {t) -1} -0,9Y_ {t-1}) + \ varepsilon_ {t} $.

Le premier terme de RHS explique l'effet à court terme des variations de $ Y_ {t} $ sur $ C_ {t} $, le deuxième terme explique la relation à long terme des variables vers l'équilibre, et le troisième. Le terme reflète le choc aléatoire que reçoit le système, tel que le choc de confiance des consommateurs qui affecte la consommation.

Pour voir comment le modèle fonctionne, considérez deux types de chocs, permanents et temporaires. Pour plus de simplicité, définissez $ \ varepsilon_ {t} $ à zéro pour chaque t.

Supposons que le système soit en équilibre pour la période t - 1. Autrement dit, $ C_ {t-1} = 0,9Y_ {t-1} $.

Supposons que $ Y_ {t} $ augmente de 10 à la période t, mais retourne ensuite au niveau précédent. Dans ce cas, $ C_ {t} $ augmente de 5 (la moitié de 10) au début (période t), mais dans la deuxième période et les suivantes, $ C_ {t} $ commence à diminuer et converge vers le niveau initial.

En revanche, si l'impact sur $ Y_ {t} $ est permanent, $ C_ {t} $ convergera lentement vers une valeur supérieure à 9 au-dessus du $ C_ {{t-1}} $ initial.

Avant d'apprendre le modèle de correction d'erreur vectorielle

Connaissances de base (traduction partielle simplifiée de 1,2 dans [1])

La valeur d'une variable économique spécifique est la valeur de réalisation de la variable de probabilité pour une période donnée, et la série chronologique est considérée comme générée par le processus de probabilité. Pour clarifier le concept de base, jetons un coup d'œil rapide à quelques définitions et expressions de base.

Ω est un ensemble de tous les événements de base (espace d'échantillonnage) et (Ω, F, Pr) est un espace de probabilité. F est l'algèbre sigma de l'événement, ou le complément de Ω, et Pr est la mesure de probabilité définie par F. La variable aléatoire y est une fonction à valeur réelle $ A_c $ = {ω ∈ Ω | y (ω) ≤ c} ∈ F définie par Ω pour chaque nombre réel c, et $ A_c $ a une probabilité définie par Pr. C'est un événement à faire. La fonction F: R → [0, 1] est définie par $ F (c) = Pr (A_c) $ et est une fonction de distribution de $ y $.

Le vecteur de probabilité à K dimensions ou le vecteur à K dimensions de la variable stochastique est une fonction de Ω à y dans l'espace euclidien à K dimensions $ R ^ K $. Autrement dit, y applique respectivement $ y (ω) = (y_1 (ω), ..., y_K (ω)) ^ \ prime $ à ω ∈ Ω, $ c = (c_1, ..., c_K ) ∈ R_K $, $ A_c = {ω | y_1 (ω) ≤ c_1, \ cdots, y_K (ω) ≤ c_K} ∈ F $. Fonction F: RK → [0, 1] est défini par $ F (c) = Pr (A_c) $ et est une distribution simultanée de y fonctions.

Supposons que Z est un ensemble d'indices avec jusqu'à d'innombrables éléments, par exemple un ensemble de tous les entiers ou de tous les entiers positifs. Le processus stochastique (discret) est une fonction à valeur réelle de y: Z × Ω → R, déterminée chaque t ∈ Z, et y (t, ω) est une variable stochastique. La variable de probabilité correspondant à t est représentée par $ y_t $, et l'espace de probabilité sous-jacent n'est pas mentionné. Dans ce cas, on considère que tous les membres $ y_t $ du processus stochastique sont définis dans le même espace stochastique. Habituellement, si la signification du symbole est claire dans le contexte, le processus stochastique est également indiqué par $ y_t $.

Le processus stochastique est décrit comme une fonction de distribution simultanée de toutes les familles de sous-ensembles finis de $ y_t $ lorsque t ∈ S ⊂ Z. En pratique, le système complet de distribution est souvent inconnu, nous utilisons donc souvent les premier et deuxième moments de la distribution. Autrement dit, utilisez la moyenne $ E (y_t) = \ mu_t $, la variance $ E [y_t- \ mu_t ^ 2] $ et la covariance $ E [(y_t- \ mu_t) (y_s- \ mu_s)] $.

Le processus de probabilité vectorielle à K dimensions ou processus de probabilité multivariée est une fonction de y: Z × Ω → $ R ^ K $, et pour chaque t ∈ Z déterminé, y (t, ω) est un vecteur de probabilité à K dimensions. .. Utilisez $ y_t $ pour le vecteur de probabilité correspondant au t ∈ Z déterminé. De plus, le processus stochastique complet peut être représenté par $ y_t $. Cette signification particulière ressort clairement du contexte. Les propriétés stochastiques sont les mêmes que pour les processus univariés. Autrement dit, les propriétés probabilistes sont résumées comme une fonction de distribution simultanée de tous les cosets finis du vecteur de probabilité $ y_t $. En pratique, les moments du premier et du second ordre dérivés de toutes les variables stochastiques pertinentes sont utilisés.

La valeur de réalisation du processus stochastique (vectoriel) est $ y_t (\ omega) $, un ensemble de séquences (vectorielles) pour ω fixées par t ∈ Z. En d'autres termes, la valeur réalisée du processus stochastique est la fonction Z → $ R ^ K $ de t → $ y_t $ (ω). Les séries temporelles sont considérées comme de telles réalisations ou, dans certains cas, des parties finies de telles réalisations. C'est-à-dire, par exemple, qu'il est composé de (vector) $ y_1 (\ omega), \ dots, y_T (\ omega) $. On pense que le processus stochastique sous-jacent a généré la (les) série (s) chronologique (s) et est appelé processus de génération ou de génération de séries chronologiques, ou processus de génération de données (DGP). La série temporelle $ y_1 (\ omega), \ cdots, y_T (\ omega) $ est généralement indiquée par $ y_1, \ cdots, y_T $, ou simplement par le processus stochastique sous-jacent $ y_t $ si aucune confusion ne se produit. Est fait. Le nombre T d'observations est appelé la taille de l'échantillon ou la longueur de la série chronologique.

Processus VAR (traduction partielle simplifiée de 1,3 de [1])

Les fonctions linéaires étant faciles à manipuler, nous commencerons par prédire les observations passées avec des fonctions linéaires. Considérons les séries temporelles univariées $ y_t $ et $ h = 1 $ prévisions futures. Si f (・) est une fonction linéaire, \hat{y_{T+1}}=\nu+\alpha_1 y_T+\alpha_2 y_{T-1}+\cdots Sera. La formule de prédiction utilise la valeur passée y d'un nombre fini p, \hat{y_{T+1}} = \nu + \alpha_1y_{T}+\alpha_2y_{T-1} +\cdots+\alpha_p y_{T-p} + 1 Sera. Bien sûr, la valeur vraie $ y_ {T +1} $ et la valeur $ \ hat {y_ {T +1}} $ prédite ne sont pas exactement les mêmes, Si l'erreur de prédiction est $ u_ {T +1} = \ hat {y_ {T +1}} - y_ {T +1} $ y_{T +1} = y_{ T +1} + u_{T +1} =\nu + \alpha_1 y_T+\cdots+\alpha_p y_{T-p + 1} + u_{T +1} Sera. Ici, en supposant que la valeur numérique est la valeur réalisée de la variable stochastique, le processus d'auto-retour est utilisé pour la génération de données. y_t =\nu + \alpha_1 y{t−1} +\cdots+ \alpha_p y_{t−p} + u_t S'applique à chaque période T. Ici, $ y_t $, $ y_ {t − 1}, \ cdots, y_ {t − p} $, et $ u_t $ sont des variables stochastiques. Dans le processus de retour automatique (AR), nous supposons que les erreurs de prédiction $ u_t $ dans différentes périodes ne sont pas corrélées, c'est-à-dire que $ u_t $ et $ u_s $ ne sont pas corrélées à $ s = t $. Autrement dit, puisque toutes les informations passées utiles $ y_t $ sont utilisées pour la prédiction, il n'y a pas d'erreur de prédiction systématique.

Considérant plusieurs séries chronologiques, d'abord \hat{y_{k,T +1}} =\nu + \alpha_{k1,1}y_{1,T} +\alpha_{k2,1}y_{2,T} + \cdots+\alpha_{kK,1}y_{K,T}+\cdots+\alpha_{k1,p}y_{1,T-p+1} +\cdots+\alpha_{kK,p}y_{K,T-p+1} Il est naturel d'étendre $ k = 1, \ cdots K $.

Pour simplifier la notation, $ y_t = (y_ {1t}, \ cdots, y_ {Kt}), \ hat {y_t}: = (\ hat {y_ {1t}}, \ cdots, \ hat {y_ {Kt}}), \ nu = (\ nu_1, \ cdots, \ nu_K) $ et A_i=| matrix |(Abréviation)| Ensuite, l'équation vectorielle ci-dessus peut être décrite de manière compacte comme suit.

y_{T+1}=\nu+ A_1y_T +\cdots+ A_py_{T −p + 1}

Puisque $ y_t $ est un vecteur de variables stochastiques, ce prédicteur est le meilleur prédicteur obtenu à partir d'un modèle vectoriel d'auto-retour de la forme: y_t =\nu+ A1y_{t−1} +\cdots+ A_py_{t−p} + u_t Ici, $ u_t = (u_ {1t}, \ cdots, u_ {Kt}) $ est une série chronologique continue de vecteurs de probabilité d'ordre K dans laquelle la moyenne des vecteurs est nulle et est distribuée indépendamment et uniformément.

Processus de stabilisation VAR (p) (traduction partielle simplifiée de 2.1.1 de [1])

Modèle VAR (p) (modèle VAR d'ordre p)

y_t =\nu + A_1y_{t−1} +\cdots+ A_py_{t−p} + u_t、t = 0、±1、±2、...、(2.1.1)

Penser à. $ y_t = (y_ {1t}, \ cdots, y_ {Kt}) ^ \ prime $ est le vecteur (K × 1) de la variable de probabilité, $ A_i $ est fixé par la matrice de coefficients (K × K), et $ \ nu = (\ nu_1, \ cdots, \ nu_K) ^ \ prime $ est fixé dans une matrice de coefficients (K × K) et a des sections qui peuvent être des moyennes non nulles $ E (y_t) $. Par conséquent, $ u_t = (u_ {1t}, \ cdots, u_ {Kt}) ^ \ prime $ est un bruit blanc ou un processus d'innovation à K dimensions. Autrement dit, $ s \ net $, $ E (u_t) = 0, E (u_tu_t ^ \ prime) = \ sum_u, E (u_tu_s ^ \ prime) = 0 $. Sauf indication contraire, la matrice de covariance Σu est une matrice non singulière.

Considérons un peu plus le processus de (2.1.1). Pour comprendre la signification du modèle, considérons le modèle VAR (1).

y_t =\nu + A_1y_{t−1} + u_t \cdots (2.1.2)

Si ce mécanisme de génération est répété à partir de $ t = 1 $

y_1 =\nu + A_1y_0 + u_1 y_2 =\nu+ A_1y_1 + u_2 =\nu+ A_1(\nu+ A_1y_0 + u_1)+ u_2 \ \ \ \ =(IK + A_1)\nu + A_1^2y_0 + A_1u_1 + u_2 \ \ \vdots \ \ \ \ \ \ (2.1.3) y_t =(I_K + A_1 +\cdots+ A_1^{t-1})\nu+ A^t_1y_0 + \sum_{t=0}^{t−1} A_1^iu_{t−i} \vdots

Par conséquent, le vecteur $ y_1, \ cdots, y_t $ est uniquement déterminé par $ y_0, u_1, \ cdots, u_t $. La distribution simultanée de $ y_1, \ cdots, y_t $ est déterminée par la distribution simultanée de $ y_0, u_1, \ cdots, u_t $.

Parfois, on suppose que le processus commence à une période spécifique, mais parfois il est plus pratique de partir d'un passé infini. En réalité, (2.1.1) correspond à cela. Si tel est le cas, quel est le processus compatible avec le mécanisme de (2.1.1)? Pour examiner ce problème, revisitez le processus VAR (1) dans (2.1.2). À partir de (2.1.3)

y_t =\nu+ A_1y_t−1 + u_t \ \ \=(I_K + A_1 +\cdots+ A_j^1)\nu+ A_1^{j + 1} y_{t−j−1} +\sum_{i=0}^j A_1^i u_{t-i}

Si les coefficients de toutes les valeurs propres de $ A_1 $ sont inférieurs à 1, alors le processus de $ A ^ i_1 $, $ i = 0,1, \ cdots $, peut être ajouté de manière absolue. Par conséquent, somme infinie

\sum_{i=1}^\infty A=1^j u_{t−i}

A une moyenne au carré. Aussi,

(I_K + A_1 +\cdots+ A_1^j)\nu− \rightarrow_{j→\infty}(I_K − A_1)^{−1}\nu

De plus, $ A_1 ^ {j + 1} $ converge rapidement vers zéro comme $ j → \ infty $, donc le terme $ A_1 ^ {j + 1} y_ {t − j − 1} $ est ignoré dans la limite. Sera fait. Par conséquent, si les coefficients de toutes les valeurs propres de $ A_1 $ sont inférieurs à 1, $ y_t $ est le processus VAR (1) de (2.1.2) et $ y_t $ est le processus stochastique bien défini.

y_t = µ +\sum_{t=0}^\infty A_1^i u_{t−i}、t = 0,±1,±2,\cdots, (2.1.4) Alors, $ µ = (I_K - A_1) ^ {−1} \ nu $.

La distribution et la distribution simultanée de $ y_t $ sont déterminées uniquement par la distribution du processus de $ u_t $. Les premier et deuxième moments du processus de $ y_t $ sont pour tout $ t $

E(y_t)= \mu \ \ \ \ \ (2.1.5)

On peut voir que c'est le cas. Et

\Gamma y(h)= E(y_t −\mu)(y_t−h −\mu)^\prime \ \ \ \ \ \ = \lim_{n→\infty}\sum_{i=0}^n \sum_{i = 0}^n A_1^i E(u_{t-i}u_{t-h-j}^\prime)(A_1^j )^\prime \ (2.1.6) \ \ \ \ \ = \lim_{ n = 0}^n A_1^{h + i} \sum_u A_1^i=\sum_{i=0}^\infty A_1^{h+i}\sum_u A^{i\prime}_1

Car, dans le cas de $ s \ net $, $ E (u_tu_s ^ \ prime) = 0 $, et en tout $ t $, $ E (u_t u_t) = \ sum_u $.

queueA_1La condition que toutes les valeurs propres de sont inférieures à 1 est importante et VAR(1)Le processus est appelé stable. Cette condition est|z|\le1Contre

$ det(I_K − A_1z) \ne 0 \ \ \ \ \ (2.1.7)$

Sera. Le processus $ y_t $ de t = 0, ± 1, ± 2, ... peut également être défini si la condition de stabilité (2.1.7) n'est pas remplie, mais il est défini pour tout t ∈ Z. Nous ne faisons pas cela ici parce que nous supposons toujours la stabilité du processus.

Processus de réconciliation, tendances probabilistes générales et modèle de correction d'erreur vectorielle (traduction partielle simplifiée de 6,3 de [1])

Existe-t-il vraiment un équilibre entre de nombreuses variables économiques, comme le revenu et les dépenses des ménages, et le prix du même produit sur différents marchés? La variable cible est le vecteur $ y_t = (y_ {1t}, ..., y_ {Kt}) ^ \ prime $, et leur relation d'équilibre à long terme est $ \ beta y_t = \ beta_1y_ {1t} + ··· · + \ Beta_Ky_ {Kt} = 0) ^ \ prime $. Ici, $ \ beta = (\ beta_1, ..., \ beta_K) ^ \ prime $. Au fil du temps, cette relation peut ne pas être satisfaite exactement. Soit $ z_t $ une variable stochastique qui représente l'écart par rapport au solde, et supposons que $ \ beta y_t = z_t $ est valable. Si l'équilibre est effectivement établi, on considère que les variables $ y_t $ changent entre elles et $ z_t $ est considérée comme stable. Cependant, avec ce paramètre, la variable $ y_t $ peut errer en tant que groupe. Elle peut être motivée par une tendance probabiliste commune. En d'autres termes, chaque variable est une somme et il existe une connexion linéaire de variables constantes. Une variable de somme ayant cette caractéristique est appelée un rapprochement. En général, tous les composants du processus $ y_t $ K-dimensionnel sont $ I (d) $, sous $ \ beta = (\ beta_1, \ cdots, \ beta_K) ^ \ prime \ ne 0 $, $ z_t = \ beta ^ \ prime S'il y a une jointure linéaire de y_t $ et que $ z_t $ est $ I (d - b) $, alors la variable $ y_t $ est le rapprochement de l'ordre $ (d, b) $ Il est appelé et est exprimé par $ y_t ~ CI (d, b) $. Par exemple, si toutes les composantes de $ y_t $ sont I (1) et que $ \ beta y_t $ est stationnaire (I (0)), alors $ y_t à CI (1,1) $. Le vecteur $ \ beta $ est appelé le vecteur républicain. Le processus composé de variables républicaines s'appelle le processus républicain. Ce processus a été introduit par Granger (1981) et Engle & Granger (1987).

Pour simplifier le terme, nous utilisons une définition légèrement différente de la république. Lorsque $ \ Delta ^ d y_t $ est stable et $ \ Delta ^ {d − 1} y_t $ n'est pas stable, le processus $ y_t $ à K-dimensions est appelé la somme de l'ordre $ d $, qui est facilement $ y_t ~ I. Écrivez (d) $. Le processus I (d) de $ y_t $ est une somme de commandes inférieures à $ d $, et s'il existe une connexion linéaire $ \ beta y_t $ de $ \ beta \ ne 0 $, cela s'appelle une réconciliation. Cette définition est différente de celle d'Engle & Granger (1987) et n'exclut pas les composantes de $ y_t $ dont l'ordre de somme est inférieur à d. Si $ y_t $ n'a qu'un seul composant I (d) et que tous les autres composants sont stables (I (0)), alors $ \ Delta ^ d y_t $ est stable et $ \ Delta ^ Lorsque {d − 1} y_t $ n'est pas stable, le vecteur $ y_t $ devient I (d) selon la définition. Dans un tel cas, la relation $ \ beta y_t $ ne contenant que la composante constante est une relation républicaine dans notre terminologie. Évidemment, cet aspect de notre définition est incompatible avec l'idée originale de considérer une relation spéciale entre des variables de somme avec une tendance stochastique commune comme une république, mais distingue des sommes de variables d'ordres différents. La définition est toujours valable, non pas parce qu'elle simplifie simplement le terme. Les lecteurs doivent avoir une idée de base du républicanisme lorsqu'il s'agit d'interpréter certaines relations.

Evidemment, le vecteur républicain n'est pas unique. La multiplication par une constante non nulle donne un vecteur républicain. En outre, il peut y avoir divers vecteurs républicains linéairement indépendants. Par exemple, si votre système comporte quatre variables, supposons que les deux premières soient en équilibre à long terme et que les deux dernières soient similaires. Par conséquent, il peut y avoir un vecteur républicain avec des zéros dans les deux dernières positions et des zéros dans les deux premières positions. En outre, les quatre variables peuvent avoir une relation républicaine.

Avant l'introduction du concept de républicanité, des modèles de correction d'erreurs très proches ont été discutés dans le domaine de l'économie métrique. En général, dans le modèle de correction d'erreur, les changements de variables sont considérés comme des écarts par rapport à la relation d'équilibre. Par exemple, supposons que $ y_ {1t} $ représente le prix d'un article sur un marché et $ y_ {2t} $ correspond au prix du même article sur un autre marché. De plus, on suppose que la relation d'équilibre entre les deux variables est donnée par $ y_ {1t} = \ beta_1 y_ {2t} $ et que la variation de $ y_ {1t} $ dépend de l'écart par rapport à cet équilibre de période t - 1. Faire.

\Delta y_{1t} =\alpha_1(y_{1,t−1} −\beta_1y_{2,t−1})+ u_{1t}

Une relation similaire peut s'appliquer à $ y_ {2t} $ \Delta y_{2t} =\alpha_2(y_{1t−1} −\beta_1y_{2,t−1})+ u_{2t}

Dans un modèle de correction d'erreur plus général, $ \ Delta y_ {it} $ peut également dépendre des modifications précédentes des deux variables, par exemple: \Delta y_{1t} =\alpha_1(y_{1,t−1} −\beta_1y_{2,t−1})+ \gamma_{11,1}\Delta y_{1,t−1} + \gamma_{12,1}\Delta y_{2,t−1} + u_{1t}\Delta y_{2t} =\alpha_2(y_{1,t−1} −\beta_1y_{2,t−1})+ \gamma_{21,1}\Delta y_{1t}−1 + \gamma_{22,1}\Delta y_{2,t−1} + u_{2t} / / (6.3.1) Il peut également contenir un décalage avant $ \ Delta y_ {it} $.

Pour voir la relation étroite entre le modèle de correction d'erreur et le concept de républicanité, supposons que $ y_ {1t} $ et $ y_ {2t} $ sont des variables I (1). Dans ce cas, tous les termes de (6.3.1), y compris $ \ Delta y_ {it} $, sont stables. De plus, $ u_ {1t} $ et $ u_ {2t} $ sont des erreurs de bruit blanc, qui sont également stables. Les termes instables ne sont pas équivalents à des processus stables \alpha_i(y_{1,t−1} −\beta_1y_{2,t−1})= \Delta y_{it} − \gamma_{i1,1}\Delta y_{1,t−1} − \gamma_{i2,1}\Delta y_{2,t−1} − u_{it} Doit également être stable. Par conséquent, si $ \ alpha_1 = 0 $ ou $ \ alpha_2 = 0 $, $ y_ {1t} - \ beta_1 y_ {2t} $ est stable et a une relation républicaine.

Connaissances de base 2 (rédigées en référence à [2] 2.1)

Marche aléatoire X_t=X_{t-1}+\varepsilon_t Peut être décrit comme. Si vous réécrivez ceci X_t=X_{t-1}+\varepsilon_t X_{t-1}=X_{t-2}+\varepsilon_{t-1} X_{t-2}=X_{t-2}+\varepsilon_{t-2} \vdots X_{2}=X_{1}+\varepsilon_{2} X_{1}=X_{0}+\varepsilon_{1} Peut être écrit. Si vous additionnez cela, le X en diagonale ci-dessous sera décalé, donc à la fin X_t=X_0+\sum \varepsilon_t Peut être décrit comme. La marche aléatoire est la somme de nombres aléatoires.

Ensuite, faites de même pour AR (1). Cependant, multipliez chaque ligne par $ C_ {t-j} (= \ Pi ^ j $) afin que le X diagonalement inférieur soit décalé par le côté gauche. X_t=\Pi X_{t-1}+\varepsilon_t Peut être décrit comme. Si vous réécrivez ceci X_t=\Pi X_{t-1}+\varepsilon_t X_{t-1}=\Pi X_{t-2}+\varepsilon_{t-1} X_{t-2}=\Pi X_{t-2}+\varepsilon_{t-2} \vdots X_{2}=\Pi X_{1}+\varepsilon_{2} X_{1}=\Pi X_{0}+\varepsilon_{1} Peut être écrit. Si vous additionnez cela, le X en diagonale ci-dessous sera décalé, donc à la fin X_t=C_{t-1} \Pi X_0 +\sum_{i=0}^{t-1} C_i \varepsilon_{t-j} Peut être décrit comme. C'est encore la somme des nombres aléatoires, X_t=\Pi^t X_0 +\sum_{i=0}^{t-1} \Pi^t \varepsilon_{t-j} Donc si $ \ Pi <1 $ X_t^*=\sum_{i=0}^{\infty}\Pi^i\varepsilon_t Convertit en.

Connaissances de base 3 (rédigées en référence à [2] 3.1)

Si $ X_t $ est I (1) et A est une matrice pxp de rang complet, alors $ AX_t $ est aussi $ I (0) $. X_t=X_0+\sum Y_i Et. $ Y_t = \ sum_ {i = 0} ^ \ infty C_i \ varepsilon_ {ti} $ as $ I (0) $ $ \ sum_ {i = 0} ^ \ infty C_i \ ne 0 $, $ X_t $ Est non stationnaire. $ C_z = \ sum_ {i = 0} ^ \ infty C_i z ^ i $ comme $ C ^ * (z) $

C^{\*}=\sum_{i=0}^\infty \frac{C(z)-C(1)}{1-z}=\sum_{i=0}^\infty C_i^*z^i Est défini comme. Donc, X_t=X_0+\sum_{i=1}^t Y_i=X_0+C\sum_{i=1}^t\varepsilon_i+Y_t^\*-Y_0^\* Ce processus n'est pas stationnaire car $ C \ ne 0 $ et $ Y_t = \ Delta X_t $. Multipliez les deux côtés par $ \ beta $

\beta^\`X_t=\beta^\`X_0 +\beta^\`C\sum_{i=1}^t\varepsilon_t+\beta^\` Y_t^\*- \beta^\`Y_0^\* Pour que $ \ beta ^ \ X_t $ soit stable, $ \ beta ^ \ C = 0 $ \beta^\`X_t=\beta^\`Y_t^*+\beta^\`X_0-\beta^\`Y_0^\* Ce devrait être $ \ beta ^ \ X_0 = \ beta ^ \ Y_0 ^ \ * $. Puis \beta^\`X_t=\beta^\`Y_t^\* En supposant que $ X_t $ est $ I (1) $, si $ \ beta ^ \ `X_t $ est stationnaire, alors $ X_t $ est une république.

Système d'induction du modèle de correction d'erreur \Delta X_t= \alpha \beta^\` X_{t-1}+\varepsilon_t Soit $ X_0 $ la valeur initiale et $ \ alpha $ et $ \ beta $ la matrice p x r. $ \ beta ^ \ X_t = E (\ beta ^ \ X_t) = c $ définit l'économie sous-jacente. Le coefficient d'ajustement $ \ alpha $ tente de renvoyer l'erreur non équilibrée $ \ beta ^ \ `X_t-c $ à l'état correct.

Connaissances de base 4 (rédigées en référence à [2] 4.1)

X_t=\Pi_1 X_{t-1}+\varepsilon_t Soustrayez $ X_ {t-1} $ des deux côtés de X_t-X_{t-1}=\Pi_1 X_{t-1} - X_{t-1}+\varepsilon_t Sera. Pour résumer ceci \Delta X_t=(\Pi_1-I) X_{t-1} +\varepsilon_t \Delta X_t=\Pi_1 X_{t-1} +\varepsilon_t Cela devient la forme du modèle de correction d'erreur. Soyez prudent lorsque vous manipulez $ \ Pi $.

Ceci est plus facile à comprendre si le décalage est secondaire. \Delta X_t=\Pi_1 X_{t-1} +\sum_{i=1}^{k-1} \Gamma_i \Delta X_{t-1}+\varepsilon_t Si le décalage est primaire, la partie $ \ Gamma $ baissera.

Un exemple de compréhension intuitive du sens de républicain

Exemple 3.1 Johansen, S. 1995. Inférence basée sur la probabilité dans les modèles autorégressifs vectoriels co-intégrés p.37

#Initialisation
%matplotlib inline
import matplotlib.pyplot as plt
from statsmodels.tsa.api import VECM
import statsmodels.api as sm
from statsmodels.tsa.base.datetools import dates_from_str
import pandas as pd
import numpy as np
from numpy import linalg as LA
from statsmodels.tsa.vector_ar.vecm import coint_johansen
from statsmodels.tsa.vector_ar.vecm import select_coint_rank
from statsmodels.tsa.vector_ar.vecm import select_order

Processus bidimensionnel $ X_t $ X_{1t}=\sum_{i=1}t \epsilon_{1i}+\epsilon_{2t}, X_{2t}=\sum_{i=1}t \epsilon_{1i}+\epsilon_{3t}, S'il est défini comme, ce sont des républicains sous le vecteur de réconciliation $ \ beta ^ \ = (a, -1) $. La relation linéaire $ \ beta ^ \ X_t = aX_ {1t} -X_ {2t} = a \ epsilon_ {2t} - \ epsilon_ {3t} $ est stationnaire, donc vérifions-la.

Oxford University Press.
n=10000
a=0.3
e1=np.random.normal(0,1,n)#.reshape([n,1])
e2=np.random.normal(0,1,n)#.reshape([n,1])
e3=np.random.normal(0,1,n)#.reshape([n,1])
X1=np.cumsum(e1)+e2
X2=a*np.cumsum(e1)+e3
X=np.concatenate([X1.reshape([n,1]),X2.reshape([n,1])],1)
plt.plot(X)

image.png

D'après le graphique, on peut voir que les deux sont des processus de sommation, mais qu'ils se comportent de la même manière.

betaX=a*X1-X2
plt.plot(betaX)

image.png La stabilité peut être confirmée. Examinons quelques autres caractéristiques.

from statsmodels.tsa.vector_ar.vecm import coint_johansen
jres = coint_johansen(X, det_order=0, k_ar_diff=2)
print('critical value of max eigen value statistic',jres.cvm)
print('maximum eigenvalue statistic',jres.lr2)
print('critical value of trace statistic',jres.cvt)
print('Trace statistic',jres.lr1)
print('eigen values of VECM coefficient matrix',jres.eig)
print('eigen vectors of VECM coefficient matrix',jres.evec)
print('Order of eigenvalues',jres.ind)
print('meth',jres.meth)
critical value (90%, 95%, 99%) of max eigen value statistic 
[[12.2971 14.2639 18.52  ]
 [ 2.7055  3.8415  6.6349]]
maximum eigenvalue statistic 
[2855.97930446    4.11317178]
critical value of trace statistic 
[[13.4294 15.4943 19.9349]
 [ 2.7055  3.8415  6.6349]]
Trace statistic 
[2860.09247624    4.11317178]
eigen values of VECM coefficient matrix 
[0.24849967 0.00041136]
eigen vectors of VECM coefficient matrix 
[[ 0.50076827 -0.03993806]
 [-1.67011922 -0.01128004]]
Order of eigenvalues [0 1]
meth johansen

Ensuite, découvrons le rang.

rres = select_coint_rank(X, det_order=-1, k_ar_diff=2)
rres.summary()
Johansen cointegration test using trace test statistic with 5% significance level
r_0	r_1	test statistic	critical value
0	2	2857.	12.32
1	2	1.584	4.130

Ensuite, examinons le décalage.

rres = select_order(X,maxlags=10)
rres.summary()
VECM Order Selection (* highlights the minimums)
AIC	BIC	FPE	HQIC
0	1.079	1.083	2.942	1.081
1	0.9691	0.9764	2.636	0.9716
2	0.9541	0.9642*	2.596	0.9575
3	0.9528*	0.9658	2.593*	0.9572*
4	0.9528	0.9687	2.593	0.9582
5	0.9535	0.9723	2.595	0.9598
6	0.9539	0.9755	2.596	0.9612
7	0.9546	0.9791	2.598	0.9629
8	0.9550	0.9825	2.599	0.9643
9	0.9556	0.9860	2.600	0.9659
10	0.9556	0.9888	2.600	0.9668

Voyons le résultat avec le modèle VECM.

model=VECM(X,k_ar_diff=0,deterministic='na')
res=model.fit()
print(res.summary())
                 Loading coefficients (alpha) for equation y1                 
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1           -0.0805      0.005    -16.217      0.000      -0.090      -0.071
                 Loading coefficients (alpha) for equation y2                 
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.2708      0.003     86.592      0.000       0.265       0.277
          Cointegration relations for loading-coefficients-column 1           
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
beta.1         1.0000          0          0      0.000       1.000       1.000
beta.2        -3.3342      0.004   -850.887      0.000      -3.342      -3.327
==============================================================================

Suivant, Ajoutez $ X_ {3t} = \ epsilon_ {4t} $. Dans ce processus vectoriel, il existe deux vecteurs républicains (a, -1,0) et (0,0,1).

n=10000
a=0.3
e1=np.random.normal(0,1,n)#.reshape([n,1])
e2=np.random.normal(0,1,n)#.reshape([n,1])
e3=np.random.normal(0,1,n)#.reshape([n,1])
e4=np.random.normal(0,1,n)#.reshape([n,1])
X1=np.cumsum(e1)+e2
X2=a*np.cumsum(e1)+e3
X3=e4
X=np.concatenate([X1.reshape([n,1]),X2.reshape([n,1]),X3.reshape([n,1])],1)
model=VECM(X,k_ar_diff=0,deterministic='na')
res=model.fit()
print(res.summary())
 Loading coefficients (alpha) for equation y1                 
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1           -0.0319      0.003    -11.006      0.000      -0.038      -0.026
                 Loading coefficients (alpha) for equation y2                 
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.0962      0.002     42.596      0.000       0.092       0.101
                 Loading coefficients (alpha) for equation y3                 
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1           -0.1374      0.002    -71.039      0.000      -0.141      -0.134
          Cointegration relations for loading-coefficients-column 1           
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
beta.1         1.0000          0          0      0.000       1.000       1.000
beta.2        -3.3418      0.008   -445.090      0.000      -3.357      -3.327
beta.3         4.7902      0.059     81.021      0.000       4.674       4.906
==============================================================================

Exemple 3.2 Johansen, S. 1995. Inférence basée sur la probabilité dans les modèles autorégressifs vectoriels co-intégrés p.37

Ensuite, regardons la somme du second ordre I (2). image.png

En ce qui concerne X1, X2 et X3, je ne sais pas si ce sera vraiment stable, donc je vais en fait faire un nombre aléatoire. A, b et c ont été ajustés pour que le graphique soit facile à voir.

n=1000
a=0.3
e1=np.random.normal(0,1,n)#.reshape([n,1])
e2=np.random.normal(0,1,n)#.reshape([n,1])
e3=np.random.normal(0,1,n)#.reshape([n,1])
e4=np.random.normal(0,1,n)#.reshape([n,1])
cs_e1=np.cumsum(e1)
cs_cs_e1=np.cumsum(cs_e1)
cs_e2=np.cumsum(e2)
X1=cs_cs_e1+cs_e2
a=0.5
b=2
X2=a*cs_cs_e1+b*cs_e2+e3
c=100
X3=c*cs_e2+e4
plt.plot(X1)
plt.plot(X2)
plt.plot(X3)

image.png

Ensuite, prenons la différence réelle et vérifions la stabilité.

plt.plot(np.diff(X1))
plt.plot(np.diff(np.diff(X1)))

image.png Je comprends que la différence au premier étage n'est pas constante, mais au deuxième étage, elle est constante.

plt.plot(np.diff(X2))
plt.plot(np.diff(np.diff(X2)))

image.png Le résultat ici est le même.

plt.plot(np.diff(X3))
plt.plot(np.diff(np.diff(X3)))

image.png

Modèle de correction d'erreur vectorielle (VECM) manuel de statsmodels

Le modèle de correction d'erreur vectorielle est utilisé pour étudier la relation entre la tendance probabiliste permanente (racine unitaire) de la variable objective et sa divergence à court terme. Le VECM est utilisé pour modéliser des séries différentielles de vecteurs et identifier et estimer ces modèles, en supposant qu'il existe de multiples tendances probabilistes. VECM ($ k_ {ar} -1) $ est

\Delta y_t= \Pi y_{t−1} + \Gamma_1\Delta y_{t−1} +\dots + \Gamma_{k_{ar}-1}\Delta y_{t−k_{ar} + 1} + u_t

Prend la forme de. De plus, $ \ Pi = \ alpha \ beta ^ \ $. Puisque ces $ \ alpha $ et $ \ beta ^ \ $ ne peuvent pas être estimés par la méthode des moindres carrés, la valeur propre et le vecteur propre de $ \ Pi $ sont obtenus par l'estimation la plus probable du modèle de correction d'erreurs, et $ \ Pi par le test de réconciliation. Déterminez le rang de $ et trouvez le vecteur propre correspondant à la valeur propre. Voir le chapitre 7 de [1]. Il est également possible d'inclure des termes déterministes tels que des termes constants et des termes de tendance dans $ \ Pi y_ {t − 1} $. Voir [3].

VECM ($ k_ {ar} -1 $) avec un terme déterministe image.png Sera. $ D_ {t-1} ^ \ infty $ indique qu'il existe un terme déterministe au sein du vecteur républicain (ou contraignant le vecteur républicain). $ \ eta $ est l'estimation pertinente. Pour passer un terme déterministe dans le vecteur républicain, utilisez l'argument exog_coint. Dans deux cas particuliers, termes constants et tendances linéaires, il existe un moyen plus simple que d'utiliser ces termes. Vous pouvez passer chacun des "ci" et "li" à l'argument déterministe. Par conséquent, pour le terme constant dans le vecteur républicain, passez "ci" pour l'argument déterministe ou np.ones (len (data)) à exog_coint. Dans ce cas, $ D_ {t-1} ^ \ infty = 1 $ pour tout $ t $.

Il est également possible d'utiliser des termes déterministes en dehors du vecteur républicain. Celles-ci sont définies dans $ D_t $ dans l'équation ci-dessus, avec les estimations pour la matrice $ C $. Ces termes sont spécifiés en les passant à l'argument exog. Pour les termes constants et / ou les tendances linéaires, l'argument déterministe peut être utilisé à la place. Passez "co" pour les termes constants et "lo" pour les tendances linéaires. "o" représente l'extérieur. Le tableau suivant présente les cinq cas considérés dans [2]. La dernière colonne montre la chaîne à passer à l'argument déterministe de chacun de ces cas.

--Paramètres

endog array-like(nobs_tot x neqs) Variable de réponse endogène bidimensionnelle.

exog: ndarray (nobs_tot x neqs) ou Aucun Un terme déterministe hors du vecteur républicain.

exog_coint: ndarray (nobs_tot x neqs) ou Aucun Un terme déterministe dans le vecteur républicain.

date-type datetime, facultatif. Voir statsmodels.tsa.base.tsa_model.TimeSeriesModel pour plus d'informations.

freqstr, facultatif Voir statsmodels.tsa.base.tsa_model.TimeSeriesModel pour plus d'informations.

chaîne manquante, option, Voir statsmodels.base.model.Model pour plus d'informations.

k_ar_diff int L'ordre de la différence dans le modèle. Égal à kar-1 dans l'équation ci-dessus.

coint_rank int Le rang républicain est égal au rang Π de la matrice et au nombre de colonnes de α et β.

deterministic str {"nc"、 "co"、 "ci"、 "lo"、 "li"} "nc" -aucun terme déterministe "co" -constants hors du vecteur républicain "ci" -constants dans le vecteur républicain "lo" -Tendance linéaire en dehors du vecteur républicain "li" -Tendance linéaire dans le vecteur républicain

Peut être combiné (par exemple "cili" ou "colo" pour des tendances linéaires à termes constants). Si vous utilisez un terme constant, vous devez choisir de le limiter à une relation républicaine (c'est-à-dire «ci») ou de le laisser illimité (c'est-à-dire «co»). N'utilisez pas à la fois «ci» et «co». Il en va de même pour "li" et "lo" lors de l'utilisation de termes linéaires. Voir la note pour plus de détails.

saisons int, par défaut: 0 Le nombre de périodes du cycle saisonnier. 0 signifie qu'il n'y a pas de saison.

first_season int, par défaut: 0 La saison de la première observation.

--Paramètres

steps int Période de prévision.

alpha float, 0 < alpha < 1 or None Si aucun, seule la prédiction ponctuelle est calculée. Dans le cas de float, l'intervalle de confiance est également calculé. Dans ce cas, l'argument représente le niveau de confiance.

exog ndarray (steps x self.exog.shape[1]) Si self.exog n'est pas None, transmettez des informations sur les futures valeurs d'exog à partir de ce paramètre. Le ndarray peut être plus grand dans la première dimension. Dans ce cas, seule la première ligne d'étape est prise en compte.

forecast - ndarray (steps x neqs) or three ndarrays

Pour la prédiction ponctuelle: chaque ligne du ndarray renvoyé représente une prédiction de la variable neqs pour une période donnée. La première ligne (index [0]) est la prédiction pour la période suivante et la dernière ligne (index [étapes-1]) est la prédiction des étapes-périodes-à venir.

References

[1] Lütkepohl, H. 2005. New Introduction to Multiple Time Series Analysis. Springer.

[2] Johansen, S. 1995. Likelihood-Based Inference in Cointegrated * *Vector Autoregressive Models. Oxford University Press.

[3] Johansen, S. and K Jusellus 1990. Likelihood-Based Estimation and Inference on Cointegration with application to the demand for money. 0xford Bullretin of Economics and Statisitics,52,169-210

Avant d'analyser les données réelles

Générer des données artificielles et utiliser ces données pour comprendre les caractéristiques du modèle avant d'analyser les données réelles est l'arme la plus efficace.

Donc, générons deux séries temporelles non stationnaires, $ x $ et $ y $, et analysons-les avec VECM. À ce moment-là, déterministe = 'nc' et K_ar_diff = 0. Il s'agit d'une tentative de réduire les variables du modèle à seulement $ \ alpha $ et $ \ beta $. À ce moment-là, $ x $ et $ y $ sont simplement régressés pour obtenir la version bêta, et l'erreur est utilisée pour estimer l'alpha. Le nombre de données est $ n = 10000 $. Assez pour converger.

n=10000
y=pd.DataFrame(np.random.normal(0,1,n).reshape([n,1]),columns=['y'])
x=pd.DataFrame(np.random.normal(0,1,n).reshape([n,1]),columns=['x'])
data=pd.concat([y.cumsum(),x.cumsum()],axis=1)
data.columns=['y','x']
model=VECM(data,k_ar_diff=0,deterministic='na')
res=model.fit()
print(res.summary())

xx=sm.add_constant(x.cumsum())
res= sm.OLS(y.cumsum(), xx).fit()
print(res.summary())
 Loading coefficients (alpha) for equation y                  
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1           -0.0005      0.000     -1.671      0.095      -0.001    8.89e-05
                 Loading coefficients (alpha) for equation x                  
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1        -3.723e-05      0.000     -0.121      0.904      -0.001       0.001
          Cointegration relations for loading-coefficients-column 1           
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
beta.1         1.0000          0          0      0.000       1.000       1.000
beta.2        -0.2731      0.382     -0.716      0.474      -1.021       0.475
==============================================================================
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.126
Model:                            OLS   Adj. R-squared:                  0.126
Method:                 Least Squares   F-statistic:                     1443.
Date:                Sun, 01 Mar 2020   Prob (F-statistic):          4.92e-295
Time:                        02:27:15   Log-Likelihood:                -43187.
No. Observations:               10000   AIC:                         8.638e+04
Df Residuals:                    9998   BIC:                         8.639e+04
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const        -29.8591      0.210   -142.406      0.000     -30.270     -29.448
x             -0.1572      0.004    -37.984      0.000      -0.165      -0.149
==============================================================================
Omnibus:                      414.693   Durbin-Watson:                   0.003
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              401.515
Skew:                          -0.447   Prob(JB):                     6.49e-88
Kurtosis:                       2.593   Cond. No.                         58.5
==============================================================================
u=res.resid
#x1=pd.concat([x,u],axis=1)
#x1=sm.add_constant(x1)

res= sm.OLS(y, u).fit()
print(res.summary())
 OLS Regression Results                                
=======================================================================================
Dep. Variable:                      y   R-squared (uncentered):                   0.000
Model:                            OLS   Adj. R-squared (uncentered):             -0.000
Method:                 Least Squares   F-statistic:                             0.2729
Date:                Sun, 01 Mar 2020   Prob (F-statistic):                       0.601
Time:                        02:57:55   Log-Likelihood:                         -14187.
No. Observations:               10000   AIC:                                  2.838e+04
Df Residuals:                    9999   BIC:                                  2.838e+04
Df Model:                           1                                                  
Covariance Type:            nonrobust                                                  
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
x1             0.0001      0.000      0.522      0.601      -0.000       0.001
==============================================================================
Omnibus:                        0.070   Durbin-Watson:                   2.013
Prob(Omnibus):                  0.966   Jarque-Bera (JB):                0.053
Skew:                          -0.002   Prob(JB):                        0.974
Kurtosis:                       3.011   Cond. No.                         1.00
==============================================================================

En déplaçant cela encore et encore, vous devriez être en mesure de voir la signification et l'utilisation du modèle. N'oubliez pas que les données sont une marche aléatoire.

Exemple: données macro américaines

année Période --1959q1 --2009q3 trimestre: trimestre - 1-4 realgdp: Production intérieure totale réelle - (Bil. de 2005 USD enchaînés, taux annuel désaisonnalisé) realcons: Consommation personnelle réelle - (Bil. de 2005 USD enchaînés, taux annuel désaisonnalisé) realinv: Investissement intérieur privé total réel (Bil. d'USD enchaîné de 2005, taux annuel désaisonnalisé)

from statsmodels.tsa.api import VECM
import statsmodels.api as sm
from statsmodels.tsa.base.datetools import dates_from_str
import pandas as pd
import numpy as np

mdata = sm.datasets.macrodata.load_pandas().data 
dates = mdata[['year', 'quarter']].astype(int).astype(str) 
quarterly = dates["year"] + "Q" + dates["quarter"] 

quarterly = dates_from_str(quarterly) 
mdata = mdata[['realgdp','realcons','realinv']] 
mdata.index = pd.DatetimeIndex(quarterly) 
data = np.log(mdata).diff().dropna() 

model = VECM(data)

results = model.fit() 
print(results.summary())
Det. terms outside the coint. relation & lagged endog. parameters for equation realgdp
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
L1.realgdp     -0.0101      0.147     -0.068      0.945      -0.298       0.278
L1.realcons    -0.4094      0.133     -3.081      0.002      -0.670      -0.149
L1.realinv      0.0039      0.020      0.197      0.843      -0.035       0.043
Det. terms outside the coint. relation & lagged endog. parameters for equation realcons
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
L1.realgdp      0.0039      0.140      0.028      0.978      -0.270       0.277
L1.realcons    -0.4813      0.126     -3.818      0.000      -0.728      -0.234
L1.realinv     -0.0083      0.019     -0.443      0.658      -0.045       0.028
Det. terms outside the coint. relation & lagged endog. parameters for equation realinv
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
L1.realgdp      2.3752      0.825      2.879      0.004       0.758       3.992
L1.realcons    -1.4317      0.745     -1.922      0.055      -2.892       0.028
L1.realinv     -0.3738      0.110     -3.383      0.001      -0.590      -0.157
              Loading coefficients (alpha) for equation realgdp               
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1           -1.2524      0.141     -8.875      0.000      -1.529      -0.976
              Loading coefficients (alpha) for equation realcons              
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.0673      0.134      0.503      0.615      -0.195       0.330
              Loading coefficients (alpha) for equation realinv               
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1           -7.3749      0.791     -9.322      0.000      -8.926      -5.824
          Cointegration relations for loading-coefficients-column 1           
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
beta.1         1.0000          0          0      0.000       1.000       1.000
beta.2        -0.9514      0.037    -25.704      0.000      -1.024      -0.879
beta.3        -0.0204      0.010     -1.967      0.049      -0.041   -6.88e-05
==============================================================================

Analyse du taux de change

import matplotlib.pyplot as plt
start="1949/5/16"
fx = web.DataReader("DEXJPUS","fred",start)# usdjpy
rf = web.DataReader("USD12MD156N", 'fred',start)
rd = web.DataReader("JPY12MD156N", 'fred',start)
data=pd.concat([fx,rf,rd],axis=1).ffill().dropna()
data.tail()
	DEXJPUS	USD12MD156N	JPY12MD156N
DATE			
2019-12-02	109.09	1.96250	0.10283
2019-12-03	108.53	1.93663	0.10367
2019-12-04	108.87	1.91700	0.10567
2019-12-05	108.69	1.92263	0.09833
2019-12-06	108.66	1.92313	0.10833
model = VECM(data)

results = model.fit() 
print(results.summary())
Det. terms outside the coint. relation & lagged endog. parameters for equation DEXJPUS
==================================================================================
                     coef    std err          z      P>|z|      [0.025      0.975]
----------------------------------------------------------------------------------
L1.DEXJPUS         0.0179      0.011      1.681      0.093      -0.003       0.039
L1.USD12MD156N     0.2679      0.155      1.729      0.084      -0.036       0.572
L1.JPY12MD156N    -0.1119      0.272     -0.412      0.681      -0.645       0.421
Det. terms outside the coint. relation & lagged endog. parameters for equation USD12MD156N
==================================================================================
                     coef    std err          z      P>|z|      [0.025      0.975]
----------------------------------------------------------------------------------
L1.DEXJPUS         0.0042      0.001      5.762      0.000       0.003       0.006
L1.USD12MD156N     0.0529      0.011      4.931      0.000       0.032       0.074
L1.JPY12MD156N     0.0111      0.019      0.590      0.555      -0.026       0.048
Det. terms outside the coint. relation & lagged endog. parameters for equation JPY12MD156N
==================================================================================
                     coef    std err          z      P>|z|      [0.025      0.975]
----------------------------------------------------------------------------------
L1.DEXJPUS         0.0041      0.000      9.923      0.000       0.003       0.005
L1.USD12MD156N     0.0337      0.006      5.562      0.000       0.022       0.046
L1.JPY12MD156N    -0.0922      0.011     -8.665      0.000      -0.113      -0.071
              Loading coefficients (alpha) for equation DEXJPUS               
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1           -0.0002   7.46e-05     -3.277      0.001      -0.000   -9.82e-05
            Loading coefficients (alpha) for equation USD12MD156N             
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1        -8.487e-06   5.16e-06     -1.645      0.100   -1.86e-05    1.63e-06
            Loading coefficients (alpha) for equation JPY12MD156N             
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1        -1.177e-05   2.92e-06     -4.034      0.000   -1.75e-05   -6.05e-06
          Cointegration relations for loading-coefficients-column 1           
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
beta.1         1.0000          0          0      0.000       1.000       1.000
beta.2       -34.4981      7.117     -4.847      0.000     -48.447     -20.549
beta.3        52.7028     12.677      4.157      0.000      27.857      77.549
==============================================================================

Taux de change, LIBOR 12 mois et prévision de 250 données

from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
results.plot_forecast(250)

image.png

Erreur de prédiction du taux de change

plt.hist(results.resid[:,0])

image.png

Analyse du cours des actions

n225 = web.DataReader("NIKKEI225", 'fred',start)
sp500 = web.DataReader("SP500", 'fred',start)
data=pd.concat([fx,n225,sp500],axis=1).ffill().dropna()
data.tail()
DEXJPUS	NIKKEI225	SP500
DATE			
2019-12-09	108.66	23430.70	3135.96
2019-12-10	108.66	23410.19	3132.52
2019-12-11	108.66	23391.86	3141.63
2019-12-12	108.66	23424.81	3168.57
2019-12-13	108.66	24023.10	3168.80
model = VECM(data)

results = model.fit() 
print(results.summary())
Det. terms outside the coint. relation & lagged endog. parameters for equation DEXJPUS
================================================================================
                   coef    std err          z      P>|z|      [0.025      0.975]
--------------------------------------------------------------------------------
L1.DEXJPUS      -0.0278      0.021     -1.308      0.191      -0.069       0.014
L1.NIKKEI225     0.0001   6.14e-05      2.016      0.044    3.45e-06       0.000
L1.SP500         0.0019      0.001      2.823      0.005       0.001       0.003
Det. terms outside the coint. relation & lagged endog. parameters for equation NIKKEI225
================================================================================
                   coef    std err          z      P>|z|      [0.025      0.975]
--------------------------------------------------------------------------------
L1.DEXJPUS      63.7228      6.161     10.342      0.000      51.647      75.799
L1.NIKKEI225    -0.1888      0.018    -10.592      0.000      -0.224      -0.154
L1.SP500         5.1709      0.200     25.879      0.000       4.779       5.562
Det. terms outside the coint. relation & lagged endog. parameters for equation SP500
================================================================================
                   coef    std err          z      P>|z|      [0.025      0.975]
--------------------------------------------------------------------------------
L1.DEXJPUS      -0.5797      0.631     -0.919      0.358      -1.816       0.656
L1.NIKKEI225     0.0020      0.002      1.097      0.273      -0.002       0.006
L1.SP500        -0.0170      0.020     -0.830      0.406      -0.057       0.023
              Loading coefficients (alpha) for equation DEXJPUS               
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.0003      0.000      1.906      0.057    -8.9e-06       0.001
             Loading coefficients (alpha) for equation NIKKEI225              
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.1447      0.048      3.023      0.003       0.051       0.238
               Loading coefficients (alpha) for equation SP500                
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.0109      0.005      2.231      0.026       0.001       0.021
          Cointegration relations for loading-coefficients-column 1           
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
beta.1         1.0000          0          0      0.000       1.000       1.000
beta.2        -0.0469      0.014     -3.367      0.001      -0.074      -0.020
beta.3         0.3437      0.113      3.050      0.002       0.123       0.564
==============================================================================
register_matplotlib_converters()
results.plot_forecast(250)

image.png

model = VECM(data.iloc[-500:])

results = model.fit() 
print(results.summary())

register_matplotlib_converters()
results.plot_forecast(250)
Det. terms outside the coint. relation & lagged endog. parameters for equation DEXJPUS
================================================================================
                   coef    std err          z      P>|z|      [0.025      0.975]
--------------------------------------------------------------------------------
L1.DEXJPUS       0.0021      0.048      0.043      0.966      -0.092       0.096
L1.NIKKEI225  6.633e-05   8.34e-05      0.795      0.427   -9.72e-05       0.000
L1.SP500        -0.0004      0.001     -0.499      0.618      -0.002       0.001
Det. terms outside the coint. relation & lagged endog. parameters for equation NIKKEI225
================================================================================
                   coef    std err          z      P>|z|      [0.025      0.975]
--------------------------------------------------------------------------------
L1.DEXJPUS      74.0915     21.467      3.451      0.001      32.017     116.166
L1.NIKKEI225    -0.1603      0.037     -4.298      0.000      -0.233      -0.087
L1.SP500         4.7485      0.332     14.311      0.000       4.098       5.399
Det. terms outside the coint. relation & lagged endog. parameters for equation SP500
================================================================================
                   coef    std err          z      P>|z|      [0.025      0.975]
--------------------------------------------------------------------------------
L1.DEXJPUS      -2.4372      3.102     -0.786      0.432      -8.517       3.642
L1.NIKKEI225    -0.0029      0.005     -0.545      0.586      -0.014       0.008
L1.SP500         0.0160      0.048      0.333      0.739      -0.078       0.110
              Loading coefficients (alpha) for equation DEXJPUS               
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.0004      0.002      0.215      0.830      -0.003       0.004
             Loading coefficients (alpha) for equation NIKKEI225              
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            2.4929      0.866      2.880      0.004       0.796       4.190
               Loading coefficients (alpha) for equation SP500                
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ec1            0.1778      0.125      1.421      0.155      -0.067       0.423
          Cointegration relations for loading-coefficients-column 1           
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
beta.1         1.0000          0          0      0.000       1.000       1.000
beta.2        -0.0117      0.003     -4.390      0.000      -0.017      -0.006
beta.3         0.0521      0.021      2.510      0.012       0.011       0.093
==============================================================================

image.png

référence: référence statsmodels error correction model wiki Analyse de la république, de l'ECM et des relations causales dans le modèle VAR

Recommended Posts

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