経済変動の動学的確率的一般均衡モデル ⑵共同研究 1

1

戦後日本経済における地域産業構造の変化と地方財政運営

経済変動の動学的確率的一般均衡モデル ⑵―Octave/Dynare によるカリブレーション―

増山 幸一
1 ．始めに近年，動学的確率的一般均衡モデル（Dynamic Stochastic General Equilibrium model : DSGEモデル）のカリブレーションに基づいて現実経済の動的変動を説明しようとする研究が急進展してきた。DSGE モデルは，Kydland and Prescott（1982）や Hansen（1985）などの研究で代表される実物的景気循環モデル（Real Business Cycle Models）を基礎としている。また，DSGE（1）

モデルの数学的手法は動的計画法と呼ばれる最適化手法に大きく依存している 。
また，新ケインズ派の経済学者たちは，実物的景気循環モデルに市場の失敗や名目変数の硬直性を導入した DSGE モデルを用いて，経済変動の要因分析や経済政策の効果を分析するようになった。代表的な研究として，Galí（1999）, Galí, Gertler and Lopez-Salido（2001），Woodford（2003），Dotsey and King（ 2005），Christiano, Eichenbaum and Evans（2005），Smets andWouters（2007），Gertler and Leahy（2008）などがある。DSGE モデルを用いて金融政策の効果等を分析した研究として，Carlstrom and Fuerst（1997）や Gertler, Gilchrist and Natalucci（2007），
Edge, et al.（2008）等がある。マクロ経済動学や金融論における研究の最先端フロンティアでは，（2）

DSGE モデルを自由自在に活用することが不可欠となってきた 。
DSGE モデルのカリブレーションの計算では，従来，有料ソフトである MATLAB などが主と し て 活 用 さ れ て き た。 例 え ば，Ljungqvist and Sargent（2004），McCandless（2008），Walsh（2010）などの大学院生向けテキストでは，MATLAB のコードで書かれたプログラムを用いて計算されたカリブレーション結果が示されており，使用された MATLAB プログラム・ファ
イルがホームページ上で公開されていて，誰でも自由に活用できるようになっている。また，
DSGE モデルのカリブレーションの計算で必要不可欠な非線形モデルの線形化を自動的に処理してくれるソフトである Dynare が，フランスの研究機関（CEPREMAP）で開発されている。このソフトを用いれば，経済モデルの線形化計算が自動的に処理され，MATLAB 上で線形化したモデルを自動的にカリブレーションできる。しかし，商業用ソフトは維持費が高価なこともあり，⑴

動的計画法を用いた経済モデルの構築は Sargent（1987），Stokey and Lucas（1989），Ljungqvist andSargent（2004）などで詳細に説明されている。
⑵

日本のマクロ経済学者の間では，DSGE モデルを積極的に活用した研究は不活発で少ないが，加藤（2007）や矢野（2008）などは数少ない代表例である。

2研 究 所 年 報（3）

最近では，MATLAB と代替可能なフリー・ソフトである GNU Octave が活用されている 。
本稿は，DSGE モデルのカリブレーションをフリー・ソフトの Octave を用いて行うことを説明する。第 2 節で，Octave を活用するために最低限要求されるプログラミングの方法を説明する。実際の例としてソロー・タイプの経済成長モデルを取り上げ，外的撹乱を伴う経済成長のシミュレーションを実行してみる。第 3 節で，DSGE モデルのカリブレーションに必要不可欠
な対数線形化の方法と連立差分方程式の解法について説明する。特に，Uhlig（1999）によって提案された対数線形化の手法を詳細に説明する。第 4 節では，DSGE モデルの出発点となった
Hansen モデルを取り上げて，Octave プログラムを具体的にコード化し，カリブレーションを実行してみる。第 5 節で，Dynare の利用法について，説明し，Dynare を具体的に使用したマ
クロ経済モデルのカリブレーションを取り上げる。第 6 節で，幾つかの重要な金融モデルのカ
リブレーションを取り上げる。

2 ．GNU Octave を用いた数値計算
DSGE モデルのカリブレーションの計算とその結果の表示にフリー・ソフト（オープン・ソース）の GNU Octave を採用するので，Octave の利用法について，必要最小限の範囲で説明する。Octave のソースコードは，http://www.gnu.org/software/octave/ からダウンロードできる。Windows 上でインストールするときは，Windows 用インストーラー，例えば，Octave（4）3.2.4̲i686-pc-mingw32̲gcc-4.4.0̲setup をダウンロードする 。通常，Octave は default で，C:\
program ﬁles\Octave3.2.4. にインストールされるが，ファイル構成の便宜上，著者は C:\Octaveにインストールした。Octave の実行ファイルは C:\Octave\3.2.4̲gcc-4.4.0というディレクトリーの下に置かれている。

2 ．1

Octave の起動とコマンド入力

Octave を起動すると，
GNU Octave, version 3.2.4⑶

Octave の WEB サイトでは，以下のように説明されている。GNU Octave is a high-level interpreted

language, primarily intended for numerical computations. It provides capabilities for the numericalsolution of linear and nonlinear problems, and for performing other numerical experiments. It also
provides extensive graphics capabilities for data visualization and manipulation. Octave is normallyused through its interactive command line interface, but it can also be used to write noninteractive
programs. The Octave language is quite similar to Matlab so that most programs are easily portable.
MATLAB を前提として開発された Dynare を GNU Octave 上で走らせることができる。モデルのカリ
ブレーションの実行には何も問題は伴わないが，カリブレーション結果を示すグラフを EPS ファイルに出力する命令が正しく実行されないので，若干の注意が必要である。
⑷

2011年 5 月現在での最新 version は Octave-3.2.4である。

経済変動の動学的確率的一般均衡モデル ⑵3Copyright（C）2009 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. For details, type ʻwarrantyʼ.
Octave was conﬁgured for ” i686-pc-mingw32”.
Additional information about Octave is available at http://www.octave.org.
Please contribute if you ﬁnd this software useful.
For more information, visit http://www.octave.org/help-wanted.html
Report bugs to <bug@octave.org>（but ﬁrst, please read
http://www.octave.org/bugs.html to learn how to write a helpful report）.
For information about changes from previous versions, type ʻnewsʼ.
octave-3.2.4.exe:1>という画面が表示される。最終行は Octave プロンプト呼ばれるもので，Octave のコマンド類を入力するところである。この画面上のプロンプト（>）の後に命令，関数および文などを記述して実行する。
変数名は英文字と数字から構成されるが，アンダースコアで英文字をつなげた変数名も利用できる。変数名の長さに制限はない。変数名に文字列や数値を割り当てることができる。簡単
な加減乗除では，加算，引き算，掛け算，割り算，累乗はx+y, x-y, x * y, x/y, xˆyのように記述する。画面上で，プロンプト > に続けて，
octave-3.2.4.exe:1> x = 1.25と入力すると，
x = 1.2500と返される。
octave-3.2.4.exe:2> xと入力すると，次行に
x=1.2500と x の値がプリントされて，返される。
octave-3.2.4.exe:3> y=1+2−3 * 4/5と入力すると
y=0.60000と答えが返る。プロンプト画面上に計算の結果を毎回表示する必要がないときは，コマンドの最後にセミコロンを入力する。例えば，

4

研 究 所 年 報

octave-3.2.4.exe:4 > z=yˆ2;と入力すると，z の値は計算されて保存するが，計算結果を画面上に表示しない。
Octave（MATLAB）には，通常の数学的関数，例えば，三角関数，指数・対数関数，多項式（5）の解法・微分，統計計算，などのパッケージが組み込まれていて，簡単に利用できる 。例えば，sin（π/2）の計算はoctave-3.2.4.exe:4> z=sin（pi/2）;とすれば，sin（π/2）が計算されて，変数 z の値として保存される。コマンドラインで pi と入力
すると，πの値が自動的に呼び出される。
さらに，線形代数，確率分布，高速フーリエ変換，微分方程式の解，最適化計算，信号処理などのモジュールも組み込まれている。

2 ．2

行列の計算

行列計算に必要ないくつかの主要な方法について説明する。行列の積などの計算をするためには，数値をマトリックスの形式で表現する必要がある。 2 × 2 行列，例えば，行列を入力しよう。Octave のプロンプトに続けて
octave-3.2.4.exe:1> A =［1,2;3,4］と各行ごとにセミコロンで区切って入力すると，と 2 × 2 行列が作成できる。MATLAB と同じように，各行の要素をコンマの代わりにスペー
スを用いて区切ることもできる。
octave-3.2.4.exe:1> A=［1 2; 3 4］と入力しても同じ結果となる。 1 回の入力ごとに結果を画面に印字させたくないときは，入力文の最後にセミコロンを付けてoctave-3.2.4.exe:2> B =［1, 1;0, 1］;
octave-3.2.4.exe:3> C=［2, 0; 3, 4］;と入力すると，結果は画面に表示されない。行列 B ，C は⑸三角関数としては，（引数がラディアン表示で）sin, cos, tan; 逆三角関数としては，asin, acos, atan がある。自然対数関数は log, 常用対数は log10, 指数関数は exp ，絶対値は abs を用いて計算できる。πは pi ，自然対数の低は e（Eulerʼs number），複素数表示は i また（＝jsqrt（-1）），無限大は inf と表現される。

