ホーム > 公共経済のシミュレーション分析 > 第二部 数値解析による経済分析の基礎
第二部 数値解析による経済分析の基礎
2000年
東洋大学 経済学部 専任講師(執筆当時) 上村敏之
上にフレームが出ない場合はこちらをクリック
1.不平等度の計測
Fortran言語が全くできないほどでもなく、少しは理解できるというあなたのために、最初は簡単な計算から始めることにする。ここで取り上げる不平等度の計測は、所得再分配を扱う財政学では重要な項目である。しかも、プログラミングの基礎である、変数の合計の計算が復習できる。
(問)N人(または世帯)の所得(または資産)の分布X(X1,X2,…,XN)が与えられたとき、不平等度を計測するためにGINI(ジニ)係数を測定せよ。
(答)GINI係数の定義は以下の通りである。ただし
は平均所得(資産)である。
where 
さて、このままでは測定することが困難であるが、分布XがX1≦X2≦…≦XNとなるように並べられていることを仮定し、若干の数式展開を行えば、上式は以下のような計算しやすい形に変形できる。
以下ではN=10とし、分布を適当に与えたときのプログラムを示そう。
DOUBLE PRECISION X(1:10),ALLX,AVEX,G,GINI !倍精度実数で変数定義
INTEGER I,N,II !整数を定義
N=10 !総データ数
X(1)=10 !データ入力
X(2)=30
X(3)=50
X(4)=80
X(5)=100
X(6)=150
X(7)=200
X(8)=300
X(9)=450
X(10)=600
ALLX = 0
AVEX = 0
DO I = 1,N !合計計算
ALLX = ALLX + X(I)
END DO
AVEX = ALLX / N !平均計算
G = 0
II = N
DO I = 1,N !ジニ係数の右辺の()の中を計算
G = G + II * X(I)
II = II - 1
END DO
GINI = 1.0 + (1.0 / N) - 2 * G / (N ** 2
* AVEX) !ジニ係数を計算
WRITE(*,*) 'GINI= ',GINI
END
これを実行すると以下のように表示される。
GINI= 5.030456852791879E-001
GINI係数は約0.503である。
2.収束計算
1.ではGINI係数を計測したが、この程度の計算ではわざわざプログラムを組むよりも表計算ソフトを使った方が早いだろう。むしろ、目的はプログラミングに慣れることにあった。しかしながら、収束計算は、シミュレーション分析の根幹ともいえる重要な技法である。なぜなら、経済理論では最適化を駆使するため、極値問題を解くための収束計算は欠かせないからである。
(問1)
の最大値 y*となる解x*を求めよ。
(答1)微分して極値0となる点を探す
∴x*=2.5 y*=8.25
微分の定義は
![]()
であり、(答)にあるようにこの程度の(問)なら手計算でも簡単である。しかし、これを苦労してプログラムで解こう。このような一変数極値問題の解法は多く存在するが、代表的な3つのアルゴリズムを以下に掲げる。
勾配法
人が山を登って頂上に到達する様子を思い浮かべよ。勾配法はまさにその様な動きを表現した技法である。山に登るためには、頂点よりも低い地点から登山を始める必要がある。つまり、xの初期値は解x*よりも小さくする必要がある。最も標準的な収束計算方法であるが、山の頂点が2つ以上になる場合は間違った答を出す可能性がある。
DOUBLE PRECISION X,H,Y1,Y2,Y3,Y
X=1 !xの初期値
H=0.1 !xを動かす幅(ステップ幅)の初期値
100 Y1 = Y(X)
Y2 = Y(X + H)
Y3 = Y(X - H)
WRITE(*,*) Y1,X !途中計算の表示
IF (Y1.GE.Y2.AND.Y1.GE.Y3) THEN
H = H / 10
IF (H.LT..00000001) GOTO 200 !収束判定
GOTO 100
END IF
IF (Y2.GE.Y1.AND.Y2.GE.Y3) THEN
X = X + H
GOTO 100
END IF
IF (Y3.GE.Y1.AND.Y3.GE.Y2) THEN
X = X - H
GOTO 100
END IF
200 WRITE(*,*) 'X*= ',X
WRITE(*,*) 'Y*= ', Y1
END
DOUBLE PRECISION FUNCTION Y(X) !関数定義
DOUBLE PRECISION X
Y=-X**2+5*X+2
END
これを実行すると
6.000000000000000 1.000000000000000
6.290000004172325 1.100000001490116
6.560000007748604 1.200000002980232
6.810000010728836 1.300000004470348
7.040000013113022 1.400000005960465
7.250000014901161 1.500000007450581
7.440000016093254 1.600000008940697
7.610000016689300 1.700000010430813
7.760000016689300 1.800000011920929
7.890000016093254 1.900000013411045
8.000000014901161 2.000000014901161
8.090000013113022 2.100000016391277
8.160000010728837 2.200000017881393
8.210000007748604 2.300000019371510
8.240000004172325 2.400000020861626
8.250000000000000 2.500000022351742
8.250000000000000 2.500000022351742
8.250000000000000 2.500000022351742
8.250000000000000 2.500000022351742
8.250000000000000 2.500000022351742
8.250000000000000 2.500000022351742
8.250000000000000 2.500000022351742
8.250000000000000 2.500000022351742
X*= 2.500000022351742
Y*= 8.250000000000000
となり、山を登るようにして関数の頂点が計算できていることがわかる。以後は途中計算の表示を省略する。また、初期値xを解x*よりも大きく設定しても収束できるようにプログラムを書くことも可能である。課題として残しておこう。
二分法
別名「はさみうち法」。解x*よりも小さい値と大きい値の2つの初期値を与え、その平均値を計算し、この3つのxから得られるyの中で最も小さいxを捨て、新たに平均値を計算するという技法である。山の頂点が2つ以上になっても正しい答を求める可能性が高く、勾配法よりも効率が良いが、初期値を2つ与える必要があることが欠点である。
DOUBLE PRECISION X,AX,X1,X2,Y1,Y2,YA,Y
X=1
H=0.1
X1=0 !低い方のxの初期値
X2=5 !高い方のxの初期値
100 AX = (X1 + X2) / 2 !2つの初期値の平均
Y1 = Y(X1)
Y2 = Y(X2)
YA = Y(AX)
IF (YA.EQ.Y1.AND.YA.EQ.Y2) GOTO 200
IF (Y1.GE.Y2) THEN
X2 = AX
GOTO 100
END IF
IF (Y2.GE.Y1) THEN
X1 = AX
GOTO 100
END IF
200 WRITE(*,*) 'X*= ', X1
WRITE(*,*) 'Y*= ', Y1
END
DOUBLE PRECISION FUNCTION Y(X)
DOUBLE PRECISION X
Y=-X**2+5*X+2
END
これを実行すると以下のようになる。
X*= 2.499999981373549
Y*= 8.250000000000000
ニュートン法
どんな初期値でも収束する必殺技(確かめてみよ)である。次々に微分をしてゼロになる点を見つけだす。しかし、微分可能な関数型でないと使えないのが欠点である。
DOUBLE PRECISION X,H,DY1,DY2,DY3,Y1,Y,DY
X=1 !xの初期値
H=0.1 !ステップ幅の初期値
100 DY1 = DY(X)
DY2 = DY(X + H)
DY3 = DY(X - H)
IF (ABS(DY1).LT..000001) GOTO 200 !収束判定
IF (ABS(DY2).LT.ABS(DY1).AND.ABS(DY2).LT.ABS(DY3))
THEN
X = X + H
GOTO 100
END IF
IF (ABS(DY3).LT.ABS(DY1).AND.ABS(DY3).LT.ABS(DY2))
THEN
X = X - H
GOTO 100
END IF
IF (ABS(DY1).LE.ABS(DY2).AND.ABS(DY1).LE.ABS(DY3))
THEN
H = H / 10
GOTO 100
END IF
200 Y1 = Y(X)
WRITE(*,*) 'X*= ',X
WRITE(*,*) 'Y*= ',Y1
END
DOUBLE PRECISION FUNCTION Y(X)
DOUBLE PRECISION X
Y=-X**2+5*X+2
END
DOUBLE PRECISION FUNCTION DY(X) !微分式の定義
DOUBLE PRECISION X
DY=-2*X+5
END
これを実行すれば以下のように表示される。
X*= 2.500000022351742
Y*= 8.250000000000000
二変数極値問題の解(勾配法)
実は、一変数極値問題は「ゴールシーク」というExcelの機能を使えば簡単に解くことができる。しかし、二変数極値問題となると、表計算ソフトでは解を求めるのに困難となってゆくだろう。ここでは勾配法で二変数極値問題を解いてみる。
(問2)
の最大値 z*となる解(x*,y*)を求めよ。
(答2)全微分して極値0となる点を探す
![]()
∴ x*=2.5
∴ y*=0.5
∴(x*,y*)=(2.5,0.5) then z*=8.75
(答2)にあるように、手計算で偏微分することで簡単に解が求まるが、これをプログラムで計算することに意味があるのだ。ところが、一変数極値問題のときのように一筋縄ではいかないことに容易に気づくだろう。なぜなら、動かすべき変数が2つ(xとy)あるからだ。どのように処理すべきかを考えて欲しい。ここでは直観的な解説だけ加えておく。
つまり、偏微分の作業と同じように考える。xだけ動かしたときのzの大きさと、yだけ動かしたときのzの大きさを比較し、どちらが大きいかを判断して山を登ってゆくのである。以下はその様にして書かれたプログラムである。
DOUBLE PRECISION X,Y,H,MAXZ,Z1,Z2,Z3,Z
X=0 !xの初期値
Y=0 !yの初期値
H = 0.1 !ステップ幅
MAXZ = -100000
100 Z1 = Z(X, Y)
Z2 = Z(X + H, Y)
Z3 = Z(X, Y + H)
IF (Z2.GT.Z1.AND.Z2.GT.Z3) THEN
MAXZ = Z2
X = X + H
GOTO 100
END IF
IF (Z3.GT.Z1.AND.Z3.GT.Z2) THEN
MAXZ = Z3
Y = Y + H
GOTO 100
END IF
IF (Z1.GE.Z2.AND.Z1.GE.Z3) THEN
H = H / 10
IF (H.GT..000001) GOTO 200
GOTO 100
END IF
200 WRITE(*,*) 'X*= ', X
WRITE(*,*) 'Y*= ',Y
WRITE(*,*) 'Z*= ',Z1
END
DOUBLE PRECISION FUNCTION Z(X,Y)
DOUBLE PRECISION X,Y
Z=-X**2+5*X-2*Y**2+2*Y+2
END
これを実行すると所望の解が求まる。
X*= 2.500000037252903
Y*= 5.000000074505806E-001
Z*= 8.749999999999998
一変数極値問題の勾配法と同じく、解よりも大きな初期値を与えても収束できるようにプログラムすることはできる。これも課題としておく。
3.家計行動
いよいよ経済モデルの鍛錬にはいる。前節では収束計算を身につけたが、これを経済学に応用することはそれほど難しくはないだろう。ここでは簡単化のために勾配法を利用して家計行動をプログラムで解く技術を伝授する。家計行動としては、消費行動、労働供給行動、貯蓄行動を取り上げる。
消費行動
(問)家計のCobb=Douglas(コブ・ダグラス)型効用関数uは
![]()
であり、予算制約が
![]()
の効用最大化問題を求めよ。ここで、xとyは消費財、pxとpyはそれぞれの価格、Iは所得、αとβはウェイト・パラメータである。ただし、α=0.4、β=0.6、px=3、py=2、I=100とする。
(答)需要関数を導出するために、Lagrange(ラグランジュ)関数Φ(λはLagrange乗数)を設定し、消費財xとyについて偏微分して0とおき、式を整理する。
Lagrange関数
(1) xについて偏微分
(2) yについて偏微分
(3) (1)と(2)から導出される限界効用の比=価格比の条件
予算制約式と(3)式を整理して得られるxの需要関数
同じくyの需要関数
結局は各パラメータ(α、β、価格)と予算の値を上記の需要関数に代入すれば、
x=0.4×100/((0.4+0.6)×3)=13.33333
y=0.6×100/((0.4+0.6)×2)=30
のように、各消費財の最適な需要量が求まるが、何度も言うように、簡単な計算でもプログラミングで求めることに意味がある。
さて、どのようにプログラミングすべきであろうか。直観的には、xとyの組み合わせを家計に与えたときの効用水準uを計算し、それが最大となるようなxとyの組み合わせを求めるというものである。また、予算制約があるので、xとyの組み合わせはどちらか一方を決めてやれば必ず一つの組み合わせが決定される。つまり、結局は一変数極値問題と同じ問題にできるのである。
DOUBLE PRECISION ALPHA,BETA,PX,PY,I,X,H,MAXU,Y,U
ALPHA=0.4 !α
BETA=0.6 !β
PX=3 !px
PY=2 !py
I=100 !予算
X=0 !xの初期値
H=1 !ステップ幅
MAXU=0
100 Y=(I-PX*X)/PY !予算制約
U =X**ALPHA*Y**BETA !効用関数
IF (U.GE.MAXU) THEN
MAXU = U
X = X + H
GOTO 100
END IF
IF (U.LT.MAXU) THEN
X = X - H
H = H / 10
IF (H.LT..000001) GOTO 200 !収束判定
X = X + H
GOTO 100
END IF
200 WRITE(*,*) 'X*= ',X
WRITE(*,*) 'Y*= ',Y
WRITE(*,*) 'U*= ',U
END
これを実行するならば最適な家計の消費行動が得られる。
X*= 13.333332999999990
Y*= 29.999999000000010
U*= 21.689437517636550
労働供給行動
問)家計のCES型効用関数uは
![]()
であり、予算制約が
![]()
である。ただし、消費c、労働l、ウェイト・パラメータα、消費と余暇(1−l)の代替の弾力性ε=1/(1+μ)、賃金率wである。このときの最適な労働供給と消費を求めよ。ただし、α=0.1、ε=0.4、w=0.5とする。
(答)労働供給関数と消費需要関数を導出するためにLagrange関数Φ(λはLagrange乗数)を設定する。ただし、以下で細かい計算は省略する。
![]()
労働供給関数
消費需要関数 where ![]()
これに数値を代入すれば最適な労働供給量と消費量が計算できるが、プログラムではどのように表現できるのだろうか。少しばかり複雑に見えるが、原理的には先の消費行動と全く同じである。労働供給と消費の組み合わせを家計に与えてゆき、効用水準が最大となる組み合わせを求めるに過ぎない。
DOUBLE PRECISION W,EPS,MU,ALPHA,K,L,H,MAXU,C,U
W = .5 !賃金率
EPS = .4 !ε
MU = (1 - EPS) / EPS !μ
ALPHA = .1 !α
K = (ALPHA / (1 - ALPHA)) ** EPS !k
L = .01 !労働供給量の初期値
H = .01 !ステップ幅
MAXU = -10000
100 C = W * L !予算制約
U = ((1 - ALPHA) * C**(-MU) + ALPHA * (1
- L)** (-MU)) ** (-1 / MU) !効用関数
IF (U.GT.MAXU) THEN
MAXU = U
L = L + H
GOTO 100
END IF
IF (U.LT.MAXU) THEN
L = L - H
H = H / 10
IF (H.LT..000001) GOTO 200
L = L + H
GOTO 100
END IF
200 WRITE(*,*) 'L*= ',L
WRITE(*,*) 'C*= ',C
WRITE(*,*) 'U*= ',U
END
これを実行すれば最適な労働供給量と消費量、そして効用水準が得られる。
L*= 7.849999824538825E-001
C*= 3.925049912268295E-001
U*= 3.582746729376945E-001
貯蓄行動
(問)確実に5期間(s=1,・・・,5)生存する家計は、以下のような相対的危険回避度一定(CRRA)型のライフサイクル効用関数

