El modelo esta caracterizado completamente por tres ecuaciones. La primera es la que caracteriza la productividad de reserva (PR): $$y_{R} =b+\frac{m(\theta )\beta }{r+\lambda }\int_{y_{R}}^{\overline{y}}\left( y-y_{R}\right) f(y)dy$$
La segunda es la condición de creación de empleo (CCE): $$c =\frac{m(\theta )}{\theta }\frac{1-\beta }{r+\lambda }\int_{y_{R}}^{\overline{y}}(y-y_{R})f(y)dy$$
La tercera es la curva de Beveridge: $$m\left( \theta \right) \left( 1-F\left( y_{R}\right) \right) u=\lambda\left( 1-u\right)$$
La parametrización que usamos es la siguiente: (1) $m(\theta)= A \theta ^\alpha$ y (2) $\log x \sim N(\mu, \sigma)$.
El algoritmo de solución es el siguiente:
# Importamos los módulos necesarios
import numpy as np
import scipy.stats as stats
from scipy import integrate
from scipy.optimize import root
Definimos la ecuación de Bellman para $y_R$:
def TyR(yr, θ, prms):
b, λ, A, α, β, r, c, F = prms
intf = lambda y: (y - yr)*F.pdf(y)
yr1 = b + ((A*(θ**α)*β)/(λ+r))*integrate.quad(intf,yr,np.inf)[0]
return yr1
Definimos la ecuación de creación de empleo:
def JCC(θ, yr, prms):
b, λ, A, α, β, r, c, F = prms
intf = lambda y: (y - yr)*F.pdf(y)
out = c - (A*(θ**α)*(1 - β))/(θ*(r+λ))*integrate.quad(intf,yr,np.inf)[0]
return out
Definimos el procedimiento que resuelve el modelo:
def SolveModel(prms, tol = 1e-6, step=0.5):
b, λ, A, α, β, r, c, F = prms
yr0, θ0 = 1, 1
diftheta = 1
while diftheta>tol:
difyr = 1
print('**** Solving for yr given theta')
while difyr>tol:
yr1 = TyR(yr0, θ0, prms)
difyr = np.abs(yr1-yr0)
print('**** convergence: ', difyr)
yr0 = step*yr1 + (1-step)*yr0
yrout = yr1
print('Solving for theta')
θ1 = root(lambda x: JCC(x, yrout, prms), θ0).x[0]
diftheta = np.abs(θ1-θ0)
print('convergence: ',diftheta)
θ0 = step*θ1 + (1-step)*θ0
θout = θ1
uout = λ / ((A*(θout**α))*(1-F.cdf(yrout)) + λ)
vout = θout*uout
return yrout, θout, uout, vout
Resolvemos el modelo:
# Parametros
b = 1
λ = 0.05
A = 1
α = 0.5
β = 0.5
r = 0.1
μ = 0.8
σ = 0.5
c = 1.0
F = stats.lognorm(s = σ, loc = 0, scale = np.exp(μ))
parameters = [b, λ, A, α, β, r, c, F]
# Solución
yR, θ, u, v = SolveModel(parameters)
print('Productividad de reserva = ', yR)
print('Tightness = ', θ)
print('Tasa de desempleo = ', u)
print('Tasa de vacancias = ', v)