Modelos VAR

Resumo

Este tutorial fornece uma abordagem prática para a estimação e análise de modelos VAR (Vetores Autorregressivos), usando dados simulados de PIB e Taxa de Juros. Através das Funções de Resposta ao Impulso (IRF) e da Decomposição da Variância (FEVD), exploramos como choques em uma variável afetam a outra ao longo do tempo. Além disso, abordamos os diagnósticos do modelo, testes de estacionariedade e o cálculo de previsões com gráficos detalhados.

1 Resumo

Neste tutorial, estimamos um modelo VAR com duas variáveis simuladas, PIB e Taxa de Juros. Exploraremos as Funções de Resposta ao Impulso (IRF) para visualizar os efeitos de choques entre as variáveis, e a Decomposição da Variância para identificar o impacto relativo dos choques ao longo do tempo. Incluímos gráficos para ilustrar os resultados.

2 Introdução ao Modelo VAR

O VAR (Vetores Autorregressivos) é uma técnica amplamente utilizada para analisar a dinâmica de séries temporais multivariadas. Ele captura a interdependência entre variáveis, permitindo que cada uma seja prevista com base em suas próprias defasagens e nas defasagens das demais variáveis do sistema. Neste tutorial, usaremos séries simuladas de PIB e Taxa de Juros para estimar um modelo VAR. Exploraremos, em detalhes, como usar Funções de Resposta ao Impulso (IRF) para medir o impacto de choques em uma variável sobre a outra, e a Decomposição da Variância (FEVD) para determinar quanto da variação em uma variável é explicada por choques em outras variáveis.

No contexto deste tutorial, simularemos duas séries temporais: PIB e Taxa de Juros, e ajustaremos um modelo VAR para analisar a relação entre essas variáveis.

3 Preparação do Ambiente

Instalamos e carregamos os pacotes necessários:

# Instalação e carregamento de pacotes necessários

library(vars)
library(ggplot2)
library(forecast)
library(tseries)

4 Gerando e Visualizando os Dados

Geraremos séries temporais simuladas para o PIB e a Taxa de Juros, onde as variáveis terão dependências bidirecionais.

set.seed(123)
n <- 100

# Simulando séries temporais para PIB e Taxa de Juros
pib <- numeric(n)
taxa_juros <- numeric(n)

# Inicializando os valores iniciais
pib[1] <- rnorm(1, mean=0.5, sd=1)
taxa_juros[1] <- rnorm(1, mean=0.3, sd=1)

# Gerando séries com causalidade bidirecional
for (t in 2:n) {
  pib[t] <- 0.4 * taxa_juros[t-1] + rnorm(1, mean=0.5, sd=1)  # PIB depende da Taxa de Juros
  taxa_juros[t] <- 0.3 * pib[t-1] + rnorm(1, mean=0.3, sd=1)  # Taxa de Juros depende do PIB
}

# Convertendo para séries temporais
pib_ts <- ts(pib, start=c(2000, 1), frequency=4)
taxa_juros_ts <- ts(taxa_juros, start=c(2000, 1), frequency=4)

# Visualizando a série de PIB
autoplot(pib_ts) + 
  ggtitle("PIB") + 
  ylab("PIB") + 
  xlab("Ano")

# Visualizando a série de Taxa de Juros
autoplot(taxa_juros_ts) + 
  ggtitle("Taxa de Juros") + 
  ylab("Taxa de Juros") + 
  xlab("Ano")

5 Estacionariedade e Diferenciação

A análise de estacionariedade é essencial ao trabalhar com modelos VAR. Séries não estacionárias podem levar a estimativas incorretas e inferências enganosas. O Teste ADF (Dickey-Fuller Aumentado) e o Teste KPSS são complementares: enquanto o ADF testa a hipótese nula de não estacionariedade (raiz unitária), o KPSS testa a hipótese nula de estacionariedade. Caso as séries não sejam estacionárias, aplicamos a diferenciação para remover tendências e garantir que os dados sejam adequados para o modelo VAR.

# Teste de estacionariedade para a série PIB
adf_test_pib <- adf.test(pib_ts)
print(adf_test_pib)

    Augmented Dickey-Fuller Test

