計量経済分析ソフトウェア EViewsによる経済予測1
予測の基礎
今回より数回に分けてEViewsによる経済変数の予測について解説します。EViewsの予測機能それ自体について詳細に解説するというよりは、実際に予測を行えるようになることを目標とし、実践的な内容に絞って解説します。単なる作業手順だけでなく、プログラミングを利用した業務効率化のテクニック等についても紹介します。
第一回の内容は以下の通りです。
予測の考え方について
極めて単純化すると、予測の流れは以下の通りとなります。
- 予測モデルを考えます。ここでは例として以下の関係式を考えます。
Yt=β0+β1X1t+β2X2t+εt
同時にデータを用意し、必要な検定を行っておきます。 - 既存のデータで推定を行います。ここでは、1980年Q1から2016年Q4までの四半期データで推定を行ったとします。β0、β1、β2の推定値が得られます。
- なんらかの方法で2017Q1以降の、X1t、X2tのデータを用意します。それらのデータとβ0、β1、β2で単純な四則演算を行うことで、将来のYtの予測値が求まります。
EViewsで行う場合、これらの操作そのものは難しくありません。問題は、将来時点のX1t、X2tのデータを用意することが、簡単ではないことです。将来のデータですから、当然普通には得られません。この問題には以下のような解決方法があります。
- 将来時点のデータが必要にならないような回帰モデルを利用する。
- 将来時点のデータについて仮定を置き、分析者自身が数値を設定する。
典型例としては、外生変数を用いないARMA、VARモデルがあります。すなわち、後述するDynamic forecast機能により補完できる変数だけを説明変数とすることで、問題を回避します。
何らかの想定を下に分析者自身が外生変数の将来値を入力します。そのような想定は、単なる仮定である場合もあれば、そうでない場合もあります。
今回はまず、基礎部分の習得を目指して解説を行います。その目的を達成するため、最も予測の実行が簡単な、説明変数を用いないARMAモデルをもとに解説を行います。
ARMAモデルを用いた予測
ARMAモデルとは
以下のようなARMA(p, q)モデルを考えます。
yt=α+ρ1yt-1+ρ2yt-2+.........+ρpyt-p+ut+λ1ut-1+λ2ut-2+...........+λqut-q
ここではARMAモデルに関する説明は目的としておりませんので、詳しくはお持ちの時系列分析のテキストでご確認ください(EViews参考書籍もご確認ください)。ここでのポイントは、上の式の右辺の変数の利用可能性です。外生変数が必要なく、定数項やラグ項だけなので、以下で説明するDynamic Forecast機能を利用することにより、将来時点でもデータが利用可能です。このため、少ない準備で将来予測を行うことが可能です。
データの準備
まず、以下のフォルダのmacromod.wf1をコピーします。EViews13の場合のディレクトリです。
C:\Program Files\EViews 13\Example Files\EV13 Manual Data\Chapter 03 - Workfile Basics
macromod.wf1をコピーできましたら、以下のフォルダにペーストしてください(dataやforecastフォルダがない場合は作成してください)。
C:\data\forecast
※オリジナルファイルを保存し、システム的な制限がかかることがあるProgram files外にファイルを移動しています。また、弊社と同じ実行環境を構築することで、環境の違いによる混乱を避けることが可能です。お手数ですが必ず行ってください。
定常性の検定
macromod.wf1を開きます。上のARMAモデルを推定するためには、ytが定常過程である必要があります。ytとして、macromod.wf1内のシリーズオブジェクト「gdp」を利用します。gdpは以下のような変数です。
コマンドでグラフを表示するには、コマンド欄にgdp.line
と入力しエンターキーで実行します。
明らかに上昇トレンドがありますので、そのままでは定常性がないことが分かりますが、トレンド定常である可能性はあります。念のためこの点を統計的にも確認します。EViewsで定常性の検定を行うためには、検定を行いたいシリーズオブジェクトであるgdpのツールバーよりView > Unit Root Testと操作します。以下のダイアログが現れます。
Trend and interceptが選択されていることを確認し、OKを押します。以下の結果が表示されます。コマンド・プログラムではgdp.uroot(exog=trend)
となります。
これはADF検定ですので、帰無仮説は「検定中の変数は単位根を持つ」です。すなわち、分析者としては、帰無仮説は棄却されることが望ましいことになります。しかし残念ながら、p値がほぼ1に近く、仮説は棄却されません。すなわち、GDPは非定常過程であることが疑われます
ここでは、gdpの差分を取ることで非定常性に対処することを考えます。単位根検定の画面で、1st differenceを選んでください。コマンド・プログラムではgdp.uroot(exog=trend, dif=1)
です。結果は以下のようになります。
GDPの一階の差分に対して検定が行われていることが確認できます。p値は十分に小さくなっており、gdpの一階の差分が単位根を持つという帰無仮説は棄却されます。そこで以下では、d(gdp)に対してARMAモデルを適用することにします。
ARMAモデルの推定と予測
ARMAモデルを推定しますが、その前に、ARMA項の次数を選択します。次数の選択方法にはいくつかの方法がありますが、ここではその議論に踏み込まず、2次までのAR項と1次までのMA項を利用することとします。メインメニューより、Quick > Estimate equationと操作し、以下のように入力してください。
d(gdp) c @trend ar(1) ar(2) ma(1)
コマンド操作ではls d(gdp) c @trend ar(1) ar(2) ma(1)
と入力し実行します。
d()は一階の差分を取る関数です。各ar(p)、ma(q)はそれぞれ、p次のAR項、q次のMA項に対応します。その他に定数項とトレンド項を利用します。
(なお、説明の便宜上ARMAモデルと呼んでいますが、被説明変数の一階の差分を取っているため、正確にはこれはgdpに対するARIMA(2,1,1)モデルです。)
OKすると推定結果が表示されるので、Forecastボタンを押します。
以下の画像のような画面が現れます。どれも重要なのですが、ここでは特に重要な部分に絞って解説します。
- Series to forecastは、推定式内で被説明変数に対して関数を適用している場合に表示されます。この場合、差分関数d()がそれに当たります。EViewsの機能により、原系列であるgdpの予測値を出力するか、原系列の差分系列であるd(gdp)の予測値を出力するかを選択できます。定常性のために差分を取って分析するが、予測結果は原系列について得たいといった場合に非常に便利です。ここではgdpを選択します。
- 予測においては、Dynamic forecastとStatic forecastの選択が極めて重要です。これについては後で解説するので、ここではひとまずDynamic forecastを選択します。
- Forecast sampleで、予測値を出力する期間を指定します。デフォルトでは1999年までになっているので、2005q4まで予測期間を拡張してください。
修正が終わったら、Forecast nameがgdpfになっていることを確認してください。予測結果はgdpfという名前のシリーズオブジェクトとして保存されます。OKを押します。結果画面が現れます。コマンド操作・プログラムではforecast(e, g, forcsmpl="1960q1 2005q4") gdpf
結果は±2*SEのエラーバンド付で表示されます。また、右側に予測評価テーブルが表示されます。しかし、これでは予測がどの程度上手くいっているのかが直感的に分かりません。そのような場合、原系列であるgdpと、gdpの予測系列であるgdpfでグループオブジェクトを作り、グラフ化すると効果的な比較が可能です。ただし本ワークファイルの場合、利用サンプルがデフォルトで1999年Q4までになっているため、まずはそれを「すべて」に修正します。具体的には以下のように操作します。コマンドではsmpl @all
で標本期間を変更し、group group01 gdp gdpf
でグループオブジェクトを作成します。
青いラインで表されているGDPの実現値と、赤いラインの表されているGDPの予測値(gdpf)が同じグラフ内に描画されます。最も興味があるのは予測値ですが、このグラフでは全体が表示されているため、そのままでは詳細が分かりません。そのような場合はスライダーバーをスライドさせることで、簡単に表示範囲を切り替えることができます。
ワークファイルの範囲指定
上では予測期間の指定方法を説明しましたが、始期と終期として指定できる値はワークファイル自体の範囲によって制限されます。この制限を回避したい場合、予測に先立ちワークファイル自体の範囲を拡張します。ワークファイル内のRangeボタンをダブルクリックします。
終期を2050年Q4まで延長します。Resize~と聞かれたらYesを押します。コマンド操作ではpagestruct(end=2050Q4)
です。
2050年Q4まで予測することができるようになりました。
Dynamic forecast(動的予測)とStatic forecast(静的予測)の違い
ここでは例として、以下のような極めて単純なモデルを考えます。
Yt=β0+β1Yt-1+εt
上記の式を、1980年1月から2016年までのYの年次データを元に推定し、β0、β1の推定値が得られたとします。この場合、2017年以降のYを予測する際にどんな問題が起きうるでしょうか。
上記のモデルを使うと、2016年時点で、2017年のYの値を予測することが可能です。前提として2016年のYの値はデータとして利用可能であるため、右辺のYt-1に推定値と共に当てはめることで、Y2017の予測値を求めることが可能だからです。ここまでは問題がありません。
しかし、Y2018についてはどうでしょうか?この場合に右辺に代入すべきY2017は将来の値であり、データとして手元にないため、Y2018を上の式で静的予測することはできません。Y2019、Y2020.....についても同様です。
この問題を解決するのが動的予測で、EViewsでは予測ダイアログ上でDynamic forecastを選ぶことで実行できます。最初にY2017の予測値は問題なく得られることを述べました。動的予測では、Y2017の代わりに、Y2017の予測値を右辺に代入します。するとY2018の予測値が求まるため、続けてY2019の予測も行う場合はそれを利用します。このように、予測値を使って動的に予測を行うのが動的予測の考え方です。
予測の難しさ
動的予測を利用することで、少ない事前準備で予測を実行できますが、問題がないわけではありません。動的予測を行うと、Yの実現値が利用できる範囲でも、Yの予測値を利用します。これに伴い、 精度の点では静的予測に劣る場合がほとんどです。以下をご確認ください。
緑の点線で表される静的予測は、青い実線で表される実現値を上手く予測できています。一方、赤の点線で表される動的予測の結果は、実現値の大まかなトレンドは捉えられているものの、各期の変動を上手く予測できているようには見えません。
説明変数を利用しないARMAモデルの場合、動的予測を利用することで極めて単純な操作で予測値を得ることが可能です。しかしながら、予測値を将来の説明変数として用いるという性質上、予測精度は低くなりがちです。さらに、説明変数を利用できないことも予測精度を下げる原因となります。
しかし、一方の静的予測では未来のARMA項の値が利用できないため、この場合一期先の2000q1までしか予測が行えません。 一般に長期予測はあまり当てにならないとは言え、直近の予測値しか得られないのは実務上問題になる場合があります。
すなわち、予測値の利用可能性と予測精度にはある種のトレードオフがあると言えます。なるべく予測値の利用可能性や予測の簡便性を確保しつつ、予測精度を高めていかなければならないのが経済予測の一つの難しさと言えます。
まとめ
今回は導入編として、予測の基礎と、ARMAモデルを利用した予測事例について解説しました。次回は今回説明したことを補足し、予測の評価や改善方法について解説します。