を持っている。ただし、異時点間消費の代替の弾力性γ(逆数1/γは相対的危険回避度係数)、時間選好率δ、消費cである。遺産の存在を無視し、家計は各期において非弾力的な1単位の労働供給を行うとすると、家計の予算制約は
![]()
のように示される。ここで、貯蓄a、利子率r、賃金率wである。初期資産がゼロであるとし、6期目には確実に死亡するので貯蓄の端点条件
![]()
が成立する。また、利子率と賃金率の時間経路は与えられているとする。
このときの家計の最適消費経路(貯蓄経路)を求めよ。ただし、ws=1、rs=0.04、δ=0.0.1、γ=0.5とする。
(答)最適な消費(貯蓄)の変遷方程式を得るために、Lagrange関数Φ(λはLagrange乗数)を設定して計算する。計算過程は省略する。

消費のEuler(オイラー)方程式
さて、これをプログラムで書くとどうなるだろう。時間の概念が入ってきたので、これまでの技法とは少しばかり発想の転換が必要である。つまり、直観的な解説をするならば、Euler方程式はs期の消費が決まればs+1期の消費が決定するという関係を示しているから、結局は1歳時の消費c1が決まればすべての最適消費の変遷が決定できることになる。ただし、c1は生涯予算制約を満たすように決められなければならない。すなわち、確実に死亡する6歳時の貯蓄a6が0になるようなc1を収束計算で求めればよいのである。
DOUBLE PRECISION C(1:6), R(1:5), W(1:5),
A(1:6),U(1:5)
DOUBLE PRECISION DELTA,GAMMA,LCU
INTEGER S
DELTA = .01 !δ
GAMMA = .5 !γ
DO S = 1, 5
W(S) = 1 !賃金率
R(S) = .04 !利子率
END DO
A(1) = 0
C(1) = .01 !c1の初期値
H = .01 !ステップ幅
100 LCU = 0
DO S = 1,5
C(S + 1) = ((1 + R(S)) / (1 + DELTA)) **
GAMMA * C(S) !Euler方程式
A(S + 1) = (1 + R(S)) * A(S) + W(S) - C(S) !各期の予算制約
U(S) = (1 + DELTA) ** (-(S - 1)) * C(S)
** (1 - 1 / GAMMA) !各期の効用
LCU = LCU + U(S) !ライフサイクルの効用の集計
END DO
IF (A(6).GT.0) THEN
C(1) = C(1) + H
GOTO 100
END IF
IF (A(6).LE.0) THEN
C(1) = C(1) - H
H = H / 10
IF (H.LT..0000001) GOTO 200
C(1) = C(1) + H
GOTO 100
END IF
200 WRITE(*,*) ' S C A'
DO S = 1,5
WRITE(*,*) S,C(S),A(S)
END DO
WRITE(*,*) 'LIFECYLE UTILITY U= ',LCU
WRITE(*,*) 'A(6) = ',A(6)
END
これを実行した結果は以下の通りである。ちゃんと6歳時の貯蓄a6が近似的に0になっていることがわかる。
S C A
1 9.720599781740020E-001 0.000000000000000E+000
2 9.863918880969865E-001 2.793902182611419E-002
3 1.000934075896512 4.266469457719280E-002
4 1.015690656401968 4.343720642562321E-002
5 1.030664790364197 2.948403824184442E-002
LIFECYLE UTILITY U= 4.899866598622961
A(6) = -1.390619039920438E-006
4.静学的一般均衡分析
前節では市場均衡のない部分均衡モデルを取り扱った。より一般的な分析の枠組みにするためには、市場を登場させて一般均衡モデルへ拡張することが望まれよう。「其の四」では時間の概念のない静学的な一般均衡モデルのアルゴリズムが登場する。ここでやろうとすることは、いわゆる「応用一般均衡分析」と呼ばれる技法の基本形である。時間概念がないということは、資本蓄積がないことを意味する。また、簡単化のために労働供給外生モデルから始め、後に労働供給の内生化を図る。
労働供給外生モデル
(問)家計i(i=1,2)はCobb=Douglas型効用関数
![]()
を持つ。ただし、第j(j=1,2)財消費cj、それぞれの価格はpj、ウェイト・パラメータαである。また、家計が持つ労働供給LSと資本供給KSは固定的で、それぞれ賃金率wと利子率rで家計の予算を決定している。すなわち予算制約式は以下の通りである。
![]()
第j部門の企業のCobb=Douglas型生産関数は
![]()
である。ただし、効率パラメータΦ、労働の分配パラメータβ、労働需要L、資本需要Kである。
労働市場、資本市場、財市場はすべて完全競争である。このような一般均衡モデルの解を求めよ。ただし、α1=0.6、α2=0.4、β1=0.3、β2=0.6、Φ1=1.5、Φ2=1、LS1=1、KS1=5、LS2=10、KS2=1とする。家計1は資本家、家計2は労働家、企業1は資本集約産業、企業2は労働集約産業を意図して表現されていることに気づかれたい。
(答)家計の消費需要関数は3.で計算したように導出する。
![]()
![]()
一方、企業の要素需要関数は費用関数を生産関数の技術制約の下で最小化することで得られるので、Lagrange関数Ψ(λはLagrange乗数)を設定する。
この一階の条件を整理して求められるのが以下の単位あたり要素需要関数である。

