計量経済分析ソフトウェア EViewsによる経済予測3
予測の自動化
第二回では、予測系列の評価と予測の改善について解説しました。第三回は少し目先を変えてみて、予測作業を自動化する方法について解説します。EViewsに搭載されているコマンドキャプチャ機能を利用した、実践的なプログラミング方法を解説します。また、インプット・アウトプット面での、外部との連携についても簡単にご紹介します。
第三回の内容は以下の通りです。
予測の自動化
同じような予測を定期的に行わなければならない場合があります。例えば社内の財務データを分析し、来月の売上を予測するようなケースです。このような場合、報告書の提出を定期的に求められることになるでしょう。そのような場合、プログラミングを使って自動化することで、作業を大幅に簡略化することができます。
プログラミングと言っても、基本はEViewsのコマンドを順番に並べていくだけです。また、EViewsに搭載されているコマンドキャプチャ機能により、処理を実行するためのコマンドが記録されるようになったため、プログラミングは以前よりも簡単になりました。しかしながら、コマンドキャプチャ機能も完全ではないため、適宜必要なコマンドを補う必要があります。今回はコマンドキャプチャ機能の限界を解説しつつ、上手く活用してプログラムする方法について解説します。
コマンドキャプチャ機能を使ったプログラミングの基本
前回、静的予測と動的予測を実行する以下のようなプログラムをご用意しました。これを例に考えましょう。
equation eqcont.ls d(gdp) c @trend ar(1) ar(2) ma(1)
smpl 1960 2005
eqcont.forecast(e, g) gdp_dynamic
eqcont.fit(e, g) gdp_static
group groupcont gdp gdp_dynamic gdp_static
show groupcont.line
macromod.wf1を開きます。Quick > Estimate Equationと操作します。ダイアログに以下のように入力します。
d(gdp) c @trend ar(1) ar(2) ma(1)
okを押し、任意の名前を付けて推定式を閉じます。その後、キャプチャウィンドウを開きます。キャプチャウィンドウは以下のようになります(細部は異なる場合があります)。
この中で、「今行った操作は何か」ということに当たりをつけます。この場合、明らかに「{%equation}.ls(optmethod=opg) d(gdp) c @trend ar(1) ar(2) ma(1)」が今行った推定に対応するコマンドであることはお分かりかと思います。ここで、File > New > Programより新しいプログラムファイルを作成します。コマンドキャプチャの内容をコピーし、プログラムに任意の名前を付けて保存します。
その後、いったんeq01を削除します。その後試しにRunボタンよりプログラムを実行してみます。すると以下のようなエラーメッセージが表示されます。
このように新しいオブジェクトを作る場合にコマンドが不完全になることが、2017年2月時点でのコマンドキャプチャ機能の主要な限界の一つです。EViewsはオブジェクトに名前を付けることで管理を行いますが、新しいオブジェクトを作成した場合は名前が指定されていないので、完全なコマンドが出力できないことがその原因です。やや面倒に感じるかもしれませんが、以前はコマンド全体を自分で調べ、入力する必要があったので、過去に比べると大幅に改善されました。
このような場合、自分でコマンドを補う必要があります。推定の場合は以下のようなコマンドになります。
equation eq01.ls(optmethod=opg) d(gdp) c @trend ar(1) ar(2) ma(1)
equationが新しい推定式オブジェクトを作成するコマンド、eq01が新しい推定式オブジェクト名です。{%~}という表記を見かけた場合、このように必要なコマンドを補う必要があります。オブジェクトを作成するためのコマンドが分からない場合、Help > PDF Docs > Object referenceと操作することで閲覧できる、オブジェクトリファレンス等を利用して調べます。
プログラムを書き換えたら、プログラムを実行し、eq01を復活させます。その後、残りの作業をまとめて行います。まずは以下の部分を書き換えることでサンプルを1960年から2005年までに指定します。
次に、eq01を開き、Forecastボタンから動的予測、静的予測の順番に予測を実行します。Forecast nameをそれぞれgdp_dynamic, gdp_staticに変更します。
最後に、gdp_dynamicとgdp_staticでグループオブジェクトを作成します。group01という名前を付け、View > Graph > OKでラインプロットを行います。
ここまでの操作を行ったら、本題であるコマンドキャプチャ画面に戻ってください。細部は異なる可能性がありますが、以下のようなコマンドが追加されているはずです。
open(p) C:\data\forecast\test.prg
smpl 1960 2005
eq01.results
eq01.forecast(e, g) gdp_dynamic
eq01.fit(e, g) gdp_static
close EQ01
{%group}.sheet
{%group}.rename group01
{%graph}.line
close GROUP01
この内本質的なコマンドを抜き出すと、以下のようになります。
smpl 1960 2005
eq01.forecast(e, g) gdp_dynamic
eq01.fit(e, g) gdp_static
{%group}.sheet
{%group}.rename group01
{%graph}.line
最初の3行までは問題ありません。問題はグループ化に関する最後の3行で、全体的に上手く取り込めていません。これは上で説明したように、新しいグループオブジェクトを作成していることが原因です。このような場合は諦めて、HelpやPDFマニュアルで対応するコマンドを調べます。すると以下のようになることが分かります。
group group01 gdp_dynamic gdp_static
group01.line
groupは新しいグループオブジェクトを作るコマンドで、1番目の引数に新しいオブジェクト名を指定します。その後グループに含めるシリーズオブジェクト名を羅列していきます。また、lineはオブジェクトをラインプロットで見るというコマンドです。
これまでの内容をまとめると、以下のようなプログラムが作成できます。
equation eq01.ls(optmethod=opg) d(gdp) c @trend ar(1) ar(2) ma(1)
smpl 1960 2005
eq01.forecast(e, g) gdp_dynamic
eq01.fit(e, g) gdp_static
group group01 gdp_dynamic gdp_static
group01.line
コマンドキャプチャ機能は、現状ではユーザ側で補わなければならない部分も多いですが、それでもプログラミングを行う場合に有用です。例えば上の場合、動的予測はforecast、静的予測はfitで行うこと等が、一度メニューで操作を行うことで判明しています。上の例では処理に関して複雑なオプション設定を行っていないのでそれほど有難味を感じられないかもしれませんが、推定・グラフ等のオプション設定をデフォルトから大きく変更する際は特に有用です。
予測でよく使うコマンド例
上で解説したように、EViewsで処理を自動化したい場合、多くの場合以下のような手順で作業すると効率的にプログラムを作成できます。
- まずは処理を最初から最後までメニューで実行する。
- コマンドキャプチャウィンドウを開き、必要と思われるコマンドをピックアップし、プログラムファイルに張り付ける。
- Runボタンで実行してみて、上手く動作しない箇所があればコマンドの修正を行う。
コマンドキャプチャ機能を利用することで、メニュー操作に対応するコマンドが分からない場合でも、必要なコマンドを知ることができます。特に推定やグラフに複雑なオプションを指定するような場合は力を発揮します。しかし、コマンドの修正が度々必要になりますので、予測で良く使うようなコマンド例をいくつかご紹介しておきます。
目的 | コマンド例 |
---|---|
利用サンプルの変更(例:最初と最後の4期を除く。定期的に予測をする場合、データの更新に伴い始期や終期がずれるので、@firstや@lastを利用する機会が増えます。) | smpl @first+4 @last-4 |
観測値範囲の変更(例:終期を1期延ばす。定期的に予測をする際に、予測期間を1期伸ばすためによく使います。) | pagestruct(end=@last+1) |
新しいシリーズオブジェクトの作成(例:年次変化率の作成。) | series gdp_henkaritsu = @pcy(gdp) |
新しいグループオブジェクトの作成 | group group01 gdp_dynamic gdp_static |
新しい推定式オブジェクトの作成 | equation eq01.ls d(gdp) c @trend |
動的予測 | eq01.forecast(e, g) gdp_dynamic |
静的予測 | eq01.fit(e, g) gdp_static |
任意のオブジェクトを開き、内容を表示する。 | show eq01 |
結果をグラフで表示する(例:group01をラインプロットする。.lineを、.scat、.dot等に変えることで、対応するグラフが描けます。) | group01.line |
フリーズしてグラフオブジェクトもしくはテーブルオブジェクトを作成する(freezeというコマンドは共通。例:group01をラインプロットしてからフリーズし、graph01というオブジェクトを作成。) | freeze(mode=overwrite, graph01) group01.line |
グラフにオプションを指定する。次のようにするとコマンドキャプチャが利用可能です。freezeしてグラフオブジェクトに変換:nameボタンで名前を入力:オプション設定。 | graph01.setelem(1) linewidth(1.5) |
なお、予測との関連で説明を行いましたが、プログラミング自体は予測以外でも活用可能です。弊社でプログラム開発も請け負っておりますので、ご相談ください。
外部との連携
インポート
分析するデータが定期的に更新されるような状況を考えてください。そのような場合、プログラムの冒頭に以下のようなコマンドを書くと良いでしょう。
wfopen C:\data\forecast\demo.xls range=demo colhead=1 na="#N/A" @id @date(dateid01) @smpl @all
ここでは、demo.xlsが毎月更新される元データです。このような場合、データを読み込むコマンドからプログラムの記述を始めることで、常に新しいデータを利用して分析を行えます。データが更新され次第、C:\data\forecastに更新されたデータを保存し、ワークファイルを開かずにプログラムだけを実行すれば、更新されたデータを元に分析を行えます。
※なお、データを読み込むためのコマンドは、コマンドキャプチャ機能を利用すると簡単に取得可能です。
ただし、プログラム内でのサンプル期間の指定には十分に注意する必要があります。例えば、四半期データで最後の1年だけを取り出したい場合は、
smpl @last-3 @last
とします。最後の年が2005年だからと言って、以下のようにするとサンプルを2006年以降に延ばした場合に整合性が取れなくなるので注意が必要です。
smpl 2005 2005
また、外部からデータを読み込むと、予測のための期間が設定されません。例えば四半期データで1年分の予測期間を確保したい場合、以下のようなコマンドをwfopenの後に入力します。
pagestruct(end=@last+4)
エクスポート
分析を実行した後、Wordファイルに結果を出力することを考えます。そうした場合、OLEを利用すると便利です。
このようにしてコピー&ペーストを行うと、ファイルを開く度に以下のように聞かれます。
ここで「はい」を選択すると、該当するEViewsワークファイル内の内容でWord内に張り付けた結果が自動更新されます。すなわち、一度報告書の形式を作り、リンク貼り付けを行っておけば、次回以降はEViewsを開き、「はい」と答えるだけで新しい結果に更新されます。
ただし、これは開く度に毎回聞かれますので、他人に渡す前には必ずリンクを解除します。
リンクを解除した後は、テンプレートを上書きしないように、「名前を付けて保存」します。
まとめ
今回は少し方向性を変えてみて、予測を定期的に行う必要がある場合の自動化について解説しました。次回は本筋に戻り、VARモデルを使った予測について解説していきます。