엑셀_파이썬_기타 코딩

파이썬 그랜져 인과검정

2022. 12. 18. 00:26

경제 변수 간의 선행성, 후행성을 보기위해 보편적으로 그랜져 인과검정을 사용한다. 혹은 단순히 한 변수 데이터의 시계를 조정하여 두 변수간의 상관계수를 본다고도  한다. 

우선 간단하게 테스트만 돌려보는 거에 만족하려 한다.

파이썬 statsmodel 패키지에는 그랜져인과검정 기능이 지원된다. 

입력 데이터의 두 번째 열이 첫 번째 열을 그랜저 인과하는지 테스트한다. 귀무가설은 그랜저 인과하지 않는다는 것이다. p-value가 0.05이하이면 보통 귀무가설은 기각한다.  구체적으로는 그랜저 인과검정을  4개의 방식으로 진행하는데 결과는 큰 차이는 없다. 

더보기
Signature: grangercausalitytests(x, maxlag, addconst=True, verbose=None)
Docstring:
Four tests for granger non causality of 2 time series.

All four tests give similar results. `params_ftest` and `ssr_ftest` are
equivalent based on F test which is identical to lmtest:grangertest in R.

Parameters
----------
x : array_like
    The data for testing whether the time series in the second column Granger
    causes the time series in the first column. Missing values are not
    supported.
maxlag : {int, Iterable[int]}
    If an integer, computes the test for all lags up to maxlag. If an
    iterable, computes the tests only for the lags in maxlag.
addconst : bool
    Include a constant in the model.
verbose : bool
    Print results. Deprecated

    .. deprecated: 0.14

       verbose is deprecated and will be removed after 0.15 is released


Returns
-------
dict
    All test results, dictionary keys are the number of lags. For each
    lag the values are a tuple, with the first element a dictionary with
    test statistic, pvalues, degrees of freedom, the second element are
    the OLS estimation results for the restricted model, the unrestricted
    model and the restriction (contrast) matrix for the parameter f_test.

Notes
-----    
The Null hypothesis for grangercausalitytests is that the time series in
the second column, x2, does NOT Granger cause the time series in the first
column, x1. Grange causality means that past values of x2 have a
statistically significant effect on the current value of x1, taking past
values of x1 into account as regressors. We reject the null hypothesis
that x2 does not Granger cause x1 if the pvalues are below a desired size
of the test.

The null hypothesis for all four test is that the coefficients
corresponding to past values of the second time series are zero.

`params_ftest`, `ssr_ftest` are based on F distribution

`ssr_chi2test`, `lrtest` are based on chi-square distribution


Examples
--------
>>> import statsmodels.api as sm
>>> from statsmodels.tsa.stattools import grangercausalitytests
>>> import numpy as np
>>> data = sm.datasets.macrodata.load_pandas()
>>> data = data.data[["realgdp", "realcons"]].pct_change().dropna()

All lags up to 4
>>> gc_res = grangercausalitytests(data, 4)

Only lag 4
>>> gc_res = grangercausalitytests(data, [4])    

그랜져 인과검정을 위해 분석 대상 시계열 데이터가 stationary한지 확인을 보통 한다. 확인 방법으로 ADF 테스트나 KPSS 테스트를 일반적으로 사용한다. Stationary하지 않으면 보통 차분을 해주고 다시 확인해보는 식으로 진행한다. 

구글 코랩에 준비한 엑셀 데이터를 업로드하고 테스트를 했다. 1열에는 S&P500 Foward EPS- UST 10Y yield를 변수로 넣었고, 2열에는 ISM Neworder 값을 넣었다. (월단위) 

결과물 코드를 어떻게 블로그에 출력할 수 있는지 확인하고 붙여넣어 보려한다.