時系列分析　その５　ARIMA、単位根過程

# 1. 概要
* [その４](https://qiita.com/asys/items/9b0cff33f97d1fccb42c)に引き続き『経済・ファイナンスデータの計量時系列分析』を元に勉強中。
* 本稿は第５章の単位根過程について

# 2. 単位根過程とは
* 非定常過程$y_t$の差分系列$\Delta y_t=y_t-y_{t-1}$が定常過程であるとき、$y_t$は単位根過程である。
* d階差分をとった系列が定常かつ反転可能なARMA(p,q)過程に従う時、この過程はARIMA(p,d,q)過程と呼ばれる。

# 3. 単位根検定
## DF検定
* Dickey-Fuller(DF)検定は、真のモデルが単位根AR(1)過程であるという帰無仮説を、過程が定常AR(1)過程であるという対立仮説に対して検定する。
* [Case 1] : データがトレンドを持たず、過程の期待値が0の場合。<br>$\quad H_0:y_t=y_{t-1}+u_t, \quad H_1:y_t=\rho y_{t-1}+u_t, |\rho|<1$
* [Case 2] : データがトレンドを持たず、過程の期待値が0でない場合。<br>$\quad H_0:y_t=y_{t-1}+u_t, \quad H_1:y_t=\alpha + \rho y_{t-1}+u_t, |\rho|<1$
* [Case 3] : データがトレンドを持つ場合。<br>$\quad H_0:y_t=\alpha+y_{t-1}+u_t, \quad H_1:y_t=\alpha + \rho y_{t-1}+\delta t+u_t, |\rho|<1$
* 対立仮説のモデルをOLSで推定し、検定統計量$\tau_{\rho}$や$\tau_{t}$の値を算出する。その後対応するDF分布の棄却点と比較し、帰無仮説を棄却するかどうかを判断する。
* [Case 1]を元に検定統計量を示しておく。<br>$\qquad y_t=\rho y_{t-1}+u_t, \quad u_t \sim iid(0,\sigma^2)$<br>のOLS推定量は、<br>$\qquad \hat{\rho}= \rho+\frac{\sum_{t=1}^{T}y_{t-1}u_t}{\sum_{t=1}^{T}y_{t-1}^2}$<br>となり、検定統計量について、<br>$\qquad \tau_{\rho}=\sqrt{T}(\hat{\rho}-\rho)$<br>が$N(0,1-\rho^2)$に収束することが知られている。また、t検定の場合は<br>$\qquad \tau_t=\frac{\hat{\rho}-\rho}{\hat{\sigma}_{\hat{\rho}}}$<br>を用いて検定を行う。

## ADF検定
* DF検定が真のモデルをAR(1)と仮定していたのに対し、真のモデルをAR(p)過程とするのがADF検定である。
* 真の過程を<br>$\qquad y_t=\phi_1 y_{t-1}+\cdots+\phi_p y_{t-p}+\epsilon_t, \quad \epsilon_t \sim iid(0,\sigma^2)$<br>と過程した上で、<br>$\qquad \left\\{\begin{array}{ll}\rho=\phi_1+\cdots+\phi_p\\\ \zeta_k=-(\phi_{k+1}+\cdots+\phi_{p}), \quad k=1,2,\cdots,p-1\end{array}\right.$<br>として、真の過程を<br>$\qquad y_t=\rho y_{t-1}+\zeta_1 \Delta y_{t-1}+\cdots+\zeta_{p-1}\Delta y_{t-p+1}+\epsilon_t$<br>と変形して推定することが多い。

## PP検定
* Phillips-Perron(PP)検定は、ADF検定と比較した時に、$u_t$がiid系列ではなく、自己相関や分散不均一性を持つことを許容した検定である。
* PP検定では、<br>$\qquad u_t=\sum_{s=0}^{\infty}\psi_s\epsilon_{t-s}, \quad \epsilon_t \sim iid(0,\sigma^2)$<br>と定義した上で、<br>$\qquad \left\\{\begin{array}{ll}\gamma_k=\sigma^2\sum_{s=0}^{\infty}\psi_s \psi_{t-s}, \quad k=0,1,2,\cdots\\\ \lambda^2=\sigma^2(\sum_{k=0}^{\infty}\psi\_k)^2\end{array}\right.$<br>を用いて統計量について、<br>$\qquad \tilde{\tau}_{\rho}=\tau\_{\rho}-\frac{1}{2}\frac{T^2\hat{\sigma\_{\hat{\rho}}}^2}{s^2}(\lambda^2-\gamma\_0)$<br>$\qquad \tilde{\tau}\_t=\bigl(\frac{\gamma\_0}{\lambda^2}\bigr)^{\frac{1}{2}}\tau\_t-\frac{1}{2\lambda}(\lambda^2-\gamma\_0)\frac{T\hat{\sigma}\_{\hat{\rho}}}{s}$<br>と修正したものを使用して検定を行う。

# 4. ADF検定の例
## データ
* 前回に引き続きFI2010の板情報のデータを用いる。板の最良気配の値段と数量についてのデータであり、そこから仲値と数量の不均衡度合いを算出したものである。株価推移部分については以下のようなデータである。
![save.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191326/2a10fb21-7342-86b0-b4d3-6d1f91829cac.png)

## 使用するライブラリについて
* ライブラリは[statsmodelsのadfuller](https://www.statsmodels.org/stable/generated/statsmodels.tsa.stattools.adfuller.html) を使用する。

```python
statsmodels.tsa.stattools.adfuller(x, 
                                   maxlag=None, 
                                   regression='c', 
                                   autolag='AIC', 
                                   store=False, 
                                   regresults=False)
```
* 引数
 * x<br>1Dのarray、ADF検定を行うデータ
 * maxlag<br>ADF検定を行う際のラグの最大値。真のモデルをAR(p)とした時のpが取りうる最大値をここで決める。デフォルトは<br>$\qquad 12\bigl(\frac{nobs}{100}\bigr)^\frac{1}{4}$<br>である。なお、$nobs$はADF検定に使われるサンプル数（データの長さ）である。
 * regression<br>回帰モデルの定数とトレンドを指定する。
     * regression = 'c'  &emsp;&emsp;   定数のみ
     * regression = 'ct'  &emsp;&ensp;  定数とトレンド
     * regression = 'ctt' &ensp;&ensp;  定数と１次、２次のトレンド
     * regression = 'nt'  &emsp;&ensp;  定数もトレンドもなし
 * autolag<br>ラグの最大値について。
     * autolag = None<br>maxlagで指定した値が用いられる。
     * autolag = 'AIC' or 'BIC'<br>AICかBICの指定した方の情報量基準を用いてラグが決まる。
     * autolag = 't-stat'<br>maxlagで指定した値から始め、t値が95%基準で有意となるまでラグの値を減らしていく。
 * store<br>Trueの際はADF検定の値に加え、結果のインスタンスを返す。
 * regresults<br>Trueの際は回帰の結果のインスタンスを返す。
* 戻り値
 * adf<br>ADF検定の統計量
 * pvalue<br>検定のP値
 * usedlag<br>モデルに採用されたラグの値
 * nobs<br>回帰に使われたデータの個数
 * critical values<br>検定の1,5,10%点の値
 * icbest<br>autolagがNoneでない場合、情報量の最大値を返す。
 * resstore<br>検定と回帰の結果のインスタンス

## 検定

* ここでは株価の仲値についてADF検定を行う。

```python
sm.tsa.stattools.adfuller(pr['mid_p'], regression='c')
```
> (-0.20323946357862777,
 0.9381343788163952,
 5,
 3893,
 {'1%': -3.4320308674757216,
  '10%': -2.5671653561652974,
  '5%': -2.862282715190103},
 -62621.39909588861)

* このように結果が返ってくる。P値は0.938となっており0.05より大きいため、~~単位根過程ではないという結論になりました。~~ 単位根過程であるという帰無仮説を棄却することはできませんでした。
* しかし、regressionのモデルを変えてやると結果が変化します。最もP値が小さくなったのは以下のケース。

```python
sm.tsa.stattools.adfuller(pr['mid_p'], regression='ct')
```
> (-3.157614947597485,
 0.09318302029273301,
 5,
 3893,
 {'1%': -3.9610973596684973,
  '10%': -3.1277144258146876,
  '5%': -3.411618364778587},
 -62626.67403498432)

* トレンドを加えたモデルを使うとP値は0.05より小さくはなっていないものの、0.093になり、10%点よりは外側に来ています。株価がデータの期間では右肩上がりとなっており、トレンドを含めてやることが奏功した可能性があります。