statsmodelsによるGranger因果検定

VARモデル構築

In [3]:
import statsmodels.api as sm
from statsmodels.tsa.api import VAR
import pandas as pd
In [4]:
df_data = sm.datasets.macrodata.load_pandas().data
In [5]:
df_data.index = pd.date_range('1959', periods=51*4-1, freq='Q')
In [6]:
df_data.head()
Out[6]:
year quarter realgdp realcons realinv realgovt realdpi cpi m1 tbilrate unemp pop infl realint
1959-03-31 1959.0 1.0 2710.349 1707.4 286.898 470.045 1886.9 28.98 139.7 2.82 5.8 177.146 0.00 0.00
1959-06-30 1959.0 2.0 2778.801 1733.7 310.859 481.301 1919.7 29.15 141.7 3.08 5.1 177.830 2.34 0.74
1959-09-30 1959.0 3.0 2775.488 1751.8 289.226 491.260 1916.4 29.35 140.5 3.82 5.3 178.657 2.74 1.09
1959-12-31 1959.0 4.0 2785.204 1753.7 299.356 484.052 1931.3 29.37 140.0 4.33 5.6 179.386 0.27 4.06
1960-03-31 1960.0 1.0 2847.699 1770.5 331.722 462.199 1955.5 29.54 139.6 3.50 5.2 180.007 2.31 1.19
In [7]:
# 対象カラム抽出
y = df_data[['realgdp', 'realcons', 'realinv']]

# 2次階差をとり、定常過程にする
y_diff = y.diff().dropna().diff().dropna()

# モデル作成
model_diff = VAR(y_diff)
result_diff = model_diff.fit(maxlags=10, ic='aic')

データにあてはめた結果を用いてグレンジャー因果検定実施

1.最初に1変数とその他の変数群との関係性を確認

In [9]:
from copy import deepcopy
# deepcopy()は、オブジェクトをコピーして別のを作る関数
In [12]:
var_names = ['realgdp', 'realcons', 'realinv']

# 各変数とその他の変数群の因果
for i in range(len(var_names)):
    vs = deepcopy(var_names)
    print(result_diff.test_causality(vs.pop(i), vs, kind='f').summary())
Granger causality F-test. H_0: ['realcons', 'realinv'] do not Granger-cause realgdp. Conclusion: reject H_0 at 5% significance level.
===============================================
Test statistic Critical value p-value     df   
-----------------------------------------------
         3.964          1.625   0.000 (18, 492)
-----------------------------------------------
Granger causality F-test. H_0: ['realgdp', 'realinv'] do not Granger-cause realcons. Conclusion: reject H_0 at 5% significance level.
===============================================
Test statistic Critical value p-value     df   
-----------------------------------------------
         2.395          1.625   0.001 (18, 492)
-----------------------------------------------
Granger causality F-test. H_0: ['realgdp', 'realcons'] do not Granger-cause realinv. Conclusion: reject H_0 at 5% significance level.
===============================================
Test statistic Critical value p-value     df   
-----------------------------------------------
         6.364          1.625   0.000 (18, 492)
-----------------------------------------------

*上では、3つの結果はすべてp値が低いので、帰無仮説は棄却される。すなわち、Granger因果性がある。

2. 各変数とその他の変数(単体)のグレンジャー因果性を確認

In [13]:
var_names = ['realgdp', 'realcons', 'realinv']

# 各変数とその他の変数(単体)の因果
for i in range(len(var_names)):
    vs = deepcopy(var_names)
    tv = vs.pop(i)
    for v in vs:
        print(result_diff.test_causality(tv, v, kind='f').summary())
Granger causality F-test. H_0: realcons does not Granger-cause realgdp. Conclusion: reject H_0 at 5% significance level.
==============================================
Test statistic Critical value p-value    df   
----------------------------------------------
         6.306          1.899   0.000 (9, 492)
----------------------------------------------
Granger causality F-test. H_0: realinv does not Granger-cause realgdp. Conclusion: fail to reject H_0 at 5% significance level.
==============================================
Test statistic Critical value p-value    df   
----------------------------------------------
         1.026          1.899   0.418 (9, 492)
----------------------------------------------
Granger causality F-test. H_0: realgdp does not Granger-cause realcons. Conclusion: reject H_0 at 5% significance level.
==============================================
Test statistic Critical value p-value    df   
----------------------------------------------
         3.985          1.899   0.000 (9, 492)
----------------------------------------------
Granger causality F-test. H_0: realinv does not Granger-cause realcons. Conclusion: reject H_0 at 5% significance level.
==============================================
Test statistic Critical value p-value    df   
----------------------------------------------
         3.085          1.899   0.001 (9, 492)
----------------------------------------------
Granger causality F-test. H_0: realgdp does not Granger-cause realinv. Conclusion: fail to reject H_0 at 5% significance level.
==============================================
Test statistic Critical value p-value    df   
----------------------------------------------
         1.024          1.899   0.419 (9, 492)
----------------------------------------------
Granger causality F-test. H_0: realcons does not Granger-cause realinv. Conclusion: reject H_0 at 5% significance level.
==============================================
Test statistic Critical value p-value    df   
----------------------------------------------
         4.255          1.899   0.000 (9, 492)
----------------------------------------------
  • realgdp(実質GDP)からrealinv(実質設備投資)、realinvからrealgdpへの「グレンジャー因果性はない」という結果を除き、その他すべてで「グレンジャー因果性がある」という結果となった
In [ ]:
 
In [ ]: