rtext

構造変化の検定パッケージ解説

 この項では、Rの構造変化の検定パッケージStrucchangeを使って、Chow Testを行う手続きについて解説します。パッケージにはこれを行なうためのサンプルデータとプログラムが含まれています。Chow Test以外の構造変化検定についてもここでは解説しませんので、Strucchangeの解説文書およびリファレンスマニュアルを参照してください。

 リファレンスマニュアルに載っているスクリプトは解説文書の色々な節に少しずつか書かれていますが、Chow Testを行なうために必要な部分だけをつなぎ合わせると、次のようになります。以下、これについて解説します。

library(strucchange)
data(USIncExp)
library(stats)
USIncExp2 <- window(USIncExp, start = c(1985,12))
coint.res <- residuals(lm(expenditure ~ income, data = USIncExp2))
coint.res <- lag(ts(coint.res, start = c(1985,12), freq = 12), k = -1)
USIncExp2 <- cbind(USIncExp2, diff(USIncExp2), coint.res)
USIncExp2 <- window(USIncExp2, start = c(1986,1), end = c(2001,2))
tmp <- c("income", "expenditure", "diff.income", "diff.expenditure", "coint.res")
colnames(USIncExp2) <- tmp
ecm.model = diff.expenditure ~ coint.res + diff.income
fs <- Fstats(ecm.model, from = c(1990,1), to = c(1999,6), data = USIncExp2)
sctest(fs)
plot(fs, alpha=0.01)

ルーカス批判とError Correction Model

 このサンプルで推定されているのは、Error Correction Modelと呼ばれるタイプの軽量モデルです。日本語の本でも「エラーコレクションモデル」とカタカナで書かれているものと、「誤差修正モデル」と直訳してあるものが入り混じっています。

 ルーカス批判というのは次のようなものです。例えばマクロ経済学の初歩的な教科書には、今でもよく「ケインズ型消費関数」が載っています。Yは所得、Cは消費です。

shiki01.gif

 このa(限界消費性向)は、景気動向や政府の年金政策が変わると、家計が経済合理的にそれに反応する結果、たぶんころころ変わるものでしょう。もし何十年分か、所得や消費のデータがあって、そこから機械的にaを推計しても、そのあいだに当然aの本当の値は変わっているのですから、推計すること自体に意味がありません。

 つまり、家計や企業が毎日合理的な判断を繰り返しても変わらないような変数を選んで推計しなければ、意味がないじゃないか、ということでもあるのです。ですから、「ある変数が定常的かどうか検討する」「ある変数と変数の関係が定常的かどうか検討する」ことが重要になってきました。ふたつの「」の中身に差がないように見えますか? 例えばレミングという動物はときどき爆発的に増殖すると言われています。増殖の真っ最中には、レミングの数は定常的ではありません。しかしレミングの数と、レミングの前足・後ろ足の数の合計は、ほぼ1:4の定常的な関係を持っているはずです。同じように、例えば日本とアメリカで同時に物価上昇が激しくなって、物価指数が定常性を失っても、1ドル=118円といった為替レートは定常的かもしれません。

 Error Correction Modelは、こうした定常的な関係が存在することを前提として、その関係からひとつの変数が偶然にはずれると、外れた大きさに比例して別の変数も外れて定常性が回復するはずだ、という考え方のモデルです。例えば購買力平価説が成り立っているなら、なにかの理由で偶然円高になれば、円を持っている人はドルに両替してアメリカの割安なものを買おうとするので、円を欲しがる人が減ってドルを欲しがる人が増え、もとの為替レートに戻るはずです。

 ECMを実行する特別な関数はありません。ECMはモデルの「組み方」であって、推定はOLSでできるのです。以下ではRのstructchangeパッケージについてくる例を解説しますが、これはECMに基づくOLS推定式が構造変化したかどうかChow Testで検定する、というものです。

