Modelos Multivariados aplicados a séries temporais (VAR e SVAR)

No post de hoje, vamos abordar os modelos lineares multivariados, apresentando conceitos importantes por meio de simulações e gráficos criados por meio das linguagens R e Python. Nosso objetivo é proporcionar uma compreensão clara e acessível desses modelos, de modo que seja fácil de entender e acompanhar. Nesta parte, apresentamos o modelo VAR e SVAR.

Na seção anterior, consideramos a análise univariada de séries temporais, em que nosso objetivo era, basicamente, entender a dependência dinâmica de uma série X_{t}, isto é, a dependência de X_{t} com os seus valores passados (X_{t-1}, X_{t-2},...).

Pode ser interessante, entretanto, considerar simultaneamente duas ou mais séries. Por exemplo, o nível de ociosidade da economia certamente tem influência sobre a taxa de crescimento dos preços, assim como um aumento da taxa de juros tem relação com a taxa de desemprego. Ademais, pode ser necessário em algumas ocasiões avaliar o quanto um choque em X_{t} afeta Y_{t}.

Essas questões, bastante pertinentes no dia a dia, são tratadas dentro do que chamamos de análise multivariada de séries temporais.

São objetivos básicos da análise multivariada de séries temporais:

- Estudar as relações dinâmicas entre séries diversas;

- Melhorar as previsões sobre uma variável específica.

