Como realizar um teste de causalidade granger em python


O teste de causalidade de Granger é usado para determinar se uma série temporal é ou não útil para prever outra.

Este teste usa as seguintes hipóteses nulas e alternativas:

Hipótese nula (H 0 ): a série temporal x não causa a série temporal y para Granger

Hipótese alternativa ( HA ): Série temporal x Série temporal de Granger causa y

O termo “causas de Granger” significa que conhecer o valor da série temporal x com um certo atraso é útil para prever o valor da série temporal y em um período posterior.

Este teste produz uma estatística de teste F com um valor p correspondente. Se o valor p estiver abaixo de um certo nível de significância (ou seja, α = 0,05), então podemos rejeitar a hipótese nula e concluir que temos evidências suficientes para afirmar que a série temporal x Granger causa a série temporal y.

Podemos usar a função grangercausalitytests() do pacote statsmodels para realizar um teste Granger-Causality em Python:

 from statsmodels. tsa . stattools import grangercausalitytests

#perform Granger-Causality test
grangercausalitytests(df[[' column1 ', ' column2 ']], maxlag=[ 3 ])

Observe que maxlag especifica o número de defasagens a serem usadas na primeira série temporal.

O exemplo passo a passo a seguir mostra como usar esta função na prática.

Etapa 1: carregar dados

Para este exemplo, usaremos um conjunto de dados contendo valores para o número de ovos produzidos, bem como o número de galinhas nos Estados Unidos de 1930 a 1983:

 import pandas as pd

#define URL where dataset is located
url = "https://raw.githubusercontent.com/Statorials/Miscellaneous/main/chicken_egg.txt"

#read in dataset as pandas DataFrame
df = pd. read_csv (url, sep=" ")

#view first five rows of DataFrame
df. head ()

	year chicken egg
0 1930 468491 3581
1 1931 449743 3532
2 1932 436815 3327
3 1933 444523 3255
4 1934 433937 3156

Relacionado: Como ler arquivos CSV com Pandas

Etapa 2: realizar o teste de causalidade de Granger

A seguir, usaremos a função grangercausalitytests () para realizar um teste de causalidade de Granger para ver se o número de ovos produzidos é preditivo do número futuro de galinhas. Executaremos o teste usando três deslocamentos:

 from statsmodels. tsa . stattools import grangercausalitytests

#perform Granger-Causality test
grangercausalitytests(df[[' chicken ', ' egg ']], maxlag=[ 3 ])

Granger Causality
number of lags (no zero) 3
ssr based F test: F=5.4050, p=0.0030, df_denom=44, df_num=3
ssr based chi2 test: chi2=18.7946, p=0.0003, df=3
likelihood ratio test: chi2=16.0003, p=0.0011, df=3
parameter F test: F=5.4050, p=0.0030, df_denom=44, df_num=3

A estatística do teste F é 5,405 e o valor p correspondente é 0,0030 .

Como o valor p é inferior a 0,05, podemos rejeitar a hipótese nula do teste e concluir que conhecer o número de ovos é útil para prever o número futuro de galinhas.

Etapa 3: realizar o teste de causalidade Granger ao contrário

Embora tenhamos rejeitado a hipótese nula do teste, é de fato possível que possa ocorrer um caso de causalidade reversa. Em outras palavras, é possível que o número de galinhas provoque uma alteração no número de ovos.

Para descartar essa possibilidade, precisamos realizar o teste de Granger-Causalidade ao contrário, usando galinhas como variável preditora e ovos como variável resposta :

 from statsmodels. tsa . stattools import grangercausalitytests

#perform Granger-Causality test
grangercausalitytests(df[[' egg ', ' chicken ']], maxlag=[ 3 ])

Granger Causality
number of lags (no zero) 3
ssr based F test: F=0.5916, p=0.6238, df_denom=44, df_num=3
ssr based chi2 test: chi2=2.0572, p=0.5606, df=3
likelihood ratio test: chi2=2.0168, p=0.5689, df=3
parameter F test: F=0.5916, p=0.6238, df_denom=44, df_num=3

A estatística do teste F é 0,5916 e o valor p correspondente é 0,6238 .

Como o valor p não é inferior a 0,05, não podemos rejeitar a hipótese nula. Em outras palavras, o número de galinhas não prevê o número futuro de ovos.

Assim, podemos concluir que conhecer o número de ovos é útil para prever o número futuro de galinhas.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns com séries temporais em Python:

Como criar um gráfico de série temporal no Seaborn
Como criar um gráfico de série temporal no Matplotlib

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *