# 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)
Teste de Causalidade de Granger
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:
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)
<- 100
n
# Simulando séries iniciais com relações entre PIB e Taxa de Juros
<- numeric(n)
pib <- numeric(n)
taxa_juros
# Inicializando valores iniciais para ambas as séries
1] <- rnorm(1, mean=0.5, sd=1)
pib[1] <- rnorm(1, mean=0.3, sd=1)
taxa_juros[
# Gerando causalidade bidirecional entre PIB e Taxa de Juros
for (t in 2:n) {
<- 0.4 * taxa_juros[t-1] + rnorm(1, mean=0.5, sd=1) # PIB depende da Taxa de Juros
pib[t] <- 0.3 * pib[t-1] + rnorm(1, mean=0.3, sd=1) # Taxa de Juros depende do PIB
taxa_juros[t]
}
# Convertendo para séries temporais
<- ts(pib, start=c(2000, 1), frequency=4)
pib_ts <- ts(taxa_juros, start=c(2000, 1), frequency=4)
taxa_juros_ts
# 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_ts)
adf_test_pib 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_ts)
adf_test_taxa_juros 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
<- diff(pib_ts)
pib_diff <- diff(taxa_juros_ts)
taxa_juros_diff
# 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
<- causality(VAR(cbind(pib_diff, taxa_juros_diff), p = 2), cause = "pib_diff")
causa_pib_para_juros 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
<- causality(VAR(cbind(pib_diff, taxa_juros_diff), p = 2), cause = "taxa_juros_diff")
causa_juros_para_pib 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:
VARselect
: Determina o número ideal de defasagens para o teste de Granger, baseando-se em critérios de informação.causality
: Realiza o teste de causalidade de Granger, retornando o p-valor para verificar se há evidência de causalidade.- 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.