上級マクロ経済学

第15回 マクロモデルと数値計算

Author

荻巣嘉高

1 数値計算とマクロモデル

数値計算が必要なモデル?

  • ややこしい計算が必要

  • たくさんの内生変数と連立方程式

  • 陽に解けない関数

  • ただし、今回我々は解析的に簡単に解けるソローモデルで数値計算の解を確かめる。

2 ソローモデル

基本的なセッティング

  • 時間をtで表す。
  • 企業は1単位存在する。
  • 家計は同質的でL_t単位存在し、1単位の労働量を供給する。さらに、人は生まれた途端から皆労働する。
  • 労働L_tと資本K_tを生産要素として、一般財のみを生産する経済。
    • 一般財は、食べることができ、腐らず、資本として将来の生産のために投資することもできる、スーパーな財。
  • 経済に存在する労働や資本は効率的に活用される。

生産関数

Y_t = F(K_t,L_t) ただし、Y_tは生産(GDP)、K_tは資本、L_tは労働。

  • Y_tは総所得とも解釈できる。
    • 三面等価の原則の一部(生産=所得)。
  • 細かいが、生産関数は次の性質を満たす。 \partial F/\partial K_t > 0,~ \partial F/\partial L_t > 0, \partial^2 F/\partial K_t^2 < 0, ~ \partial^2 F/\partial L_t^2 < 0

規模に関して収穫一定

  • F(K_t,L_t)規模に関して収穫一定である。
    • 一次同時関数であるということもできる。 z Y_t = z F(K_t,L_t)= F(zK_t, zL_t) を満たしている(zは実数)。

一人当たり生産

一人当たり生産をy_t\equiv Y_t/L_t、一人当たり資本ストックをk_t \equiv K_t/L_tとする。 生産関数をL_tで割ると、 \begin{aligned} \frac{Y_t}{L_t} &= F \left( \frac{K_t}{L_t} ,\frac{L_t}{L_t} \right) \\ &= F \left( \frac{K_t}{L_t} ,1 \right) \\ y_t &= F(k_t,1) \equiv f(k_t) \end{aligned}

労働者の行動

  • 労働者は所得のうちsだけの割合を貯蓄し、残りを消費する。
    • sは貯蓄率。
  • 労働者の貯蓄量は、sY_t \equiv S_t
  • 貯蓄は資金市場の供給源となる。

資金市場の均衡

  • 資金市場では、労働者の貯蓄したお金が、企業の生産設備投資に回されて運用される。
  • 均衡では、資金市場の需給が一致している。 \underset{(資金供給)}{S_t} = \underset{(資金需要)}{I_t}

資本蓄積

投資量は資本ストックの蓄積に用いられる。 K_{t+1} = K_{t} + I_t - \delta K_t

\delta : 資本減耗率(減価償却率)

人口成長率

  • nを人口成長率とすると、次期の人口L_{t+1}は、 L_{t+1} = (1+n) L_t

ソローモデルのシステム

\begin{aligned} Y &= F(K,L) \\ K_{t+1} &= K_t + I_t - \delta K \\ sY_t &= S_t \\ S_t &= I_t \\ L_{t+1} &= (1+n) L_t \end{aligned}

代入を繰り返せば、次のように整理できる。 \begin{aligned} Y &= F(K,L) \\ K_{t+1} &= K_t + sY_t - \delta K \\ L_{t+1} &= (1+n) L_t \end{aligned}

一人当たりに変換

  • 一人当たり変数のダイナミクスを記述するのが慣例。

生産関数の規模に関する収穫一定の性質を用いれば、 \begin{aligned} \frac{Y_t}{L_t} &= F\left(\frac{K_t}{L_t}, \frac{L_t}{L_t} \right) \\ &= F\left(k_t, 1 \right) \equiv f(k_t) \\ y_t &= f(k_t) \end{aligned} ただし、 y_t \equiv \frac{Y_t}{L_t}, ~ k_t \equiv \frac{K_t}{L_t}

この変形で、内生変数がY_t, K_tから、y_t, k_tに変換された。

一人当たりの資本蓄積

資本蓄積式を両辺L_tで割ると、