data:  pib_ts
Dickey-Fuller = -3.9622, Lag order = 4, p-value = 0.01386
alternative hypothesis: stationary
# Teste de estacionariedade para a série Taxa de Juros
adf_test_taxa_juros <- adf.test(taxa_juros_ts)
print(adf_test_taxa_juros)

    Augmented Dickey-Fuller Test

data:  taxa_juros_ts
Dickey-Fuller = -4.0462, Lag order = 4, p-value = 0.01
alternative hypothesis: stationary
# Teste KPSS para verificar estacionariedade
kpss_test_pib <- kpss.test(pib_ts)
kpss_test_taxa_juros <- kpss.test(taxa_juros_ts)
print(kpss_test_pib)

    KPSS Test for Level Stationarity

data:  pib_ts
KPSS Level = 0.064479, Truncation lag parameter = 4, p-value = 0.1
print(kpss_test_taxa_juros)

    KPSS Test for Level Stationarity

data:  taxa_juros_ts
KPSS Level = 0.097728, Truncation lag parameter = 4, p-value = 0.1
# Caso não sejam estacionárias, aplicamos a diferenciação
pib_diff <- diff(pib_ts)
taxa_juros_diff <- diff(taxa_juros_ts)

# Verificando novamente a estacionariedade após diferenciação
adf_test_pib_diff <- adf.test(pib_diff)
print(adf_test_pib_diff)

    Augmented Dickey-Fuller Test

data:  pib_diff
Dickey-Fuller = -6.1828, Lag order = 4, p-value = 0.01
alternative hypothesis: stationary
adf_test_taxa_juros_diff <- adf.test(taxa_juros_diff)
print(adf_test_taxa_juros_diff)

    Augmented Dickey-Fuller Test

data:  taxa_juros_diff
Dickey-Fuller = -6.1676, Lag order = 4, p-value = 0.01
alternative hypothesis: stationary
# Se ambas as séries diferenciais são estacionárias, utilizamos para o modelo VAR

6 Definição do Número de Defasagens (Lags)

Antes de realizar o teste de Granger, precisamos determinar o número de defasagens apropriado. Utilizamos critérios de informação, como AIC ou BIC, para encontrar o número ideal de defasagens.

A função VARselect() no R é usada para selecionar o número ideal de defasagens (lags) em um modelo VAR (Vetores Autorregressivos) com base em critérios de informação, como AIC (Akaike Information Criterion), BIC (Bayesian Information Criterion) e HQ (Hannan-Quinn Information Criterion).

A principal função do VARselect() é auxiliar na escolha do número adequado de defasagens (lags) ao construir um modelo VAR. Modelos VAR são utilizados para analisar séries temporais multivariadas, onde cada variável é modelada como uma função linear de seus valores passados e dos valores passados de outras variáveis no sistema.

# Selecionando o número ideal de defasagens
lag_selection <- VARselect(cbind(pib_diff, taxa_juros_diff), lag.max = 10, type = "const")
print(lag_selection$selection)
AIC(n)  HQ(n)  SC(n) FPE(n) 
     6      4      2      6 

Esse código nos dá uma sugestão do número ideal de defasagens para o modelo VAR.

7 Estimando o Modelo VAR

Selecionamos o número ideal de defasagens (lags) com base no critério AIC e ajustamos o modelo VAR.

# Ajustando o modelo VAR com o número de defasagens selecionado (p = 2)
var_model <- VAR(cbind(pib_diff, taxa_juros_diff), p = lag_selection$selection["AIC(n)"])
summary(var_model)

VAR Estimation Results:
========================= 
Endogenous variables: pib_diff, taxa_juros_diff 
Deterministic variables: const 
Sample size: 93 
Log Likelihood: -255.858 
Roots of the characteristic polynomial:
0.8564 0.8564 0.7993 0.7993 0.7826 0.7826 0.7721 0.7721 0.768 0.768 0.7585 0.7585
Call:
VAR(y = cbind(pib_diff, taxa_juros_diff), p = lag_selection$selection["AIC(n)"])


Estimation results for equation pib_diff: 
========================================= 
pib_diff = pib_diff.l1 + taxa_juros_diff.l1 + pib_diff.l2 + taxa_juros_diff.l2 + pib_diff.l3 + taxa_juros_diff.l3 + pib_diff.l4 + taxa_juros_diff.l4 + pib_diff.l5 + taxa_juros_diff.l5 + pib_diff.l6 + taxa_juros_diff.l6 + const 

                   Estimate Std. Error t value Pr(>|t|)    
