Python でグレンジャー因果関係テストを実行する方法


グレンジャー因果関係テストは、ある時系列が別の時系列の予測に役立つかどうかを判断するために使用されます。

この検定では、次の帰無仮説と対立仮説を使用します。

帰無仮説 (H 0 ):時系列x は時系列yをグレンジャーに引き起こさない

対立仮説 ( HA ):時系列xグレンジャーの時系列がyを引き起こす

「グレンジャー原因」という用語は、一定の遅れを持って時系列xの値を知ることが、後の期間の時系列yの値を予測するのに役立つことを意味します。

この検定では、対応するp 値を含む F 検定統計量が生成されます。 p 値が特定の有意水準 (つまり、α = 0.05) を下回っている場合、帰無仮説を棄却し、時系列xグレンジャーが時系列 y を引き起こすと主張する十分な証拠があると結論付けることができます。

statsmodels パッケージのgrangercausalitytests()関数を使用して、Python でグレンジャー因果関係テストを実行できます。

 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: グレンジャー因果関係テストを実行する

次に、 grangercausalitytests ()関数を使用してグレンジャー因果関係テストを実行し、作られた卵の数が将来の鶏の数を予測できるかどうかを確認します。 3 つのオフセットを使用してテストを実行します。

 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: グレンジャー因果関係テストを逆に実行する

検定の帰無仮説は棄却されましたが、実際には、逆の因果関係のケースが発生する可能性があります。つまり、鶏の数によって卵の数が変化する可能性があるのです。

この可能性を排除するには、ニワトリを予測変数として、卵を応答変数として使用して、グレンジャー因果関係検定を逆に実行する必要があります。

 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 で時系列プロットを作成する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です