Seja z_{t} = (z_{1t}, z_{2t}, ..., z_{kt})^{'} um vetor de dimensão k que contém séries temporais observadas em um período de tempo comum. Por exemplo, z_{1t} é o PIB trimestral brasileiro e z_{2t} é a taxa de desemprego também trimestral.

Para obter todo o código do processo de criação dos gráficos abaixo, faça parte do Clube AM, o repositório de códigos da Análise Macro, contendo exercícios semanais.

Acaso, estudemos z_{1t} e z_{2t} conjuntamente poderemos verificar a dependência contemporânea e passada que existe entre essas duas variáveis. Poderemos verificar o quanto um choque no PIB afeta a taxa de desemprego e quanto tempo isso tende a durar.  Analogamente, podemos estar interessados na relação entre a taxa de desemprego e a inflação.

Código
desemprego inflacao
desemprego 1.00000 -0.29277
inflacao -0.29277 1.00000

A correlação entre as variáveis é elevada, mas isso, claro, não é o bastante para identificarmos a natureza da relação entre elas.

Algumas questões devem ser levadas em consideração. Em primeiro lugar, para uma análise econométrica, precisamos definir se as séries são estacionárias. Essa primeira (grande) questão definirá o tipo de análise que faremos entre elas. Vamos supor que elas sejam estacionárias.

Podemos, nesse caso, estimar um Vetor Autoregressivo de primeira ordem, de modo que:

(1)   \begin{align*} Unemployment_{t} = \delta_{1} + \gamma_{11}Unemployment_{t-1} + \gamma_{12}Inflation_{t-1} + \varepsilon_{1t} \\ Inflation_{t} = \delta_{2} + \gamma_{21}Inflation_{t-1} + \gamma_{22}Unemployment_{t-1} + \varepsilon_{2t} \end{align*}

O VAR(1) vai descrever a evolução dinâmica da interação entre a inflação e desemprego. Uma vez estimado esse modelo, poderemos nos perguntar se existe causalidade nessa relação, isto é, se inflação de fato ajuda a prever o desemprego, se o contrário ocorre ou se há uma simultaneidade. Nesse último caso, dizemos que existe uma causalidade bidirecional.

Ademais, esse tipo de análise também irá nos permitir estimar funções de impulso-resposta, onde analisamos a resposta a impulsos em uma das variáveis. Por exemplo, um choque no desemprego tem qual efeito sobre a inflação? E o caso contrário? Uma análise como essa pode ser muito interessante para avaliar a relação que existe entre duas ou mais variáveis, não é mesmo?

Um dos pressupostos, entretanto, do modelo acima é que as variáveis sejam estacionárias, no sentido que discutimos anteriormente.

Isso significa que se essa hipótese for violada, teremos que partir para outro tipo de análise. Discutiremos a existência de cointegração entre duas ou mais variáveis, isto é, para o caso em que lidamos com séries não estacionárias, pode ser o caso de nos perguntarmos se existe uma relação entre de longo-prazo entre elas.

Para o exemplo acima, se as séries não forem estacionárias, como de fato aparentam não ser, as mesmas podem estar relacionadas ao longo do tempo. Se for esse o caso, dizemos que as séries possuem uma tendência comum, o que nos permite avaliar a relação entre elas ao longo do tempo.

Veremos portanto os modelos multivariados estacionários, com ênfase na construção de vetores autorregressivos. Na sequência, tratamos de modelos multivariados não estacionários, com ênfase no conceito de cointegração e na estimação de um vetor de correção de erros.

Modelos multivariados estacionários

Processos autorregressivos de média móvel (ARMA) podem ser facilmente estendidos para o caso multivariado, onde o processo estocástico que gera um vetor de séries temporais é modelado.

O mais comum dentre eles é o vetor autorregressivo (VAR), isto porque pode ser facilmente estimado via mínimos quadrados ordinários ou método bayesiano, as suas propriedades têm sido extensivamente estudadas na literatura e também porque são bastante similares às regressões lineares múltiplas.^[Ver @tsay.]

Um VAR irá descrever a evolução dinâmica de um determinado número de variáveis de acordo com a história comum entre elas. Para ilustrar, considere um vetor autorregressivo de ordem 1, como

(2)   \begin{align*} &Y_{t} = \delta_{1} + \theta_{11} Y_{t-1} + \theta_{12} X_{t-1} + \epsilon_{1t} \\ &X_{t} = \delta_{2} + \theta_{21} Y_{t-1} + \theta_{22} X_{t-1} + \epsilon_{2t} \end{align*}

onde \epsilon_{1t} e \epsilon_{2t} são ruídos brancos independentes das estórias de Y e X, mas que podem estar correlacionados.

Se, por exemplo, \theta_{12} \neq 0, significa dizer que a estória de X ajuda a explicar Y. O sistema acima, a propósito, pode ser representando da seguinte forma, como faz @tsay:

(3)   \begin{equation*} z_{t} = \phi_{0} + \phi_{1} z_{t-1} + \alpha_{t} \end{equation*}

Ou, ainda, como

    \begin{align*} \begin{bmatrix} z_{1t} \\ z_{2t} \end{bmatrix} = \begin{bmatrix} \phi_{10} \\ \phi_{20} \end{bmatrix} + \begin{bmatrix} \phi_{1,11} & \phi_{1,12} \\ \phi_{1,21} & \phi_{1,22} \end{bmatrix} \begin{bmatrix} z_{1, t-1} \\ z_{2, t-1} \end{bmatrix} + \begin{bmatrix} \alpha_{1t} \\ \alpha_{2t} \end{bmatrix} \end{align*}

Esse sistema de ordem 1, a propósito, pode ser generalizado para qualquer ordem p como

    \[z_{t} = \phi_{0} + \sum_{i=1}^{p} \phi_{i} z_{t-i} + \alpha_{t}\]

onde z_{t} para t = 1,...,T é uma vetor M x 1 contendo observações de M séries temporais, \phi_{0} é um vetor M x 1 de interceptos, \phi_{i} é uma matriz M x M de coeficientes e \alpha_{t} é um vetor M x 1 de erros, independentes e identicamente distribuídos, com média zero e covariância igual a \Sigma_{\alpha}.

É conveniente representar o VAR com a utilização do operador defasagem \phi (L) = I_{k} - \phi_{1} L - ... - \phi_{p} L^{p} como

(4)   \begin{equation*} \phi (L) z_{t} = \phi_{0} + \alpha_{t} \end{equation*}

Estabilidade do VAR

Assim como vimos para os modelos univariados, é preciso considerar uma condição de estacionariedade ou, de forma análoga, estabilidade para o vetor autorregressivo.

Podemos verificar isso ao considerar o polinômio característico reverso

(5)   \begin{equation*} det(I_{k} - \sum_{i=1}^{p} \phi_{i} w^{i}) \neq 0 \quad para \quad |w| \leq 1 \end{equation*}

Nesse caso, se a solução para a equação acima tem uma raiz para w = 1, uma ou todas as variáveis do VAR(p) são processos integrados de ordem 1. Nesse caso, o sistema não será estável.

Na prática, podemos ver a estabilidade do VAR calculando os autovalores da matriz de coeficientes. Se o módulo dos autovalores da matriz forem menores do que a unidade, o processo VAR(p) é dito estável.

Estimação

Para ilustrar, vamos considerar um exemplo envolvendo algumas variáveis bastante conhecidas:

(i) inflação mensal medida pelo IPCA;
(ii) expectativas em t para t+1 para a taxa de inflação mensal;
(iii) número índice da produção industrial;
(iv) taxa de câmbio R$/US$;
(v) taxa Selic anualizada;
(vi) taxa de desemprego medida pela PNAD Contínua ajustada para todo o período.

Código

Um ponto importante que devemos nos atentar, para garantir a estabilidade do modelo, é a estacionariedade das séries. O gráfico abaixo deixa isso mais claro.

Código


Acaso o leitor aplique o Teste ADF visto na seção anterior, verá que algumas de nossas séries não são estacionárias. Isso, como vimos, pode ser um problema para a estabilidade do nosso VAR.

Teste de Dickey-Fuller Aumentado em "ipca" 
 -----------------------------------------------
Hipótese Nula: Os dados possuem raiz unitária. Não estacionários.
Nível de Significância = 0.05
Estatística do Teste    = -5.9919
Número de Lags Escolhidos = 0
Valor Crítico 1%     = -3.48
Valor Crítico 5%     = -2.883
Valor Crítico 10%    = -2.578
 => Valor-P = 0.0. Rejeitando a Hipótese Nula.
 => A série é Estacionária.


Teste de Dickey-Fuller Aumentado em "desocupacao" 
 -----------------------------------------------
Hipótese Nula: Os dados possuem raiz unitária. Não estacionários.
Nível de Significância = 0.05
Estatística do Teste    = -1.827
Número de Lags Escolhidos = 13
Valor Crítico 1%     = -3.486
Valor Crítico 5%     = -2.886
Valor Crítico 10%    = -2.58
 => Valor-P = 0.3672. Evidência fraca para rejeitar a Hipótese Nula.
 => A série não é Estacionária.


Teste de Dickey-Fuller Aumentado em "eipca" 
 -----------------------------------------------
Hipótese Nula: Os dados possuem raiz unitária. Não estacionários.
Nível de Significância = 0.05
Estatística do Teste    = -1.706
Número de Lags Escolhidos = 11
Valor Crítico 1%     = -3.485
Valor Crítico 5%     = -2.885
Valor Crítico 10%    = -2.579
 => Valor-P = 0.428. Evidência fraca para rejeitar a Hipótese Nula.
 => A série não é Estacionária.


Teste de Dickey-Fuller Aumentado em "cambio" 
 -----------------------------------------------
Hipótese Nula: Os dados possuem raiz unitária. Não estacionários.
Nível de Significância = 0.05
Estatística do Teste    = -1.2041
Número de Lags Escolhidos = 0
Valor Crítico 1%     = -3.48
Valor Crítico 5%     = -2.883
Valor Crítico 10%    = -2.578
 => Valor-P = 0.6718. Evidência fraca para rejeitar a Hipótese Nula.
 => A série não é Estacionária.


Teste de Dickey-Fuller Aumentado em "selic" 
 -----------------------------------------------
Hipótese Nula: Os dados possuem raiz unitária. Não estacionários.
Nível de Significância = 0.05
Estatística do Teste    = -1.5635
Número de Lags Escolhidos = 9
Valor Crítico 1%     = -3.484
Valor Crítico 5%     = -2.885
Valor Crítico 10%    = -2.579
 => Valor-P = 0.5019. Evidência fraca para rejeitar a Hipótese Nula.
 => A série não é Estacionária.


Teste de Dickey-Fuller Aumentado em "ic_br" 
 -----------------------------------------------
Hipótese Nula: Os dados possuem raiz unitária. Não estacionários.
Nível de Significância = 0.05
Estatística do Teste    = -2.0476
Número de Lags Escolhidos = 8
Valor Crítico 1%     = -3.483
Valor Crítico 5%     = -2.885
Valor Crítico 10%    = -2.579
 => Valor-P = 0.2661. Evidência fraca para rejeitar a Hipótese Nula.
 => A série não é Estacionária.


Teste de Dickey-Fuller Aumentado em "ibc_br_sa" 
 -----------------------------------------------
Hipótese Nula: Os dados possuem raiz unitária. Não estacionários.
Nível de Significância = 0.05
Estatística do Teste    = -2.1514
Número de Lags Escolhidos = 2
Valor Crítico 1%     = -3.481
Valor Crítico 5%     = -2.884
Valor Crítico 10%    = -2.579
 => Valor-P = 0.2243. Evidência fraca para rejeitar a Hipótese Nula.
 => A série não é Estacionária.

Assim, de modo a contornar o problema, vamos simplesmente diferenciar as séries que consideramos não estacionárias. Isso é feito abaixo.

Vejamos agora o resultado visual das séries diferenciadas.

Código

Agora nossos dados estão prontos para o uso.

Estimando o modelo VAR

Para estimar o VAR, podemos utilizar os módulos e funções presentes na biblioteca `statsmodels`, especificamente `statsmodels.tsa.api`.

Determinação da ordem de defasagem

Uma vez de posse dos nossos dados, já devidamente tratados, um problema imediato é determinar a ordem p de defasagem do nosso modelo.

Isso é feito empiricamente pela análise de critérios de informação. Os mais conhecidos são os critérios de Akaike, Hannan-Quinn e Schwarz.

(6)   \begin{align*} AIC(p) &= log det (\Sigma_{u}(p)) + \frac{2}{T} p K^{2} \\ HQ(p) &= log det (\Sigma_{u}(p)) + \frac{2log(log(T))}{T} p K^{2} \\ SC(p) &= log det (\Sigma_{u}(p)) + \frac{log(T)}{T} p K^{2} \end{align*}

onde

(7)   \begin{align*} \Sigma_{u}(p) = T^{-1} \sum_{t=1}^{T} \hat{u_{t}} \hat{u}_{t}' \nonumber \end{align*}

No Python esses critérios estão implementados na função VAR de forma automática, isto é, a função estimará o modelo com a defasagem escolhida de acordo com o critério selecionado no parâmetro ic do método fit do VAR (padrão é aic).

Alternativamente, é possível escolher o número máximo de defasagens no método fit pelo parâmetro maxlags.

De modo a escolher um modelo mais parcimonioso, vamos optar aqui por maxlags=1 (que seria a ordem escolhida pelo critério aic).

Isso porque, digamos que estamos interessados em analisar a trajetória da inflação mensal. Como a mesma apresenta sazonalidade, é importante ressaltar isso em nosso modelo.

Abaixo, podemos ver o modelo estimado

Código
  Summary of Regression Results   
==================================
Model:                         VAR
Method:                        OLS
Date:           Mon, 26, Jun, 2023
Time:                     16:53:32
--------------------------------------------------------------------
No. of Equations:         7.00000    BIC:                   -8.65340
Nobs:                     133.000    HQIC:                  -9.37585
Log likelihood:          -608.651    FPE:                5.17355e-05
AIC:                     -9.87038    Det(Omega_mle):     3.43729e-05
--------------------------------------------------------------------
Results for equation ipca
=================================================================================
                    coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------------
const                  0.268374         0.047179            5.688           0.000
L1.ipca                0.416870         0.080542            5.176           0.000
L1.desocupacao         0.122390         0.088427            1.384           0.166
L1.eipca               0.227317         0.149375            1.522           0.128
L1.cambio             -0.295995         0.161840           -1.829           0.067
L1.selic               0.164515         0.080436            2.045           0.041
L1.ic_br               0.010510         0.003375            3.114           0.002
L1.ibc_br_sa           0.008750         0.014007            0.625           0.532
=================================================================================

Results for equation desocupacao
=================================================================================
                    coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------------
const                 -0.039518         0.036109           -1.094           0.274
L1.ipca                0.102862         0.061644            1.669           0.095
L1.desocupacao         0.640409         0.067678            9.463           0.000
L1.eipca              -0.068007         0.114325           -0.595           0.552
L1.cambio             -0.061473         0.123865           -0.496           0.620
L1.selic              -0.107960         0.061562           -1.754           0.079
L1.ic_br              -0.002144         0.002583           -0.830           0.407
L1.ibc_br_sa          -0.003090         0.010720           -0.288           0.773
=================================================================================

Results for equation eipca
=================================================================================
                    coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------------
const                  0.068732         0.026526            2.591           0.010
L1.ipca               -0.183772         0.045285           -4.058           0.000
L1.desocupacao        -0.028808         0.049718           -0.579           0.562
L1.eipca               0.193463         0.083986            2.304           0.021
L1.cambio             -0.095268         0.090994           -1.047           0.295
L1.selic               0.112698         0.045225            2.492           0.013
L1.ic_br               0.009081         0.001898            4.785           0.000
L1.ibc_br_sa           0.013343         0.007875            1.694           0.090
=================================================================================

Results for equation cambio
=================================================================================
                    coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------------
const                  0.037214         0.027996            1.329           0.184
L1.ipca               -0.026286         0.047794           -0.550           0.582
L1.desocupacao         0.010774         0.052472            0.205           0.837
L1.eipca               0.009699         0.088639            0.109           0.913
L1.cambio             -0.029061         0.096035           -0.303           0.762
L1.selic              -0.013238         0.047730           -0.277           0.782
L1.ic_br               0.000828         0.002003            0.413           0.679
L1.ibc_br_sa          -0.009274         0.008312           -1.116           0.264
=================================================================================

Results for equation selic
=================================================================================
                    coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------------
const                 -0.062831         0.034780           -1.807           0.071
L1.ipca                0.124161         0.059376            2.091           0.037
L1.desocupacao        -0.073999         0.065188           -1.135           0.256
L1.eipca              -0.152312         0.110119           -1.383           0.167
L1.cambio              0.074054         0.119307            0.621           0.535
L1.selic               0.731255         0.059297           12.332           0.000
L1.ic_br               0.005417         0.002488            2.177           0.029
L1.ibc_br_sa           0.010913         0.010326            1.057           0.291
=================================================================================

Results for equation ic_br
=================================================================================
                    coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------------
const                  0.168084         1.291083            0.130           0.896
L1.ipca                2.441565         2.204088            1.108           0.268
L1.desocupacao        -2.326376         2.419852           -0.961           0.336
L1.eipca              -1.733609         4.087731           -0.424           0.671
L1.cambio              8.848053         4.428826            1.998           0.046
L1.selic               0.079725         2.201180            0.036           0.971
L1.ic_br               0.096531         0.092365            1.045           0.296
L1.ibc_br_sa          -0.414301         0.383303           -1.081           0.280
=================================================================================

Results for equation ibc_br_sa
=================================================================================
                    coefficient       std. error           t-stat            prob
---------------------------------------------------------------------------------
const                  0.161448         0.290642            0.555           0.579
L1.ipca               -0.324865         0.496173           -0.655           0.513
L1.desocupacao        -0.469947         0.544745           -0.863           0.388
L1.eipca              -0.163773         0.920209           -0.178           0.859
L1.cambio             -2.368373         0.996995           -2.376           0.018
L1.selic              -0.421427         0.495519           -0.850           0.395
L1.ic_br               0.061381         0.020793            2.952           0.003
L1.ibc_br_sa           0.187524         0.086287            2.173           0.030
=================================================================================

Correlation matrix of residuals
                   ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
ipca           1.000000    -0.058133  0.463691 -0.094922  0.186900  0.174462   0.001540
desocupacao   -0.058133     1.000000 -0.018965  0.020336 -0.075157 -0.038715  -0.047390
eipca          0.463691    -0.018965  1.000000 -0.109849  0.223021  0.125920  -0.030177
cambio        -0.094922     0.020336 -0.109849  1.000000 -0.082877  0.240455  -0.250596
selic          0.186900    -0.075157  0.223021 -0.082877  1.000000  0.034758  -0.021288
ic_br          0.174462    -0.038715  0.125920  0.240455  0.034758  1.000000   0.078735
ibc_br_sa      0.001540    -0.047390 -0.030177 -0.250596 -0.021288  0.078735   1.000000

Diagnóstico

Uma vez estimado o nosso modelo VAR, a próxima etapa é verificar sua estabilidade. Para começar, verificamos se os módulos dos autovalores são menores do que a unidade. Isso é feito com o código abaixo.

Código
array([-6.69544449-0.j        ,  1.63723328+2.90944722j,
        1.63723328-2.90944722j,  2.95552111+0.95598543j,
        2.95552111-0.95598543j,  1.49103399-0.j        ,
        1.23568305-0.j        ])

Garantida essa condição, podemos proceder testes clássicos sobre os resíduos do modelo, como o teste de autocorrelação, normalidade e o de heterocedasticidade. O código abaixo ilustra essa análise.

Código
<statsmodels.tsa.vector_ar.hypothesis_test_results.NormalityTestResults at 0x19429483710>

Observe que temos problema com os resultados dos testes de autocorrelação e normalidade. Isto é, estamos rejeitando a hipótese nula de ausência de autocorrelação e distribuição normal.

A seguir, podemos ver os gráficos dos resíduos de cada uma das equações estimadas através do comando abaixo.

Código

<Figure Size: (640 x 480)>

Por fim, também é importante verificar a estabilidade estrutural do modelo, através da análise do processo de flutuação empírica (EPS, no inglês).

Esse tipo de diagnóstico permite a identificação de mudanças estruturais nas relações analisadas dentro do modelo.

Código
True
Uma vez que tenhamos construído o nosso modelo VAR, ele também pode ser utilizado para gerarmos previsões.

Código
array([[ 8.19105949e+00,  2.10667078e+00,  6.90455056e+00,
        -1.24789698e+00,  1.24351119e+01, -9.51684249e+00,
         2.64841821e+01],
       [ 8.05720564e+00,  3.55388563e-01,  1.62578262e+00,
        -4.70288779e-01,  8.98494351e+00, -1.86447802e+01,
        -2.52310387e+00],
       [ 5.43957988e+00,  1.29473028e-02, -2.53261808e-01,
        -2.52294227e-01,  7.07055926e+00,  1.19957333e+01,
        -7.17959289e+00],
       [ 3.78112952e+00, -2.05834988e-01, -1.46263609e-01,
        -1.17841160e-01,  5.78848963e+00,  1.63219716e+01,
        -4.56252147e+00],
       [ 2.90496753e+00, -4.11025534e-01,  1.02427683e-01,
        -8.31914901e-02,  4.70690026e+00,  1.30170326e+01,
        -2.96027950e+00]])
Código

 

Função Impulso-Resposta

Como vimos no início, a modelagem VAR procura identificar a relação dinâmica existente em um conjunto previamente definido de variáveis. Dentro desse tipo de abordagem, pode ser interessante para o pesquisador verificar o impacto de um choque ou impulso em uma variável sobre as outras.

Esse tipo de exercício é conhecido na literatura como análise de impulso-resposta. A ideia é verificar a resposta esperada na variável y_{i,t+s} da mudança em uma unidade na variável y_{j,t}. Em outras palavras, dá-se um choque em t na variável y_{j} e observa-se o efeito desse choque sobre a variável y_{i} ao longo de t+s. Esses efeitos, ademais, podem ser acumulados.

Código

 

Decomposição de Variância

Outro tópico interessante para ver a relação entre duas ou mais variáveis é a decomposição de variância, isto é, o quanto da variância de uma variável do nosso conjunto é explicado pelas demais variáveis.

No Python, ela é implementada com o método fevd.

Código
FEVD for ipca
         ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
0    1.000000     0.000000  0.000000  0.000000  0.000000  0.000000   0.000000
1    0.903966     0.003700  0.017149  0.009707  0.009465  0.054199   0.001813
2    0.863333     0.004399  0.019086  0.008744  0.021346  0.080053   0.003039
3    0.847148     0.004317  0.018911  0.008760  0.030242  0.087464   0.003158
4    0.839631     0.004243  0.018700  0.008824  0.036110  0.089343   0.003149

FEVD for desocupacao
         ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
0    0.003379     0.996621  0.000000  0.000000  0.000000  0.000000   0.000000
1    0.003782     0.980230  0.002477  0.002142  0.006942  0.004040   0.000388
2    0.006759     0.963558  0.002574  0.004687  0.015625  0.006279   0.000517
3    0.008130     0.953245  0.002422  0.006390  0.022645  0.006656   0.000513
4    0.008306     0.947144  0.002340  0.007166  0.027806  0.006735   0.000504

FEVD for eipca
         ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
0    0.215009     0.000064  0.784926  0.000000  0.000000  0.000000   0.000000
1    0.176290     0.003621  0.639874  0.000623  0.015225  0.149476   0.014892
2    0.179985     0.014351  0.609674  0.010931  0.020832  0.149754   0.014473
3    0.179252     0.021408  0.601714  0.012614  0.022742  0.147801   0.014469
4    0.178433     0.024747  0.598711  0.012726  0.023782  0.147173   0.014428

FEVD for cambio
         ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
0    0.009010     0.000220  0.005542  0.985228  0.000000  0.000000   0.000000
1    0.010102     0.000540  0.005651  0.974787  0.000152  0.000449   0.008319
2    0.010753     0.000674  0.005695  0.972016  0.000274  0.001880   0.008708
3    0.010934     0.000789  0.005693  0.971320  0.000387  0.002138   0.008739
4    0.011011     0.000856  0.005693  0.971021  0.000476  0.002205   0.008737

FEVD for selic
         ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
0    0.034932     0.004147  0.023867  0.002817  0.934237  0.000000   0.000000
1    0.070556     0.013394  0.014578  0.003231  0.868299  0.025365   0.004576
2    0.106640     0.020666  0.011519  0.003967  0.814335  0.038036   0.004837
3    0.131409     0.025174  0.010271  0.004288  0.778130  0.045950   0.004778
4    0.145813     0.028051  0.009742  0.004485  0.755580  0.051573   0.004756

FEVD for ic_br
         ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
0    0.030437     0.000819  0.002609  0.069271  0.000044  0.896820   0.000000
1    0.033382     0.004182  0.003702  0.117010  0.000072  0.834360   0.007292
2    0.035668     0.004922  0.003748  0.117523  0.000326  0.828988   0.008825
3    0.036285     0.005135  0.003848  0.117380  0.000788  0.827728   0.008836
4    0.036462     0.005256  0.003867  0.117282  0.001190  0.827112   0.008831

FEVD for ibc_br_sa
         ipca  desocupacao     eipca    cambio     selic     ic_br  ibc_br_sa
0    0.000002     0.002245  0.001186  0.064615  0.001151  0.023767   0.907033
1    0.000015     0.006799  0.001030  0.089859  0.003434  0.091344   0.807519
2    0.000223     0.010766  0.001406  0.090004  0.005020  0.092061   0.800521
3    0.000460     0.012283  0.001407  0.089831  0.005720  0.091826   0.798472
4    0.000778     0.012831  0.001406  0.089733  0.005980  0.091762   0.797510

Observe que a maior parte da variância da inflação é explicada pela própria variável, seguida pelas expectativas. As demais variáveis do nosso modelo têm pouca ou nenhuma influência na variância da inflação.

Código

 

SVAR

Para terminar, é preciso considerar um último ponto.

O modelo no VAR é o que a literatura chama de forma reduzida. Isto é, não estamos impondo nenhuma restrição ao mesmo, bem como estamos ignorando os efeitos contemporâneos que possam existir entre as variáveis.

Uma consequência natural dessa abordagem é que os parâmetros estimados devem ser vistos com bastante cuidado. Para contornar esse tipo de dificuldade, adota-se o conceito de VAR Estrutural (SVAR, no inglês), onde restrições obtidas da teoria podem ser incorporadas à modelagem, dando assim sentido aos parâmetros estimados.

De modo a ilustrar, considere que o modelo bivariado representado como

(8)   \begin{align*} &Y_{t} = \delta_{10} + \alpha_{11} X_t + \theta_{11} Y_{t-1} + \theta_{12} X_{t-1} + \epsilon_{1t} \\ &X_{t} = \delta_{20} + \alpha_{21} Y_t + \theta_{21} Y_{t-1} + \theta_{22} X_{t-1} + \epsilon_{2t} \end{align*}

Reorganizando as variáveis em t temos que

(9)   \begin{align*} A\mathbf{z}_t = A^{w}_0 + A^{w}_1 \mathbf{z}_{t-1} + B \mathbf{\varepsilon}_t. \end{align*}

Onde

    \begin{align*} A = \begin{bmatrix} 1 & -\alpha_{11} \\ -\alpha_{21} & 1 \end{bmatrix} \quad , A^{w}_0 = \begin{bmatrix} \delta_{10} \\ \delta_{20} \end{bmatrix} \quad \text{ e } \quad A^*_1 = \begin{bmatrix} \theta_{11} & \theta_{12} \\ \theta_{21} & \theta_{22} \end{bmatrix}. \end{align*}

É assumido que os erros estruturais, representados por \varepsilon_t, são um ruído branco e que a matriz de coeficientes A^{w}_1 corresponde a coeficientes estruturais, que irão diferir da forma reduzida representada pelo VAR se A \neq I, onde I é a matriz-identidade.

Nesses termos, temos um VAR estrutural ou SVAR, no inglês.^[Observe que Y_t é correlacionado com \epsilon_{2t}, assim como X_t é correlacionado com \epsilon_{1t}, o que inviabiliza na prática uma interpretação mais teórica dos parâmetros estimados na forma reduzida.]

Observe que se A = I, voltamos para o mundo ilustrado pelo modelo bivariado. Isto é, estamos excluindo os efeitos contemporâneos entre as variáveis.

Se essa hipótese valer, a matriz de covariância será dada por \Sigma = \sigma^2\mathbf{I}. Isto é, os termos de erro não serão correlacionados contemporaneamente.

Naturalmente, não podemos observar a matriz de covariância, apenas estimá-la. Se, desse modo, os valores estimados fora da diagonal da matriz de covariância forem estatisticamente iguais a zero, teremos evidências de que a restrição A = I será válida.

De forma a avançar, contudo, podemos generalizar o SVAR de modo a termos

    \[A\mathbf{z}_t = A^{w}_0 + \sum_{i=1}^p A^{w}_i \mathbf{z}_{t-p} + B\varepsilon_t\]

Multiplicando @svargeral pela inversa de A teremos

(10)   \begin{align*} \mathbf{z}_t = A^{-1}A^{w}_0 + \sum_{i=1}^p A^{-1} A^{w}_i \mathbf{z}_{t-p} + A^{-1}B \varepsilon_t. \end{align*}

Não poderemos estimar esse modelo de forma direta, já que os resíduos \hat{u}_t serão estimativas de A^{-1}B\varepsilon_t, não sendo possível, de forma geral, obter estimativas únicas.

Esse é justamente o problema de identificação dos parâmetros. Um modelo SVAR, nesse contexto, pode ser utilizado para identificar choques e rastrear os mesmos empregando uma análise de impulso-resposta ou a decomposição de variância, vistas anteriormente. Para isso, precisaremos impor alguma restrição às matrizes A e/ou B. Dependendo da restrição imposta, poderemos ter três tipos de modelo SVAR, a saber:

1. A-model: B é setado como I_{K}, onde o valor mínimo de restrições para identificação será K(K-1)/2;

2. B-model: A é setado como I_{K}, onde o valor mínimo de restrições para identificação também será K(K-1)/2;

3. AB-model: as restrições podem ser colocadas em ambas as matrizes, onde o valor mínimo de restrições para identificação será K^2 + K(K-1)/2.

Dependendo do tipo do SVAR, a estimação será similar à estimação de modelos de equações simultâneas com restrições sobre a matriz de variância-covarância dos termos de erro.

Para ilustrar, considere novamente o sistema

(11)   \begin{align*} &Y_{t} = \delta_{10} + \alpha_{11} X_t + \theta_{11} Y_{t-1} + \theta_{12} X_{t-1} + \epsilon_{1t} \\ &X_{t} = \delta_{20} + \alpha_{21} Y_t + \theta_{21} Y_{t-1} + \theta_{22} X_{t-1} + \epsilon_{2t} \nonumber \end{align*}

Como vimos acima, não poderemos estimar esse modelo de forma direta devido a problemas de identificação. Isso porque, a variável Y_t sofre um impacto de X_t de magnitude \alpha_{11} ao mesmo tempo que dado este impacto, X_t sofrerá uma mudança de \alpha_{21} devido a Y_t. Isto impossibilitará a estimação de coeficientes não viesados e/ou consistentes.

Devemos, nesse contexto, ter alguma identificação entre X_t e Y_t, de modo a estimar esse sistema. Se, por exemplo, considerarmos por algum motivo que \alpha_{11} = 0, o problema colocado acima desaparece, permitindo que o sistema seja então estimado via mínimos quadrados ordinários.

Observe que ao fazer \alpha_{11} = 0, na verdade, estamos dizendo que X_t não tem influência contemporânea sobre Y_t, implicando em uma matriz A do tipo triangular

(12)   \begin{align*} \begin{bmatrix} 1 & 0 \\ -\alpha_{21} & 1 \end{bmatrix} \nonumber \end{align*}

Esse método é conhecido como decomposição de Cholesky, sendo um dos mais utilizados para gerar identificação entre variáveis.

Para ilustrar a operacionalização de um SVAR na prática, vamos considerar as variáveis desemprego diferenciado, selic diferenciado e ipca. O código abaixo seleciona as variáveis e estima um VAR(1).

Para ilustrar a operacionalização de um SVAR na prática, vamos considerar as variáveis desemprego diferenciado, selic diferenciado e ipca. O código abaixo seleciona as variáveis e estima um VAR(1).

Código

Podemos ver a matriz de covariância desse modelo na tabela abaixo.

Código
ipca desocupacao selic
ipca 0.151468 -0.005107 0.064903
desocupacao -0.005107 0.099911 -0.030318
selic 0.064903 -0.030318 0.145280

A matriz de covariância mostra que os valores fora da diagonal são diferentes de zero, implicando que A \neq I. Dessa forma, a especificação reduzida pode não ser a mais correta.

Assim, de modo a incluir efeitos contemporâneos, devemos impor uma diferente estrutura para a matriz A. Para isso, vamos supor que o desemprego não é afetado por nenhuma das outras variáveis contemporâneamente, porém, que a inflação é afetada pelo desemprego contemporâneamente.

Finalmente, assumimos que a taxa de juros é determinada somente por defasagens das outras variáveis. Esta última hipótese também pode ser interpretada como o Banco Central não sendo capaz de observar o nível de desemprego e preços no mesmo instante que irá determinar a taxa de juros.

Assim, nossa matriz A deveria ser algo como

(13)   \begin{align*} A = \begin{bmatrix} 1 & 0 & 0\\ \alpha & 1 & 0 \\ \alpha & \alpha & 1 \end{bmatrix}. \nonumber \end{align*}

Abaixo estimamos o modelo estrutural e obtemos os IRFs impondo a restrição acima.

_____________________

Quer saber mais?

Veja nossa trilha de cursos de Finanças Quantitativas

Referências

Enders, W. 2009. Applied Econometric Times Series. Wiley Series em Probability e Statistics. Wiley.
Pfaff, B. 2008. Analysis of integrated and cointegrated time series with R. Second. New York: Springer.
Tsay, R. S. 2014. Multivariate Time Series Analysis. Editora Wiley.
Verbeek, M. 2012. A Guide to Modern Econometrics. Editora Wiley.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise regional da inflação com dados do IBGE usando Python

Os dados desagregados do IPCA fornecem informações detalhadas sobre o comportamento de preços no Brasil a nível de região metropolitana e município, possibilitando ricas análises regionais de dados. Neste artigo mostramos como acessar, processar e analisar estes dados utilizando o Python.

Como coletar dados do Banco Central do Chile usando a API com o Python?

Neste artigo mostramos como pesquisar e como coletar os dados do portal do Banco Central do Chile através do sistema de API usando a linguagem Python. Este processo permite automatizar rotinas de extração de dados, eliminando trabalho manual e repetitivo de atualização de bases de dados econômicos.

Como analisar a relação de risco-retorno de ações?

O que é retorno? O que é o risco? Como exatamente os definimos e como podemos avaliar os ativos com base nessas medidas? Neste artigo, apresentamos uma introdução concisa à análise e gestão de ativos financeiros, destacando a eficácia do Python na coleta, tratamento e análise de dados financeiros. Exploraremos como utilizar a linguagem para avaliar o risco-retorno de ações.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.