Kaplan y Menzio modelo de tiempo de compra es un modelo de desempleo de búsqueda y emparejamiento en el que, para un equilibrio de estado estacionario, necesitamos determinar a variables:
- $J$ : Valor de un trabajador
- $u$ : tasa de desempleo
Su estado estable valores ( $\dot J, \dot u = 0$ ) vienen dadas por el siguiente sistema de ecuaciones:
$$ J = \frac{(1-\gamma)(S(u) + y_e - y_u)}{\rho + \delta}\\ u = \frac{\delta}{\delta + \lambda(J)} $$
Además, los "beneficios del bien con dispersión de precios" y los salarios, respectivamente, vienen dados por (ecuaciones (6), (7) de la página 12)
$$ S(u) = A(u) + B(u)*w(u)\\ w(u) = y_u + \gamma*(S(u) + y_e - y_u) $$
Dónde $A(u), B(u)$ son algunos marcadores de posición para un montón de constantes y parámetros, que pueden depender de $u$ . Yo saco los sueldos y resuelvo como
$$ \tilde S(u) = \frac{A(u) + B(u)(y_u + \gamma(y_e - y_u)}{1 - B(u)\gamma} $$
Entonces, utilizando la calibración de los autores y esta versión de $\tilde S(u)$ Puedo resolver ambos $J$ y $u$ . Aquí está:
Dada su calibración, obtienen dos interesantes equilibrios de estado estacionario en el $(u, J)$ espacio: $(0.053, 11.3)$ y $(0.081, 9.5)$ . Mi $u(J)$ El gráfico parece ser correcto ya que pasa por estos dos loci. El $J(u)$ línea, sin embargo, parece ser "demasiado pequeña" dado $u$ .
El único objeto algo difícil de calcular es $S(u)$ . He comprobado que mi paso de reemplazar realmente funciona: He calculado $w(u)$ utilizando $\tilde S(u)$ y verificó que $S(u, w(u)) == \tilde S(u)$ (hasta una aproximación numérica).
No pido que alguien encuentre mi error, sino dónde buscarlo: He comprobado todo lo que se me ha ocurrido y estoy algo atascado. Para los interesados, aquí está mi código 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()