このページについて

このページでは、Rを使って時系列分析する方法を解説します。時系列分析は理論もクソもなく、とにかく計測してみてファクトファインドすること、予測することで刹那的な意思決定の改善が期待されれば、それでよしとします。(そのうち加筆修正します)。

このページの親ページは、Rを使って計量経済分析です。

目次

単位根検定

単位根検定としては、ADF検定とPP検定が有名です。Rでは、どちらの検定も組み込み関数が存在します。

ADF検定

ADF検定とDF検定の二つを説明します。ともにコマンドは、

adf.test {tseries}

もしくは

ADF.test {uroot}

です。ADF.test {uroot}のほうはSUGIYAMA Shunsukeは使ったことがありませんので、adf.test {tseries}の説明をします。

まずDF検定はLag=0を指定すればよいので

adf.test(x,k=0)

などとやります。ADF検定の場合は、

adf.test(x)

とやりLagを指定しないと、サンプルサイズに応じて機械的にLagをRが選択してくれます。もちろん、Lag選択はちゃんとかんがえないといけません。というわけで、少し下で選択基準を記述します。

とりあえず、例としてこんな例を考えて見ましょう。

株価決定式を見つけたい!

とりあえず、

a math image

というモデルを推定することにしましょう。

つかうデータは

です。1970:1-1998:12の月次データです。

ここで、