経済変動の動学的確率的一般均衡モデル ⑵5となっている。行列の和はoctave-3.2.4.exe:4> B + Cと入力して計算すると，この答えは，となる。行列の積を計算することも簡単にできる。例えば，
octave-3.2.4.exe:5> B * Cと入力すると，答えはとなる。例えば，
octave-3.2.4.exe:6> D =［1, 2, 3; 5, 6, 7］;
octave-3.2.4.exe:7> E =［1, 2, 3; 5, 6, 7;1,2,3］;と入力する。D ，E は以下の行列として定義されている。

行列 D と行列 E の積を計算するために
octave-3.2.4.exe:8> F=D * Eと入力する。この結果，と正しく計算できていることが分かる。ベクトルは行列の特殊ケースであるから，例えば，
octave-3.2.4.exe:9 > y =［1,2,3］;とすれば， 1 行 3 列マトリックス，つまり，横ベクトル y が定義できる。縦ベクトルで定義するときは，octave-3.2.4.exe:10 > y =［1;2;3］;とすれば， 3 行 1 列のマトリックスが作成できる。また， 1 から10までの整数の集合を作成す

6

研 究 所 年 報

るには，octave-3.2.4.exe:11> z = 1:10;と入力すればよい。初項 1 で定差 2 の等差数列を定義したいとき，例えば，最終項が21になるようにするにはoctave-3.2.4.exe:12> z = 1:2:21;と入力する。文字列を定義したいときには，
octave-3.2.4.exe:13> w = ʼHello Worldʼ;というように，引用符で囲んで定義する。
共役転置行列の計算も簡単にできる。行列 B の転置を計算するときはoctave-3.2.4.exe:12> Bʼ
と入力すると，転置された行列（6）が返される 。Ax = u という連立方程式を解くことを考える。
octave-3.2.4.exe:1> A=pascal（3）;と入力すると，となっている。さらに，
octave-3.2.4.exe:2> u=［3;1;4］;
とおく。こう定義された連立方程式の解は x = A −1u なので，octave-3.2.4.exe:3> x=inv（A）* uと入力すると，という解が得られる。ここで，inv（A）はマトリックス A の逆行列を生成する組込み関数である。
⑹

Octave 利用のためのマニュアル類は，http://www.gnu.org/software/octave/docs.html で提供されており，部分的にではあれ，日本語での解説もあります。ビギナーにとっては，http://en.wikibooks.
org/wiki/Octave̲Programming̲Tutorial にある getting started が参考になる。英語のマニュアルは，
Octave をインストールすると，Octave の下のディレクトリー内に収められる。MATLAB のマニュア
ルも参考になる。本稿の付録にも簡単な組込み関数の一覧表を載せている。

経済変動の動学的確率的一般均衡モデル ⑵7逆行列を使用しないで解を求めるときはoctave-3.2.4.exe:3> x=A\uとおくと，上と同じ計算をして，解が得られる。固有値を計算する組込み関数は eig（A）であるが，固有ベクトルも表示させたいときは，
octave-3.2.4.exe:4>［v,lambda］=eig（A）と入力すると，v に固有ベクトル，lambda に固有値を返してくれる。

2 ．3

スクリプト・ファイル

プログラム言語を用いて何かの処理をしたいとき，毎回の処理ごとに画面上のプロンプトにコマンドを入力していたのでは，大変な労力が必要となる。これを避けるために，Octave の文法ルールに従って，多数の命令の集まりからなるプログラムを作成し，これを保存して，必要となるごとに呼び出して利用する。Octave 上で実行できるプログラムが書かれたソースコード
をスクリプト・ファイルという。このスクリプト・ファイルを MATLAB 用の拡張子（.m）を付けたファイルとして保存して，それを呼び出して実行する。テキスト・エディターでスクリ
プト・ファイルを記述して，それを拡張子 .m を付けて保存する。スクリプト・ファイルの保存先は任意であるが，Octave のホームディレクトリの下，あるいはユーザーのドキュメント・
ファイルの中に保存しておくのが便利であろう。ここでは，スクリプト・ファイルはユーザーのドキュメント・ファイル
C:\Users\Koichi\Documents\Octave（ここで，Koichi は私のユーザー名です）の中に保存しておくとにする。保存されたスクリプト・ファイルを実行するには，Ocatve を起動して，スクリプト・ファイル名を入力する。例えば，上記のフォルダー内に保存された
sample という名前のスクリプト・ファイルを実行したいときは，起動画面上でoctave-3.2.4.exe:1> sampleと入力する。Octave が自動的に計算結果を返してくれる。終了するときは，quit と入力する。
ところで，Octave でスクリプト・ファイルを実行するためには，以下のようなパスの設定をする必要がある。すなわち，スクリプト・ファイルが置かれているディレクトリーにパスを通しておかなければならない。スクリプト・ファイルはユーザーのドキュメント・ファイル C:\
Users\Koichi\Documents\Octave に保存する予定なので，Octave の octaverc ファイル（startupﬁle）内に，*********************************************************************
addpath C:\Users\Koichi\Documents\Octave*********************************************************************（7）と， 1 行を追加して書く必要がある 。なお，Octave を実行中に異なるホルダー，例えば，C:\
Octave\DSGE̲holder に保存しているファイル DSGE1.m を実行する必要がある場合，Octaveのシェル・プロンプト上で，

8

研 究 所 年 報

octave-3.2.4.exe:1> cd C:\Octave\DSGE̲holderと入力し，カレント・ディレクトリを変更してから，
octave-3.2.4.exe:2> DSGE1と入力して，スクリプト・ファイルを実行させる。このようにカレント・ディレクトリを変更させれば，任意のホルダーに保存されている Octave のスクリプト・ファイルを実行することができる。
ユーザー自身が記述した関数を，組込み関数と同じように，複数のスクリプト・ファイルの中で使用することができる。関数をスクリプト・ファイルで作成し，それを関数名と同一名のスクリプト・ファイルとして保存する。関数名 function̲name の関数を定義するには***************************************
function x = function̲name（arg-list）
function-body***************************************のように記述する。function-body には，関数を定義する文が記述され，x の値として返すような手続きが記述される。この関数を用いた計算をするスクリプト・ファイルからは，引数リスト（arg-list）の値を具体的に与えて関数名（function̲name）を呼び出すと，引数値に対応する
関数値 x が返される。以下にあるようなインパルス応答関数を計算する関数スクリプト・ファ
イルをテキスト・エディターを用いて作成する。
********************************************************************
function y=impulse（A,B,n,m,tn）% computing the impulse response function for the dynamical system:%y（t）= A y（t-1）+ B （z t）% A: n×n mtarix, B:n×m matrix（set m=1）% the shock （z t）is i.i.d.
% tn=the length of time for the impulse function
y=zeros（n,tn）;
z=［1.0 zeros（1,tn-1）］ʼ;for i=1:ny（i,1）=B（i,1）* z（1）;endfor i=1:tn-1⑺

スクリプト・ファイルはディレクトリー C:\octave の下のホルダーに保存しても便利です。この場合

は，パスをこのディレクトリーに通してください。octaverc ﬁle は，C:\octave\3.2.4̲gcc-4.4.0\share\octave\3.2.4\m\startup というホルダー内にあります。好みのテキスト・エディターを用いて，新しい
1 行を書き込んだのち，上書き保存してください。

経済変動の動学的確率的一般均衡モデル ⑵9y（:,i+1）=A * y（:,i）+ B（:,1）* z（i+1）;
end********************************************************************（A,B,n,m,tn）が関数 impulse の値を計算するための引数である。zeros（n,tn）はすべての要素がゼロである n 行 tn 列マトリックスを作成する組込み関数である。% はコメントのための記号（# 記号を用いてもよい）で，その行内に書かれた内容はスキップされて，次の行から実行される。for i=1:n ... end 文は，for から end までの間に記述された命令あるいは関数等を，i が 1 か
ら n になるまで繰り返し実行させる条件付き命令文である。この関数スクリプトを，ファイル
名 impulse.m を付けて，C:\Users\Koichi\Documents\Octave に保存して，以下のようなメイ
ン・スクリプトから呼び出して使用することができる。
********************************************************************% main program computing the impulse response function% call impulse（A,B,n,m,timpulse）% A: n×n mtarix, B: n×m matrix（m=1）% the exogenous shock is one dimensional i.i.d.
% timpulse is the length of time for computation
A=［0.9418, 1.9667; 0, .95］;
B=［0; 1］;n=2;
m=1;
timpulse=100;
y=impulse（A,B,n,m,timpulse）;
xx=［1:timpulse］;
plot（xx,y（1,:）,ʼb:+ʼ）axis（［0 timpulse -Inf Inf］）;
title（ʼImpulse Responseʼ）********************************************************************
こ の メ イ ン・ ス ク リ プ ト を example.m と い う フ ァ イ ル 名 で 同 じ よ う に，C:\Users\Koichi\
Documents\Octave に保存する。次に Octave の起動画面上でoctave-3.2.4.exe:1> exampleと入力して，このプログラムを実行させると次ページにあるグラフが描かれる。グラフ表示の方法に関しては，後で詳細に説明する。
メイン・スクリプトの中で関数を定義して利用するときは，***************************************
function y = function̲name（arg-list）

