EViewsは米国Quantitative Micro Software社の開発した計量分析ソフトです。 EViewsはmicroTSPをもとに各種機能を強化し、進化していったソフトで、グラフィカルなユーザーインターフェースも取り入れており(もちろんコマンドラインでの操作も可能)。分析結果をすぐにグラフで確認できますし、表計算ソフト等との連携にも優れたソフトウェアです。
かつて私が旧経済企画庁(現内閣府)に出向したとき、最初の業務は情シスを説得してEViews2.0の購入手続きを進めることでした(^^;。 あれは97年頃の話ですから、もうずいぶん経ってしまいましたねぇ。 『経済分析』No.157で発表された、短期日本経済マクロ計量モデルは、正式には経企庁のSIGMAで動作するものですが、開発にはEViewsも利用しており、EViews上で運用することも検討されていました(最終的には断念しましたが)。
出向を終えて、会社に復帰してからも、会社にEViews3.1を購入させ、4.0へのアップグレードもさせ、会社の経済予測に利用するマクロモデルや、様々な委託業務での各種将来予測等に役立ててきました。
というわけで、気が付けばEViewsとは長い付き合いなのですが、何故か最近EViewsの使い方について質問のメールを頂くことがしばしばあります(^^;。 私は一介のEViews使いでして、そんなことは QMS社や、日本にもある代理店等に問い合わせてくれ と思わないではありません。 今や日本語でのEViewsに関する文献もあるわけですし。 私がEViewsを使い出した頃は、日本の文献など皆無、経企庁にもEViews使いはいないしで、乏しい英語力でQMS社に問い合わせたり、試行錯誤して頑張ったものです。
等と文句ばかりいってもはじまらないし、単なる「最近の若いモンは...」と説教しているオヤジと化してしまうので、ちょこっとこんなページを書いてみました。 気が向けば、コンテンツをもっと拡充させていくこともあるかもしれません。
EViewsでは自分で作成して定義したサブルーチンをプログラム内から呼び出すことが出来ます。
で、定数項修正などのよく利用する機能について私の作ったライブラリを置いておきます。 このライブラリが提供する機能は...、面倒なのでソースを見て下さい(^^;。
使ってみたい方は、ダウンロードしたstdlib.prg.txtをstdlib.prgにリネームしてカレントパスに置いておき、利用したいプログラムからinclude stdlib
してから、試してみてください。
stdlib.prgを別の場所に置く場合は、include d:\eviews\sample\stdlib.prg
等とフルパスで指定する必要があります。
workfile sample.wf1 q 1980:1 2010:4
ファイル名は sample.wf1
データタイプは四半期、データ期間は1980年第1四半期〜2010年第4四半期(参考)
- データタイプは、年次(a: annual)、半期(s: semi-annual)、月次(m: monthly)、日時なし(u: undated。クロスセクションデータ等)がある
- メニューから、「File」−「New」−「Workfile」でも同じことができる
read(b2,sheet=SAMPLE,t=xls) sample.xls cp i g gdp p r
データ格納開始位置はB2
読み込むシート名は SAMPLE
データ形式はExcelファイル
読み込む変数名は、cp, i, g, gdp, p, r
(参考)
- データタイプは、txtまたはdat形式(テキストファイル)も可能。
- テキストの場合は変数名もコマンドラインで指定せず、データファイルから直接読み込み可能。
- メニューから、「File」−「Import」−「Read Text-Lotus-Excel」でも同じことができる
smpl 1985:1 2001:2
推定期間を1980年第1四半期から2001年第2四半期に設定 (参考)
- メニューから、「Quick」−「Sample」でも同じことができる
(1)最小二乗法による推定と数式定義
消費(cp)関数
equation eq1.ls log(cp) c log(gdp) r log(cp(-1))
対数をとった民間消費(cp)を、c(定数項)、対数をとったGDP(gdp)、金利(r)、一期前の消費(cp(-1))で、最小二乗法により推定
推定した回帰式を数式オブジェクト(eq1)として定義(参考)
- メニューから、「Quick」−「Estimate Equation」でも同じことができる。OLS以外にも、2SLS、ARCHなどいろいろな分析手法が利用可能
投資(i)関数
equation eq2.ls log(i) c log(gdp) r-@pch(p)*400
@pch()は前期比をとる組込み関数(金利と単位をあわせるために400倍)
推定した回帰式を数式オブジェクト(eq2)として定義金利(r)関数
equation eq3.ls r c @pchy(p)*100 @pchy(gdp)*100
@pchy()は対前年同期比をとる組込み関数(金利と単位をあわせるために100倍)
推定した回帰式を数式オブジェクト(eq3)として定義(2)推定結果の見方
- 表示された推定結果のウィンドウで、「View」−「Representation」を選択すると、推定結果が数式で表示される
- 表示された推定結果のウィンドウで、「View」−「Estimation Output」または「Stats」を選択すると、各種統計量の表示。(R2、AR2、DW、Coefficient(係数)、t値等
(3)構造変化等の検定
- 表示された推定結果のウィンドウで、「View」−「Stability tests」−「Recursive Estimates (OLS only)」−「CUSUM test」とすると、CUSUM検定ができる
- ほかにも「CUSUM square test」、「Chow test」等がある
model test
testという名前でモデルを定義 test.merge eq1
testに数式eq1をマージ test.merge eq2
testに数式eq2をマージ test.merge eq3
testに数式eq3をマージ test.append gdp=cp+i+g
testに定義式を加える (参考)
- ワークファイルのウィンドウからtestを選ぶと、数式が定義されていることが確認できる
モデルをまわす(その1) : 標準ケース
smpl 1996:1 2001:2
シミュレーション実施期間を指定 model f0
f0という名前のモデルを定義 f0.merge test
f0にtestの定義内容を全てコピー f0.append assign @prefix f0_
モデル(f0)の推計結果は、各内生変数の名前の前に、 f0_を付けた変数に格納(これをやらないと、実績値に上書きされる)
これはEViews3.xでの場合です。4.xではこのあたりの仕様が変わっていますf0.solve
モデルf0を解く モデルをまわす(その2) : 政府支出拡大ケース
smpl @all
対象期間をワークファイルの全期間にする series g2=g
外生変数gをg2にコピーしておく smpl 1997:1 2001:2
対象期間を97年第1四半期から2001年第2四半期にする genr g=g+gdp*0.01
gにgdpの1%分足しあげる smpl 1996:1 2001:2
シミュレーション実施期間を指定 model f1
f1という名前のモデルを定義 f1.merge test
f1にtestの内容をコピー f1.append assign @prefix f1_
モデル(f1)の推計結果は、各内生変数の名前の前に、 f1_を付けた変数に格納 f1.solve
モデルf1を解く smpl @all
対象期間を全期間にする genr g=g2
外生変数gを元に戻しておく 推計結果を書き出す
write(e) sample_out.xls gdp f0_gdp f1_gdp
sample_out.xlsというExcel形式ファイルに、gdp、f0_gdp(標準ケースのGDP推計結果)、f1_gdp(政府支出拡大ケースのGDP推計結果)を書き出す
計量分析ソフトを使って将来予測をするときなどに必ずつきあたる問題が定数項修正(コンスタント修正とも言いますか)でしょうね。 つまり、回帰分析で作成した回帰式は実績値とは一致しないわけで、特に将来予測をするとき等にはどうしてもこの差を埋めないといけません。
経企庁のSIGMAシステムなんかは自動で定数項修正を行う機能があったりしますが、一般的なソフトウェアでそんなマネができるものはないです(あったみたい(^^; 2006/2追記)。 というわけで、自分でやらないといけません。
私が使ってる方法はこんな感じ。
(定数項修正のサンプル) | |
---|---|
MODEL test | 「test」という名前のモデルオブジェクトを定義 |
SMPL 1985 2000 | 推定期間を1985年〜2000年に指定 |
SERIES res_tax=0 | 「res_tax」という名前の時系列変数を0で定義 |
EQUATION eq_tax.LS LOG(tax)-res_tax c LOG(gdp) | 「eq_tax」という名前の数式オブジェクトを定義。 本来であれば、LOG(tax)=c(1)+c(2)*LOG(gdp)という式なのですが、定数項修正のためにres_taxを左辺に加えてます 右辺に入れるとパラメータ推定の対象になってしまうためです |
eq_tax.MAKERESID res_tax | eq_taxの推計誤差の系列を作成し、結果をres_taxに格納します |
test.MERGE eq_tax | モデルオブジェクト(test)に、数式(eq_tax)を加えます |
モデル内のすべての回帰式を、上記の例のようにそれぞれ誤差系列を含んだ形で定義してやれば、モデルの推計結果は(シミュレーション期間が1985から2000年の範囲内であれば)実績値に一致するわけです。
ただし、将来シミュレーションをする場合は、推定期間外で誤差項(res_tax)は0ですから、困りますね。
というわけで、将来期間について定数項修正を延長するサブルーチンを自作して使ってます。
(将来区間の定数項修正のサンプル) | |
---|---|
include stdlib | 自作サブルーチンを読込み |
call setexog(res_tax,@dtoo("2000"),"last") | 実績値の最終期(ここでは2000年)を基準に、その最終期の修正値で将来まで延長 |
SMPL 1998 2010 | シミュレーション期間を1998年〜2010年に設定 |
test.resolve | 「test」という名前のモデルを解く |
EViews 2.0の時代からゴリゴリやってきた私は、最近になってEViews 5.1で新たなモデルの開発をやってみるまで気づいてなかったのですが、いつの間にやら上記の面倒な定数項修正を自動でやってくれる機能が追加されていたようです。
(自動定数項修正のサンプル) | |
---|---|
MODEL test | 「test」という名前のモデルオブジェクトを定義 |
test.ADDASIGN @all | 全ての数式に追加要素(Add Factors)を追加 内生変数について「変数名+_A」という系列が作られる |
test.ADDINIT(v=n) @all | 実績値と一致するよう追加要素を設定する |
こちらの方法は式単位でなく、モデル単位で一気に処理できるので手間がかかりませんね。 自動計算された追加要素の値は、上で示したmakeresidで計算した値と同じようなので、モデルの推計結果は手でやった場合と同じになると思います。
また、makeresidコマンドとは異なり、データで計算できる区間は全て埋められるので、推定期間外でも値が算出されるのもメリットかもしれません。 ただし、右辺の値が全て揃わない範囲はやっぱりNAになるので、必要ならばsetexogみたいな方法で設定する必要があります(なお、追加要素の変数はNAでも計算エラーにはならず、0として扱われます)。
いつのまにか、内生変数のシミュレーション結果が目的の値となるように外生変数を自動的に調整するcontrolコマンドがあったり、モデルの解法オプションの画面に「Forward Solution」なんて追加されてたり。 適応的期待モデル(Adaptive Expectation)だけでなく、合理的期待形成(Rational Expectation; forward-looking)なモデルも解けるようになっているとは。
私が本格的にいじり倒していたのはEViews 2.0から3.1までで、4.xになってからは過去のノウハウの使いまわしでどうにかなる、あるいはどうにもならないとあきらめることが多くなってしまって気づいていませんでした。 4.x以降は機能的な進化も自分に役立つ範囲ではあまりないし、アクティベーションも導入されて面倒になったなぁという印象しかなかったんですが、地道に進化してたんですね。