119. Equilibrium Search and Unemployment#

In addition to what’s in Anaconda, this lecture will need the following libraries:

!pip install quantecon

Hide code cell output

Requirement already satisfied: quantecon in /home/runner/miniconda3/envs/quantecon/lib/python3.13/site-packages (0.13.1)
Requirement already satisfied: numba>=0.56.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.13/site-packages (from quantecon) (0.65.1)
Requirement already satisfied: numpy>=1.17.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.13/site-packages (from quantecon) (2.4.6)
Requirement already satisfied: scipy>=1.5.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.13/site-packages (from quantecon) (1.18.0)
Requirement already satisfied: llvmlite<0.48,>=0.47.0dev0 in /home/runner/miniconda3/envs/quantecon/lib/python3.13/site-packages (from numba>=0.56.0->quantecon) (0.47.0)

119.1. Overview#

This lecture studies Lucas and Prescott [1974], the labor-market companion to the paper on investment that we studied in Investment Under Uncertainty.

The two papers were written by the same authors at the same place within a few years of each other, and they use the same tools: a Bellman equation solved by successive approximations, Blackwell’s theorem, and a Markov process whose invariant distribution describes the long run.

What changes is the question.

Lucas and Prescott’s target was the natural rate of unemployment of Friedman [1968] and Phelps [1967].

In their words, the language used in discussing the natural rate “suggests that it may have the properties of a competitive equilibrium”, yet

there exist no theoretical models in which a nonzero equilibrium unemployment rate is determined and its properties studied.

Without such a model there was no framework in which to pose the welfare questions that unemployment raises, and no account of why average unemployment differs so much from one country to another.

The search literature of the 1960s could not supply one.

Job Search I: The McCall Search Model describes that literature’s central problem: a worker draws wage offers from a known distribution and decides when to stop searching.

It is a model of an individual, and it takes the wage distribution as given.

Lucas and Prescott argue that the questions they care about cannot be answered that way:

optimal labor supply behavior and the wage distribution on which it is based must be simultaneously determined within a model of market (as opposed to individual) behavior.

They build an economy of many spatially separate markets, each with its own randomly shifting demand for labor.

The picture comes from Edmund Phelps’s “island economy”, which they call “the direct ancestor of the present model” [Phelps and others, 1970].

It differs from the islands of Lucas [1972], where employment fluctuates with aggregate demand but unemployment, as an activity, is not distinguished from leisure.

Here it is distinguished.

Workers in a market can work at the wage that clears it, or leave.

Leaving means earning nothing this period and arriving somewhere else next period, so unemployment is the act of moving between markets.

Everything is competitive, everyone optimizes, and expectations are rational in the sense of Muth [1961] and of the investment paper, Lucas and Prescott [1971]: the distribution that workers use to evaluate their prospects is the one that their own decisions generate.

The paper’s central object is a single number, \(\lambda\), the expected present value of search.

An individual market takes \(\lambda\) as given, in the way a competitive firm takes a price as given.

Economy-wide, \(\lambda\) adjusts until the workforce that markets want to hold equals the workforce the economy has.

In the paper’s equilibrium some markets always have more workers than they want to employ, so unemployment is positive in every period; Three regions, one transition law explains when the computable version that we use keeps that property.

Lucas and Prescott also argue that this unemployment need not signal an inefficiency.

Note

There is no congestion externality in the model, and there is no matching function, no bargaining and no wage rigidity: unemployment is there because moving takes a period, and in equilibrium somebody is always moving.

The searching worker who crowds his fellows does so in the same way that any seller of a good crowds other sellers, and \(\lambda\), like any other equilibrium price, signals what the paper calls “the correct social return” to an additional searcher.

The paper proves no welfare theorem, and it leaves open whether actual labor markets have important external effects.

Efficiency shows that within the model the claim can be made exact: the stationary equilibrium maximizes the expected present value of surplus attainable from its own distribution of workers when moving takes a period, and \(\lambda\) is the present value of a worker added to the pool of searchers.

The lecture first sets out the theory: a worker’s problem, the two thresholds that describe a market, and the law of motion of a market’s workforce. It then computes an example, closes the economy by finding the equilibrium \(\lambda\), and asks how workers could learn it.

After a look inside the equilibrium, at markets, workforces and wages, it proves the efficiency claim and relates the model to its descendants. The exercises take up the paper’s comparative statics, a moving cost, the paper’s own two-state examples, undirected search, the Phillips curve, and a numerical check of efficiency.

Let’s start with some imports:

import warnings
import numpy as np
import matplotlib.pyplot as plt
import quantecon as qe
from collections import namedtuple
from scipy.optimize import brentq

119.2. The economy#

There are many markets, each with its own state of demand.

Demand shifts are independent across markets, so that aggregate demand is constant, and persistent within a market, so that today’s demand tells a worker something about tomorrow’s.

In each market a competitive industry produces a single good with labor as the only input.

If \(p = D(s, Q)\) is the inverse demand curve in demand state \(s\) and \(q(n)\) is the production function of each of the \(m\) identical firms, then profit maximization sets the wage equal to the marginal value product of labor, and the function

(119.1)#\[R(s, n) = D\big(s, m\,q(n)\big)\, q'(n)\]

summarizes everything about the demand side of this labor market.

Lucas and Prescott discard \(D\) and \(q\) and place assumptions directly on \(R\): it is positive, bounded and differentiable, with

\[ R_s(s,n) > 0, \qquad R_n(s,n) < 0 . \]