10

研 究 所 年 報function-body
endfunction***************************************のように定義分の最後に endfunction 文を付ける。この関数定義文をプログラムの最初に置いておいておけば，この後に記述されているプログラム中で繰り返し使用することができる。
Impulse Response
14
14

12
12

10
10

88

66

44

22

00

00

20
20

40
40

60
60

80
80

100
100

インパルス応答関数のグラフ

2 ．4

グラフィックスの取り扱い

Octave のすべてのプロット関数はフリーのグラフィックス・ソフトである Gnuplot を用いている。Octave のインストールと同時に Gnuplot もインストールされる。したがって，Octave の起動と同時に，Gnuplot の関数も利用可能となる。 2 次元プロットの例として，例えば，sin 関数の波形をプロットしてみよう。コマンド linspace（start, stop, length）は数直線区間［start,stop］を等間隔に分割してできる数値からなるベクトルを作成する。length はこの数値の総数を定めるが，指定しなければ default で100個にする。例えば，
octave:1> x = linspace（0, 2 * pi, 200）;とすれば，変数 x は区間［0, 2π］を均等に分割した200個の数値からなるベクトルである。また，以下のような操作もできる。
octave:2> x = -10:0.1:10;と入力すると，変数 x は，区間［-10,10］を増分0.1で分割した時の値からなるベクトルを定める。
octave:3> plot（x, sin（x））と入力すると，横軸に x ，縦軸に sin（x）の値をプロットしたグラフが描ける。

経済変動の動学的確率的一般均衡モデル ⑵

11

1

0.5

0

-0.5

-1

-10

-5

0

5

10

Gnuplot によるグラフの表示

描いたグラフをフルカラーの eps 画像ファイルとして保存したいとき
print -depsc2 ﬁg.eps（8）と入力すると，ﬁg という名前の eps ファイルが Octave の current directory 内に作成される 。
-depsc2は画像ファイルを eps 画像形式で，フルカラーで保存するためのオプションである。
以下のようなスクリプト・ファイルを作成する。
*************************************# 三角関数のグラフ
x = linspace（0, 2 * pi）;
a = cos（2 * x）;
b = sin（4 * x）;
c = 2 * sin（x）;
ﬁgure;
plot（x, a）;
hold on;plot（x, b）;
plot（x, c）;*************************************⑻

current directory は実行中のスクリプト・ファイルが置かれているディレクトリーになっている。

12

研 究 所 年 報

このスクリプト・ファイルを実行すると，同一平面上に，a, b, c の 3 曲線を描ける。ﬁgure というコマンドは，新しいウインドウを作成して，グラフを描かせる命令である。既に描いたグラフのウインドウ上の座標平面に曲線等を重ねて描かせたい場合には，hold on コマンドを使用する。既に描いたグラフを消して，重ね描きをさせないためには，hold oﬀ コマンドを使用する。
同じグラフは，以下のように入力しても描ける。
octave:2> plot
（x, a, x, b, x, c）;
ただし，後者のケースでは，a, b, c の曲線は異なる色で描かれている。
デスクトップの画面上に表示するための命令として，disp 関数，fdisp 関数，および printf 関
数が利用可能である。使用例として，
octave:3> s = disp（log（10））とコマンド入力すると，
s = 2.30258509299405と画面に表示される。あるいはoctave:4> x = 10.1;
octave:5> y = 5.5;octave:6> z = ʼtestʼ;octave:7> printf（ʼAn integer: % i. A real: % f. This is a % s.\nʼ, x, y, z）;と入力するとAn integer: 10. A real: 5.500000. This is a test.
と画面に印字される。

2．5

経済モデルの例

ここで，経済モデルのシミュレーションの例を取り上げる。ソロータイプの経済成長モデル
を考えよう。
生産関数はで与えられる。ここで，Yt は時刻 t における経済全体の総生産量，At は時刻 t での生産技術水準，
Kt は時刻 t での資本ストック，Ht は生産に投入された労働量を表現する。生産関数は一次同次であると仮定する。総生産量を労働者一人当たりに変換すると，となる。ここで，kt は一人当たり資本ストックである。労働力が一定の成長率 n で拡大すると仮定するならば，Ht+1 =（1 + n）
Ht が成立する。また，資本ストックは蓄積方程式

経済変動の動学的確率的一般均衡モデル ⑵13に従って成長する。δは減価償却率，It は時刻 t での粗投資額である。この式から，一人当たり資本の蓄積はに従う。ここで，it は労働者一人当たり粗投資である。貯蓄が生産量の一定割合で行われると仮定できるとする。つまり，st = σyt と仮定する。σは労働者一人当たりの貯蓄率と理解される。
it = st を資本の蓄積方程式に代入すると，が得られる。
生産関数をと簡単化する。生産技術へのショックはで表現される。ここで， は平均値ゼロの正規分布に従う。このモデルをシミュレーション
する。パラメータ値として，A = 1, n = 0.02, δ= 0.1, θ= 0.36, σ= 0.2を採用して，Octave でシミュレーションした。シミュレーションのためのスクリプト・ファイルは以下のとおりである。
*************************************************************************************% The simulations of the simple Solow model% the production function （K）
f=A Kˆ theta% the expression for the technology shock = exp（epsilon̲t）: the standard error =volat% the rate of population growth = n% the depreciation rate = delta% the saving rate = sigma
T=120;
delta=0.1;
A=1.0;
sigma=0.2;
n=0.02;
theta=0.36;
volat=0.2;
B=（1+theta * n-delta *（1-theta））/（1+n）;

14

研 究 所 年 報
simulations of the simple Solow model
2.8

the exact solow model

2.7

2.6

2.5

capital

2.4

2.3

2.2

2.1

2

1.9

1.8

0

20

40

60

80

100

time

ソロー・モデルのシミュレーションC=（delta+n）/（1+n）;
X̲ss=（（n+delta）/（sigma * A））（1/
ˆ （theta 1））;
K（1）=2.0;
X（1）=2.0;k（1）=0.0;
for t=1:T 1
R（t）=volat * randn（1）;K（t+1）=（（1 delta）* K（t）+sigma * A * exp（R（t））* K（t）ˆtheta）/（1+n）;
k（t+1）=B * k（t）+C * R（t）;
X（t+1）=X̲ss * exp（k（t+1））;
end
hold oﬀ;
plot（K）
xlabel（ʼtimeʼ）ylabel（ʼcapitalʼ）
title（ʼsimulations of the simple Solow modelʼ）legend（ʼthe exact solow modelʼ）******************************************************************************************

120

経済変動の動学的確率的一般均衡モデル ⑵15% ... は通常用いられているスクリプトの書き出しである。% はコメントが開始されることを示
す記号である。
シミュレーション時間は120期間で， の標準偏差は0.2である。定常状態での生産量は2.221となっている。

3 ．Uhlig による対数線形化手法と線形モデルの解法
（9）

Uhlig
（1999）が導入した対数線形化の方法を説明する 。確率過程 Xt の対数線形化を考える。
Xt の定常過程をとするとき，と定義される xt は Xt の定常過程からの対数乖離（差分）の大きさを表す。表現を変えれば，と書き直すことができる。e を原点 xt = 0 の回りでテイラー級数展開すると，が得られる。xt が非常に小さい場合を想定しているので，通常，第 2 次以降の項は無視して，第 1 次の項までで近似する。

と表現できる。
Wt = eなので，と表現される場合，

とおくと

となる。
+ aYt）となっている場合，Wt = X（1
t

⑼

とおけば，

Herald Uhlig, A toolkit for analysing nonlinear stochastic models easily, in, edited by Ramon Marion and Andrew Scott, 1999, Oxford University

Presss.

16

研 究 所 年 報と近似される。さらに，を対数乖離変数を用いて線形近似すると，となる。ここで，とおいた。

例 3 ．1
コブダグラス型生産関数を考える。ここで，とする。上記の対数線形化の手法を用いると，となる。だから，生産量の変動はと表現できることになる。なお，

とおいている。