pib_diff.l1        -0.72462    0.11346  -6.386 1.04e-08 ***
taxa_juros_diff.l1  0.45875    0.09909   4.630 1.40e-05 ***
pib_diff.l2        -0.76491    0.13837  -5.528 3.94e-07 ***
taxa_juros_diff.l2  0.44810    0.13868   3.231 0.001791 ** 
pib_diff.l3        -0.61835    0.15317  -4.037 0.000123 ***
taxa_juros_diff.l3  0.50883    0.15984   3.183 0.002074 ** 
pib_diff.l4        -0.45202    0.15043  -3.005 0.003547 ** 
taxa_juros_diff.l4  0.30078    0.16399   1.834 0.070346 .  
pib_diff.l5        -0.16719    0.13615  -1.228 0.223051    
taxa_juros_diff.l5  0.10721    0.14310   0.749 0.455935    
pib_diff.l6        -0.19019    0.10663  -1.784 0.078270 .  
taxa_juros_diff.l6 -0.02787    0.10181  -0.274 0.784979    
const              -0.02229    0.10270  -0.217 0.828739    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1


Residual standard error: 0.9898 on 80 degrees of freedom
Multiple R-Squared: 0.5719, Adjusted R-squared: 0.5076 
F-statistic: 8.905 on 12 and 80 DF,  p-value: 1.505e-10 


Estimation results for equation taxa_juros_diff: 
================================================ 
taxa_juros_diff = pib_diff.l1 + taxa_juros_diff.l1 + pib_diff.l2 + taxa_juros_diff.l2 + pib_diff.l3 + taxa_juros_diff.l3 + pib_diff.l4 + taxa_juros_diff.l4 + pib_diff.l5 + taxa_juros_diff.l5 + pib_diff.l6 + taxa_juros_diff.l6 + const 

                    Estimate Std. Error t value Pr(>|t|)    
pib_diff.l1         0.401912   0.126529   3.176 0.002119 ** 
taxa_juros_diff.l1 -0.980043   0.110502  -8.869 1.59e-13 ***
pib_diff.l2         0.389881   0.154304   2.527 0.013486 *  
taxa_juros_diff.l2 -0.905365   0.154652  -5.854 1.01e-07 ***
pib_diff.l3         0.399647   0.170809   2.340 0.021792 *  
taxa_juros_diff.l3 -0.728984   0.178246  -4.090 0.000102 ***
pib_diff.l4         0.293053   0.167748   1.747 0.084478 .  
taxa_juros_diff.l4 -0.598606   0.182871  -3.273 0.001571 ** 
pib_diff.l5         0.152062   0.151825   1.002 0.319575    
taxa_juros_diff.l5 -0.400257   0.159575  -2.508 0.014154 *  
pib_diff.l6        -0.009183   0.118909  -0.077 0.938634    
taxa_juros_diff.l6 -0.306621   0.113538  -2.701 0.008445 ** 
const              -0.014540   0.114528  -0.127 0.899293    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1


Residual standard error: 1.104 on 80 degrees of freedom
Multiple R-Squared: 0.6187, Adjusted R-squared: 0.5615 
F-statistic: 10.82 on 12 and 80 DF,  p-value: 2.132e-12 



Covariance matrix of residuals:
                pib_diff taxa_juros_diff
pib_diff          0.9797         -0.2393
taxa_juros_diff  -0.2393          1.2183

Correlation matrix of residuals:
                pib_diff taxa_juros_diff
pib_diff           1.000          -0.219
taxa_juros_diff   -0.219           1.000

8 Diagnóstico do Modelo VAR

Após a estimação do modelo VAR, é essencial verificar a adequação dos resíduos para garantir que o modelo esteja bem ajustado. Usamos vários testes de diagnóstico, como:

  • Teste de Autocorrelação (Ljung-Box): Verifica a presença de autocorrelação nos resíduos, o que indicaria que o modelo não capturou toda a dinâmica temporal das variáveis.
  • Teste de Normalidade: Verifica se os resíduos seguem uma distribuição normal, um pressuposto importante para a inferência estatística em modelos VAR.
  • Teste de Heterocedasticidade (ARCH): Verifica se a variância dos resíduos é constante ao longo do tempo. A heterocedasticidade pode afetar a eficiência dos estimadores.

