失業率データ †実際の時系列データの例として、完全失業率(季節調整前)のデータをあげてみましょう。 これは月次データです。小さなデコボコには相当な季節変動が含まれています。完全失業率は年末に最低になり、それから2〜3月に急伸し、4月に就職者が出てがくんと下がるという季節パターンを持つからです。このグラフの大きなうねりの底はバブル景気の頂点だった1990年前後、山はは平成不況のどん底だった2002〜2003年です。 定常性とランダムウォーク †「サイコロをn回振って、出た目をメモする」時系列を想像してください。当然平均は3.5ですよね。ときどき1が連続したり6が連続したりするでしょう。でも、たまたま6が3回連続で出た後でも、次のサイコロの目は期待値3.5のままです。ある値の周りをちょっとだけ外しながらも離れないのが定常性のイメージです。定常性の厳密な定義はちゃんとした計量経済学の教科書を読んでください。 さて、それでは次の時系列をイメージしてください。 ランダムウォークと呼ばれるパターンの時系列です。一見すると、初期値の周りをぐるんぐるんする時系列に見えます。ところが、じつはこの時系列、どんどん拡散してしまうのです。例えばあるとき、撹乱項εがものすごく大きなプラスの値を取ったとします。そうしたら異常に大きいは異常に大きなをもたらし、同様にそのあと全ての観測値に、将棋倒しに影響してしまうのです。時間を追うごとに、期待値の分布は薄く広く広がっていきます。ランダムウォークは代表的な非定常時系列です。 「前の値+撹乱項」以外に「前の値+定数+撹乱項」や「前の値+トレンド+撹乱項」というパターンの時系列も、上と同じ理由で非定常です。 これらの非定常性を見つけ出すために開発された最初のテストが、Dickey&Fullerの論文に基づくDF Testでした。今では、少し修正されたADF Testがよく使われています。「単位根の検定」と呼ばれるのはたいていADF Testです。これらの問題を整理するために導入された方程式が形式的にただひとつの解1を持っていたので、「単位根を持つかどうか調べる=ランダムウォークと同じ非定常性を持つか調べる」であり、この呼び名がついたようです。 RのADF Test †Rで日本の完全失業率データを使って単位根の検定を行ってみます。 library("tseries") mat1 <- read.csv("d/unemploy.csv",header=TRUE) mat2 = ts(mat1, frequency = 12, start = c(1986,1)) adf.test(mat2) adf.test(diff(mat2)) データは例によって、unemploy.csvというファイルに入れました。いったんmat1という名前で読み込んで、時系列情報をつけてmat2に直しています。diffは、前の時点(前月)との差を取る指示。 結果はこのようになりました。一部略しています。 > adf.test(mat2) Augmented Dickey-Fuller Test data: mat2 Dickey-Fuller = -0.8038, Lag order = 6, p-value = 0.9604 alternative hypothesis: stationary > adf.test(diff(mat2)) Augmented Dickey-Fuller Test data: diff(mat2) Dickey-Fuller = -6.6019, Lag order = 6, p-value = 0.01 alternative hypothesis: stationary 原時系列は非定常だが、前月との差(階差)にはランダムウォーク的な非定常性は認められない、という結果です。 ドリフトやトレンドの有無と単位根の検定 †単位根の検定を改良する試みについては、近年多くの文献が出ているようです。ADF Testが定常的なテストデータを非定常扱いしてしまうのはどういう場合か、といった問題です。他の検定との結果も当然食い違いが出るかもしれません。 方法その1 †ある種の状況では、ADF Testからドリフト(定数)とトレンドの一方または両方を除くことが適切だと言われています。今のところRのtseriesパッケージにはこれを行う機能がありません。ネット世界を探したところ、英語のR関係メーリングリストで「イリノイ大学のRoger Koenker先生の講義資料にやり方が載ってるよ」と書いてあったので見て見ました。 Koenker先生の書いたユーザー定義関数に時系列変数とパラメータを食わせると、回帰分析の出力が出てきます。だいたいDF検定量というのは (ラグ変数の係数-1)/(ラグ変数の標準誤差推定値) ですから、これだけの情報があれば電卓で出ます。 そして得た検定量を、大学院レベルの教科書によく載っている有意水準別の基準値表と照らし合わせて、有意かどうか判断します。1980年代にはまだP値を計算できるほどコンピュータの性能が良くなくて、t値を数表と照らし合わせて有意性を判断したりしたものです。懐かしいですね。大学院レベルの教科書としてKoeneker先生はHamilton(1994)の本をお使いのようです。これはほんとに時系列分析の本ですが、何でも少しずつ書いてあるGreene[2008]にも基準値表があります。(Table 22.2、p.746)本が高い? タダで何もかもそろうなら、誰も時間やお金のかかる研究はしなくなってしまいます。 方法その2 †パッケージurcaにある関数ur.df()は、adf.testにないオプションがそろっています。ドリフト(定数項)・トレンドどちらもなし、ドリフトだけ、どちらもありという3つのタイプからひとつ選んで実行します。詳しくはこちらの文書および田中孝文『Rによる時系列分析入門』pp.336-341参照。 |