対数線形化された動的経済システムは，xt を（m 次元）内生変数ベクトル，zt を確率的外生
変数ベクトルとして，一般的に以下のような形式で表現できる。
⑴⑵
ただし，Et は時刻 t での条件付き期待値オペレータ，F, G, H, L, M, N は行列係数である。
は外的ショックを表わす。このシステムの解を，回帰的均衡則として求めることを考える。この表現を⑴に代入すると，が得られる。xt −1の係数がゼロとなる条件から

経済変動の動学的確率的一般均衡モデル ⑵17が得られる。さらに，zt の係数がゼロとなる条件から，Q は以下の条件を満たす行列として計
算できる：
⑶
.
ここで，N′
は N の転置行列であり，⑷はクロネッカー積，vec（A）は行列 A を列ごとにタテベ

クトル化したベクトル，Im は内生変数ベクトルの次元（m）をもつ単位行列である。
回帰的均衡則の行列 P の固有値の絶対値が 1 よりも小さければ，このシステムは安定である。
また，行列 V が逆行列をもつならば，行列 Q はユニークに定まる。Uhlig（1999）はこの回帰的均衡則の求め方をより容易にする方法を導入した。内生変数を以下のように 2 種類に分割する。
xt を内生状態変数（m 次元ベクトル），yt をジャンプ変数（n 次元ベクトル）とし，zt を確率的外生変数（k 次元）とするとき，経済モデルの均衡条件式を⑸⑹⑺と表現できると仮定する。ここで，A と B は l × m 行列，C は l×n 行列（l ≥ n），rank（F）= n ，
F は（m+ nl）×n 行列，N は安定な固有値のみをもつ行列とする。式⑸は l 個の差分方程式から構成されている。
動学的経済モデルの解を以下のような動的な均衡則（dynamic equilibrium law）⑻⑼
として求めることを考える。Uhlig（1999）は l = n の場合，以下の定理が成立することを証明した。

定理 3.1l = n とする。⑸, ⑹, ⑺で表現されている経済モデルの解が⑻, ⑼で表現される動学的回帰的均衡則として得られるならば，その係数行列は以下のように計算できる。
（1）
P は 2 次方程式（リカッチ方程式）

18

研 究 所 年 報⑽を満たす。P の固有値の絶対値が 1 よりも小さいときにのみ，⑻, ⑼で記述されるシステムは安
定である。
（2）
Rは

で与えられる。
（3）
Qは

⑾
を満たす。
（4）
Sは

によって与えられる。
次に，P の 2 次方程式⑽の解法について説明する。⑽式の係数を⑿⒀⒁と置き換えると，行列 P の 2 次行列方程式が⒂−1で与えられる。係数行列はすべて m × m 次元の行列である。このとき，⒂式の解は P = ΩΛΩという形式で表現できることを説明する。ここで，行列 Λ は以下で導出する固有値を対角線上にもつ行列，Ωはそれに対応する固有ベクトルを列とする行列である。新しい2m×2m 行列⒃⒄
を定義する。ここで，Im は次数 m の単位行列，0m は次数 m のゼロ行列である。

経済変動の動学的確率的一般均衡モデル ⑵19定理 3.2（1）

に関するΞの一般化固有値問題に対する固有ベクトルが s ，対応する固有値がλであるならば，固有ベクトル s は（10）なる表現形式をもつ。ここで，s′はベクトル s の転置ベクトルであり，2m 次元ヨコ・ベク

トルとなっている。
（2）この一般化固有値問題の解として，m 個の固有値 λ1, λ2, ..., λm と対応する m 個の固有ベクトルが存在するならば，そして，これらの m 個の（固有）ベクトルは線形独立であるならば，P =−1ΩΛΩ が 2 次方程式⒂の解となる。

と表記する。ただし，である。また，すべての固有値の絶対値が 1 よりも小さければ，経済システムの解は安定となる。
一般化固有値問題の固有値λは通常，2m 個存在するので，2m 個の固有値の中から m 個の固有値をどのように選択すべきかという問題が生じる。ここで，上記の Λ, Ω の求め方について説明する。一般化固有値問題の解はssを満たす。この固有値問題に対する固有値は 2m 個存在するので，これらを λj , j = 1, 2, ..., 2mと表記し，sj , j = 1, 2, ..., 2m はそれに対応する固有ベクトルである。ここで，重要な操作は，最初の m 個の固有値が安定であるように，固有値の順番を並び替えることである。このように⑽

この一般化固有値問題の解はΞ

ル となる。固有ベクトルは次数 2
題になる。

=

λ;

= 1, 2, ... , 2を満たす2× 1 のタテ・ベクトルとなる。

個の固有値 λ と固有ベクト=2のとき，通常の固有値問

20

研 究 所 年 報

並べ替えられた固有値に対応する固有ベクトルを列とする行列を行列 X と表記する。

s 11

s21

s2m−1, 1s2m, 1s 12s22

s2m−1, 2s2m, 2s 1, 2ms 2, 2ms2m−1, 2m

s2m, 2m

このとき，行列方程式（15）の解は⒅で与えられることが知られている。ただし，Λは安定な固有値 λj , j = 1, 2, ... , m のみを対角要素とする行列であり，Ω≡ X12となっている。
定理 3 ．3とΞ に関する QZ 分解（一般化 Schur 分解），つまり，を満たすユニタリー行列 Y, Z と上半三角行列 Σ, Φ を求めることができるとする。Y ・Y= I2m,
Z ・Z= I2m が成立する。
ここで，と表記されており，Zij は m × m 行列である。ただし，Z21 と Z22 は逆行列が存在するとする。
（1）行列経済変動の動学的確率的一般均衡モデル ⑵21

は 2 次行列方程式⒂の解となる。
（2）Φの（i, j）要素をφij と表記し，同様に，Σ の（i, j）要素を σij と表記する。比率φii/σii
が i と共に単調増加列となっているとする。さらに，φmm/σmm < 1と仮定する。このとき，Pは安定である。つまり，である。
この QZ 分解を用いて計算する方が一般化固有値問題を解いて P を求める方法よりも一般性・汎用性をもつ。MATLAB/Octave 等ではこの QZ 分解の組込み関数が利用できる。QZ 分解を用いた行列 P を計算する MATLAB コードが Uhlig によって提供されている。Uhlig のホームページにある Toolkit4という名称のファイルには，QZ 分解によるリカッチ方程式の解法，インパルス応答関数，スペクトル密度等を計算するスクリプト・ファイルがパッケージになっており，
これらのモジュール化された計算コードを利用した 7 種類の経済モデルが提供されている。計（11）

算コードは MATLAB 向けに書かれているが，Octave 上でもスムーズに実行できる。

4 ．簡単な DSGE モデルのカリブレーション
本節では，Octave を用いて，DSGE モデルの出発点となっている Hansen モデルのシミュレー
ションを実際に実行する。代表的家計は生涯にわたる効用を最大にするような消費｛Ct｝と労働供給｛Ht｝を選択する。レジャー Lt は Lt = 1

Ht で与えられる。言い換えると，家計の有効な使用可能時間を 1 に規格化している。ここで，変数，例
えば，Ct の表現における下添え字 t は時刻を表す。E0 は初期時点での条件付き期待値オペレータである。生産関数を （λft, Kt, Ht）で表現する。λt は時刻 t における生産技術に対する外的なショックの大きさを表し，Kt は資本投入量，Ht は労働投入量である。資本ストックは蓄積方程式に従う。ここで，It は時刻 t での投資，δは資本の減価償却率である。生産された価値は消費と投資に配分されるので，⑾

http://www2.wiwi.hu-berlin.de/wpol/html/toolkit/version4̲1.html からダウンロード可能となっている。MATLAB/Octave での QZ 分解では，Σ = ′, Φ = ′
Ξ という形式で計算することから，
1
この計算に基づいて = （ ′）（Z′）と計算する必要があるので，注意が必要である。
22
21

22

研 究 所 年 報が成立する。
時刻 t における価値関数を V（Kt ,λt）と定義すると，Bellman 方程式はとなる。ここで，関係式を代入すると，第 1 階の条件はである。envelope 定理から，｛｝が成立する。この関係式を上の第 1 階の条件に代入すると，⒆−⒇

なる関係式が得られる。式⒆はオイラー方程式と呼ばれているマクロ経済学での基本方程式である。
モデルの数値的な挙動を調べるに当たってと具体的な関数形を与えるとき，第 1 階条件はと簡単化される。また，

経済変動の動学的確率的一般均衡モデル ⑵23が成立している。
要素市場が完全競争市場であれば，資本の限界生産は資本のレンタル価格（利子率）r に等し
く，労働の限界生産は賃金率 w に等しくなる。

これらの条件を用いると第 1 階条件はと表現できる。ただし，である。以上が Hansen モデルの動学システムを記述している。λt = λe とすると，確率的外的撹乱過程はで表現される。ここで，は外生的ショック確率過程である。