A interpretação desses testes é fundamental para validar o modelo. Resultados aceitáveis indicam que o modelo VAR é adequado e pode ser usado para análise.

# Verificando a estabilidade do modelo VAR
roots(var_model, modulus = TRUE)
 [1] 0.8564271 0.8564271 0.7993317 0.7993317 0.7826351 0.7826351 0.7720937
 [8] 0.7720937 0.7679722 0.7679722 0.7584936 0.7584936
# Se todos os valores retornados por roots() estiverem dentro do círculo unitário (módulos menores que 1), o modelo VAR é considerado estável.


# Diagnóstico de resíduos do modelo VAR
serial_test <- serial.test(var_model, lags.pt = 10, type = "PT.asymptotic")
print(serial_test)

    Portmanteau Test (asymptotic)

data:  Residuals of VAR object var_model
Chi-squared = 22.13, df = 16, p-value = 0.139
$serial

    Portmanteau Test (asymptotic)

data:  Residuals of VAR object var_model
Chi-squared = 22.13, df = 16, p-value = 0.139
# Verificando resíduos
plot(resid(var_model))

# Obter os resíduos do modelo VAR
residuals_var <- resid(var_model)

# Calculando os resíduos padronizados
residuals_std_pib <- residuals_var[, "pib_diff"] / sd(residuals_var[, "pib_diff"])  # Para PIB
residuals_std_taxa <- residuals_var[, "taxa_juros_diff"] / sd(residuals_var[, "taxa_juros_diff"])  # Para Taxa de Juros

# Criando um data frame para plotar os resíduos padronizados
residuals_std_df <- data.frame(
  Period = time(residuals_var),  # Períodos
  PIB_Std_Res = residuals_std_pib,  # Resíduos padronizados para PIB
  Taxa_Std_Res = residuals_std_taxa  # Resíduos padronizados para Taxa de Juros
)

# Plotando os resíduos padronizados para PIB
library(ggplot2)
ggplot(residuals_std_df, aes(x = Period)) +
  geom_line(aes(y = PIB_Std_Res, color = "Resíduos Padronizados PIB")) +
  labs(title = "Resíduos Padronizados - PIB", y = "Resíduos Padronizados", x = "Período") +
  theme_minimal()

# Plotando os resíduos padronizados para Taxa de Juros
ggplot(residuals_std_df, aes(x = Period)) +
  geom_line(aes(y = Taxa_Std_Res, color = "Resíduos Padronizados Taxa de Juros")) +
  labs(title = "Resíduos Padronizados - Taxa de Juros", y = "Resíduos Padronizados", x = "Período") +
  theme_minimal()

# Teste de Ljung-Box (autocorrelação dos resíduos)
ljung_box_test <- Box.test(resid(var_model)[,1], type = "Ljung-Box")
print(ljung_box_test)

    Box-Ljung test

