カプランとメンツィオーズ 買い物時間モデル これは、定常状態の均衡のために変数を決定する必要がある場合の、検索と一致する失業モデルです。
- $ J $:労働者の価値
- $ u $:失業率
彼らの 定常状態 値($ \ dot J、\ dot u = 0 $)は次の連立方程式で与えられます。
$$ J = \ frac {(1- \ gamma)(S(u)+ y_e - y_u)} {\ rho + \ delta} \\ u = \ frac {\ delta} {\ delta + \ lambda(J)} $$
さらに、「価格分散による商品からの利益」と賃金は、それぞれ(12ページの式(6)、(7))で与えられます。
$$ S(u)= A(u)+ B(u)* w(u)\\ w(u)= y_u + \ gamma *(S(u)+ y_e - y_u) $$
$ A(u)、B(u)$は一連の定数とパラメータのプレースホルダです。$ u $に依存する場合があります。私は賃金を差し引いて解決します
$$ \チルダS(u)= \ frac {A(u)+ B(u)(y_u + \ gamma(y_e - y_u)} {1 - B(u)\ gamma} $$
次に、著者の校正とこのバージョンの$ \ tilde S(u)$を使用して、$ J $と$ u $の両方について解くことができます。ここにあります:
それらのキャリブレーションを考えると、それらは$(u、J)$空間上で2つの興味深い定常状態平衡を得ます:$(0.053、11.3)$と$(0.081、9.5)$。私の$ u(J)$グラフはこれら両方の軌跡を通るので正しいようです。しかし、$ J(u)$行は、$ u $を考えると「小さすぎる」ようです。
計算がやや難しい唯一のオブジェクトは$ S(u)$です。置換のステップが実際にうまくいくことを確認しました。$ \ tilde S(u)$を使用して$ w(u)$を計算し、$ S(u、w(u))== \ tilde S(u)$であることを確認しました。 (数値近似まで)。
私は誰かが私の過ちを見つけることを求めているのではなく、むしろそれをどこで探すべきかを尋ねています。興味のある人のために、これが私のPythonコードです:
# solves simple shopping time model
# only on the steady state equilibria
import numpy as np
import matplotlib.pyplot as plt
# all parameters for monthly
class Parameters(object):
def __init__(self):
self.psi_u = 0.27 # search twice, unemployed
self.psi_e = 0.02 # search twice, employed < psi_u
self.gamma = 0.74 # bargaining power
self.alpha = 1 # BJ exponent in utility
self.r = 15.7 # reservation price, home transformation
self.c = 1 # production technology firm
self.y_u = 4.91 # efficiency home
self.y_e = 1 # efficiency firm
self.rho = 0.003 # depreciation rate
self.delta = 0.024 # separation rate
self.phi = 1.24 # matching function efficiency
self.k = 8.02 # search costs of labor for firm
def b(u, Param):
return 1 + Param.psi_e + u*(Param.psi_u - Param.psi_e)
def s(u, Param):
return 1 - u
def sigma(u, Param):
return s(u, Param)/b(u, Param)
# seller meets buyer
def muOfU(u, Param):
return np.minimum(1/sigma(u, Param), 1)
# buyer meets seller
def nuOfU(u, Param):
return np.minimum(sigma(u, Param), 1)
def lambdaOfJ(J, Param):
result = ( ((J/Param.k)**(Param.phi) - 1 )**(-1) + 1 )**(-float(1)/Param.phi)
result[np.isnan(result)] = 0
return result
# not needed atm, replaced within lambdaOfJ (instead of lambdaOfTheta)
def thetaOfJ(J, Param):
#eta(theta)J = k
#etaInverse = (eta^(-phi) - 1)^(1/phi)
x = Param.k/J
return (x**(-Param.phi) - 1)**(1/Param.phi)
def STilde(u, Param):
A1 = muOfU(u, Param)*u*(1+Param.psi_u)/b(u, Param)
A2 = 1 - 2*Param.psi_u*nuOfU(u, Param)/(1+Param.psi_u)
A3 = Param.alpha*Param.y_u*(Param.r-Param.c)/Param.r
A = A1*A2*A3
B1 = muOfU(u, Param)*(1-u)*(1+Param.psi_e)/b(u, Param)
B2 = 1 - 2*Param.psi_e*nuOfU(u, Param)/(1+Param.psi_e)
B3 = Param.alpha*(Param.r-Param.c)/Param.r
B = B1*B2*B3
result = (A + B*(Param.y_u + Param.gamma*(Param.y_e - Param.y_u) ))/(1 - B*Param.gamma)
return result
def S(u, wages, Param):
A1 = muOfU(u, Param)*u*(1+Param.psi_u)/b(u, Param)
A2 = 1 - 2*Param.psi_u*nuOfU(u, Param)/(1+Param.psi_u)
A3 = Param.alpha*Param.y_u*(Param.r-Param.c)/Param.r
A = A1*A2*A3
B1 = muOfU(u, Param)*(1-u)*(1+Param.psi_e)/b(u, Param)
B2 = 1 - 2*Param.psi_e*nuOfU(u, Param)/(1+Param.psi_e)
B3 = Param.alpha*(Param.r-Param.c)/Param.r
B = B1*B2*B3
result = A + B*wages
return result
def w(u, Param):
return Param.y_u + Param.gamma*(STilde(u, Param) + Param.y_e - Param.y_u)
#result2 = A + B*w(u, Param)
def JSteadyState(u, Param):
A = (1-Param.gamma)*(STilde(u, Param) + Param.y_e - Param.y_u )
B = Param.rho + Param.delta
return A/B
def uSteadyState(J, Param):
B = Param.delta + lambdaOfJ(J, Param)
return Param.delta/B
Param = Parameters()
# compute J(u) and u(J)
uGrid = np.linspace(0.001, 0.2, 100)
J = JSteadyState(uGrid, Param)
JGrid = np.linspace(5, 20, 1000)
u = uSteadyState(JGrid, Param)
# verify computation of S(u)
# wages given STilde:
wages = w(uGrid, Param)
# S given u, STilde
SOriginal = S(uGrid, wages, Param)
SWithTilde = STilde(uGrid, Param)
print max(abs(SWithTilde - SOriginal)) # 8.881784197e-16
# plot J(u) and u(J)
plt.plot(u, JGrid, label='u(J)')
plt.plot(uGrid, J, label='J(u)')
plt.legend()
plt.xlabel('u')
plt.ylabel('J')
plt.show()