定常状態では，Kt = Kt+1 = K , Ct = Ct+1 = C , λt = λt+1 = λとおけるので，労働供給量と資本ストックの定常状態が計算できる。定常状態における労働供給量 H と資本ストック K はと与えられる。また，1/β = r + 1 δ が成立している。
Uhlig（1999）が提案した方法に従って対数線形化を行う。各変数をCt = C e , Yt = Y e , Ht = He , Kt = K e , rt = r e , λt = λe
とおくことにする。これらの関係式を用いて，Hansen モデルを対数線形化すれば

24

研 究 所 年 報となる。λ = 1 とおいた。モデルの内生変数は［kt+1, yt, ct, ht, r̃t］の 5 個であり，外生変数は ztである。xt ＝ kt+1 を状態変数として，yt =［yt, ct, ht, r̃t］をジャンプ変数とすると，εという表現ができる。ここで，A と B は 4 × 1 行列，C は 4 × 4 行列となっている。

以上の Hansen モデルにおいて，と与える。H = 1/3 に対応する A の値と定常状態での資本ストックの値はとなる。動学的経済モデルの解を動的な均衡則として求める。ただし，S =果は−1

C （AQ + D）である。安定な均衡則を求めるとき，得られた結経済変動の動学的確率的一般均衡モデル ⑵25

Impulse Response of technology shock
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0

0

20

40

60

80

100

Impulse Responses of state variables
1.6

capitaloutputconsumption
laborinterest rate

1.4
1.2
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4

0

20

40

60

80

100

Hansen モデルのシミュレーションである。この数値のもとでモデルをシミュレーションする。外的な技術ショックが時刻ゼロで起こり，その後のショックはないとして，z0 = 1.0, zt = 0, t = 1, 2, ... で，シミュレーション期間（12）が100期間のときの結果は上のグラフに示されている。

技術ショックに対する各変数の標準偏差の比率は，生産量，消費，労働，利子率のそれぞれについてとなっている。Hansen によれば，米国経済の産出量の標準偏差が0.0176と報告されているので，
この産出量の標準偏差になるためには，技術ショックの標準偏差は0.0176/5.4839=0.0032094 と予想される。しかし，現実経済で推計された値は区間［0.007, 0.01］の間にあると指摘されているので，現実の経済でのデータに比べて小さすぎると言える。

⑿

上のグラフ上では，初期時刻は = 1 に対応する。

26

研 究 所 年 報

5 ．Dynare を用いたマクロ経済モデルのカリブレーション
Dynare を 使 用 す る た め に は，Dynare の Web サ イ ト http://www.dynare.org/downloadからインストール用（Windows 向け）のファイル dynare-4.2.0-win.exe をダウンロードする。
Dynare の諸ファイルは，ここでは，C:\dynare というディレクトリーに保存した。Dynare を
Octave 上で利用するためには，octaverc ﬁle に*******************************************************************************
addpath C:\dynare\4.2.0\matlab*******************************************************************************と 1 行追加して，パスを確保しなければならない。さらに，dynare 用のプログラム・ファ
イルを実行するために以下の設定をする必要がある。すなわち，プログラム実行の current
directory を dynare 用プログラム・ファイルを置いているディレクトリに移動させる必要がある。
ディレクトリ

C:\User\Koichi\Documents\Octave\Dynare に dynare 用のプログラム・ファイル（拡張子 .mod 付きのファイル）を置くことにすると，octaverc ﬁle に*******************************************************************************
cd C:\User\Koichi\Documents\Octave \Dynare*******************************************************************************（13）と 1 行追加する必要がある。dynare 用プログラム・ファイル（mod ファイル）を実行するた

めには，まず，Ocatve を起動して，dynare ﬁlename と入力する。例えば，sample1という練習用モデルのシミュレーションを実行させるためには，
octave-3.2.4.exe:1> dynare sample1と入力する。計算結果の数値が shell 画面上に表示されると同時に，インパルス応答関数のグラフがデスク・トップ画面に表示される。
Hansen モデルを Dynare を用いてシミュレーションしてみよう。Hansen モデルの動学シス
テムは⒀

Dynare の mod ファイル，例えば，an example を実行させるためには，the current directory ofOctave を an example が置かれているディレクトリーへ移動させる必要がある。an example を c:\
dynare\examples に保存したとすれば，octaverc ファイルに cd

c:\dynare\examples と１行追加する必要がある。そうしないと，Octave を起動させるたびに，shell 画面上で，毎回このコマンドを入力しなければいけない。

経済変動の動学的確率的一般均衡モデル ⑵27と表現できる。確率的外的撹乱過程はで表現される。ここで， は外生的ショックの確率過程である。Hansen モデルにおいて，と与える。このとき，Octave あるいは Dynare を用いて，定常状態の値を計算させることができる。外生変数λ = 1 とおくと，以下のような値がえられる。

Dynare で実行しようとするモデルの記述は以下のような 5 つのブロック
Preamble ブロック

Model ブロック

Initval ブロック

Shocks ブロック

Computation ブ

ロック
（14）

に分けられる。Preamble で，変数（内生変数 var ，外生変数 varexo）の定義とパラメータ名（parameters）とその値を与える。例えば，// comment
var y, c, k, h, r, z;
varexo e;parameters beta, delta, theta, gamma, AA, hbar, kbar, ybar, cbar, rbar;
beta = 0.99;
delta = 0.025;
theta = 0.36;⒁

Dynare の マ ニ ュ ア ル 類 や チ ュ ー ト リ ア ル は Dynare の web サ イ ト http://www.dynare.org/

documentation-and-support で提供されている。さらに，Dynare を用いた様々なマクロモデルの比較研究も行われている。研究プロジェクトのホームページは http://www.macromodelbase.com/ である。この web サイトでは，Volker Wieland, et. al.（2009）を始めとした幾つかの研究論文が紹介されている。
日本での Dynare を用いた代表例は，矢野浩一（2008）である。

28

研 究 所 年 報gamma = 0.95;
AA = 1.72;
rbar = 1/beta -1 + delta;
hbar =（1-theta）* rbar/（AA *（rbar - delta * theta）+（1-theta）* rbar）;
kbar =（theta/rbar）ˆ（1/（1-theta））* hbar;
ybar = kbar ˆ theta * hbar ˆ（1-theta）;
cbar = ybar - delta * kbar;と記述する。// はコメントのラインを示す記号である。Model のブロックでは，モデルの方程式を記述する。若干記述の手続きが特殊である。現時点での変数値を x とすると， 1 期間先の変数値は x（+1）のように， 1 期間前の変数値は x（-1）のように記述する。前節で導出したHansen モデルの対数線形化モデルを記述すると，/*
The following section decsribes a log-linearized Hansen model.
*/
model（linear）;
c=（c +1）- beta * rbar * （r +1）;
y = h/（1 - hbar）+ c;
kbar * k = ybar * y -cbar * c + kbar *（1 - delta）* k（-1）;
y = z + theta * k（-1）+（1 - theta）* h;y=k（-1）+ r;z = gamma * z（-1）+e;end;となる。/* .... */ はコメントの始まりと終わりを示す記号で，その間にコメントが記述されている。*/ 以下がモデルの記述となっている。モデルの記述は model; 文から始まり，その最後には必ず，end; 文を書く。初期値の付与は，Initval のブロックで与える。このブロックは initval 文から始まり，end; 文で終わる。
initval;y = 0;⒂

非線形モデルのままで記述して，定常状態の値を求めたいときは，このブロックの下に，steady; という文を挿入する。この場合，初期値として適当な値を付与しておく。steady; 文はモデルの定常状態での値を計算する。

経済変動の動学的確率的一般均衡モデル ⑵
y

0.015

29
c

0.01

0.01

0.005

0.005
0

10

20

30

k

0.01

0

40

10

10
x 10

20

30

40

30

40

30

40

h

-3

5

0.005

0
0

10

20

30

40

r

0.02

-5

10

20
z

0.015

0.01

0.01
0

-0.01

0.005

10

20

30

40

0

10

20

Dynare による Hansen モデルのインパルス応答関数

c = 0;
h = 0;
k = 0;
r = 0;
z = 0;
e = 0;
end;（15）

線形化しているので，定常状態ではすべての変数値はゼロである。外生的ショックの特徴は，shocks ブロックで与える。例えば，
shocks;var e = 0.01ˆ 2;
end;⒃

GNU Octave のバージョンに依存して，dynare から Octave 経由で出力される EPS ファイルは壊れているので，保存されたグラフを GSview で見ることができない。画面上に表示されたグラフを保存する必要がある。この点で，注意が必要である。例として示したグラフは，Latex に組み込むために，
Dynare を MATLAB で実行させて，出力した eps ファイルを利用した。

30

研 究 所 年 報