data:  resid(var_model)[, 1]
X-squared = 0.0047359, df = 1, p-value = 0.9451
# Teste de normalidade dos resíduos
normality_test <- normality.test(var_model)
print(normality_test)
$JB

    JB-Test (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 3.8056, df = 4, p-value = 0.433


$Skewness

    Skewness only (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 2.5249, df = 2, p-value = 0.283


$Kurtosis

    Kurtosis only (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 1.2807, df = 2, p-value = 0.5271
$jb.mul
$jb.mul$JB

    JB-Test (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 3.8056, df = 4, p-value = 0.433


$jb.mul$Skewness

    Skewness only (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 2.5249, df = 2, p-value = 0.283


$jb.mul$Kurtosis

    Kurtosis only (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 1.2807, df = 2, p-value = 0.5271
# Teste de Heterocedasticidade (ARCH Test)
arch_test <- arch.test(var_model)
print(arch_test)

    ARCH (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 47.482, df = 45, p-value = 0.3718
$arch.mul

    ARCH (multivariate)

data:  Residuals of VAR object var_model
Chi-squared = 47.482, df = 45, p-value = 0.3718

9 Funções de Resposta ao Impulso (IRF)

A Função de Resposta ao Impulso (IRF) nos permite analisar o efeito de um choque em uma variável sobre outra ao longo do tempo.

# Função de Resposta ao Impulso para o efeito de um choque no PIB sobre a Taxa de Juros
irf_pib_taxa <- irf(var_model, impulse = "pib_diff", response = "taxa_juros_diff", n.ahead = 10, boot = TRUE)

# Função de Resposta ao Impulso para o efeito de um choque na Taxa de Juros sobre o PIB
irf_taxa_pib <- irf(var_model, impulse = "taxa_juros_diff", response = "pib_diff", n.ahead = 10, boot = TRUE)

# Preparando os dados para o gráfico da resposta ao impulso PIB → Taxa de Juros
irf_pib_taxa_data <- data.frame(
  Period = 1:11,
  Response = irf_pib_taxa$irf[[1]],                 # Resposta ao choque no PIB
  Lower = irf_pib_taxa$Lower[[1]],                  # Limite inferior do intervalo de confiança
  Upper = irf_pib_taxa$Upper[[1]]                   # Limite superior do intervalo de confiança
)

# Preparando os dados para o gráfico da resposta ao impulso Taxa de Juros → PIB
irf_taxa_pib_data <- data.frame(
  Period = 1:11,
  Response = irf_taxa_pib$irf[[1]],                 # Resposta ao choque na Taxa de Juros
  Lower = irf_taxa_pib$Lower[[1]],                  # Limite inferior do intervalo de confiança
  Upper = irf_taxa_pib$Upper[[1]]                   # Limite superior do intervalo de confiança
)
colnames(irf_taxa_pib_data) <- c("Period","Response","Lower","Upper")
colnames(irf_pib_taxa_data) <- c("Period","Response","Lower","Upper")

# Plotando a Função de Resposta ao Impulso PIB → Taxa de Juros
library(ggplot2)
ggplot(irf_pib_taxa_data, aes(x = Period)) +
  geom_line(aes(y = Response, color = "Resposta ao Choque"), size = 1) +
  geom_ribbon(aes(ymin = Lower, ymax = Upper, fill = "Intervalo de Confiança"), alpha = 0.2) +
  labs(title = "Função de Resposta ao Impulso - PIB → Taxa de Juros",
       y = "Resposta",
       x = "Período",
       color = "Série",
       fill = "Confiança") +
  theme_minimal()

# Plotando a Função de Resposta ao Impulso Taxa de Juros → PIB
ggplot(irf_taxa_pib_data, aes(x = Period)) +
  geom_line(aes(y = Response, color = "Resposta ao Choque"), size = 1) +
  geom_ribbon(aes(ymin = Lower, ymax = Upper, fill = "Intervalo de Confiança"), alpha = 0.2) +
  labs(title = "Função de Resposta ao Impulso - Taxa de Juros → PIB",
       y = "Resposta",
       x = "Período",
       color = "Série",
       fill = "Confiança") +
  theme_minimal()

9.1 Interpretação das Funções de Resposta ao Impulso (IRF)

  • O primeiro gráfico mostra como a Taxa de Juros responde a um choque no PIB. Isso nos ajuda a entender a magnitude e o tempo de duração do efeito.

O gráfico da IRF mostra que um choque positivo no PIB provoca um aumento temporário na Taxa de Juros. Esse efeito pode ser observado no aumento da Taxa de Juros logo após o choque.

O impacto inicial é significativo e atinge seu pico nos primeiros 1-2 períodos após o choque, indicando que a economia responde rapidamente ao aumento no PIB.

Contudo, após esse período, o efeito começa a se dissipar gradualmente e se estabiliza após aproximadamente 4-5 períodos. Esse comportamento é consistente com a hipótese de que o banco central pode aumentar as taxas de juros como uma resposta de política monetária ao crescimento econômico, para conter pressões inflacionárias. No entanto, à medida que a economia ajusta, o efeito diminui.

  • O segundo gráfico mostra como o PIB responde a um choque na Taxa de Juros.

O gráfico da IRF para o choque na Taxa de Juros mostra que um aumento na taxa de juros provoca um efeito negativo e temporário no PIB.

Após o choque, o PIB tende a cair inicialmente nos primeiros 1-2 períodos, o que pode ser explicado por uma política monetária mais restritiva. Um aumento nas taxas de juros geralmente encarece os empréstimos, desestimula os investimentos e reduz o consumo, resultando em uma contração econômica.

No entanto, o efeito também se dissipa após cerca de 3-4 períodos, indicando que o impacto negativo de um aumento nas taxas de juros sobre o PIB é relativamente curto e o PIB tende a se recuperar.

As IRFs fornecem uma visão sobre como choques em uma variável impactam as demais no curto e médio prazo. No contexto econômico, um choque positivo no PIB pode levar a um aumento temporário nas taxas de juros, refletindo uma resposta da política monetária para controlar o crescimento econômico. Da mesma forma, um aumento nas taxas de juros pode ter um efeito negativo sobre o PIB, reduzindo o consumo e os investimentos no curto prazo. No entanto, esses efeitos tendem a se dissipar com o tempo, conforme o sistema econômico se ajusta.

10 Decomposição da Variância (FEVD)

A Decomposição da Variância (FEVD) permite identificar quanto da variância do erro de previsão de uma variável é explicada por choques em si mesma ou em outra variável.

# Decomposição da Variância para um horizonte de 10 períodos
fevd_model <- fevd(var_model, n.ahead = 10)

# Convertendo a decomposição da variância em um dataframe para facilitar a plotagem
fevd_pib <- data.frame(Period = 1:10,
                       PIB = fevd_model$pib_diff[, 1],
                       Taxa_de_Juros = fevd_model$pib_diff[, 2])

fevd_juros <- data.frame(Period = 1:10,
                         PIB = fevd_model$taxa_juros_diff[, 1],
                         Taxa_de_Juros = fevd_model$taxa_juros_diff[,2])

# Plotando a decomposição da variância para o PIB
library(ggplot2)
ggplot(fevd_pib, aes(x = Period)) +
  geom_line(aes(y = PIB, color = "Impacto do PIB"), size = 1) +
  geom_line(aes(y = Taxa_de_Juros, color = "Impacto da Taxa de Juros"), size = 1) +
  labs(title = "Decomposição da Variância - PIB",
       y = "Proporção da Variância Explicada",
       x = "Período",
       color = "Série") +
  theme_minimal()

# Plotando a decomposição da variância para a Taxa de Juros
ggplot(fevd_juros, aes(x = Period)) +
  geom_line(aes(y = PIB, color = "Impacto do PIB"), size = 1) +
  geom_line(aes(y = Taxa_de_Juros, color = "Impacto da Taxa de Juros"), size = 1) +
  labs(title = "Decomposição da Variância - Taxa de Juros",
       y = "Proporção da Variância Explicada",
       x = "Período",
       color = "Série") +
  theme_minimal()

10.1 Interpretação da Decomposição da Variância

  • A FEVD mostra quanto da variância dos erros de previsão de uma variável pode ser explicada por choques em si mesma ou em outras variáveis. Nos primeiros períodos, o PIB explica grande parte de sua própria variância, mas ao longo do tempo, as taxas de juros começam a ter um papel mais relevante. Isso revela uma interdependência dinâmica entre as variáveis no longo prazo.
  1. Decomposição da Variância do PIB:

Nos primeiros 3 períodos, a maior parte da variância do erro de previsão do PIB é explicada por choques próprios do PIB. Isso indica que, no curto prazo, o PIB é mais autocontido e seus movimentos são principalmente influenciados por suas próprias dinâmicas.

No entanto, à medida que o horizonte de previsão aumenta, a Taxa de Juros começa a explicar uma parte maior da variância do PIB, sugerindo que há uma interdependência crescente entre as variáveis no médio e longo prazo. Ou seja, choques na Taxa de Juros passam a ter uma influência mais significativa no comportamento do PIB após alguns períodos.

  1. Decomposição da Variância da Taxa de Juros:

A Decomposição da Variância da Taxa de Juros mostra que, inicialmente, seus próprios choques são responsáveis pela maior parte da variância. No curto prazo, a Taxa de Juros é amplamente autocontida e dependente dos seus próprios choques.

No entanto, conforme o horizonte de previsão se amplia, a influência do PIB começa a aumentar, explicando uma parcela maior da variância da Taxa de Juros. Isso sugere que o desempenho econômico (PIB) pode influenciar as decisões de política monetária e, portanto, a Taxa de Juros a longo prazo.

  • Isso nos dá uma visão mais clara de qual variável tem mais impacto sobre a outra no longo prazo.

11 Previsão

Usamos o modelo VAR ajustado para realizar previsões de curto prazo para o PIB e a Taxa de Juros. A precisão das previsões é avaliada através de métricas de erro, como o RMSE (Root Mean Squared Error) e o MAE (Mean Absolute Error). Essas métricas nos ajudam a quantificar o desempenho do modelo de previsão.

Ao comparar os valores previstos com os valores reais, podemos avaliar se o modelo VAR está capturando adequadamente a dinâmica das variáveis ao longo do tempo.

# Previsão para os próximos 10 períodos
forecast_var <- predict(var_model, n.ahead = 10)

# Preparando os dados para visualização com ggplot2
# Extraindo as previsões e os intervalos de confiança
forecast_data <- data.frame(
  Period = time(forecast_var$fcst$pib_diff[, "fcst"]),  # Períodos previstos
  PIB_Forecast = forecast_var$fcst$pib_diff[, "fcst"],  # Previsão do PIB
  PIB_Lower = forecast_var$fcst$pib_diff[, "lower"],    # Limite inferior do intervalo de confiança
  PIB_Upper = forecast_var$fcst$pib_diff[, "upper"],    # Limite superior do intervalo de confiança
  Juros_Forecast = forecast_var$fcst$taxa_juros_diff[, "fcst"],  # Previsão da taxa de juros
  Juros_Lower = forecast_var$fcst$taxa_juros_diff[, "lower"],    # Limite inferior para taxa de juros
  Juros_Upper = forecast_var$fcst$taxa_juros_diff[, "upper"]     # Limite superior para taxa de juros
)

# Plotando a previsão para o PIB
library(ggplot2)
ggplot(forecast_data, aes(x = Period)) +
  geom_line(aes(y = PIB_Forecast, color = "Previsão PIB"), size = 1) +
  geom_ribbon(aes(ymin = PIB_Lower, ymax = PIB_Upper, fill = "Intervalo de Confiança PIB"), alpha = 0.2) +
  labs(title = "Previsão do PIB para os Próximos 10 Períodos",
       y = "Previsão PIB",
       x = "Período",
       color = "Série",
       fill = "Confiança") +
  theme_minimal()

# Plotando a previsão para a Taxa de Juros
ggplot(forecast_data, aes(x = Period)) +
  geom_line(aes(y = Juros_Forecast, color = "Previsão Taxa de Juros"), size = 1) +
  geom_ribbon(aes(ymin = Juros_Lower, ymax = Juros_Upper, fill = "Intervalo de Confiança Juros"), alpha = 0.2) +
  labs(title = "Previsão da Taxa de Juros para os Próximos 10 Períodos",
       y = "Previsão Taxa de Juros",
       x = "Período",
       color = "Série",
       fill = "Confiança") +
  theme_minimal()

# Calculando as métricas de erro
actual <- pib_ts[91:100]  # Valores reais do PIB para o período previsto
forecasted <- forecast_var$fcst$pib_diff[, "fcst"]
rmse <- sqrt(mean((actual - forecasted)^2))
mae <- mean(abs(actual - forecasted))
print(paste("RMSE:", rmse))
[1] "RMSE: 1.32577955324307"
print(paste("MAE:", mae))
[1] "MAE: 1.13367014163207"

12 Considerações finais

Neste tutorial, mostramos como um modelo VAR pode ser aplicado para capturar as dinâmicas de múltiplas séries temporais interdependentes. O uso de Funções de Resposta ao Impulso e Decomposição da Variância permitiu uma análise detalhada dos choques entre as variáveis ao longo do tempo. Contudo, é importante ressaltar que os resultados de um modelo VAR podem ser sensíveis à seleção do número de defasagens, ao tratamento das séries não estacionárias e à escolha das variáveis no sistema. Portanto, é fundamental realizar validações adicionais e análises de robustez para garantir a confiabilidade das inferências. Além disso, o uso de previsões fora da amostra e a avaliação de métricas de erro são essenciais para confirmar a qualidade do modelo ajustado.