完全競争を仮定しているので、均衡状態では企業の超過利潤Πがゼロになる。
![]()
以上より、財価格は要素価格の関数として表現できる。
![]()
最後に、市場均衡の条件を付記する。労働市場、資本市場、財市場は順に
![]()
![]()
で均衡するように各々の価格が決定される。
ここで、一つ注意したいのは、財価格が要素価格の関数になっていることである。つまり、労働市場と資本市場が均衡すれば、必ず財市場は均衡するように価格が決定される。すなわち、一次同次生産関数を仮定する場合は、財市場を無視して残る2つの要素市場の均衡条件を考えるだけでよいのである(次元縮小法)。したがって、労働と資本の超過需要関数ρは
![]()
![]()
となり、これらを0にするような賃金率wと利子率rの組合せが一般均衡解である。
しかも、Walras(ワルラス)法則により、労働と資本のうち、一つの市場が均衡すれば必ずもう一つの市場も均衡する。したがって、結局は超過需要を0にする賃金率wと利子率rの相対価格を決めればよいと言う問題に帰着する。そこで、賃金率wをニュメレールとしてw=1に固定し、超過需要を0にする利子率rを求めることでも問題の本質は変わらない。
さて、以上のモデルのように、市場が存在するようになると、もはや表計算ソフトでは計算が困難となるであろう。このような際に、数値解析が本領を発揮するのである。
DOUBLE PRECISION BETA(1:2), FAI(1:2), L(1:2),
K(1:2)
DOUBLE PRECISION Q(1:2), C(1:2,1:2), P(1:2),
LBARQ(1:2), KBARQ(1:2)
DOUBLE PRECISION U(1:2), ALPHA(1:2), LS(1:2),
KS(1:2)
DOUBLE PRECISION W,R,H,RHOK,RHOL
INTEGER I,J
ALPHA(1) = .6 !各パラメータを与える
ALPHA(2) = .4
BETA(1) = .3
BETA(2) = .6
FAI(1) = 1.5
FAI(2) = 1
W = 1 !賃金率はニュメレール
R = .01 !利子率の初期値
H = .01 !ステップ幅
LS(1) = 1 !賦存量を与える
KS(1) = 5
LS(2) = 10
KS(2) = 1
100 DO J = 1,2 !単位あたり要素需要
LBARQ(J) = (1 / FAI(J)) * (BETA(J) * R
/ ((1 - BETA(J)) * W)) ** (1 - BETA(J))
KBARQ(J) = (1 / FAI(J)) * ((1 - BETA(J))
* W / (BETA(J) * R)) ** BETA(J)
END DO
DO J = 1, 2 !財価格
P(J) = W * LBARQ(J) + R * KBARQ(J)
END DO
DO I = 1,2 !消費需要
C(I, 1) = ALPHA(I) * (W * LS(I) + R * KS(I))
/ P(1)
C(I, 2) = (1 - ALPHA(I)) * (W * LS(I) +
R * KS(I)) / P(2)
END DO
DO I = 1,2 !効用水準
U(I) = C(I, 1)** ALPHA(I) * C(I, 2)**(1
- ALPHA(I))
END DO
DO J = 1, 2 !財市場の均衡条件
Q(J) = C(1, J) + C(2, J)
END DO
DO J = 1,2 !要素需要
L(J) = LBARQ(J) * Q(J)
K(J) = KBARQ(J) * Q(J)
END DO !超過需要
RHOL = L(1) + L(2) - (LS(1) + LS(2))
RHOK = K(1) + K(2) - (KS(1) + KS(2))
IF (ABS(RHOL).LT..00001.AND.ABS(RHOK).LT..00001)
GOTO 200 !収束判定
IF (RHOK.GT.0) THEN
R = R + H
GOTO 100
END IF
IF (RHOK.LT.0) THEN
R = R - H
H = H / 10
R = R + H
GOTO 100
END IF
200 WRITE(*,*) 'W*= ', W, ' R*= ', R
WRITE(*,*) 'P1*= ', P(1), ' P2*= ', P(2)
WRITE(*,*) 'U1*= ', U(1), ' U2*= ', U(2)
WRITE(*,*) 'Q1*= ', Q(1), ' Q2*= ', Q(2)
WRITE(*,*) 'ρK= ',RHOK,' ρL= ',RHOL
END
これを実行すれば、一般均衡解を得ることができる。超過需要関数が近似的に0になっていることを確認しよう。
W*= 1.000000000000000 R*= 2.240309949925169
P1*= 2.159829218777758 P2*= 2.706502819023970
U1*= 2.633387122655496 U2*= 2.525191427727338
Q1*= 5.656490840754864 Q2*= 4.516827183778235
ρK= 5.588587370652931E-010 ρL= -1.252017156616603E-009
労働供給内生モデル
(問)家計i(i=1,2)のnested(入れ子型)CES型効用関数は
![]()
である。ただし、効用関数Uにおいては、労働供給LSとして、余暇
と合成価格pHの合成消費Hを選択する。さらに、合成消費の効用関数Hは第j(j=1,2)財消費cjをそれぞれの価格はpjとして選択している。ここで、αとγはウェイト・パラメータ、合成消費Hと余暇
の代替の弾力性ε=1/(1+μ)、消費財間の代替の弾力性σ=1/(1+η)である。それぞれの家計は資本KSと労働
を初期賦存量として保有するが、内生的な労働供給と固定的な資本供給が賃金率wと利子率rによって家計の予算を決定する。すなわち、予算制約式は以下の通りである。
![]()
企業と市場の設定については先問と同じなので省略する。
このような一般均衡モデルの解を求めよ。ただし、γ1=0.1、γ2=0.1、α1=0.6、α2=0.4、ε1=0.6、ε2=0.4、η1=0.7、σ2=0.5、σ1=0.3、β2=0.6、Φ1=1.5、Φ2=1、KS1=5、KS2=1、
1=5、
2=10 とする。
(答)先問の「労働供給外生モデル」と「労働供給行動」をまとめたようなモデルである。家計は2段階の効用関数を持ち、余暇と合成消費を選択し、さらに2つの消費財を選択することに特徴がある。しかしながら、労働供給関数と消費需要関数の導出法は何ら変わることはなく、Lagrange乗数法を段階的に利用すればよい。結果だけを提示しよう。
労働供給関数 where 
第1消費財需要
第2消費財需要
これらを利用すると間接効用関数Hが得られ、合成価格pHが財価格の関数で表現できる。
![]()
一方、企業行動と市場均衡については先問と同じなので省略する。
さて、以上までで記述されたモデルをプログラムで表現してみよう。基本的なアルゴリズムのフローチャートは先問と同じである。
DOUBLE PRECISION BETA(1 : 2), FAI(1 : 2),
L(1 : 2), K(1 : 2)
DOUBLE PRECISION Q(1 : 2), C(1 : 2, 1 : 2),
P(1 : 2)
DOUBLE PRECISION LBARQ(1 : 2), KBARQ(1 :
2),PH(1:2),H(1:2)
DOUBLE PRECISION U(1 : 2), ALPHA(1 : 2),
LS(1 : 2), KS(1 : 2), MU(1 : 2)
DOUBLE PRECISION GAMMA(1 : 2), EPS(1 : 2),
SIGMA(1 : 2), ITA(1:2)
DOUBLE PRECISION W,R,RST,RHOL,RHOK,LBAR(1:2),LST(1:2),MAXU
INTEGER I,J
GAMMA(1) = .1 !パラメータを与える γ
GAMMA(2) = .1
ALPHA(1) = .6 !α
ALPHA(2) = .4
EPS(1) = .6 !ε
EPS(2) = .4
SIGMA(1) = .7 !σ
SIGMA(2) = .5
DO I = 1,2
MU(I) = (1 - EPS(I)) / EPS(I) !μ
ITA(I) = (1 - SIGMA(I)) / SIGMA(I) !η
END DO
BETA(1) = .3 !β
BETA(2) = .6
FAI(1) = 1.5 !Φ
FAI(2) = 1
W = 1 !賃金率はニュメレール
R = .01 !利子率の初期値
RST = .01 !利子率のステップ幅
LBAR(1) = 5 !初期賦存量
KS(1) = 5
LBAR(2) = 10
KS(2) = 1
100 DO J = 1,2
LBARQ(J) = (1 / FAI(J)) * (BETA(J) * R
/ ((1 - BETA(J)) * W)) ** (1 - BETA(J)) !単位あたり要素需要
KBARQ(J) = (1 / FAI(J)) * ((1 - BETA(J))
* W / (BETA(J) * R)) ** BETA(J)
P(J) = W * LBARQ(J) + R * KBARQ(J) !財価格
END DO
DO I = 1, 2 !合成財価格
PH(I) = (ALPHA(I) ** SIGMA(I) * P(1) **
(1 - SIGMA(I)) + (1 - ALPHA(I)) ** SIGMA(I)
* P(2) ** (1 - SIGMA(I))) ** (1 / (1-SIGMA(I)))
END DO
DO I = 1,2
LS(I) = 0
LST(I) = .01
MAXU = -100000
200 H(I) = (W * LS(I) + R * KS(I)) * (ALPHA(I)
** SIGMA(I) * P(1) ** (1 - SIGMA(I)) + (1
- ALPHA(I)) ** SIGMA(I) * P(2) ** (1 - SIGMA(I)))
** (1 / (SIGMA(I) - 1))
U(I) = ((1 - GAMMA(I)) * H(I) ** (-MU(I))
+ GAMMA(I) * (LBAR(I) - LS(I)) ** (-MU(I)))
** (-1 / MU(I))
IF (U(I).GT.MAXU) THEN
MAXU = U(I)
LS(I) = LS(I) + LST(I)
GOTO 200
END IF
IF (U(I).LE.MAXU) THEN
LS(I) = LS(I) - LST(I)
LST(I) = LST(I) / 10
IF (LST(I).LT..000000001) GOTO 250
LS(I) = LS(I) + LST(I)
GOTO 200
END IF
250 END DO
DO I = 1, 2
C(I, 1) = (ALPHA(I) ** SIGMA(I) * (W *
LS(I) + R * KS(I))) / (P(1) ** SIGMA(I) *
(ALPHA(I) ** SIGMA(I) * P(1) ** (1 - SIGMA(I))
+ (1 - ALPHA(I)) ** SIGMA(I) * P(2) ** (1
- SIGMA(I))))
C(I, 2) = ((1 - ALPHA(I)) ** SIGMA(I) *
(W * LS(I) + R * KS(I))) / (P(2) ** SIGMA(I)
* (ALPHA(I) ** SIGMA(I) * P(1) ** (1 - SIGMA(I))
+ (1 - ALPHA(I)) ** SIGMA(I) * P(2) ** (1
- SIGMA(I))))
END DO
DO J = 1, 2
Q(J) = C(1, J) + C(2, J)
L(J) = LBARQ(J) * Q(J)
K(J) = KBARQ(J) * Q(J)
END DO
RHOL = L(1) + L(2) - (LS(1) + LS(2))
RHOK = K(1) + K(2) - (KS(1) + KS(2))
IF (ABS(RHOL).LT..0000001.AND.ABS(RHOK).LT..0000001)
GOTO 300 !収束判定
IF (RHOK.GE.0) R = R + RST
IF (RHOK.LE.0) THEN
R = R - RST
RST = RST / 10
R = R + RST
END IF
GOTO 100
300 WRITE(*,*) 'W*= ', W, ' R*= ', R
WRITE(*,*) 'P1*= ', P(1), ' P2*= ', P(2)
WRITE(*,*) 'PH1*= ', PH(1), ' PH2*= ', PH(2)
WRITE(*,*) 'U1*= ', U(1), ' U2*= ', U(2)
WRITE(*,*) 'Q1*= ', Q(1), ' Q2*= ', Q(2)
WRITE(*,*) 'LS1*= ', LS(1), 'LS2*= ', LS(2)
WRITE(*,*) 'ρK= ',RHOK,' ρL= ',RHOL
END
これを実行した結果は次の通りである。超過需要が近似的に0になっていることを確認しよう。
W*= 1.000000000000000 R*= 2.287144648878333
P1*= 2.191337541912493 P2*= 2.728994706920254
PH1*= 4.756474074454326 PH2*= 4.909958264810505
U1*= 2.894990638113609 U2*= 2.096787450962347
Q1*= 5.679516379568780 Q2*= 4.590382732363056
LS1*= 2.939999934285879LS2*= 8.309999814257026
ρK= -1.960647733056931E-008 ρL= 4.484284765737812E-008
5.動学的世代重複モデル
前節では静学的一般均衡モデルが提示された。そこでは、資本蓄積のない経済が描かれていたが、経済が行き着く先の長期均衡を意味する定常状態を分析していると考えても良いであろう。しかし、われわれの居住する世界は常に動学的であり、時間が刻々と刻まれる中、資本蓄積が経済の長期的な生産性に影響を与えていると考える方が自然である。つまり、動学的なモデルが、次なる課題として登場するのである。
ここでは、時間の概念をもつモデルの中の一つである、世代重複モデルを【第二部】の最後の鍛錬とする。周知の通り、Diamondが考案した動学的一般均衡モデルであり、標準的なマクロ経済学の教科書にも登場する有名なモデルである。しかも、財政学の分野においても、非常に有用性が高い。前置きはこれぐらいにして、2期間世代重複モデルの骨格について簡単に復習しよう(たとえば、Auerbach
and Kotlikoff(1987), Dynamic Fiscal Policy, Cambridge, Chaptar2を参照)。
時間t期に登場する世代tの家計は若年期yと老年期oを生存して若年期に非弾力的な1単位の労働供給を行う。家計tのCobb=Douglas型効用関数uは若年期の消費cy、老年期の消費coとして、以下のように表現される。
![]()
家計tのライフサイクル予算制約は、利子率r、賃金率wとして、
![]()
である。このとき、ライフサイクル貯蓄は以下の通りである。
![]()
効用最大化問題の1階の条件は
![]()
![]()
のように得られる。
また、ある世代が死亡すれば、人口成長した新たな世代が登場し、経済には常に若年世代と老年世代が同時に存在している。したがって、0世代の人口が所与のL0とし、人口成長率nとすれば、
![]()
が各世代の人口である。家計が非弾力的に1単位の労働を供給すると仮定しているため、この式が労働市場の均衡条件となる。
次に、集計された企業は以下のようなCobb=Douglas型生産関数を持つ。
![]()
ただし、総資本K、総労働L、資本の分配パラメータαである。このとき、一人あたり生産関数は以下のように表現できる。
![]()
ただし、一人あたり生産量
、一人あたり資本
である。利潤最大化の一階の条件により、以下の限界生産力原理が得られる。
![]()
![]()
最後に、労働市場以外の市場均衡条件を付記しておく。2期間モデルの場合、資本供給主体は老年期の家計による貯蓄に他ならないから、資本市場の均衡条件は
![]()
となる。これを一人あたり変数に修正すれば、
が得られる。財市場の均衡条件はEuler定理を利用すれば
![]()
である。ただし、総消費Cは
![]()
のように約束している。
このようなモデルの動学方程式はk0を所与として、効用最大化の一階の条件と限界生産力原理、そして資本市場の均衡条件を組み合わせることで得られる。
![]()
以上の一般均衡動学モデルから得られる移行過程と定常状態を計算せよ。ただし、β=0.7、α=0.3、k0=1、L0=1、n=0.01とする。また、定常状態の定義は
![]()
であり、経済成長率を次式で定義する。
![]()
以上の2期間世代重複モデルのプログラムは以下の通りである。
DOUBLE PRECISION K(0 : 100), U(0 : 100),
Y(0 : 100), SK(0 : 100)
DOUBLE PRECISION CY(0 : 100), CO(0 : 100),
A(0 : 100), SY(0 : 100)
DOUBLE PRECISION R(0 : 100), W(0 : 100),
L(0 : 100), GR(0 : 100),N
INTEGER T
50 FORMAT(I3,F8.5,F8.5,F8.5,F8.5,F8.5,F8.5,F8.5,F8.5,F8.5)
BETA = .7!各パラメータを与える
ALPHA = .3
SK(0) = .01!一人あたり資本ストックの初期値
L(0) = 1!人口の初期値
N = .01!人口成長率
DO T = 0,99
L(T + 1) = L(T) * (1 + N)!労働人口
W(T) = (1 - ALPHA) * SK(T) ** ALPHA!賃金率
R(T) = ALPHA * SK(T) ** (ALPHA - 1)!利子率
SK(T + 1) = (SK(T) ** ALPHA) * (1 - ALPHA)
* (1 - BETA)/(1+N)!動学方程式
END DO
DO T=0,99
SY(T) = SK(T) ** ALPHA!一人あたり生産
K(T) = SK(T) * L(T)!総資本ストック
Y(T) = K(T) ** ALPHA * L(T) ** (1 - ALPHA)!総生産
CY(T) = BETA * W(T)!若年期消費
A(T + 1) = (1 - BETA) * W(T)!貯蓄
CO(T+1) = A(T + 1) * (1 + R(T + 1))!老年期消費
U(T) = (CY(T) ** BETA) * (CO(T+1) ** (1
- BETA))!効用
IF (T.EQ.0) GOTO 75
GR(T-1) = (Y(T) - Y(T-1)) / Y(T-1)!成長率
IF (T.GT.30) GOTO 100
75 END DO
100 WRITE(*,*) 'POPULATION GROWTH RATE N=
', N
WRITE(*,*) ' T R W SK SY CY CO U Y GR'
DO T = 0,20
WRITE(*,50) T, R(T), W(T), SK(T), SY(T),
CY(T), CO(T), U(T), Y(T), GR(T)
END DO
END
これを実行した結果は以下の通りである。kとLの初期値を与えてkの動学を求める。0期からスタートして10期には定常状態に至る移行過程が見られる。どのような初期値でも定常状態に到達することを確認せよ。また、当然ながら、定常状態では人口成長率nと経済成長率gが一致(自然成長率)する。
POPULATION GROWTH RATE N= 9.999999776482582E-003
T R W SK SY CY
CO U Y GR
0 7.53566 .17583 .01000 .25119 .12308 .00000
.13742 .25119 .65841
1 2.36915 .28871 .05223 .41245 .20210 .17772
.21054 .41657 .17201
2 1.67430 .33503 .08576 .47861 .23452 .23163
.23967 .48823 .05610
3 1.50871 .35032 .09951 .50045 .24522 .25215
.24921 .51562 .02361
4 1.46231 .35504 .10405 .50720 .24853 .25878
.25215 .52779 .01407
5 1.44866 .35647 .10546 .50924 .24953 .26081
.25304 .53522 .01122
6 1.44460 .35690 .10588 .50985 .24983 .26143
.25331 .54122 .01037
7 1.44338 .35703 .10601 .51004 .24992 .26161
.25339 .54683 .01011
8 1.44301 .35707 .10605 .51009 .24995 .26167
.25341 .55236 .01003
9 1.44290 .35708 .10606 .51011 .24995 .26168
.25342 .55790 .01001
10 1.44287 .35708 .10606 .51012 .24996 .26169
.25342 .56349 .01000
11 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .56912 .01000
12 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .57481 .01000
13 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .58056 .01000
14 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .58637 .01000
15 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .59223 .01000
16 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .59815 .01000
17 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .60413 .01000
18 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .61018 .01000
19 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .61628 .01000
20 1.44286 .35708 .10606 .51012 .24996 .26169
.25342 .62244 .01000
ここまでの技法を完全に習得できたあなたは、数値解析による経済分析の基本技法をすでにマスターしていると言っても過言ではない。もし、あなたが財政学・公共経済学以外に興味があるならば、ここで得た基本技法を、理論的な貢献のために利用するも良し、他の分野に応用するも良しである。