これは，標準偏差が0.01の外生的ショックを記述している。この条件下で，シミュレーションを行いたい時は，
stoch̲simul（periods=2100）;と書く。これがこの例での computation ブロックを構成する。以上のスクリプト全体を一つのファイルとして，テキスト・エディターで書いて，拡張子 .mod を付けて保存する。このファイ（16）

ルを Dynare で実行すると，前頁に描かれたインパルス応答関数のグラフが得られる。

Dynare でのプログラムの記述は非常に簡単であるので，Dynare を用いたカリブレーションは便利である。反面，グラフ等の出力が自動化されているので，ユーザーごとに異なる自由なグラフ出力ができない。また，非線形方程式の線形化を自動的に処理するシステムとなってい（17）

るが，必ずしもこの線形化の処理がスムーズにいかず，エラーがでることも多い。

6 ．金融論の基礎モデル
6 ．1

MIU モデル

本 節 で は， 金 融 論 の 基 礎 モ デ ル と し て 活 用 さ れ て い る cash-in-advance（CIA） モ デ ル とmoney-in-the-utility function（MIU）モデルを取り上げる。最初に，money-in-the-utility function
モデルを取り上げる。このモデルでは，実質貨幣残高の増加が家計の効用水準を上昇させることが前提とされている。実質貨幣残高の増加が家計の効用水準を上昇させる理由として，十分な貨幣を保有することが財やサービスの市場取引にかかる費用を低下させる事実をあげている。
時刻 t での家計 i の効用関数はで与えられる。ここで， は消費量，は貨幣保有量，Pt は財価格，

有効時間を 1 に規格化しているので，レジャー時間は 1

は労働供給量である。

である。各家計を添え字 i でイン

デックス付ける。マクロ経済を構成する各家計は区間［0, 1］の間に一様に分布しており，家計の総計は 1 である。よって，i ∈［0, 1］である。各家計 i は期待効用関数の現在割引価値⒄

事実，前節で定式化した Hansen モデルを非線形の形で dynare に記述して実行すると，定常状態の値を計算するまではスムーズにいくが，計算されたヤコビアン行列に基づく計算過程でエラーがでてしまう。

経済変動の動学的確率的一般均衡モデル ⑵を最大にするように，消費量 ，貨幣保有量

31，および，労働供給量を選択する。

マクロ経済の生産関数をと仮定する。Kt は資本量の経済全体での総計，Ht は総家計の労働供給量なので，と定義される。λt は生産技術の水準を表す。要素市場が完全競争市場であれば，資本の限界生
産は資本のレンタル価格（利子率）r に等しく，労働の限界生産は賃金率 w に等しくなる。

家計 i は前期から手持ちの貨幣量を持ち越し，当該期の始めに政府から貨幣の移転を受け取るとする。この政府からの貨幣移転を gt Mt 1とする。家計 i は期間 t の期首に金融資産として貨幣と債券を保有している。期間 t

1 から持ち越した債券

は名目利子率 it 1で表現される収益を生む。よって，家計 i が期間 t の期首に持ち越す金融資産を at と実質値で表記するとである。家計は金融資産を保有するだけでなく，前期に蓄積した資本量

t における家計のフローの所得は賃金所得と資本のレンタル料を持ち越す。期間である。よって，家計の予算制約式はと表現できることになる。ここで，期間 t + 1 に持ち越す金融資産はである。状態変数をBellman 方程式は,とできるので，価値関数を V（,）と表記するとき，動的計画法の32

研 究 所 年 報となる。以下の計算では，家計のインデックス i を省略する。最適解の第 1 階の条件はで あ る。 こ こ で，Vc は 関 数 V の Ct に 関 す る 偏 微 分，Vh は（1− ht） に 関 す る 偏 微 分，Vm
は mt/Pt に関する偏微分を表わす。πt はπt = Pt / Pt 1

1と定義されるインフレ率である。

envelope 定理からが成立している。
以上の条件を整理すると，経済の動的変動を表現する以下のような動的方程式が得られる。

これらの方程式の経済学的な含意は金融論では常識となっているので，ここでは説明を要しない。各家計が同一であると仮定するとき，となっている。以下ではこれを仮定する。m̂t = Mt / Pt および b̂t = Bt / Pt と表記する。実物市場での均衡条件式は，

経済変動の動学的確率的一般均衡モデル ⑵33であり，資本の蓄積方程式となっている。
経済への外的な撹乱は生産技術へのショックと貨幣供給へのショックの 2 種類となっている。

と表現できて，撹乱過程がそれぞれ以下のような AR（1）過程で表現できるとする。ここで， とは互いに i.i.d. 確率過程とする。貨幣供給量はとなっており，m̂t は実質貨幣残高 Mt / Pt である。
モデルの定常状態での特徴を分析する。実質値が一定となる状態を定常状態と定義する。したがって，定常状態では，となっている。上添え字 ss で定常状態における値を示す。消費のオイラー方程式から，が成立する。よって，である。この式は，生産技術が規模に関して収穫一定である限り，資本／労働比率 k /h = k̂が割引率と減価償却率にのみ依存し，貨幣量の大小には依存しないことを意味する。資源制約
式から，

34

研 究 所 年 報が成立する。ただし，φ（k/h）= f（λ, k, h）/h,φ̄ = φ（k /h ） δk /h と定義した。労働に関する第 1 階条件 式より，

である。効用関数が貨幣に関して分離可能であるとき，uc および uh は貨幣量に依存しない。したがって，労働供給 h は貨幣量に依存しないで，決定される。よって，消費量も貨幣量に依存しない。貨幣のスーパー中立性が成立している。しかし，効用関数が貨幣に関して分離可能でない場合，貨幣のスーパー中立性は成立しない。貨幣供給量の拡大率は連動してインフレ率の増大を引き起こし，債券の名目利子率を増加させ，貨幣保有の機会費用を上昇させる。貨幣保有の第 1 階条件式からが成立している。労働に関する第 1 階条件と貨幣保有に関する第 1 階条件式を連立すると，労働供給 h と実質貨幣残高 m̂ の値が決定される。π = g なので，労働供給 h と実質貨幣残高m̂ の値は g の大きさに依存する。貨幣成長率の増加が労働供給をどのように変化させるかは効
用関数の性質に依存する。

the impulse response function of the state vector to technology shock
0.2

the impulse response function of the jump vector to technology shock
0.2

capital
money
price

0.15

interest
wage
consumption
output
labor

0.15

0.1
0.1
0.05
0.05
0
0

-0.05

-0.1

0

20

40

60

80

100

-0.05

0

the impulse response function of the state vector to monetary shock
0.2

0.1

0

0.05

-0.5

20

40

60
time

80

60

80

100

the impulse response function of the jump vector to monetary shock

0.5

0

40

1

capital
money
price

0.15

0

20

100

-1

interest
wage
consumption
output
labor

0

20

40

60

80

time

MIU モデルのカリブレーション : 生産技術および貨幣供給へのショック

100

経済変動の動学的確率的一般均衡モデル ⑵35

モデルを解析的に解いて，動学的な挙動を分析することは極めて困難であるので，パラメー
タ値を変更させつつ，モデルのカリブレーションを実行させて，その結果を考察するという手続きが必要となる。
McCandless（2008）に従って，家計の効用関数をと仮定し，生産関数をと仮定する。各パラメータに以下のような値を設定する。
β= 0.99, δ= 0.025, θ= 0.36, λ = 1.0, B = 2.5805, D = 0.01, g = 0, ρp = 0.95, ρg = 0.48
この条件の下で，MIU モデルを対数線形化して，この線形化したモデルのシミュレーションを行う。生産技術および貨幣供給へのショックに対するインパルス応答関数は前頁のようなグラフとなる。
このグラフ上で利子率は実質値表示である。明らかに，貨幣ショックは名目値のみを変化させ，実質値に何の影響も与えない。
Walsh（2010）も同様なカリブレーションを行っている。彼が用いた効用関数は，という消費と貨幣保有が分離不可となっている CES 関数である。各パラメータ値は
β= 0.989, δ = 0.019, θ= 0.36, a = 0.99, b = 3.0, Ψ = 2.0, ψ = 1.34, η = 1., g = 0.01,
ρ p = 0.95, ρg = 0.75（18）と設定されている

6 ．2。

CIA モデル

Hansen and Cooly（1989）によって提案された cash-in-advance モデルを展開する。マクロ経済を構成する各家計は区間［0, 1］の間に一様に分布しており，家計の総計は 1 である。各家計を添え字 i でインデックス付ける。i ∈［0, 1］である。各家計 i は期待効用関数の現在割引価値⒅

詳細は Walsh（2010）の第 2 章を参照のこと。Walsh は MATLAB/Dynare を用いてシミュレーショ

ンを実行している。このシミュレーションの MATLAB コードは Walsh のホームページ http://people.
ucsc.edu/walshc からダウンロード可能である。

