Python에서 granger 인과성 테스트를 수행하는 방법


Granger 인과성 테스트는 한 시계열이 다른 시계열을 예측하는 데 유용한지 여부를 확인하는 데 사용됩니다.

이 테스트에서는 다음과 같은 귀무가설과 대립가설을 사용합니다.

귀무 가설(H 0 ): 시계열 x는 시계열 y를 Granger로 유도하지 않습니다.

대립 가설( HA ): 시계열 x Granger의 시계열이 y를 유발합니다.

“Granger 원인”이라는 용어는 특정 시차가 있는 시계열 x 값을 아는 것이 이후 기간의 시계열 y 값을 예측하는 데 유용하다는 것을 의미합니다.

이 검정은 해당 p-값을 사용하여 F-검정 통계량을 생성합니다. p-값이 특정 유의 수준(즉, α = 0.05)보다 낮으면 귀무 가설을 기각하고 시계열 x Granger가 시계열 y를 유발한다고 주장할 수 있는 충분한 증거가 있다고 결론을 내릴 수 있습니다.

statsmodels 패키지의 grangercausalitytests() 함수를 사용하여 Python에서 Granger-Causality 테스트를 수행할 수 있습니다.

 from statsmodels. tsa . stattools import grangercausalitytests

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

maxlag는 첫 번째 시계열에 사용할 지연 수를 지정합니다.

다음 단계별 예에서는 이 기능을 실제로 사용하는 방법을 보여줍니다.

1단계: 데이터 로드

이 예에서는 1930년부터 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

관련 항목: Pandas로 CSV 파일을 읽는 방법

2단계: Granger 인과성 검정 수행

다음으로, grangercausalitytests () 함수를 사용하여 Granger 인과성 테스트를 수행하여 만들어진 계란 수가 미래의 암탉 수를 예측하는지 확인합니다. 세 가지 오프셋을 사용하여 테스트를 실행합니다.

 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

F-검정 통계량은 5.405 이고 해당 p-값은 0.0030 입니다.

p-값이 0.05보다 작기 때문에 검정의 귀무 가설을 기각하고 계란 수를 아는 것이 향후 암탉 수를 예측하는 데 유용하다는 결론을 내릴 수 있습니다.

3단계: 역방향으로 Granger 인과성 검정 수행

검정의 귀무가설을 기각했지만 실제로 역인과관계가 발생할 가능성도 있습니다. 즉, 암탉의 수가 계란의 수에 변화를 가져올 가능성이 있습니다.

이러한 가능성을 배제하려면 닭을 예측 변수로, 계란을 반응 변수 로 사용하여 Granger-Causality 테스트를 역으로 수행해야 합니다.

 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

F-검정 통계량은 0.5916 이고 해당 p-값은 0.6238 입니다.

p-값이 0.05 이상이므로 귀무가설을 기각할 수 없습니다. 즉, 암탉의 수는 미래의 알 수를 예측하지 못합니다.

따라서 우리는 알의 수를 아는 것이 향후 암탉의 수를 예측하는 데 유용하다는 결론을 내릴 수 있습니다.

추가 리소스

다음 튜토리얼에서는 Python에서 시계열을 사용하여 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Seaborn에서 시계열 도표를 만드는 방법
Matplotlib에서 시계열 도표를 만드는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다