ランダムウォークと単位根
ランダムウォークと単位根については、詳しくはこちらの記事を見ていただければと思います。簡単に触れておくと、時系列データを$y_t = ay_{t-1} + \epsilon_t, \epsilon_t \sim iid(0, \sigma^2)$とモデル化できるとした場合、$|a| = 1$であれば、この$y_t$はランダムウォークと呼ばれます。また同時に、この時系列は「単位根を持つ」と言われます。ランダムウォークは非定常過程ですが、単位根を持つ場合、1階の階差を取ると$iid$過程になるため、弱定常過程に変化します。
単位根検定
時系列がランダムウォークであるかどうか (すなわち単位根を持つかどうか) を調べることを単位根検定と言います。単位根検定とは、「$|a| = 1$である」という帰無仮説を置いた帰無仮説検定です。R を使って時系列の単位根検定を行ってみましょう。以下のような時系列 TS を題材にします。
> class(TS) [1] "xts" "zoo" > names(TS) [1] "X" > summary(TS) Index X Min. :****-**-** **:**:** Min. :-77287.0 1st Qu.:****-**-** **:**:** 1st Qu.: -927.0 Median :****-**-** **:**:** Median : -348.0 Mean :****-**-** **:**:** Mean : -355.2 3rd Qu.:****-**-** **:**:** 3rd Qu.: 366.0 Max. :****-**-** **:**:** Max. : 70648.0 > length(TS) [1] 85497 > sqrt(var(TS)) X X 1481.54
TS は xts クラスの時系列データで、X という列1つだけが含まれています。X の分布は summary(TS) の結果として表示されている通りです。件数は85,497件、標準偏差は1481.54となっています。たかだか85,497件しかないのに、$-52.17\sigma\sim47.69\sigma$の範囲に幅広く分布しています。なかなか恐ろしいデータです。
Phillips-Perron 検定
R では、単位根検定の一種である、Phillips-Perron 検定を行う関数として、PP.test() が用意されています。stats パッケージに入っています。実行してみましょう。> PP.test(TS) Phillips-Perron Unit Root Test data: TS Dickey-Fuller = -117.1077999999999974534, Truncation lag parameter = 21, p-value = 0.01
p-value = 0.01 なので、「単位根がある」という帰無仮説は棄却されたことになります。つまり、TS には単位根は無いであろう、という結果です。
Augmented Dickey-Fuller 検定
tseries パッケージには、Augmented Dickey-Fuller 検定を行う adf.test() 関数があります。帰無仮説は「単位根を持つ」で、対立仮説は「$|a| < 1$ (stationary)」か「$|a| > 1$ (explosive)」を選ぶことができます。実行してみましょう。> adf.test(TS) Augmented Dickey-Fuller Test data: TS Dickey-Fuller = 210.4179000000000030468, Lag order = 44, p-value = 0.99 alternative hypothesis: stationary 警告メッセージ: In adf.test(TS) : p-value greater than printed p-value
デフォルトでは対立仮説は stationary になっています。こちらでは、p-value = 0.99 ですので、帰無仮説が棄却されませんでした。対立仮説を explosive に変えてみましょう。
> adf.test(TS, alternative="explosive") Augmented Dickey-Fuller Test data: TS Dickey-Fuller = 210.4179000000000030468, Lag order = 44, p-value = 0.01 alternative hypothesis: explosive 警告メッセージ: In adf.test(TS, alternative = "explosive") : p-value greater than printed p-value
今度は p-value = 0.01 で帰無仮説は棄却されました。併せて考えると、「単位根は無い」ということになり、PP.test() と同じ結論になりました。