36

研 究 所 年 報を最大するように，消費量 と労働供給量
レジャー時間は 1を選択する。有効時間を 1 に規格化しているので，である。マクロ経済の生産関数をと仮定する。Kt は資本量の経済全体での総計，Ht は総家計の労働供給量なので，と定義される。λt は生産技術の水準を表す。要素市場が完全競争市場であれば，資本の限界生
産は資本のレンタル価格（利子率）r に等しく，労働の限界生産は賃金率 w に等しくなる。

次に，各家計の予算制約を考える。家計 i は前期から手持ちの貨幣量を持ち越し，当該期の始めに政府から貨幣の移転を受け取るとする。この政府からの貨幣移転を gtMt 1とする。ここで，Mt −1は前期末（期間 t

1末）の一人当たり総貨幣量とする。gt は貨幣供給の成長率である。gt > 0 であるとき，貨幣供給量は増加する。期間 t における家計 i の cash-in-advance 制約はとなる。ここで，Pt は期間 t における価格である。この仮定は，期間 t が始まると，まず，財市（19）

場での取引が開始され，その後に資産市場が開かれて，債券の取引が行われると想定している。

また，通常は，この制約式は等式で成立すると想定できる。上記の貨幣供給に関する仮定では，各家計の貨幣保有量とは無関係に政府からの貨幣移転量が決まる。政府からの移転が各家計の貨幣保有量に依存するときは，仮定を変更しなければならない。貨幣供給の成長率は割引率よりも大きいと仮定する，gt ≥β。もしこの仮定が成り立たないと，消費が時間と共に β よりも大きな率で拡大し続けるという問題が生じる。
家計 i は期間 t の期首に金融資産
した資本量
ル料

⒆

を保有するだけでなく，前期に蓄積を持ち越す。期間 t における家計のフローの所得は賃金所得と資本のレンタである。よって，家計の予算制約式は

期間 が始まると最初に資産市場で取引が開始され，その後に財の取引が行われるというケースに対応するモデルは Walsh（2010）で展開されている。

経済変動の動学的確率的一般均衡モデル ⑵となる。キャッシュ制約

37と予算制約式 の下に生涯にわたる効用関数最大化問題をラグランジュ乗数を用いて解くと，以下のような第 1 階の条件式が成立する。

各家計が同一であると仮定するとき，となっている。m̂t = Mt / Pt および b̂t = Bt / Pt と表記する。実物市場での均衡条件式は，であり，資本の蓄積方程式となっている。
技術進歩に関して，λt = λ とおいて，と想定する。

は i.i.d. 確率過程であるとする。外的撹乱項は生産技術へのショックと貨幣供給へのショックからなる。貨幣供給へのショックを gt = g +に従うとする。

とおいて， がは i.i.d. 確率過程であるとする。利子率および賃金率はで与えられる。
定常状態での性質を分析する。消費のオイラー方程式からであるから，MIU モデルと同じく，資本／労働比率 k̂ss は割引率と減価償却率にのみ依存し，貨幣成長率には依存しない。よって，賃金率 wss も貨幣成長率 g には依存しない。貨幣の供給ルー
ルから，m̂ss =（1+ g ）/（1+ πss）m̂ss が成立するので，インフレ率は貨幣成長率に等しい。また，

38

研 究 所 年 報

CIA 制約から，css = m̂ss が成り立つ。資源制約式から css =φ̄hss なので，消費／労働比率も貨幣成長率に依存しない。労働供給に関する第 1 階の条件から，が得られる。この式は労働供給量 hss がインフレ率，言い換えると，貨幣成長率に依存して変化することを意味する。労働と消費が分離可能で，レジャーの限界効用が逓減するならば，貨幣成長率の上昇は労働供給を減少させる。貨幣はスーパー中立的ではない。
McCandless（2008）に従って，家計の効用関数をと仮定する。生産関数をと仮定する。各パラメータに以下のような値を設定する。
β= 0.99, δ= 0.025, θ= 0.36, λ = 1.0, A = 1.72, g = 0, ρp = 0.95, ρg = 0.48
この条件の下で，CIA モデルを対数線形化して，この線形化したモデルのシミュレーションを

the impulse response function of the state vector to technology shock
0.2

the impulse response function of the jump vector to technology shock
0.2

capitalGDP

interest
wage
labor
price

0.15
0.15
0.1

0.1

0.05

0
0.05
-0.05

0

0

20

40

60

80

100

-0.1

0

the impulse response function of the state vector to money shock
0.006

0.002

0.03

0

0.02

-0.0020.01-0.004

0

20

40

60
time

80

60

80

100

the impulse response function of the jump vector to money shock

0.04

0

40

0.05

capitalGDP

0.004-0.006

20

100

-0.01

interest
wage
labor
price

0

20

40

60

80

time

CIA モデルのカリブレーション : 生産技術および貨幣供給へのショック

100

経済変動の動学的確率的一般均衡モデル ⑵39行う。生産技術および貨幣供給へのショックに対するインパルス応答関数は前頁のようなグラフとなる。
貨幣供給の増大は価格を上昇させるので，名目消費や名目 GDP は増加するが，実質で見ると一時的に減少が起こっている。
Walsh（2010）も CIA モデルのカリブレーションを行っている。彼が用いた効用関数は，であり，各パラメータ値は
β= 0.989, δ= 0.019, θ= 0.36, a = 0.99, b = 3.0, Ψ = 2.0, ψ = 1.34, η = 1.0, g = 0.01,
ρ p = 0.95, ρg = 0.75と設定されている。CIA モデルの詳細は Walsh（2010）の第 3 章に記述されている。線形化したモデルを演繹する過程の詳細は，Walsh のホームページで提供されている PDF ファイルを参照のこと。Walsh は，MATLAB 上で実行可能なコード，MATLAB から Dynare 使用するプログ
ラム・コードを提供している。MALTAB 向けのプログラムは，Uhlig が開発したモジュールを用いるプログラムと，Paul.Soderlind が開発したモジュールを使用して実行するプログラムの 2種類になっている。このうち，Uhlig が開発したモジュールを用いるプログラムは Octave 上で実行可能であるが，他のプログラムは Octave では実行できない。その理由は，Paul.Soderlind
が開発したモジュールで使用される ordqz という組込み関数が Octave 内には用意されていない
（20）

からである

。

7 ．終わりに
以上で，新ケインズ派が金融政策や経済政策の効果を分析する目的で活用してきた DSGE モ
デルを GNU Octave を用いてシミュレーションする具体的な手続きを説明してきた。線形動的方程式のフィードバック行列を計算するためのプログラムを分析者自身で独自に書くことは大変な労力が必要とされるので，この労力を省力化するためには，Uhlig が提供しているモジュー
ルを活用することが便利である。そこで最後に，本稿での DSGE モデルのシミュレーションでも実際に用いた，Uhlig によって提供されたモジュールの使用方法を説明する。一般的に経済モデルが（5, 6, 7）式と同じく⒇

本稿中で用いたプログラム，Walsh が提供したプログラムおよび Uhlig の Toolkit4.1パッケージは，

著者のホームページ http://www.meijigakuin.ac.jp/˜mashiyam/studies.htm からダウンロード可能です。

40

研 究 所 年 報で与えられるとする。動学的経済モデルの解を（8, 9）と同じく，以下のような動的な均衡則として求めることを考える。リカッチ方程式を満たすフィードバック行列 PP を見出し，行列
QQ, RR, SS を計算するプログラム・モジュールは以下の 6 ヶのスクリプトファイルからなるサブルーチン群
solve.msolve̲qz.m
qzdiv.mqzswitch.mcalc̲qrs.m
sol̲out.mから構成される。必要とされるオプションを与えて，solve.m を実行すると，行列 P および行列（21）

Q, R, S が計算される。その後に，sol̲out.m を実行すると，これらの値が表示される。

Uhlig のモジュールを利用するためには，当然，モデルのスクリプト内で，動的方程式の係数
行列を数値で与えなければいけない。具体的にシミュレーションしたいモデルの係数行列を与えた後，モデルの次数を% set the dimensions for the state, jump, and exogenous variables.
［l̲eqn, m̲states］= size（AA）;［l̲eqn, n̲endog］= size（CC）;［l̲eqn, k̲exog］= size（DD）;と与える。x, y, z に対して使用する変数名はVARNAMES =［ʼcapital ʼ,ʼmoneyʼ,ʼpriceʼ,ʼinterestʼ,ʼwageʼ,ʼtechnology shockʼ,ʼmonetary shockʼ］;
これらのサブルーチン群は Octave のカレント・ディレクトリーあるいはパスを通したディレクトリ
ーにインストールしておいてください。

