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