スクリプトのデータとモデル

 上記のサンプルスクリプトにあるUSIncExp?というデータは、strucchangeパッケージについていて、library()で読み込んだとき、自動的に読み込まれます。内容は、1959年から2001年までのアメリカにおける個人支出・個人所得の月次データです。

 最初にstrucchangeとstatsというふたつのパッケージを読み込んでいます。解説文書ではtsが読み込まれていますが、現在これはstatsという別のパッケージに統合されています。

 windowは、時系列データの一部分だけを取り出すためのコマンドです。1985年12月以後のデータが使われます。

coint.resには、まず毎月の支出額を所得額で単回帰(lm)したときの残差(residual)が入ります。tsはパッケージ名ではなくて、coint.resを1985年12月から始まる月次データとして扱え、という指示文。そしてそれを1期ずつずらし(lag,k=-1)「前月の残差」にします。前月使いすぎたら、今月の家計は支出を引き締めるでしょうね。

 cbindは、高校までの数学ではあまりなじみのない操作ですね。列(column)どうしをつなげ(bind)という意味。つまり例えば、

col01.gif
col02.gif
col03.gif

 をつないで、ひとつの行列 

col04.gif

 にしろ、という指示文なのです。

 次の一文は、ラグつき変数にはつきものの処理。最初の月には前月のデータがないので、windowを使って1985年12月のデータを切り捨て、1986年1月からのデータだけを使います。ここでUSIncExp2を表示させてみるとわかりますが、それぞれの変数名が長くなりすぎているので、colnamesを使って名前をつけなおします。行が長くなると見づらいので、tmpという変数にまず5つの名前が並んだベクトルを代入し、それを使って指定してみました。C()はベクトルであることを明示する表現。

 これだけ準備をして、ECMモデルの式自体はたった一行です。

ecm.model = diff.expenditure ~ coint.res + diff.income

 先月との支出増加幅が被説明変数。前月の支出額推定式残差と、所得の増加額が説明変数。所得が増加すれば、もし所得と支出に定常的な関係があるなら、支出も増えそうですよね。

 データは1986年からあるのですが、Rの解説文書では「1990年代に構造変化はあったか」を検証するため、1990年からのデータだけを使って、Chowテストを含むF検定を行なっています。上記の指示はChowテストだけを行なうもの。

 ふつうの計量経済学教科書では、人間が特定の時期を「構造変化があったかもしれない時期」と決め付けて、その前後で回帰式のパラメータが同じであった、という仮説を受け入れられるかどうか検定するのがChowテストだ、と書いてあります。ところが今の統計パッケージは、計算能力が有り余っているものですから、データの区切りとして可能な中間時点をすべて試して、そこで区切ったときのF値をはじき出してしまいます。それをグラフにしたのが、これ。スクリプトの最後にあるplot文の結果です。

fig01.gif

 対象期間の最後のほうに行くと、所得と支出のパターンが崩れて、それ以前とそれ以後で構造変化があったらしい、と読み取れます。「ピークは1998年」とRの解説文書には評してあります。ちなみにalphaは有意水準で、グラフの赤い線です。alpha=0.05と緩くして描かせたのが下のグラフで、当然赤い線が下のほうに来ます。

fig02.gif

 さて、アメリカ経済には一体何が起こったのでしょう?

 建設経済研究所 米国事務所が2006年3月にまとめた米国の住宅バブルと過剰流動性の行方にいろいろな数字が挙がっていますが、住宅担保ローンを中心とする借金による消費が急伸し、所得と支出のバランスが崩れてしまっています。その変化が、どうもこの時期に起きたようです。


添付ファイル: filefig01.gif 1139件 [詳細] filefig02.gif 1029件 [詳細] filecol04.gif 1044件 [詳細] filecol03.gif 1108件 [詳細] fileshiki01.gif 1077件 [詳細] filecol02.gif 984件 [詳細] filecol01.gif 987件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-11 (木) 22:19:31 (5691d)