旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【Python】KPSS検定で単位根の有無を調べる

以下の書籍を読んでて、単位根の有無を調べるのにKPSS検定を行うと書かれている箇所があります(pp.67)。 このPythonコードが欲しかったのでメモしておきます。 ちなみにKPSS検定の帰無仮説は単位根なし、対立仮説は単位根ありとなります。

時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装

時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装

# ホワイトノイズに対してKPSS検定を行います。帰無仮説は棄却されません

import numpy as np
import statsmodels.api as sm

def create_white_noise(n):
    return np.random.rand(n) - 0.5

if __name__ == '__main__':
    data = create_white_noise(1000)
    stats, p_value, lags, crit = sm.tsa.kpss(data)
    # 0.1が出力される
    print(p_value)
# ランダムウォークに対してKPSS検定を行います。帰無仮説は棄却されます

import numpy as np
import statsmodels.api as sm

def create_random_walk(n):
    w = np.random.rand(n)
    w = np.where(w > 0.5, 1, -1)
    w = w.cumsum()
    return w

if __name__ == '__main__':
    data = create_random_walk(1000)
    stats, p_value, lags, crit = sm.tsa.kpss(data)
    # 大体0.01が出力されます
    print(p_value)
# ランダムウォークの1階差分に対してKPSS検定を行います。帰無仮説は棄却されません

import numpy as np
import statsmodels.api as sm
import pandas as pd

def create_random_walk(n):
    w = np.random.rand(n)
    w = np.where(w > 0.5, 1, -1)
    w = w.cumsum()
    return w

if __name__ == '__main__':
    data = create_random_walk(1000)
    data = pd.Series(data)
    data = data.diff().dropna()
    stats, p_value, lags, crit = sm.tsa.kpss(data)
    # 0.1が出力されます
    print(p_value)