所得格差の拡大と経済の不安定性の関係を表現するAB-SFCモデルを作るのが、当初思っていたよりもはるかに難しくて、悪戦苦闘しているのですが、それはともかく、気晴らしに、
のグラフを再現してみた。説明用のモデルなので、正直言ってかなりシンプル。エージェントベースじゃないってだけで楽なのに、このシンプルさはずるい。愚痴はこのぐらいにしておく。グラフはこんな感じ。
コードはPythonでこう書いた。Jupyter Notebook上で実行。plt.show()とか、plt.savefig()とか、Jupyterでは書かないのが習慣になってしまった。
import numpy as np
import matplotlib.pyplot as plt
TIME = 50
theta = 0.25
alpha1, alpha2 = 0.6, 0.1
Y = np.zeros(TIME)
C = np.zeros(TIME)
G = np.zeros(TIME)
T = np.zeros(TIME)
H = np.zeros(TIME)
YD = np.zeros(TIME)
dHs = np.zeros(TIME)
dHh = np.zeros(TIME)
G[:] = 20
for t in range(TIME):
if t == 0:
C[t] = 20
else:
"""
dHhはシミュレーション上では使わないが、
モデルに会計的矛盾が含まれていないかを確認するために使える。
厳密には dHs[t] = dHh[t] でなければならない。が、
数値計算の小数点の桁数が限られていることから、
計算機側の都合により、少しだけ誤差が出る。
"""
plt.plot(G, label="G")
plt.plot(C, label="C")
plt.plot(Y, label="Y")
plt.plot(T, label="T")
plt.plot(H, label="H")
plt.plot(YD, label="YD")
plt.legend()
会計的な矛盾がないかを確認するために、dHh(WikiではΔHh)とdHs(WikiではΔHs)が等しいことを確かめておく。
plt.plot(dHs - dHh)
計算機側の都合で、小さいものの誤差は生じている。10の-14乗以内。このくらいは勘弁してください。
政府の支出Gは外生変数なので、リアル世界よろしく、指数関数的にGを増加させてみると、様子が変わってくる。
財政支出(名目値)を指数関数的に増やしていくと、ほかの変数(名目値)も指数関数的に増えていった。そういうモデルなのだから、別に新しい発見ではないし、直感的にもあたりまえ体操だ。何かを主張できるほどのものでもないと思う。財政支出を増やすバージョンのコードはこんな感じ
TIME = 50
theta = 0.25
alpha1, alpha2 = 0.6, 0.1
Y = np.zeros(TIME)
C = np.zeros(TIME)
G = np.zeros(TIME)
T = np.zeros(TIME)
H = np.zeros(TIME)
YD = np.zeros(TIME)
dHs = np.zeros(TIME)
dHh = np.zeros(TIME)
G[:] = 20*1.02**np.arange(TIME)
for t in range(TIME):
if t == 0:
C[t] = 20
else:
"""
dHhはシミュレーション上では使わないが、
モデルに会計的矛盾が含まれていないかを確認するために使える。
厳密には dHs[t] = dHh[t] でなければならない。が、
数値計算の小数点の桁数が限られていることから、
計算機側の都合により、少しだけ誤差が出る。
"""
plt.plot(G, label="G")
plt.plot(C, label="C")
plt.plot(Y, label="Y")
plt.plot(T, label="T")
plt.plot(H, label="H")
plt.plot(YD, label="YD")
plt.legend()
plt.yscale("log")
会計的一貫性の維持の確認