The demand state \(s\) follows a Markov process with transition density \(f(s', s)\) possessing a unique stationary distribution.

Its conditional distribution function \(F(s', s)\) is decreasing in \(s\), so that higher demand today makes higher demand tomorrow more likely.

119.2.1. Timing#

A market begins a period with a workforce \(y\), which is the most it can employ.

Then, within the period:

  1. demand \(s\) is realized and the labor market clears, employing \(n \le y\) workers at the wage \(w = R(s, n)\)

  2. the \(y - n\) workers who are not employed earn nothing and join the pool of searchers

  3. employed workers remain in the market into next period; searchers are allocated across markets and arrive next period

So a worker is unemployed for exactly one period each time he moves, and the unemployed are workers in transit.

119.3. A worker’s problem#

Let \(v(s, y, \lambda)\) be the expected present value of the earnings of a worker who finds himself in a market with demand \(s\) and workforce \(y\) at the start of a period, and let \(\beta \in (0,1)\) be the discount factor.

Lucas and Prescott arrive at a functional equation for \(v\) by considering three cases.

Case A: some workers leave. Departing workers get \(\lambda\). The workers who stay can have no more, since the leavers could have stayed, and no less, since they could have left. So \(v = \lambda\).

Case B1: all workers stay and no new workers arrive. Current employment is \(y\), the wage is \(R(s,y)\), and next period’s workforce is still \(y\):

\[ v(s,y,\lambda) = R(s,y) + \beta \int v(s', y, \lambda) f(s', s)\,ds' . \]

Case B2: all workers stay and new workers arrive. Arriving workers are searchers, so the discounted expected value of being in this market next period, \(\beta \int v f\, ds'\), must be exactly \(\lambda\), the value of the search that brought them:

\[ v(s,y,\lambda) = R(s,y) + \lambda . \]

When the discounted continuation value at the unchanged workforce is below \(\lambda\), nobody arrives and case B1 applies; when it would exceed \(\lambda\), arrivals bring it down to \(\lambda\) and case B2 applies.

Either way the continuation is the smaller of \(\lambda\) and \(\beta \int v(s', y, \lambda) f(s', s)\, ds'\), which is the \(\min\) below.

Case A applies when even that leaves a worker with less than \(\lambda\), and then he takes \(\lambda\), which is the \(\max\).

All three cases collapse into one equation:

(119.2)#\[v(s, y, \lambda) = \max\left\{\lambda,\; R(s,y) + \min\left[\lambda,\; \beta \int v(s', y, \lambda) f(s', s)\, ds' \right]\right\} .\]

The two operators do different jobs. The max is the worker’s own option: he can always leave and collect \(\lambda\).

The min is not the worker’s choice at all. It is a restriction that competition among searchers imposes: if the continuation value in this market exceeded \(\lambda\), searchers would flow in until it did not.

Proposition 119.1

For each \(\lambda\), equation (119.2) has a unique bounded continuous solution \(v\), and successive approximations converge to it from any starting point.

The solution is nondecreasing in \(s\) and in \(\lambda\) and nonincreasing in \(y\).

The proof of Proposition 119.1 is the one used throughout Investment Under Uncertainty: the operator defined by the right side of (119.2) is monotone and satisfies a discounting condition, so Blackwell’s theorem [Blackwell, 1965] applies.

Monotonicity in \(s\) is where the assumption that \(F(s', s)\) decreases in \(s\) is used. A worker is worse off the more crowded his market, because a larger workforce means a lower marginal product and a lower wage, which is why \(v\) is nonincreasing in \(y\).

119.4. Employment, wages, and two thresholds#

With \(v\) in hand, the rest of a market’s behavior follows from two threshold rules.

119.4.1. How many work#

Let \(\bar n(s, \lambda)\) be the employment at which the marginal worker is just indifferent between staying and searching:

(119.3)#\[R(s, \bar n) + \beta \int v(s', \bar n, \lambda) f(s', s)\, ds' = \lambda .\]

The left side is what a worker gets by staying when employment and next period’s workforce are both \(\bar n\): this period’s wage plus the discounted continuation. It is nonincreasing in \(\bar n\).

If marginal revenue reaches zero at some workforce, as it does in the computable version below, the value of being in a market that crowded has fallen to \(\lambda\), the left side is flat at \(\beta \lambda < \lambda\), and (119.3) cannot hold there.

On an integer workforce grid, (119.3) rarely holds with equality, and employment is the largest \(\bar n\) at which the left side is at least \(\lambda\).

Employment is then

(119.4)#\[n(s, y, \lambda) = \min\{\bar n(s,\lambda),\; y\}, \qquad w = R(s, n) ,\]

and unemployment in this market is \(y - n\), which is positive exactly when the workforce exceeds \(\bar n\).

119.4.2. How many arrive#

A market attracts searchers only when it employs its whole workforce and the continuation value still exceeds \(\lambda\).

Let \(\bar y(s,\lambda)\) be the workforce at which that stops being true:

(119.5)#\[\beta \int v(s', \bar y, \lambda) f(s', s)\, ds' = \lambda .\]

Arrivals fill a market up to \(\bar y(s, \lambda)\) and no further. Note that \(\bar y \le \bar n\), since \(R \ge 0\) means that any workforce whose continuation alone covers \(\lambda\) also covers it once the wage is added.

The inequality is strict wherever the marginal product is positive: a market just worth entering for a searcher is then strictly inside the range where everyone works.

In the worst demand state of the calibration below, both thresholds are zero at the equilibrium value of \(\lambda\), and the market employs nobody and attracts nobody.

119.4.3. Three regions, one transition law#

Together, (119.4) and (119.5) partition the \((s,y)\) plane into the three regions of the paper’s Figure 3:

  • region I, where \(y > \bar n(s, \lambda)\) and the market sheds workers down to \(\bar n(s,\lambda)\);

  • region II, between the two thresholds, where nobody moves;

  • region III, where \(y < \bar y(s, \lambda)\) and the market is filled up to \(\bar y(s,\lambda)\).

They give the law of motion for the workforce a very simple form:

(119.6)#\[y' = \min\big\{\max\{y,\ \bar y(s,\lambda)\},\ \bar n(s,\lambda)\big\} .\]

The Bellman equation evaluates the continuation at the unchanged workforce \(y\), while the transition law moves the workforce somewhere else.

That is not an inconsistency, because the \(\max\) and the \(\min\) have already dealt with the two cases in which the workforce moves.

Where arrivals come, the \(\min\) replaces the continuation by \(\lambda\), and a market filled to \(\bar y\) is worth at least \(\lambda\) to anyone in it: exactly \(\lambda\) with a continuous workforce, and possibly a little more on the integer grid used below. Where workers leave, the \(\max\) replaces the whole expression by \(\lambda\).

The continuation at the unchanged \(y\) is therefore used only in the region where the workforce really is unchanged.

Note

The paper lets arrivals be random: a market short of workers receives \(a(s,y,\lambda)\,x\) of them, where \(x\) is a positive random variable with mean one, so that search must “eliminate rents on average” rather than exactly.

Like the numerical examples in the paper’s appendix, we set \(x \equiv 1\), which gives (119.6).

In the paper, random arrivals give the stationary distribution a strictly positive density (its Proposition 3), so some market is always shedding workers and unemployment is positive in every period.

With \(x \equiv 1\), finitely many demand states, and a demand process that can move between any two of them in one period, there are three cases.

  • If \(\max_s \bar y(s) > \min_s \bar n(s)\), the stationary distribution is unique and unemployment is positive: a market filled in the state with the highest \(\bar y\) sheds workers when demand falls to the state with the lowest \(\bar n\), and those two periods carry a market to \(\min_s \bar n(s)\) from any starting workforce.

  • If \(\max_s \bar y(s) = \min_s \bar n(s)\), the stationary distribution is again unique, every market holds that workforce, and unemployment is zero.

  • If \(\max_s \bar y(s) < \min_s \bar n(s)\), any workforce between the two stays where it is in every demand state, so there is a continuum of stationary distributions, and unemployment is zero.

Exercise 119.1 meets economies of the third kind.

119.5. A computable version#

We follow the appendix of Lucas and Prescott [1974]: a finite number of demand states, an integer workforce, and value function iteration on (119.2).

For the demand process we use the example in the paper’s footnote 7, in which \(\log s\) follows an AR(1) with persistence between zero and one.

We discretize it with seven states by Rouwenhorst’s method.

Unlike the method of Tauchen [1986], it matches the persistence and the stationary variance of \(\log s\) exactly, even when persistence is high; the solution to Exercise 119.1 shows what goes wrong otherwise.

For \(R\) we take a marginal revenue schedule that falls linearly in employment and reaches zero at a capacity \(N\),

\[ R(s, n) = s\,\big(1 - n/N\big)^{+} . \]

With two demand states and \(N = 100\), this is the schedule of the paper’s Example 1, drawn in the top left panel of its Figure 5, scaled up by a factor of two.

The capacity is a departure from the theory, which assumes that \(R\) is positive everywhere, but it is one that the paper’s own examples make. It caps the workforce a market will ever want below \(N\), so the paper’s Proposition 5, which promises an equilibrium for every workforce per market, holds here only for workforces below that cap.

It also shapes how unemployment behaves when workers are plentiful, as we will see.

How steeply \(R\) falls sets how far employment moves when demand moves, and therefore how much there is to gain from sending a worker from one market to another; Exercise 119.3 takes that up.

The function make_model builds a market from any demand chain and marginal revenue schedule, and create_model builds the lecture’s economy with it.

Model = namedtuple('Model', ['P', 's', 'y', 'R', 'β'])

def linear_R(s, y, N=200):
    "Marginal revenue s (1 - n/N)^+, which reaches zero at the capacity N."
    return s[:, None]*np.maximum(1 - y[None, :]/N, 0.0)

def make_model(P, s, β=0.9, y_max=260, R=linear_R, **R_args):
    "A market with demand chain (P, s) and marginal revenue R on y = 0, ..., y_max."
    y = np.arange(y_max + 1)
    R_sy = R(s, y, **R_args)
    R_sy[:, 0] = 0.0                                # an empty market pays nothing
    return Model(P=P, s=s, y=y, R=R_sy, β=β)

def create_model(n_s=7, ρ=0.9, sd=0.26, β=0.9, N=200, y_max=260,
                 method='rouwenhorst'):
    """The island economy, with log demand an AR(1) discretized into n_s states.

    ρ and sd are the persistence and the stationary standard deviation of
    log demand, so that changing ρ alone does not change how variable
    demand is.  N is a market's capacity: marginal revenue reaches zero there.
    """
    σ = sd*np.sqrt(1 - ρ**2)
    if method == 'rouwenhorst':
        with warnings.catch_warnings():         # quantecon notes a change in its API
            warnings.filterwarnings('ignore', message='The API of rouwenhorst',
                                    category=UserWarning)
            mc = qe.markov.rouwenhorst(n_s, ρ, σ)
    else:
        mc = qe.markov.tauchen(n_s, ρ, σ)
    return make_model(mc.P, np.exp(mc.state_values), β, y_max, N=N)

model = create_model()
print("demand states:", model.s.round(3))
demand states: [0.529 0.654 0.809 1.    1.237 1.529 1.891]

The Bellman operator is (119.2) with the integral replaced by a sum.

Because the continuation is evaluated at the unchanged workforce, the equation is a separate problem for each \(y\), linked only across demand states, which is why it is cheap to solve and why the convention we adopt for an empty market affects nothing else.

We need some value of search to solve it, so we use \(\lambda = 7.1\) here, a value close to the equilibrium that Economy-wide equilibrium computes.

The argument c, a cost of leaving that is zero until Exercise 119.2, changes the worker’s outside option from \(\lambda\) to \(\lambda - c\).

def worker_value(model, λ, c=0.0, tol=1e-11, max_iter=10_000):
    "Solve the worker's functional equation; a worker who leaves collects λ - c."
    P, R, β = model.P, model.R, model.β
    v = np.full(R.shape, λ - c)
    for i in range(max_iter):
        v_new = np.maximum(λ - c, R + np.minimum(λ, β*(P @ v)))
        v_new[:, 0] = λ - c                         # an empty market holds no workers
        if np.max(np.abs(v_new - v)) < tol:
            return v_new, i
        v = v_new
    raise RuntimeError(f"no convergence in {max_iter} iterations at λ = {λ}")

v, iters = worker_value(model, 7.1)
print(f"converged in {iters} iterations")
converged in 105 iterations

The two thresholds are the largest employment, and the largest workforce, at which the relevant value still covers \(\lambda\).

def last_at_least(A, bar):
    "For each row of A, the largest index past 0 at which A ≥ bar, or 0 if none."
    return np.array([np.max(np.where(row >= bar)[0]) if (row[1:] >= bar).any() else 0
                     for row in A])

def thresholds(model, v, λ, c=0.0):
    "The employment threshold n̄(s) and the arrival threshold ȳ(s)."
    EV = model.β*(model.P @ v)                  # the continuation at an unchanged workforce
    n_bar = last_at_least(model.R + EV, λ - c)  # staying on as the marginal worker
    y_bar = last_at_least(EV, λ)                # ≤ n_bar, because R ≥ 0 and c ≥ 0
    return n_bar, y_bar

n_bar, y_bar = thresholds(model, v, 7.1)
print("n̄(s) =", n_bar)
print("ȳ(s) =", y_bar)
n̄(s) = [  0  16  45  69  90 109 124]
ȳ(s) = [ 0  0  3 33 58 79 97]

Employment is capped by \(\bar n\), arrivals fill up to \(\bar y\), and (119.6) moves the workforce.

The invariant distribution of that Markov chain on \((s, y)\) can be computed exactly.

One period of (119.6) either leaves a workforce where it is or carries it onto a threshold, so from a threshold the chain never leaves the set of thresholds, and we can solve the small chain on pairs \((s, t)\), with \(t\) running over the at most \(2 \times 7\) threshold values.

A workforce off the thresholds can carry probability in the long run only if it stays put in every demand state.

The ends of such an interval of workforces are themselves thresholds that stay put, so the chain on the thresholds then has more than one invariant distribution: that is the third case of the note in Three regions, one transition law.

So we let qe.MarkovChain find every invariant distribution of the small chain, and stop with an error, rather than pick one, when there is more than one.

The function also stops if a threshold reaches the top of the grid, where it would be cut off without warning.

class NotBracketed(ValueError):
    "A bisection was given a bracket that does not contain a switch."

class NotUnique(ValueError):
    "The invariant distribution of a market is not unique."

class GridTooSmall(ValueError):
    "A threshold has reached the top of the workforce grid."

def stationary_distribution(model, n_bar, y_bar):
    "The invariant distribution of the chain on (s, y), computed exactly."
    P, n_s = model.P, len(model.s)
    if n_bar.max() == model.y[-1]:
        raise GridTooSmall(f"n̄ reaches the top of the grid, y = {model.y[-1]}")
    T = np.unique(np.concatenate([n_bar, y_bar]))     # the threshold values
    k = len(T)
    Q = np.zeros((n_s*k, n_s*k))                       # the chain on (s, t), t in T
    for i in range(n_s):
        t_next = np.searchsorted(T, np.clip(T, y_bar[i], n_bar[i]))
        for j in range(k):
            Q[i*k + j, t_next[j]::k] = P[i]            # to (s', t_next[j]) for every s'
    ψ_T = qe.MarkovChain(Q).stationary_distributions
    if len(ψ_T) > 1:
        raise NotUnique(f"the chain on the thresholds has {len(ψ_T)} recurrent classes")
    ψ = np.zeros((n_s, len(model.y)))
    ψ[:, T] = ψ_T[0].reshape(n_s, k)
    return ψ

def market_outcomes(model, λ, c=0.0):
    "Everything about a market at a given value of search, when leaving costs c."
    v, _ = worker_value(model, λ, c)
    n_bar, y_bar = thresholds(model, v, λ, c)
    ψ = stationary_distribution(model, n_bar, y_bar)
    y = model.y[None, :]
    n = np.minimum(y, n_bar[:, None])                      # employment in each (s, y)
    w = np.take_along_axis(model.R, np.maximum(n, 1), axis=1)    # and the wage
    Φ = np.cumsum(model.R, axis=1)                         # surplus: see lps_efficiency
    employment, wage_bill = (ψ*n).sum(), (ψ*n*w).sum()
    return dict(v=v, n_bar=n_bar, y_bar=y_bar, ψ=ψ, n=n, w=w,
                workforce=(ψ*y).sum(), employment=employment,
                unemployment=(ψ*(y - n)).sum(),
                # the mean wage per employed worker; empty markets get no weight
                wage=wage_bill/employment if employment > 0 else np.nan,
                wage_bill=wage_bill,
                surplus=(ψ*np.take_along_axis(Φ, n, axis=1)).sum())

out = market_outcomes(model, 7.1)
print(f"workforce {out['workforce']:.2f}, employment {out['employment']:.2f}, "
      f"unemployment {out['unemployment']:.2f}")
workforce 49.92, employment 48.86, unemployment 1.06

The small chain has \(n_s |T|\) states, where \(|T| \le 2 n_s\) is the number of distinct thresholds, and finding its invariant distributions costs about \((n_s |T|)^3\) operations.

That is negligible with seven states and manageable with 25, where a whole equilibrium takes a second or two, but it becomes slow beyond about 35 states.

119.6. Economy-wide equilibrium#

So far \(\lambda\) has been a parameter.

Now close the model.

The economy has a fixed workforce, \(\mu\) per market.

For any \(\lambda\), the calculation above delivers the stationary distribution \(\Psi(s, y; \lambda)\) of a market’s demand and workforce, whose probabilities on our grid are the array ψ.

Averaging the workforce across markets with it gives the economy’s demand for workforce,

(119.7)#\[E(y; \lambda) = \int y \, \Psi(ds, dy; \lambda) .\]

A higher \(\lambda\) makes every market shed workers sooner and fill up less, so \(E(y;\lambda)\) is decreasing.

Equilibrium is the \(\lambda^*\) at which markets want to hold exactly the workers the economy has:

(119.8)#\[E(y; \lambda^*) = \mu .\]

Because the schedule is decreasing, bisection finds \(\lambda^*\).

On the integer grid \(E(y; \lambda)\) is a step function of \(\lambda\), which jumps whenever a threshold moves by one worker, so (119.8) holds only to within a step, and the workforces printed below and in the exercises differ slightly from \(\mu\).

equilibrium_λ first checks that \(\mu\) lies between the workforces demanded at the two ends of its bracket, and raises NotBracketed if it does not.

def workforce_demand(model, λ, c=0.0):
    "The average workforce per market at the value of search λ."
    return market_outcomes(model, λ, c)['workforce']

def bisect(test, lo, hi, tol=1e-4, checked=False):
    "Locate, to within tol, where a test that fails at lo and passes at hi switches."
    if not checked and (test(lo) or not test(hi)):
        raise NotBracketed(f"the test does not switch between {lo} and {hi}")
    while hi - lo > tol:
        mid = 0.5*(lo + hi)
        lo, hi = (lo, mid) if test(mid) else (mid, hi)
    return hi

def equilibrium_λ(model, μ, c=0.0, lo=0.01, hi=40.0):
    "Bisect on the decreasing demand schedule E(y; λ) = μ."
    E_lo, E_hi = workforce_demand(model, lo, c), workforce_demand(model, hi, c)
    if not E_lo > μ > E_hi:
        raise NotBracketed(f"μ = {μ} is not between E(y; {lo}) = {E_lo:.2f} "
                           f"and E(y; {hi}) = {E_hi:.2f}")
    return bisect(lambda λ: workforce_demand(model, λ, c) <= μ, lo, hi, checked=True)

μ = 50                        # workers per market, against a capacity of 200
λ_star = equilibrium_λ(model, μ)
eq = market_outcomes(model, λ_star)

print(f"equilibrium value of search  λ* = {λ_star:.3f}")
print(f"workforce per market            = {eq['workforce']:.2f}   (target {μ})")
print(f"employment per market           = {eq['employment']:.2f}")
print(f"unemployment per market         = {eq['unemployment']:.2f}")
print(f"unemployment rate               = {100*eq['unemployment']/eq['workforce']:.2f}%")
print(f"separation rate                 = "
      f"{100*eq['unemployment']/eq['employment']:.2f}% of the employed per period")
print(f"mean wage                       = {eq['wage']:.3f}")
equilibrium value of search  λ* = 7.096
workforce per market            = 49.94   (target 50)
employment per market           = 48.88
unemployment per market         = 1.06
unemployment rate               = 2.13%
separation rate                 = 2.18% of the employed per period
mean wage                       = 0.774

The capacity shows up in the bracket check.

Even at \(\lambda = 0.01\) a market wants no more than \(N - 1 = 199\) workers, so an economy with \(N = 200\) workers per market has no equilibrium, and equilibrium_λ says so instead of returning a number.

try:
    equilibrium_λ(model, 200)
except NotBracketed as err:
    print(err)
μ = 200 is not between E(y; 0.01) = 199.00 and E(y; 40.0) = 0.00

Lucas and Prescott draw the equilibrium as a demand curve meeting a vertical supply curve, which is exactly what it is.

grid = np.linspace(0.6, 15.0, 45)
demand = [market_outcomes(model, λ) for λ in grid]
E_y = np.array([d['workforce'] for d in demand])
E_u = np.array([d['unemployment'] for d in demand])

fig, axes = plt.subplots(1, 2, figsize=(11, 4))

axes[0].plot(E_y, grid, lw=2, label=r'demand $E(y;\lambda)$')
axes[0].axvline(μ, color='C1', lw=2, ls='--', label=r'supply $\mu$')
axes[0].plot(eq['workforce'], λ_star, 'ko', ms=8)
axes[0].set_xlabel('workforce per market')
axes[0].set_ylabel(r'value of search $\lambda$')
axes[0].legend()

axes[1].plot(E_y, E_u, lw=2)
axes[1].plot(eq['workforce'], eq['unemployment'], 'ko', ms=8)
axes[1].set_xlabel('workforce per market')
axes[1].set_ylabel('unemployment per market')
plt.tight_layout()
plt.show()
_images/b5d1da940c70ffbda74582478c91da04245be9f5cecefea79ddda6b52c79c90c.png

Fig. 119.1 The market for workers, and unemployment along the demand curve#

The left panel is the paper’s Figure 4. The right panel corresponds to the bottom panels of the paper’s Figure 5, which plot average unemployment against \(\lambda\) for two numerical examples; since \(E(y;\lambda)\) is decreasing, plotting it against the workforce instead shows the same hump, reflected.

Unemployment per market is not monotone in the size of the workforce, a feature that Lucas and Prescott report from their own examples, and the equilibrium sits near the top of the hump.

Where workers are abundant, \(\lambda\) is low, every market is pressed against its capacity, and the two thresholds of every demand state are squeezed together there, so even a large shift in demand moves few workers.

That side of the hump is the work of the capacity.

Where workers are scarce, \(\lambda\) is high, workforces are small, and many markets close altogether. Unemployment per market is small there only because there are so few workers per market; as a rate it is high, because the workers who remain are in the best markets and are shed whenever demand falls.

The unemployment rate and the share of empty markets both rise with \(\lambda\):

for λ in (0.6, λ_star, 10.0, 13.0):
    r = market_outcomes(model, λ)
    print(f"λ = {λ:6.3f}:  unemployment rate {100*r['unemployment']/r['workforce']:5.2f}%,"
          f"  markets with no workers {100*r['ψ'][:, 0].sum():5.1f}%")
λ =  0.600:  unemployment rate  0.05%,  markets with no workers   0.0%
λ =  7.096:  unemployment rate  2.13%,  markets with no workers   3.0%
λ = 10.000:  unemployment rate  5.56%,  markets with no workers  50.0%
λ = 13.000:  unemployment rate 12.02%,  markets with no workers  97.0%

119.8. Inside the equilibrium#

Now look inside the equilibrium: at a single market, at the distribution of workforces, and at the wages that identical workers are paid.

119.8.1. What a market looks like#

The thresholds describe the whole of a market’s behavior.

fig, axes = plt.subplots(1, 2, figsize=(11, 4))

axes[0].plot(model.s, eq['n_bar'], 'o-', lw=2, label=r'$\bar n(s)$: employment')
axes[0].plot(model.s, eq['y_bar'], 's--', lw=2, label=r'$\bar y(s)$: arrivals fill to')
axes[0].set_xlabel('demand state $s$')
axes[0].set_ylabel('workers')
axes[0].legend()

employs = eq['n_bar'] > 0                 # a state with n̄(s) = 0 employs nobody
wage_at_nbar = model.R[np.arange(len(model.s)), eq['n_bar']]
axes[1].plot(eq['n_bar'][employs], wage_at_nbar[employs], 'o-', lw=2)
axes[1].set_xlabel(r'employment $\bar n(s)$')
axes[1].set_ylabel('wage')
plt.tight_layout()
plt.show()
_images/4c2a8ef14182de7ff5a05626ff679792a8ab54deba8aa50d1548fe17fe6a393c.png

Fig. 119.3 The two thresholds at the equilibrium, and the locus of employment and wages as demand shifts#

The right panel is the curve that Lucas and Prescott call \(SS\), the pairs of employment and wages that a market would trace out as demand shifted if its workforce never constrained it.

It leaves out demand states with \(\bar n(s) = 0\), where a market employs nobody and pays no wage.

The curve is not flat. A flat \(SS\) would mean that workers had a single reservation wage, accepting work above it and searching below it, which is what the partial-equilibrium search model of Job Search I: The McCall Search Model derives.

At \(\bar n(s)\) the wage is whatever makes staying worth \(\lambda\), \(w = \lambda - \beta \int v(s', \bar n, \lambda) f(s', s)\, ds'\) up to the integer grid, so it moves opposite to the continuation value.

A fall in demand changes the continuation value in two ways that work in opposite directions:

  1. lower demand today makes lower demand tomorrow more likely, which makes staying worth less;

  2. lower employment today means a smaller workforce tomorrow, which makes staying worth more.

The first effect is present in partial-equilibrium models with persistent offers, such as Job Search VI: Persistent and Transitory Wage Shocks, where the reservation wage depends on the state.

The second comes from other workers’ decisions, and only an equilibrium model has it. Either can dominate, so \(SS\) can slope either way.

In this calibration it slopes upward, apart from small wiggles on finer grids among top demand states that markets almost never visit, so the second effect dominates: after a fall in demand, the continuation value in the smaller market is higher, and the wage that keeps its marginal worker is lower.

The equilibrium also shows the absence of a reservation wage directly.

ψ, n, w = eq['ψ'], eq['n'], eq['w']
sheds = model.y[None, :] > eq['n_bar'][:, None]          # region I: workers leave
occurs = (ψ > 1e-12) & (n > 0)                           # markets that occur and employ

print(f"lowest wage in a market that nobody leaves:  {w[occurs & ~sheds].min():.3f}")
print(f"highest wage in a market that workers leave: {w[occurs & sheds].max():.3f}")
lowest wage in a market that nobody leaves:  0.602
highest wage in a market that workers leave: 0.674

Workers stay on, and nobody leaves, in markets paying as little as the first number, while elsewhere workers walk away from markets paying the second, which is higher, so no cutoff between the two sorts the markets a worker accepts from those he leaves.

But the leavers are not turning down an offer in favor of something better, and nobody turns them away from it. At \(\bar n(s)\) every worker in the market, stayer or leaver, gets \(\lambda\); the leavers could stay, but then employment would be the whole workforce \(y\), the wage would fall to \(R(s, y)\), and staying would be worth less than \(\lambda\).

So no offer is rejected against a cutoff wage, and nobody is denied a job at the going wage: the margin is the market’s level of employment.

119.8.2. The workforce distribution and a sample path#

Because arrivals are deterministic and demand takes finitely many values, the workforce moves between a small number of values, each one a threshold of some demand state.

fig, axes = plt.subplots(1, 2, figsize=(12, 4))

ψ_y = eq['ψ'].sum(axis=0)                      # the distribution of the workforce
on_support = ψ_y > 1e-10
axes[0].stem(model.y[on_support], ψ_y[on_support], basefmt=' ')
axes[0].set_xlabel('workforce $y$')
axes[0].set_ylabel('probability')

T_path = 60
idx = qe.MarkovChain(model.P).simulate_indices(T_path, init=3, random_state=0)
path_y = np.empty(T_path, dtype=int)
path_y[0] = eq['n_bar'][idx[0]]
for t in range(T_path - 1):
    path_y[t+1] = np.clip(path_y[t], eq['y_bar'][idx[t]], eq['n_bar'][idx[t]])
path_n = np.minimum(path_y, eq['n_bar'][idx])

periods = np.arange(T_path)
axes[1].plot(periods, path_y, lw=2, drawstyle='steps-post', label='workforce')
axes[1].plot(periods, path_n, lw=2, ls='--', drawstyle='steps-post', label='employment')
axes[1].fill_between(periods, path_n, path_y, step='post', alpha=0.3, label='unemployed')
axes[1].set_xlabel('period')
axes[1].set_ylabel('workers')
axes[1].legend()
plt.tight_layout()
plt.show()

print(f"on this path demand falls {np.sum(idx[1:] < idx[:-1])} times, "
      f"and the market sheds workers in {np.sum(path_n < path_y)} periods")
_images/7c284c7bfc2faaf2e97baf0ca00f4fe9f953cd277b5321871725be5db9d07373.png

Fig. 119.4 The invariant distribution of the workforce, and one market over sixty periods#

on this path demand falls 7 times, and the market sheds workers in 2 periods

The right panel shows the mechanism of the model in one picture: a market is at rest whenever demand does not move.

When demand falls far enough that \(\bar n(s)\) drops below the workforce, the gap between the two lines opens, for that period only: that period’s leavers are the unemployed, and by the next period they are somewhere else.

A smaller fall need not open it: a market that was filled only to \(\bar y(s)\) can absorb a fall to a state whose \(\bar n\) is still above its workforce, and the printed counts show how often that happens on this path.

119.8.3. Where markets sit#

The three regions of (119.6) are a partition of the state space, so the invariant distribution says how much of the economy is in each.

def where_markets_sit(model, r):
    "Shares of markets in each region, and how often a market's demand stays put."
    y = model.y[None, :]
    sheds, fills = y > r['n_bar'][:, None], y < r['y_bar'][:, None]
    ψ, still = r['ψ'], ~sheds & ~fills
    return {'shedding workers': ψ[sheds].sum(), 'receiving workers': ψ[fills].sum(),
            'neither': ψ[still].sum(), 'with no workers': ψ[:, 0].sum(),
            'still, among the empty': ψ[still[:, 0], 0].sum()/ψ[:, 0].sum(),
            'demand stays put': ψ.sum(axis=1) @ np.diag(model.P)}

for name, share in where_markets_sit(model, eq).items():
    print(f"{name:>24}: {100*share:5.1f}%")
        shedding workers:   5.6%
       receiving workers:   5.6%
                 neither:  88.8%
         with no workers:   3.0%
  still, among the empty:  88.0%
        demand stays put:  75.0%

Most markets are completely still in any given period. A few percent shed workers, and all of the economy’s unemployment comes from those; about as many are taking workers in.

What must balance is the flow of workers, and it does: the workers leaving shedding markets are exactly the workers arriving in receiving ones, as Exercise 119.4 checks.

The fourth line counts markets that hold no workers at all, and the fifth shows that most of them are still.

Such a market emptied when demand fell to a state where \(\bar n(s) = 0\), and it stays empty while demand is too low for \(\bar y(s)\) to be positive; the rest are being refilled because demand has recovered.

These shares depend on the discretization. With seven demand states a market’s demand stays where it is three periods in four, as the last line shows; here are the same numbers with 25 states.

model_25 = create_model(n_s=25)
eq_25 = market_outcomes(model_25, equilibrium_λ(model_25, μ))
print(f"{'':>24}{'7 states':>10}{'25 states':>11}")
for (name, a), b in zip(where_markets_sit(model, eq).items(),
                        where_markets_sit(model_25, eq_25).values()):
    print(f"{name:>24}{100*a:>9.1f}%{100*b:>10.1f}%")
print(f"{'unemployment rate':>24}{100*eq['unemployment']/eq['workforce']:>9.2f}%"
      f"{100*eq_25['unemployment']/eq_25['workforce']:>10.2f}%")
                          7 states  25 states
        shedding workers      5.6%       8.2%
       receiving workers      5.6%       8.1%
                 neither     88.8%      83.7%
         with no workers      3.0%       4.0%
  still, among the empty     88.0%      91.9%
        demand stays put     75.0%      41.3%
       unemployment rate     2.13%      2.11%

With 25 states demand moves in more periods, by less each time, and somewhat more markets shed and receive workers, but most markets are still still and the unemployment rate is almost unchanged.

119.8.4. The wage distribution#

We can now return to the wage distribution, which the Overview said had to be determined together with the behavior of workers. The search literature hands its worker a distribution of wage offers and asks what he should do with it.

Here that distribution is an output: every market pays the marginal product of labor in it, and what a market pays depends on the demand it drew and on how many workers chose to be there.

weight = eq['ψ']*eq['n']                     # weight a market by the workers it employs
weight = weight/weight.sum()

w, p = eq['w'].ravel(), weight.ravel()
order = np.argsort(w)
w, p = w[order], p[order]
cdf = np.cumsum(p)
quantile = lambda q: w[np.searchsorted(cdf, q)]
mean = (w*p).sum()
flow = λ_star*(1 - model.β)                # the flow value of search

fig, ax = plt.subplots(figsize=(7.5, 4))
ax.hist(w, bins=30, weights=p, color='C0', alpha=0.85)
ax.axvline(mean, color='k', lw=1.5, label=f'mean {mean:.3f}')
ax.axvline(flow, color='C1', lw=1.5, ls='--', label=f'flow value of search {flow:.3f}')
ax.set_xlabel('wage')
ax.set_ylabel('share of workers')
ax.set_xlim(0.5, 1.45)            # a thin tail runs past this; see the print below
ax.legend()
plt.tight_layout()
plt.show()

print(f"mean {mean:.3f}, "
      f"p10 {quantile(0.1):.3f}, median {quantile(0.5):.3f}, p90 {quantile(0.9):.3f}")
print(f"p90/p10 = {quantile(0.9)/quantile(0.1):.2f},  "
      f"highest wage paid {w[p > 1e-12].max():.3f}")
print(f"share paid less than the flow value of search: {100*p[w < flow].sum():.0f}%")
near = np.abs(w - flow) < 0.001*flow
print(f"share paid within 0.1% of it: {100*p[near].sum():.1f}%")
_images/ef10b4288fc317bdefb8fe34d811b660d60d01810032cf4cbaf6aa7388118935.png

Fig. 119.5 Wages across identical workers, at the equilibrium#

mean 0.774, p10 0.627, median 0.748, p90 0.925
p90/p10 = 1.48,  highest wage paid 1.862
share paid less than the flow value of search: 31%
share paid within 0.1% of it: 9.2%

Workers in this economy are identical: they have the same skills, the same preferences and the same information, and they are free to leave at any time. They are nevertheless paid differently, by about half as much again at the ninetieth percentile as at the tenth.

The dispersion is not a market failure or a mistake. It is what equalizes the value of arriving in any market that takes workers, and of staying or leaving in any market that sheds them.

Everywhere else incumbents earn rents, because new workers take a period to arrive, so the values of positions are dispersed too.

held = eq['ψ']*model.y[None, :]              # weight a market by its workforce
print(f"λ* = {λ_star:.3f},  average value of a worker's position = "
      f"{(held*eq['v']).sum()/held.sum():.3f}")
print(f"share of workers whose position is worth more than λ*: "
      f"{100*held[eq['v'] > λ_star + 1e-9].sum()/held.sum():.0f}%")
λ* = 7.096,  average value of a worker's position = 7.548
share of workers whose position is worth more than λ*: 93%

About nine workers in ten hold a position worth more than \(\lambda^*\) to them.

The dashed line in the figure is the flow value of search, \((1-\beta)\lambda^*\), which is what a searcher’s position is worth per period.

Roughly a third of workers are paid less than that, and stay. The exact share is fragile.

On this grid a block of about one worker in eleven is paid within a tenth of a percent of the flow value, as the last line of the earlier print shows, so a small change in the grid can move the whole block across the line; across the grids we tried, the share runs from about 30 to 40 percent.

There is no puzzle in it: what a worker holds is not his current wage. It is a position in a particular market, which carries a claim on that market’s future and the option to walk away later.

119.9. Efficiency#

Lucas and Prescott say that \(\lambda\) signals “the correct social return from an additional unit supplied”, but they prove no welfare theorem.

The model has one, and its proof uses the device of the 1971 paper studied in Investment Under Uncertainty: find a planning problem that the equilibrium solves.

119.9.1. Surplus#

Write

\[ \Phi(s, n) = \sum_{m=1}^{n} R(s, m) \]

for the area under the marginal revenue schedule up to employment \(n\).

By (119.1) it is the area under the inverse demand curve \(D(s, \cdot)\) up to the industry’s output, per firm: gross consumer surplus, the objective of the 1971 paper.

It equals the value of output only when the product price is given, \(D(s, Q) = s\), so we call it surplus.

119.9.2. A planner for one market#

Consider a planner who runs a single market and can move workers in and out of it, and who is credited \(\lambda\) for each worker it releases into the pool of searchers and charged \(\lambda\) for each worker it brings in.

If next period’s workforce is \(y'\), the planner employs \(\min\{y, y'\}\) workers this period and releases or brings in the difference, so its value satisfies

(119.10)#\[W(s, y) = \max_{y'} \Big\{ \Phi\big(s, \min\{y, y'\}\big) + \lambda\, (y - y') + \beta \int W(s', y')\, f(s', s)\, ds' \Big\} .\]

Here is the marginal-value argument. \(\Phi(s, \cdot)\) is concave because \(R\) falls with \(n\), so \(\Phi(s, \min\{y, y'\})\) is jointly concave in \((y, y')\), and maximizing over \(y'\) preserves concavity.

So \(W\) is concave in \(y\), and the planner’s choice is governed by marginal comparisons, made with the marginal value \(\Delta W(s, y) = W(s, y) - W(s, y-1)\).

Keeping one more worker into next period is worth his wage plus \(\beta \int \Delta W(s', y') f(s', s)\, ds'\), and releasing him is worth \(\lambda\); bringing one in costs \(\lambda\) and is worth the discounted continuation alone.

So the planner releases workers down to a threshold defined by (119.3) with \(\Delta W\) in place of \(v\), fills up to a threshold defined by (119.5) in the same way, and otherwise leaves the workforce alone.

Case by case, the marginal worker is worth \(\lambda\) where the planner releases, \(R + \lambda\) where it fills, since he saves the charge for one arrival, and \(R + \beta \int \Delta W f\, ds'\) in between.

These are cases A, B2 and B1, so \(\Delta W\) satisfies (119.2). By the uniqueness in Proposition 119.1, \(\Delta W = v\), so the planner’s thresholds are the equilibrium thresholds and its policy is (119.6).

Here is the aggregation argument. Give every market such a planner, with the same \(\lambda\), and add their objectives.

The terms \(\lambda (y_t - y_{t+1})\) add up to \(\lambda\) times the fall in the economy’s total workforce, because every worker released in one period arrives somewhere in the next.

For any feasible plan the total workforce is constant, so these terms add up to zero, and the sum of the planners’ objectives is the expected present value of surplus.

The equilibrium policy maximizes each planner’s objective, so it maximizes the sum. At \(\lambda = \lambda^*\) it is also feasible, because \(E(y; \lambda^*) = \mu\) keeps the total workforce constant.

So no feasible way of moving workers produces a higher expected present value of surplus than the stationary equilibrium.

119.9.3. What the theorem says, and what it does not#

Stated precisely, the stationary equilibrium maximizes the expected present value of surplus

  • starting from its own stationary distribution \(\Psi(\lambda^*)\),

  • among all feasible plans in which moving takes a period, including plans that are not stationary and plans that condition on other markets’ histories,

  • with a continuum of markets, so that the equilibrium plan keeps the economy’s workforce constant period by period,

  • up to the slack of the integer grid, on which \(E(y; \lambda^*)\) is within a step of \(\mu\) rather than equal to it.

\(\lambda^*\) is the present value of a worker added to the pool of searchers; per period, the multiplier on the constraint that the economy’s workforce is fixed is \((1-\beta)\lambda^*\), the flow value of search in the wage figure above.

The theorem is about total surplus, whoever receives it, and says nothing about how surplus is divided: Exercise 119.2 finds a policy that lowers surplus and still makes workers better off.

Nor does it rank steady states. Its comparison starts from \(\Psi(\lambda^*)\) and counts everything that happens along the way to any other allocation.

A policy that leads to a different steady state can raise surplus in that steady state while lowering the present value, because getting there costs surplus first.

Exercise 119.6 computes two examples, a small subsidy to moving and the thresholds of a planner more patient than the workers, and both raise steady-state surplus per worker above its equilibrium level.

This is the logic of the modified golden rule of growth theory, where a planner who discounts the future chooses less capital than the steady state that maximizes consumption, because building the extra capital costs consumption first.

Here reallocating a worker costs a period of his output now and pays off later, so a planner who discounts reallocates less, and has less unemployment, than one who maximizes steady-state surplus.

The efficiency is relative to the technology of moving, which takes a period, and the equilibrium has exactly as much unemployment as that technology makes worthwhile once the future is discounted at \(\beta\).

119.10. Relation to other lectures#

In the first footnote of Baley et al. [2023], there is no “standard model” of frictional unemployment but three workable classes of models: matching models in the Diamond-Mortensen-Pissarides tradition, equilibrium versions of McCall [1970], and search-island models in the tradition of Lucas and Prescott [1974].

Calibrated versions of all three fit data on labor market flows and deliver plausible responses of unemployment to policies like unemployment insurance and layoff taxes.

This lecture is the third class, and the McCall lectures in this series study the worker’s problem at the heart of the second, in partial equilibrium. What this model adds to them is everything on the other side of the offer.

The wage a worker is offered is the marginal product of labor in a market whose workforce was determined by where other workers decided to go, and the value of looking elsewhere, \(\lambda\), is the number that clears the economy-wide market for workers.

One consequence is that there is no reservation wage, as the \(SS\) curve showed. Another concerns the flow rates between employment and unemployment.

A Lake Model of Employment and Unemployment takes both rates as parameters: a job finding rate of \(0.283\) (which that lecture calls \(\lambda\), not to be confused with the value of search here) and a separation rate of \(0.013\) go in, and the unemployment rate comes out.

Lake Model with an Endogenous Job Finding Rate makes the job finding rate the outcome of a McCall problem, though still against a wage distribution that is given.

In this lecture the separation rate is an equilibrium object, while the job finding rate is essentially one by construction.

The separation rate printed above, around \(2.2\) percent of the employed per period, combines how often demand shifts carry a market below its employment threshold with how many workers each such market sheds.

Warning

The job finding rate in this model is essentially one.

A worker who leaves is placed in some market at the start of the next period, so a spell of unemployment lasts one period and the model has nothing to say about unemployment duration.

Strictly, a market that receives searchers can have its demand fall so far that it sheds more workers than it held before they arrived, so that some of the newcomers must move again; in this calibration that happens to fewer than one searcher in a hundred, even if newcomers are the first to go.

119.10.1. What the island model became#

Alvarez and Veracierto [1999] took this model and made it a tool for quantitative policy analysis, in their words by “modifying Lucas and Prescott’s (1974) island model to incorporate undirected search and out-of-the-labor-force participation”.

Four things change. Search becomes undirected: searchers “arrive uniformly across all islands”, so an island’s workforce next period is its own employment plus the same inflow every other island gets, whether it wants the workers or not.

A searcher can then land in a market that is itself shedding workers and have to move again, so the duration of unemployment becomes an equilibrium object; it averages \(2.4\) periods in their laissez-faire benchmark.

The nonemployed gain a second option, home production, so that labor force participation is a margin and the model has three states rather than two.

With home production the inflow of searchers is set by the indifference between searching and staying home, so the size of the labor force becomes an outcome, which matters because the policies they study act on whether people look for work at all.

Islands produce with a decreasing returns technology subject to persistent productivity shocks rather than facing a shifting demand curve. And agents trade a complete set of state-contingent securities.

Their laissez-faire equilibrium “is efficient (despite the search frictions)”, the analogue for their economy of Efficiency, and they use it as the benchmark for evaluating minimum wages, two models of unions, firing taxes and unemployment insurance, at a model period of six weeks.

A firing tax worth twelve months of average wages, for example, takes their unemployment rate down from \(5.3\) to \(3.7\) percent and pushes the average duration of unemployment up from \(2.4\) to \(5.1\) periods, while lowering welfare by \(2.1\) to \(2.3\) percent of consumption.

Note

Undirected search changes how \(\lambda\) is determined.

Under directed search \(\lambda\) is a price: raise it and every market sheds workers sooner and fills up less, so (119.8) pins it down as a market-clearing condition pins down any other price, and the \(\min\) in (119.2) makes every market that receives workers worth exactly \(\lambda\) to them.

Under undirected search a searcher lands in a market drawn at random, so \(\lambda\) needs a consistency condition of its own, and the common inflow \(U\) becomes a second unknown.

With a fixed population the model is still determinate: there are two conditions, the population and the consistency of \(\lambda\), for the two unknowns.

In this calibration the equilibrium exists and is unique once the inflow can be fractional, but uniqueness no longer follows, in general, from a single decreasing schedule.

Exercise 119.4 computes it: undirected search lowers the value of search, and it lowers unemployment too.

119.10.2. Returns to labor mobility#

Lucas and Prescott end their discussion of a moving cost with a conjecture, that “differences of this sort in the actual or perceived costs of changing jobs can help to account for the observed differences in average unemployment across occupations and among countries”.

Why average unemployment differs across countries became a central question for this class of models; Ljungqvist and Sargent [1998], for example, trace the rise of European unemployment to generous unemployment benefits interacting with a more turbulent economic environment.

Baley et al. [2025] call the returns to labor mobility, how much more a worker produces where he is going than where he is, “important intermediating forces in all modern macroeconomic models with frictional labour markets”.

Baley et al. [2023] show that the same quantity decides what a layoff tax does to unemployment, and whether skill losses at the time of a quit can reverse the effect of turbulence on unemployment. It is a property of the shock and of the technology that intermediates it, taken together.

Baley et al. [2025] find that calibrations to firm size dynamics, with shocks passed through neoclassical production functions, deliver returns to labor mobility that are robust to perturbations of parameters, while calibrations of per-worker productivity processes to labor market statistics can be fragile.

One of the models they study is that of Alvarez and Veracierto [2001], who calibrated a productivity process to the establishment data on job creation and destruction of Davis and Haltiwanger.

That paper is a different model from Alvarez and Veracierto [1999]: establishments hire at a common labor market whose location changes at random, wage contracts are rigid, and risk-averse agents without insurance markets self-insure and choose how hard to search.

An establishment produces \(z\, k^{\theta_k} n^{\theta_n}\) from capital \(k\) and labor \(n\), with productivity \(z\) and \(\theta_k + \theta_n < 1\).

Baley et al. [2025] streamline the model, dropping the cost of creating an establishment and a small firing tax, so that every establishment rents capital and hires labor in spot markets and they all equate marginal products, which gives

(119.11)#\[\frac{n_{\text{high}}}{n_{\text{low}}} = \left(\frac{z_{\text{high}}}{z_{\text{low}}}\right)^{1/(1-\theta_k-\theta_n)} ,\]

so a shock is amplified by an exponent that explodes as returns to scale approach one.

At Alvarez and Veracierto’s parameters, they find that a low-productivity establishment employs only \(3.81\) percent as many workers as a high-productivity one, a ratio of about \(26\), and that high-productivity establishments hold more than \(96\) percent of all employment: an exponent of about \(4.35\) turns a productivity ratio of \(2.12\) into an employment ratio of about \(26\).

That is a frictionless allocation, since every establishment hires in the same spot market. In the present model moving takes a period, and Exercise 119.3 asks how much of a ratio like \(26\) survives that friction, holding the technology and the shock like Alvarez and Veracierto’s.

119.11. Exercises#

Exercise 119.1

Lucas and Prescott [1974] report two comparative statics from their own numerical examples:

Overall, we found for low and high persistence in demand that unemployment rates were low. In the former case, there was little gained by reallocating workers, while in the latter reallocation occurred infrequently. As expected, the greater the variability of demand, holding the degree of persistence fixed, the greater the level of unemployment.

Check both in this calibration, holding \(\mu = 50\).

  1. Compute the equilibrium unemployment rate for persistence \(\rho \in \{0.6, 0.8, 0.9, 0.95, 0.99\}\), holding the stationary standard deviation of \(\log s\) fixed at \(0.26\), and for stationary standard deviations \(\{0.10, 0.18, 0.26, 0.34, 0.45\}\), holding \(\rho = 0.9\). Explain the shapes you find.

  2. With independent demand, \(\rho = 0\), equilibrium_λ stops with an error. Show that unemployment is then exactly zero and that the equilibrium \(\lambda\) is not unique. Why does this not contradict the paper’s Proposition 5, or its claim that unemployment is positive in every period?

  3. Repeat part 2 at \(\rho = 0.3\), first with seven demand states and then with 25. What does the comparison say about the low end of part 1?

Exercise 119.2

In their concluding section, Lucas and Prescott consider a lump-sum cost \(c\) of leaving a market to search, so that the right side of (119.3) becomes \(\lambda - c\) rather than \(\lambda\): a worker who leaves collects the value of search net of what it costs him to get there.

The arrival condition (119.5) is unchanged, since it prices the market for workers who are already searching.

They say that the cost “will raise the curve \(y = \bar n(s, \lambda)\) in Fig. 3 and shift the ‘demand curve’ in Fig. 4 downward. The result is a decrease in unemployment and a decrease in the equilibrium present value of wages, \(\lambda\)”, and remark that this

shows that lower average unemployment is not, in general, associated with higher welfare for workers.

market_outcomes and equilibrium_λ already take the cost as their argument c.

For \(c \in \{0, 0.2, 0.5, 1, 2\}\) report the equilibrium \(\lambda^*\) and \(\lambda^* - c\), the unemployment rate, surplus per market, the wage bill per market, rents (surplus minus the wage bill), and workers’ income per worker per period, the wage bill net of what workers pay to move, divided by the workforce.

  1. Does \(\lambda^*\) fall, as the paper says? If not, what does?

  2. Does lower unemployment mean better off? Compare what workers gain with what the economy loses, as present values per worker.

  3. Who pays? Answer once treating \(c\) as a resource, used up in moving, and once treating it as a tax whose revenue is rebated lump sum to workers.

  4. Baley et al. [2023] use the smallest layoff tax that shuts down all endogenous separations as a diagnostic of a model’s returns to labor mobility. Compute the smallest \(c\) that does that here, in units of the average wage, with 7, 15 and 25 demand states. Why does it change with the number of states?

Exercise 119.3

The numerical examples in the appendix of Lucas and Prescott [1974] use just two demand states, with

\[\begin{split} P = \begin{bmatrix} \rho & 1 - \rho \\ 1 - \rho & \rho \end{bmatrix} , \qquad \rho = 0.9, \qquad s \in \{1, 2\}, \qquad \beta = 0.9 . \end{split}\]

Here \(\rho\) is the probability that demand stays where it is, so the autocorrelation of \(s\) is \(2\rho - 1 = 0.8\); in the seven-state chain \(\rho\) is the autocorrelation itself.

Build that economy, keeping \(R(s,n) = s\,(1 - n/N)^{+}\) with \(N = 200\), and \(\mu = 50\) wherever an equilibrium is needed.

  1. For \(\lambda\) on a grid, plot workforce demand and average unemployment against \(\lambda\), as in the middle and bottom panels of the paper’s Figure 5.

  2. At \(\lambda = 6\), show that the invariant distribution puts all of its mass on two values of the workforce, and say which two.

  3. Use that fact to derive a formula for average unemployment per market in terms of \(\bar n\), \(\bar y\) and \(\rho\), check it against the computed value at every \(\lambda\) on the grid, and use it to explain the shape of the plot in part 1.

  4. Show that the unemployment rate depends only on \(\rho\) and on \(r = \bar y(s_{\text{high}})/\bar n(s_{\text{low}})\), and that it can never exceed \(1 - \rho\).

  5. Now replace \(R\) by the marginal product of a decreasing returns technology: output \(s\, n^{\alpha}\) with \(0 < \alpha < 1\), so that \(R(s, n) = s\,\alpha\, n^{\alpha-1}\). Solve for \(\alpha \in \{0.4, 0.6, 0.75\}\), and for an economy like Alvarez and Veracierto’s, with \(\alpha = \theta_n/(1-\theta_k)\) and \(s_{\text{high}} = 2.12^{1/(1-\theta_k)}\) at their \(\theta_k = 0.19\) and \(\theta_n = 0.58\), which is their technology once capital, rented each period, has been chosen optimally. Report the ratio of mean employment across the two demand states, its frictionless counterpart (119.11), and the unemployment rate. Show that the ratio of mean employment is \(\rho r + 1 - \rho\), write the unemployment rate in terms of it, and say what happens to unemployment as the returns to labor mobility rise.

Exercise 119.4

This exercise asks what the model’s directed search is doing.

Alvarez and Veracierto [1999] replace it with undirected search: a searcher cannot choose where to go, and every market receives the same inflow \(U\), which is the economy’s unemployment per market.

  1. Show that under undirected search the \(\min\) disappears from (119.2), and say which economic condition it was enforcing.

  2. Write down the transition law for a market’s workforce, and show that at any stationary distribution the inflow \(U\) equals the average outflow. Does the same identity hold under directed search?

  3. Under directed search, (119.8) pins down \(\lambda\). Under undirected search, what condition must \(\lambda\) satisfy instead? Count the unknowns and the conditions of an equilibrium with a fixed workforce \(\mu\) per market.

  4. Compute the undirected equilibrium of the lecture’s economy, \(\mu/N = 1/4\). An integer inflow into markets of capacity \(N = 200\) is too coarse, so count workers in tenths: use \(N = 2000\) and a grid up to \(2600\), which is the lecture’s economy on a ten times finer workforce grid. For inflows \(U = 1, 3, 5, 7, 9\) and \(10\), find the values of \(\lambda\) that satisfy the consistency condition of part 3 and the mean workforce that each serves, and plot the mean workforce against \(U\). How many equilibria does an economy with a given \(\mu\) have? Compare \(\lambda\) and the unemployment rate at \(\mu/N = 1/4\) with directed search on the same grid.

  5. Explain why undirected search lowers the value of search here, and why it also lowers unemployment.

Exercise 119.5

The model has no aggregate shocks, but Lucas and Prescott open their concluding remarks by arguing that its mechanism “is consistent with the now familiar account of the observed Phillips curve in terms of expectations”:

an unanticipated change in aggregate demand (a change in \(E(s'|s)\)) will move unemployment and wage changes in opposite directions.

Check this at the equilibrium of the lecture, starting from the invariant distribution at \(\lambda^*\), which describes the economy last period.

This period, a share of markets chosen at random draws a demand state one notch lower than the law of motion that everyone knows would give it, and the rest draw as usual; the share is chosen so that mean \(\log s\) falls by \(\Delta\).

Nobody anticipated it, so the thresholds \(\bar n(s)\) and \(\bar y(s)\) stay as they were, and \(\lambda\) stays at \(\lambda^*\).

  1. Compute this period’s unemployment rate and mean wage for \(\Delta = 0.01, 0.02, 0.04\), and for rises in mean \(\log s\) of the same sizes.

  2. Plot the unemployment rate against the percentage change in the mean wage. Explain the shape.

  3. Lucas and Prescott add that if such changes “were a recurrent event, as they are in reality, this fact would become incorporated into the maximum problem facing workers”. What would change in the calculation?

Exercise 119.6

Efficiency proves that the equilibrium solves the planner’s problem (119.10). Check it numerically, and see what it does and does not imply.

  1. Solve (119.10) at \(\lambda^*\) by value function iteration, choosing \(y'\) on the whole grid, and verify that \(W(s, y) - W(s, y-1) = v(s, y)\) and that the planner’s choice of \(y'\) is (119.6).

  2. Now let moving use up resources: each worker who leaves costs \(c = 2\). Show that the equilibrium of Exercise 119.2 is the allocation of a planner who faces that cost, credited \(\lambda - c\) for each worker released and charged \(\lambda\) for each worker brought in. What does that imply about the lower surplus in Exercise 119.2?

  3. Compare steady-state surplus per worker at the equilibrium with two alternatives that keep \(\mu = 50\): a small subsidy to moving, \(c = -0.1\) and \(c = -0.2\), and the thresholds that a more patient planner would choose, with \(\beta' = 0.95\) and \(0.99\) and \(\lambda\) chosen to keep \(\mu\) workers per market. Does the equilibrium maximize steady-state surplus? Reconcile the answer with Efficiency.