Y:      Index of Industrial Production (1995av.=100), Mining & Manufacturing
NIKKEI: Nikkei Stock Average (TSE 225 Issues)(Yen)
R:      Long-term Prime Lending Rate
Time:   タイムトレンド項
CPI:    Consumer Price Index (1995 average = 100), all Japan(general

です。

とりあえずデータを、

> read.table("stock.csv",header=T,sep=",")->s
> attach(s)

で読み込ませましょう。

それから、NIKKEIは消費者物価指数CPIで割って実質化しましょう。

> NIKKEI<-NIKKEI/CPI

いよいよ単位根検定をしてみましょう。

まずは金利Rについて。DF検定をするには以下のように入力します。

> adf.test(R,k=0)
       Augmented Dickey-Fuller Test

data:  R 
Dickey-Fuller = -1.725, Lag order = 0, p-value = 0.6928
alternative hypothesis: stationary 

ADF検定をするには、次数を指定するだけOKです。

> adf.test(R,k=1)

        Augmented Dickey-Fuller Test

data:  R 
Dickey-Fuller = -2.0703, Lag order = 1, p-value = 0.5471
alternative hypothesis: stationary 

つまり、"H0:単位根をもつ"は棄却されないので、Rは非定常であることになりました。

尚、Rは"定数項あり、タイムトレンド項ありモデル"を想定しています。Hamilton(1994)[Ch17]でいうと、Case4(同[pp.497])に対応します(分布表は、Hamilton(1994)[pp.763]にあります)。定数項とタイムトレンド項を想定するかどうかは分析者の主観的な判断に依存するので、SUGIYAMA Shunsukeはどんな場合も、どちらも想定すべきと考えます。実際には、「単位根をもってない」、という結論を得やすくするために、どちらも想定しないことがあるようです。

さらに細かいことですが、片側検定か両側検定か、ということも考えないといけません。計量経済では通常、爆発データはありませんから、片側検定で十分と考えられます(というか、単位根をもっていてほしくないと思って単位根検定するわけで、片側検定のほうが甘めのハードルだから、甘くしてしまえ、ということです)。

adf.testのオプションで、対立仮説として、"定常である"と"爆発データである"の二つが選択できるようです。"stationary"を選択すると、普通、時系列分析の現場でよく使う片側検定を想定するということになりますつまり、仮説として、

a math image (Unit Root)
a math image (Stationary)

をおくということです。

他方"explosive"を選択すると、仮説として

a math image (Unit Root)
1 alt="a math image" title= style="vertical-align:middle" /> (Explosive)

を想定するということになります。しかし、こんな想定をする場面なんてあるんですかね?普通はないと思います。

実際に、どのようにして想定する対立仮説を変更するかを記述します。

> adf.test(R,k=1,alternative=c("explosive"))

とやると、想定する対立仮説を変えることができます。デフォルトでは、

> adf.test(R,k=1,alternative=c("stationary"))

の値を返します。

a math image
a math image

という両側検定を想定するオプションはないようです。

といっても、Rが返すp値に影響が変わるだけで、DF検定量そのものは当然変わりません。DF検定量を見て、Hamilton(1994)[pp.763]で臨界値と比較してもよいでしょう。というか、それくらい自分で手足を動かしてもよいと思います。

ADFの次数選択について

Rのadf.testでは、次数を指定しないと勝手にRが次数を決めてくれます。例えば、

> adf.test(R)

        Augmented Dickey-Fuller Test

data:  R 
Dickey-Fuller = -2.1198, Lag order = 7, p-value = 0.5262
alternative hypothesis: stationary 

となり、次数として勝手に7を選んでいます。このRの自動選択基準はきわめていい加減なので、信じてはいけません。どうやら、サンプルサイズがこのくらいなら、ここらへんだろう、といういい加減な基準のようです。詳しくは?adf.testを見てください。

次数選択の方法として、「ファイナルアンサー」はありません。ということは、次数選択は科学的選択ではなく、主観的選択ということです。いくつかの考え方があります。基本戦略は、「OLS残差がiidかを見る」&「AIC,SBIC最小化」です。

一つの戦略を記述します。

  1. 次数をある一定の次数まですべてとってみる(どこまでとるかは分析者の主観による)
  2. OLS推定したときの残差系列がiidになっているかを見る基準として、「Durbin's h alt.の値を見てH0(誤差項は系列相関なし)が5%有意水準で棄却されなかった次数」をすべてピックアップする。(有意水準をどうとるかは分析者の主観による)
  3. その中でSBICもしくはAICが最小のものを選択する。(SBICをみるのかAICを見るのかは分析者の主観による。ただし、どっちでもみても同じ結果になることは多い)。

重要なことは、「こういう戦略にのっとって次数選択しましたよ」と論文に明記することだと思います(まぁ、いくつかの戦略にのっとってみたら、自分によって都合がよい結果が得られたものがあったから、その戦略をあたかも最初からつかった、というようなことはありえますが)。

さて、adf.testではAICを計算してくれないようなので、自分でやらないといけません。

(保留)適切なラグを自動選択してくれるADF検定のプログラムをそのうちつくります.Eviewsを使えば,自動的にSBIC最小化を基準に次数選択をしてくれます.

PP検定

SUGIYAMA ShunsukeはPP検定のRでの実戦経験がないので説明できません。

コマンドは、

PP.test{stats}

です。

その他

関連するコマンドは以下です。

UnitrootTests {fSeries}

関連パッケージは以下です。

{urca}
{uroot}

共和分検定

基本的に、残差系列が定常かどうかを検定すればよいです。しかし、DF, ADF検定を適用する際、分布が若干共和分の場合異なります。つまり、クリティカルバリューが異なります。通常の分布表はHamilton(1994)[pp.763]で、共和分の場合Hamilton(1994)[pp.766]の数値を見ます。

Rでは、Phillips–Ouliaris Cointegration Testが、

po.test {tseries} 

として用意されていますが、SUGIYAMA Shunsukeはこれを説明する知識がありません。adf.testをOLS残差に対して行い、計算された統計量を分布表の臨界値と比較しましょう。

ECM

Error Correction Model(誤差修正モデル)による推定の仕方を説明します。 ECMについては、組み込み関数は存在しないようです。ECMは定式化をどうやるかが命ですから、各自勉強してプログラムを作りましょう。

(保留)ここはそのうち加筆修正します。

時系列モデル

AR, MA, ARMA, ARIMAといった基本モデルから、ARCH型モデル, SVモデルといったボラティリティ変動モデルまで説明します。

簡単なモデル

ARモデル

コマンドは以下などです。

ar {stats}
ar.ols {stats}

ARモデルを使うことは実際にはほとんどないので省略します。

MAモデル

MAモデルを使うことは実際にはほとんどないので省略します。

ARMAモデル

コマンドは以下などです。

arma {tseries}

(保留):適切な次数選択をしてくれうプログラムをそのうち書きます.目安は,(1)AIC最小化,(2)誤差項がiidかどうか,Ljung-BoxのQ統計量を見る.

ARIMAモデル

コマンドは以下などです。

arima0 {stats}
arima {stats}

(保留):適切な次数選択をしてくれうプログラムをそのうち書きます.目安は,(1)AIC最小化,(2)誤差項がiidかどうか,Ljung-BoxのQ統計量を見る,の二つです.TSPでもこれを自動的に次数選択してくれるコマンドはないので,Rでこれをつくったら重宝します,きっと.Eviewsにはそういうお手軽コマンドがあるかもしれまえせんが.

ARCH型モデル

関連コマンドは以下です。

garch {tseries}

簡単なARCHはこれで実行可能ですが、ARCHはいろんなバージョンがあります。ARCHの発展モデルは、

{fseries}

の中にあるみたいです。

GARCH

(保留):そのうち加筆予定

EGARCH

(保留):そのうち加筆予定

GJR

(保留):そのうち加筆予定

SVモデル

(保留):そのうち加筆予定,たしかSVは組み込み関数がないので、自分でプログラミングしないといけない

状態空間モデル(State Space Model)

参考:Econometrics in RのTime Series Regressionが参考になります。

上に挙げたすべての時系列モデルは、状態空間モデルという極めて柔軟で一般的なモデルの特殊モデルでしかありません。

関連パッケージは、

sspir

dse1

です。

Filter

参考:Econometrics in RのTime Series Regressionが参考になります。

カルマンフィルターとカルマンスムージング

ベイズ的に解釈することが可能です。

コマンドとしては、

KalmanLike {stats} 

が、1変量の簡単なケースに対応しているようです。

多変量の一般モデルでは、

sspir

dse1

の二つのパッケージが関連するようです。

ホドリック・プレスコットフィルター

HPFilterはSplineの一種なので、

smooth.spline{stats}

を使えばできるはずです。

バンドパスフィルター

References

書籍

リンク


添付ファイル: filestock.csv 1092件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-27 (日) 23:34:25 (1482d)