経済変動の動学的確率的一般均衡モデル ⑵41のように x, y, z の順番に従って定義する。
solve.m を実行する前に設定しなければいけないオプションは以下のとおりである。
TOL=0.000001;
DO̲QZ=1;
MANUAL̲ROOTS=0;
IGNORE̲VV̲SING=1;
DISPLAY̲IMMEDIATELY=0;DISPLAY̲ROOTS = 1;
message =ʼʼ ;warnings =［ ］;
% Starting the calculations for matrices PP, QQ, RR, SS.
solve;
sol̲out;と 書 け ば， 行 列 PP お よ び 行 列 QQ, RR, SS が 計 算 さ れ， 結 果 が 表 示 さ れ る。 こ こ で，
TOL=0.000001はゼロと判断する数値を0.000001以下と指定することを示す。DO̲QZ=1 は QZ
（22）

分解を用いて，リカッチ方程式を解くことを指定する。このオプションを変更する必要性がないので，上記のとおり書いておけば十分である。

付録：Octave の組込み関数と条件文
以下に，基本的な組込み関数および条件文を一覧表で示す。
Arithmetic and Increment Operators
x+y

addition

x-y

subtraction

x*ymatrix multiplication

x. * yelement by element multiplication

x/yright division, conceptually equivalent to（inverse（yʼ）* xʼ）ʼx./ yelement by element right divisionx\yleft division, conceptually equivalent to inverse（x）* yx. \ yelement by element left divisionxˆypower operatorx.ˆyelement by element power operator-x

negation
一般化固有値問題を解いて行列 PP を計算したいときは，DO̲QZ = 0と設定する。計算結果を観察してから，手動で 1 以下の固有値を選択したい場合，MANUAL̲ROOTS = 1と設定する。

42

研 究 所 年 報+xunary plus（a no-op）xʼ

complex conjugate transposex.ʼ

transpose

++ x
（‒ x）

increment（decrement）, return new value

Basic Matrix Manipulations
rows（a）

return number of rows of acolumns（a）

return number of columns of a

all
（a）

check if all elements of a nonzero

any
（a）

check if any elements of a nonzero

ﬁnd
（a）

return indices of nonzero elementssort（a）

order elements in each column of asum（a）

sum elements in columns of a

prod
（a）

product of elements in columns of amin（args）

ﬁnd minimum values

max（args）

ﬁnd maximum values

rem（x, y）

ﬁnd remainder of x/yreshape（a, m, n）

reformat a to be m by ndiag（v, k）

create diagonal matrices

linspace（b, l, n）

create vector of linearly-spaced elements

logspace（b, l, n）

create vector of log-spaced elementseye（n, m）

create n by m identity matrix

ones（n, m）

create n by m matrix of ones

zeros（n, m）

create n by m matrix of zeros

rand（n, m）

create n by m matrix of random values

randn
（n,m）

create n by m matrix of normal distribution random values

Linear Algebrachol（a）

Cholesky factorization

det（a）

compute the determinant of a matrix

eig（a）

eigenvalues and eigenvectors

expm
（a）

compute the exponential of a matrix

hess（a）

compute Hessenberg decomposition

inverse（a）, inv（a）

invert a square matrix

norm（a, p）

compute the p-norm of a matrix

pinv
（a）

compute pseudoinverse of aqr（a）

compute the QR factorization of a matrix

経済変動の動学的確率的一般均衡モデル ⑵rank（a）

matrix rank

sprank（a）structrual matrix rank

schur（a）

Schur decomposition of a matrix

svd
（a）

singular value decompositionsyl（a, b, c）

solve the Sylvester equation

Plotting Functions
plot（args）

2D plot with linear axes

plot3（args）

3D plot with linear axesline（args）

2D or 3D line

patch（args）

2D patchsemilogx（args）

2D plot with logarithmic x-axis

semilogy（args）

2D plot with logarithmic y-axis

loglog（args）

2D plot with logarithmic axesbar（args）

plot bar charts

stairs（x, y）

plot stairsteps

stem（x, it y）

plot a stem graphhist（y, x）

plot histograms

contour（x, y, z）

contour plot

title（string）

set plot title

axis（limits）

set axis ranges

xlabel（string）

set x-axis label

ylabel（string）

set y-axis label

zlabel（string）

set z-axis label

text（x, y, str）

add text to a plot

legend（string）

set label in plot key

grid［on̶oﬀ］

set grid state

hold［on̶oﬀ］

set hold stateisholdreturn 1 if hold is on, 0 otherwisemesh（x, y, z）

3D surface

meshgrid（x, y）

create mesh coordinate matrices

Statistics
corrcoef（x, y）

correlation coeﬃcientcov（x, y）

covariancemean（a）

mean value

median（a）median value

43

44

研 究 所 年 報std（a）

standard deviation

var（a）

variance

Statements
for 文：i の値が 1 から nn になるまで，for-body の計算を実行する
for i = 1:nn
for-body
end
if 文：condition が真実であるならば，if-body を実行し，そうでなければ else-body を実行する
if condition
if-bodyels
els-body
end

Reference
1 ．Ben S. Bernanke, Mark Gertler and Simon Gilchrist（ 1999）, The Financial Accelerator in a
Quantitative Framework, in Handbook of Macroeconomics, vol.2, edited by J. B. Taylor and M.
Woodford, Elsevier Science.
2 ．Charles T. Carlstrom and Timothy S. Fuerst（ 1997）, Agency Cost, Net Worth, and Business
Fluctuations: A Computable General Equilibrium Analysis, American Economic Review, 87（5）.
3 ．Lawrence J. Christiano, Martin Eichenbaum and Charles Evans（2005）, Nominal Rigidities and the
Dynamic Eﬀects of a Shock to Monetary Policy, Journal of Political Economy, 113（1）.
4 ．Michael Dotsey and Robert G. King（2005）, Implications of State-Dependent Pricing for Dynamic
Macroeconomic Models, Journal of Monetary Economics, 52.
5 ．Rochelle M. Edge, Michael T. Kiley, Jean-Phlippe Laforte（2008）, Natural rate measures in an
estimated DSGE model of the U.S. economy, Journal of Economic Dynamics and Control, 32.
6 ．Jordi Galí, Mark Gertler and D. Lopez-Salido（2001）, European Inﬂation Dynamics, European Economic Review, 45（7）.
7 ．Jordi Galí（1999）, Technology, Employment, and the Business Cycle: Do technology Shocks Explain
Aggregate Fluctuations?, American Economic Review, 89（1）.
8 ．Jordi Galí（2008）, Monetary Policy, Inflation, and the Business Cycle: An Introduction to the New
Keynesian Framework, Princeton University Press.
9 ．Mark Gertler, Simon Gilchrist and Fabio M. Natalucci（2004）, External Constraints on Monetary
Policy and the Financial Accelerator, Journal of Money, Credit and Banking, 39（2-3）.
10．Mark Gertler and John Leahy（2008）, A Phillips Curve with an Ss Foundation, Journal of Political
Economy, 116（3）.
11．Gary Hansen（1985）, Indivisible Labor and the Business Cycle, Journal of Monetary Economics, 16.
12．Finn Kydland and Edward C. Prescott（1982）, Time to Build and Aggregate Fluctuations, Econo-

経済変動の動学的確率的一般均衡モデル ⑵45

metrica, 50.
13．Lars Ljungqvist and Thomas J. Sargent（2004）, Recursive Macroeconomic Theory, Second edition,
The MIT Press.
14．George McCandless（2008）, The ABCs of RBCs: An introduction to Dynamic Macroeconomic Models,
Harvard University Press.
15．Thomas J. Sargent（1987）, Dynamic Macroeconomic Theory, Harvard University Press.
16．Frank Smets and Rafael Wouters（2007）, Shocks and Frictions in US Business Cycles: A Bayesian
DSGE Approach, American Economic Review, 97（3）.
17．John Stachurski（2009）, Economic Dynamics: Theory and Computation, The MIT Press.
18．Nancy Stokey and Robert Lucas（1989）, Recursive Methods in Economic Dynamics, Harvard
University Press.
19．Herald Uhlig（1999）, A Toolkit for Analysing Nonlinear Stochastic Models Easily, in Computational
Methods for Study of Dynamic Economies, edited by Ramon Marion and Andrew Scott, Oxford
University Presss.
20．Volker Wieland, et. al.（2009）, A New Comparative Approach to Macroeconomic Modeling andPolicy Analysis, Working Paper, Goethe University of Frankfurt.
21．Carl E. Walsh（2010）, Montary Theory and Policy, Third edition, The MIT Press.
22．Michael Woodford（ 2003）, Interest and Prices: Foundations of a Theory of Monetary Policy,
Princeton University Press.
23．加藤涼（2007），『現代マクロ経済学講義』，東洋経済新報社 .
24．矢野浩一（2008），「Dynare による動学的確率的一般均衡シミュレーション〜新ケインズ派マクロ経済モデルへの応用〜」，内閣府経済社会総合研究所，ESRI Discussion Paper Series No.203.