Teste de Causalidade de Granger

Resumo

Este tutorial demonstra a aplicação do teste de causalidade de Granger para avaliar se uma variável pode prever outra em séries temporais, cobrindo quatro cenários: causalidade unidirecional, bilateral e independência. Utilizando dados simulados de PIB e Taxa de Juros, são apresentados os passos para definir o número ideal de defasagens, realizar o teste e interpretar os resultados. O método pode ser aplicado a qualquer série temporal econômica, com orientações detalhadas sobre a preparação do ambiente, visualização gráfica e análise das relações de causalidade.

1 Resumo

Neste tutorial, exploraremos o teste de causalidade de Granger, que é uma técnica estatística utilizada para identificar se uma variável pode prever outra. Demonstramos quatro casos de análise: causalidade unidirecional, bilateral e independência entre duas variáveis. Mostramos também como definir o número ideal de defasagens (lags) para o teste.

2 Introdução ao Teste de Causalidade de Granger

O teste de Granger é utilizado para verificar se uma série temporal X causa outra série temporal Y. A hipótese nula do teste é que X não causa Y no sentido de Granger, ou seja, X não ajuda a prever Y além do que Y já prevê por si própria.

  • Causalidade unidirecional: X causa Y, mas Y não causa X.
  • Causalidade bilateral: X e Y causam-se mutuamente.
  • Independência: X e Y não têm efeito causal entre si.

3 Preparação do Ambiente

Vamos começar instalando e carregando os pacotes necessários:

# Instalação de pacotes necessários
# install.packages("vars")

# Carregando os pacotes
library(vars)  # Para realizar o teste de causalidade de Granger
library(tseries)
library(ggplot2)
library(forecast)

4 Carregando os Dados

Para este exemplo, usaremos dados fictícios de duas variáveis econômicas, PIB e Taxa de Juros. No entanto, você pode substituir por qualquer outra série temporal da área econômica de sua escolha.

# Gerando dados simulados com causalidade bidirecional
set.seed(123)
n <- 100

# Simulando séries iniciais com relações entre PIB e Taxa de Juros
pib <- numeric(n)
taxa_juros <- numeric(n)

# Inicializando valores iniciais para ambas as séries
pib[1] <- rnorm(1, mean=0.5, sd=1)
taxa_juros[1] <- rnorm(1, mean=0.3, sd=1)

# Gerando causalidade bidirecional entre PIB e Taxa de Juros
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 Teste de Estacionariedade

Antes de realizar o modelo VAR, é necessário verificar se as séries temporais são estacionárias. Para isso, utilizamos o Teste de Dickey-Fuller Aumentado (ADF). Se as séries não forem estacionárias, podemos aplicar a diferenciação para transformá-las.

# 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
# 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

Explicação: O Teste de Dickey-Fuller Aumentado (ADF) é utilizado para verificar se a série é estacionária. Se o p-valor do teste ADF for menor que 0,05, rejeitamos a hipótese nula de que a série tem uma raiz unitária (não estacionária), ou seja, podemos considerá-la estacionária. Se as séries não forem estacionárias, aplicamos a diferenciação (com a função diff()), que remove tendências e torna a série estacionária.

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.

# Definindo o número de defasagens com base no critério de Akaike (AIC)
VARselect(cbind(pib_diff, taxa_juros_diff), lag.max = 10, type = "const")$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 Realizando o Teste de Causalidade de Granger

Agora, vamos realizar o teste de Granger para quatro cenários: causalidade unidirecional (PIB → Taxa de Juros, e vice-versa), causalidade bilateral e independência.

7.1 Teste de Causalidade Unidirecional

7.1.1 PIB causa Taxa de Juros

# Teste de Granger: PIB → Taxa de Juros
causa_pib_para_juros <- causality(VAR(cbind(pib_diff, taxa_juros_diff), p = 2), cause = "pib_diff")
print(causa_pib_para_juros$Granger)

    Granger causality H0: pib_diff do not Granger-cause taxa_juros_diff

data:  VAR object VAR(cbind(pib_diff, taxa_juros_diff), p = 2)
F-Test = 2.6191, df1 = 2, df2 = 184, p-value = 0.07558

7.1.2 Taxa de Juros causa PIB

# Teste de Granger: Taxa de Juros → PIB
causa_juros_para_pib <- causality(VAR(cbind(pib_diff, taxa_juros_diff), p = 2), cause = "taxa_juros_diff")
print(causa_juros_para_pib$Granger)

    Granger causality H0: taxa_juros_diff do not Granger-cause pib_diff

data:  VAR object VAR(cbind(pib_diff, taxa_juros_diff), p = 2)
F-Test = 7.2925, df1 = 2, df2 = 184, p-value = 0.0008957

7.2 Teste de Causalidade Bilateral

Para verificar a causalidade bilateral, analisamos ambos os testes e verificamos se há evidência de causalidade nas duas direções.

7.3 Teste de Independência

Se o teste não indicar causalidade em nenhuma das direções, isso sugere que PIB e Taxa de Juros são independentes.

8 Interpretação dos Resultados

Os resultados do teste de causalidade de Granger são baseados no p-valor. Se o p-valor for menor que um nível de significância (como 0,05), rejeitamos a hipótese nula e concluímos que há causalidade.

8.1 Causalidade Unidirecional

  • Se PIB → Taxa de Juros tiver um p-valor < 0,05, podemos concluir que PIB causa Taxa de Juros.
  • Se o inverso (Taxa de Juros → PIB) não for significativo, temos uma causalidade unidirecional.

8.2 Causalidade Bilateral

  • Se ambos os testes forem significativos (p-valor < 0,05 em ambas as direções), isso sugere causalidade bilateral.

8.3 Independência

  • Se nenhum dos testes for significativo, podemos concluir que as variáveis são independentes.

9 Considerações finais

Neste tutorial, aplicamos o teste de causalidade de Granger em diferentes cenários utilizando séries temporais simuladas. Exploramos como definir o número de defasagens usando critérios de informação e interpretamos os resultados para inferir a relação causal entre as variáveis econômicas.

9.1 Explicações Adicionais:

  1. VARselect: Determina o número ideal de defasagens para o teste de Granger, baseando-se em critérios de informação.
  2. causality: Realiza o teste de causalidade de Granger, retornando o p-valor para verificar se há evidência de causalidade.
  3. Interpretação dos Resultados: Baseada no p-valor, definimos se há causalidade unidirecional, bilateral ou independência entre as variáveis.

Com essa abordagem, os alunos podem aplicar o teste de causalidade de Granger em dados reais e identificar padrões causais em séries temporais econômicas.