\begin{aligned} \frac{K_{t+1}}{L_t} &= \frac{K_t}{L_t} + s \frac{Y_t}{L_t} - \delta \frac{K_t}{L_t} \\ \frac{K_{t+1}}{L_{t+1}} \frac{L_{t+1}}{L_t} &= k_t + s y_t - \delta k_t \\ (1+n) k_{t+1} &= k_t + s f(k_t) - \delta k_t \\ k_{t+1} &= \frac{k_t + s f(k_t) - \delta k_t}{1+n} \\ \end{aligned}

k_tの変動

\Delta k_t \equiv k_{t+1} - k_tと定義する。 \Delta k_t = \frac{s f(k_t) - (\delta + n )k_t }{1+n}

  • sf(k_t) > (\delta + n) k_tならば、\Delta k_t > 0
    • 次期にかけてk_tは増加する。
  • sf(k_t) < (\delta + n) k_tならば、\Delta k_t < 0
    • 次期にかけてk_tは減少する。

定常状態

  • ソローモデルでは、k_tが内生的に変動して、定常状態に移行する。

\Delta k_t \equiv k_{t+1} - k_t = 0 であるとき、経済は定常状態にあるという。

定常状態におけるk_t=k^*は、次の等式を満たすように決まる。 sf(k^*) = (\delta + n) k^*

ソローモデルをコンピュータ上で表現したい場合、次の2つが必要。

  • 一般型関数を具体的な形で特定化
  • モデルの外生変数およびパラメータの値の決定
    • パラメータの設定などをすることを、カリブレーションなどという。
    • カリブレーションは、内生変数にターゲットを当てて、モデルから推計することもある。

関数の特定化

F(K_t, L_t) = K^{\alpha} L^{1-\alpha} としよう。 このとき、 f(k_t) = k_t^{\alpha} である。

解析解の確認

関数を特定化したので、この場合の解析的な解は手で解いて得ることができる。 s k^{*\alpha} = (\delta + n) k^* k^*について解けば、 k^{*} = \left(\frac{s}{\delta + n}\right)^{\frac{1}{1-\alpha}}

パラメータの設定

我々が用いているソローモデルでは、次のパラメータが存在している。

  • \alpha:資本分配率
  • \delta:資本減耗率
  • n:人口成長率
  • s:貯蓄率

これらをデータ等から当てはめる。

カリブレーション

  • \alpha=0.33
    • 経験的に、資本分配率は1/3
  • \delta = 0.066
    • 内閣府データより、固定資本減耗/固定資本ストックの値を計算(1994-2022平均)
  • n = 0:人口成長率
    • 日本は人口減少社会だが、便宜的に0とする
  • s=0.267:貯蓄率
    • 内閣府データより、1-最終消費支出/GDP(1994-2023平均)

モデルを描写する

Code
import numpy as np
import matplotlib.pyplot as plt

## パラメータを決める
alpha = 0.33
delta = 0.066
n = 0
s = 0.267


def f(k):
    return k**alpha

k = np.linspace(0 , 15, 1000)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(k,s*f(k), label = r"$sf(k_t)$")
ax.plot(k,(delta + n)*k, label = r"$(\delta+n)k_t$")
ax.legend()
fig.show()

2025-09-13T13:07:11.671037 image/svg+xml Matplotlib v3.9.2, https://matplotlib.org/

定常状態を算出

g(k) = sf(k_t) - (\delta + n)k_t = 0 を用いて、定常状態を算出

Code
import scipy.optimize as opt

def g(k):
    return s*f(k)-(delta+n)*k

kstar = opt.root_scalar(g, bracket=(0.1,10)).root

k = np.linspace(0 , 15, 1000)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(k,s*f(k), label = r"$sf(k_t)$")
ax.plot(k,(delta + n)*k, label = r"$(\delta+n)k_t$")
ax.plot(kstar,s*f(kstar), "o")
ax.legend()
fig.show()

print(f"数値計算の解 : {kstar}")
print(f"解析計算の解 : {(s/(delta+n))**(1/(1-alpha))}")
数値計算の解 : 8.052326607315457
解析計算の解 : 8.05232660731546

