[python][Statistics]単位根検定とは?Pythonでの実装方法と結果の解釈について

modern multistory building with windows and balconies in city FX
Photo by 형길 장 on Pexels.com

単位根検定の基本:なぜ重要なのか

単位根検定は、時系列データが定常か非定常かを判断するための統計的手法である。時系列データの特性を理解するためには、そのデータが定常性を持っているかどうかを知ることが重要で、その理由は以下の通りである:

  1. 予測のため:多くの時系列モデル(ARモデル、MAモデル、ARIMAモデルなど)は、時系列データが定常であることを前提としている。つまり、時系列データの平均と分散が時間と共に一定であるということである。非定常な時系列データにこれらのモデルを適用すると、モデルの予測結果は信頼性を欠く可能性がある。
  2. 回帰分析のため:非定常な時系列データを用いた回帰分析は、誤った結果を導く可能性がある(スペリオシティ(supuriousness)の問題、見せかけの相関)。定常性を持つ時系列データを用いることで、このような問題を避けることができる。

単位根検定は、時系列データが定常性を持つかどうかを確認するための手段であり、具体的にはデータに単位根(unit root)が存在するかどうかを調べる。単位根が存在する場合、データは非定常と見なされる。

Pythonで単位根検定を行う2つの方法

Pythonで単位根検定を行うための代表的な2つの方法には、Augmented Dickey-Fuller (ADF) 検定と Kwiatkowski-Phillips-Schmidt-Shin (KPSS) 検定がある。これらの検定はPythonの”statsmodels”ライブラリに実装されている。

ADF検定、KPSS検定

  1. ADF検定: 帰無仮説は「データに単位根が存在する」、つまり「データは非定常である」になる。したがって、p値が0.05以下であれば帰無仮説を棄却し、「データは定常である」と結論付ける。逆に、p値が0.05より大きい場合は帰無仮説を棄却できず、「データは非定常である可能性がある」と結論付ける。
  2. KPSS検定: 帰無仮説は「データは定常である」になる。したがって、p値が0.05以下であれば帰無仮説を棄却し、「データは非定常である」と結論付ける。逆に、p値が0.05より大きい場合は帰無仮説を棄却できず、「データは定常である可能性がある」と結論付ける。

Pythonを用いた単位根検定の例

時系列データであればなんでもいいので、ここではドル円の始値、高値などのデータを用いてみる。これをダウンロードし、以下のように読み取る。

# import libraries
import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller, kpss, phillips_perron
import matplotlib.pyplot as plt

usdjpy_d = pd.read_csv("/Users/Documents/usdjpy_d.csv")

また、いちいち始値、終値などと計算するのは面倒なので、リストを作っておく。

value_list = {"opening", "high", "low", "closing"}

ADF検定はこちら。

# ADF
for l in value_list:
    result = adfuller(usdjpy_d[l])
    print(l, result[1])

opening 0.947330942662184
high 0.9617977707392715
low 0.9638223345630584
closing 0.9468314096232175

したがって、いずれも帰無仮説は棄却できないので、単位根過程が存在することを示唆する。

KPSS検定はこちら。

# KPSS
kpss(usdjpy_d["opening"])[1]
kpss(usdjpy_d["high"])[1]
kpss(usdjpy_d["low"])[1]
kpss(usdjpy_d["closing"])[1]

# この値はいずれも0.01になる。

こちらの結果からも単位根過程が存在することがわかる。

グラフ化

終値をグラフにしてみる(コードは以下)。

plt.plot(usdjpy_d["date"], usdjpy_d["closing"])

データを定常なものにするためには、差分を考えると良い。

adfuller(np.diff(usdjpy_d["opening"]))

p =  1.9249255653263146e-29

時系列データの差分を取ることで、データからトレンドや季節性などのパターンを除去し、定常性を得ることが可能となる。時系列データが単位根を持つ場合、そのデータは一般的に非定常である。非定常性は平均、分散、自己相関などが時間とともに変動する特性を指す。つまり、時間とともに変動するトレンドや季節性が存在する。これに対して差分を取るとは、連続する2点間の変化量(例えば、時刻\(t\)の値から時刻\(t-1\)の値を引く)を計算することを指す。この操作を行うと、データのトレンドや季節性が除去され、平均や分散が一定になることが多い。つまり、データが定常性を持つようになる。したがって、非定常なデータに差分を取ることで、そのデータは単位根を持たなくなり、定常となる可能性が高い。その結果、単位根検定で非定常と判断されていたデータが、差分を取ることで定常と判断されることがある。ここらへんは偏自己相関について以下の記事も参考に。

関連記事

経済・ファイナンスデータの計量時系列分析
与えられたデータの分布について確認する

関連リンク

statsmodels 0.14.1

コメント

タイトルとURLをコピーしました