2025-09-13T13:07:11.717849 image/svg+xml Matplotlib v3.9.2, https://matplotlib.org/

黄金率水準

定常状態での消費を最大にするようなk^*を、資本の黄金率水準という。

  • 消費は所得のうち貯蓄しなかった分 c = (1-s)f(k_t) = f(k_t) - sf(k_t)
  • 定常状態では、sf(k^*)=(\delta + n)k^*なので、 c^* = f(k^*) - (\delta + n)k^*

c^*を最大にするk^*は、d c^*/ d k^* = 0を満たすk^*、つまり f'(k^*) = \delta + n

これは、f(k_t) = k_t^{\alpha}ならば、 \alpha k^{*\alpha-1} = \delta + n なので、 k^{*} = \left(\frac{\alpha}{\delta + n}\right)^{\frac{1}{1-\alpha}}

政策の効果

  • 定常状態の式と見比べるとわかるが、s = \alphaならば黄金率水準のk^*が達成される。
    • データでは、s=0.267\alpha = 0.33なので、日本はやや過小貯蓄?
    • 貯蓄を高めるような施策は受け入れられる?

現在s=0.267の定常状態にあるとして、貯蓄率s0.33に引き上げた場合に、消費はどう動く?

  • ”23%の貯蓄率上昇”というかなり強い政策。
  • 政策変更で\Delta k_t>0となり、k_tが上昇していくはず。
    • k_tからk_{t+1}を計算して、消費(1-s)f(k)を計算する。
    • k_{t} = k_{t+1}と置き換えて、繰り返す。

  • 消費の一時的な減少を受け入れなければならない。
    • 場合によっては世代対立が生じる。
    • 貯蓄率を上げる政策は合意が得られにくい可能性がある。
Code
import scipy.optimize as opt

k_list = []
c_list = []

s0 = 0.267
s1 = 0.33

k0 = (s0/(delta+n))**(1/(1-alpha))

def kp(k):
    ## 政策変更後のk_{t+1}
    return (k + s1*f(k) - delta*k)/(1+n)

def c(k,s):
    ## 貯蓄率sのときの消費
    return  (1 - s)*f(k)

## 初期値のkとcを記録する。
k_list.append(k0)
c_list.append(c(k0,s0))

## 次期以降のkをcを記録する。
periods = np.arange(200)
for t in np.arange(len(periods)-1):
    k1 = kp(k0)
    k_list.append(k1)
    c_list.append(c(k1,s1))
    k0 = k1

fig = plt.figure()
ax0 = fig.add_subplot(211)
ax0.plot(periods, k_list)
ax0.set_ylabel("k")
ax1 = fig.add_subplot(212)
ax1.plot(periods, c_list)
ax1.set_ylabel("c")

fig.show()

2025-09-13T13:07:11.770001 image/svg+xml Matplotlib v3.9.2, https://matplotlib.org/

まとめとDiscussion

  • ソローモデルから数値計算の基本的な応用を概説。
  • ソローモデルは関数の特定化によっては手で簡単に解ける。
    • 数値計算をする必要はとくにないはず。
  • ただし、現実的な含意を導き出すためには、モデルはさらに拡張され、複雑化していく。
    • 生産関数のパラメータ(\alpha)は正しいか。
    • 生産関数の特定化は正しいか。
    • 消費者の最適化を入れたラムゼイモデル
    • 企業の投資選択を入れたモデル
    • 確率的な技術革新や労働生産性の変化
    • 価値関数の導入
  • 複雑化したモデルと戦うためには、数値計算は大きな武器になりうる。
    • 複雑で多数のパラメータを含むモデルを解くことができる。
    • 定量的な含意を導くことができる。

Appendix

PWTからデータを計算すると、

  • 資本分配率は0.40程度。
    • 0.33よりも大きいのでは?
  • 政府が支出に占める割合は無視できるのか?
  • 貯蓄は本当に過小か?
  • 生産技術のイノベーションや利子率の働きは?
  • 何を用いてデータフィットをする?
    • 資本/労働者比率は近年でほぼ停止
    • 資本/(労働者*労働時間)もほぼ停止
      • 定常状態?
    • 資本/人口比率はまだ上昇傾向
      • 定常状態ではない?