3  Diamond-Mortensen-Pissarides Framework

Code
using DataFrames
using StatsPlots
using QuantEcon: hp_filter
using MacroModelling: @model, @parameters, get_simulation, plot_irf, get_steady_state
using Statistics
using PrettyTables
using Printf

import Random
Random.seed!(1234)

mypalette = ["#d5968c", "#c2676d", "#5c363a", "#995041", "#45939c", "#0f6a81"]
default(size=(600, 370), titlefontsize=10, fmt=:svg, palette=mypalette[[6, 2, 4, 3, 1, 5]])

3.1 DMP Framework とは

これまで見たきたモデルでは, 摩擦のない労働市場を前提としていました. つまり, 全ての企業は労働者を雇うことができ, 労働者は均衡賃金で仕事を見つけられると仮定していました. しかし, 実際の労働市場では失業, 働きたいが仕事が見つからない, といった現象が観察されます. DMPモデルは, こうした摩擦のある労働市場を考慮し, 失業を内生化するモデルです.

DMPモデルは, 今まで学んできた Solow, Ramsey, RBC, New Keynesian モデルの流れと直接のつながりがないため, 少し違和感を感じるかもしれません. しかし, その後の研究で, DMPモデルはこれら新古典派のモデルと組み合わされていき (Merz 1995; Andolfatto 1996), 代表的な研究として Krusell, Mukoyama, and Şahin (2010) のモデルがあります.

ちなみに, Diamond, Mortensen, Pissarides の3人は, 2010年にノーベル経済学賞を受賞しています.

3.2 Stylized Facts

失業の定義

失業は16歳以上の労働力人口を以下の3つに分類して定義されます.

  • \(E\): Employed. 仕事を持っている人
  • \(U\): Unemployed. 仕事を持っていないが, 仕事を探している人
  • \(N\): Not in the Labor Force. 仕事を持っておらず, 仕事も探していない人

例えば, 学生や専業主婦, 引退した高齢者などが \(N\) に該当します. 失業率 \(u_t\) は以下のように定義されます.

\[ u_t := \frac{U_t}{E_t + U_t} \]

図 3.2: U.S. Bureau of Economics Analysis, Unemployment Rate UNRATE.

図 3.2 はアメリカの失業率とNBERによる不況期間 (グレー) を示しています. 失業率は不況期に上昇し, 景気回復期に低下する傾向があることがわかります.1

3.3 Model

3.3.1 設定

  • 労働者は Employed (\(E\)) か Unemployed (\(U\)) のいずれかの状態にある
  • それぞれの状態にある労働者の数を \(e_t\)\(u_t\) とし, \(e_t + u_t = 1\)
  • \(E\) から \(U\) への遷移確率を \(\sigma\) とし, \(U\) から \(E\) への遷移確率を \(\lambda\) とする
図 3.3: Employment and Unemployment

よって失業率 \(u_t\) の遷移は次のように表されます.

\[ u_{t+1} = (1-\lambda)u_t + \sigma (1-u_t). \]

Steady state \(u_{t+1} = u_t = \overline{u}\) について解くと, \[ \overline{u} = \frac{\sigma}{\lambda + \sigma}. \tag{3.1}\]

3.3.2 マッチング関数

Noteマッチング関数

\(t\) 時点における失業者の数を \(u_t\), 求人の数 (vacancy) を \(v_t\) とした時, \(t+1\) の始めにおけるマッチの数 \(\mathcal{M}_{t+1}\) は次のように表されます.

\[ \mathcal{M}_{t+1} = M(u_t, v_t). \]

このマッチング関数 \(M(u, v)\) は以下の性質を持ちます.

  • \(u, v\) に対して単調増加
  • Constant returns to scale
  • \(M(u, v) \le u, v\)

このマッチング関数は Blackbox な関数と言われます. 雇用に際しどのような要因でどのような摩擦があるのかなどに深入りせず, それらの摩擦を吸収した抽象的な関数として考えます.

労働者 (worker) が企業にマッチする確率は \(\lambda_w\) は以下のように表されます.

\[ \lambda_w(\theta_t) = \frac{M(u_t, v_t)}{u_t} = M\left(1, \frac{v_t}{u_t}\right) = M(1, \theta_t). \]

これを 式 3.1 に代入すると,

\[ \overline{u} = \frac{\sigma}{\lambda_{w}(v / \overline{u}) + \sigma} \]

であり, 変形すると

\[ M(\overline{u}, v) + \sigma \overline{u} = \sigma. \tag{3.2}\]

この関係から, \(\sigma\) が定数であれば, (定常状態の) 失業率 \(\overline{u}\) と 求人 \(v\) に負の関係があることがわかります. この関係を, ベバリッジ曲線 (Beveridge Curve) と呼びます.

なお, 求人 \(v_t\) がマッチする確率を \(\lambda_f\) とすると,

\[ \frac{M(u_t, v_t)}{v_t} = M\left(\frac{u_t}{v_t}, 1\right) = M\left(\frac{1}{\theta_t}, 1\right) =: \lambda_f(\theta_t). \]

3.3.3 ベバリッジ曲線とシフト

図 3.4: Beveridge Curve in the United States (Azzimonti et al. 2025, fig. 20.4)

図 3.4 は2000年以降のアメリカのベバリッジ曲線を示しています. グラフの中で, 3つのベバリッジ曲線 Dec. 2000 - Oct. 2009, Oct. 2009 - Apr. 2020, Apr. 2020 - May 2022 とその間のシフトを見ることができます. シフトが起こった時期は, リーマンショックやCovid-19の影響を受けた時期です.

ベバリッジ曲線のシフトの一つの解釈はマッチング関数の変化です. 例えば, マッチング関数が以下のコブ・ダグラス型であるとすると

\[ M(u, v) = \chi u^\eta v^{1-\eta}, \tag{3.3}\]

ベバリッジ曲線は以下のように表されます.

\[ v = \left(\frac{\sigma (1-\overline{u})}{\chi \overline{u}^{\eta}}\right)^{\frac{1}{1-\eta}}. \]

マッチングのしやすさを表す \(\chi\) が小さくなったとき, ベバリッジ曲線が上にシフトすることがわかります.

3.3.4 労働市場均衡

ここで, 求人 \(v_t\) が決定する労働市場の均衡を考えます.

企業

  • 無限期間の利益を最大化すると考える. 割引率を \(\beta \in (0, 1)\) とする
  • \(t\) 期の生産を \(z_t\) とし, マルコフ過程に従うとする
  • 労働者に払う賃金を \(w(z)\) とする
  • 求人を出すコストを \(\kappa\) とする

十分な労働者がいる企業の価値関数を \(J(z)\), 求人を行う企業の価値関数を \(V(z)\) とすると

\[ \begin{aligned} J(z) &= z - w(z) + \beta \mathbb{E}\left[(1-\sigma)J(z') + \sigma V(z') \mid z\right] \\ V(z) &= -\kappa + \beta \mathbb{E}\left[\lambda_f(\theta)V(z') + (1-\lambda_f(\theta)) J(z') \mid z\right]. \end{aligned} \tag{3.4}\]

ここでは, 企業が労働者にマッチする確率を \(\lambda_f(\theta)\) とし,

\[ \lambda_f(\theta) = \frac{M(u, v)}{v} = M\left(\frac{u}{v}, 1\right) = M\left(\frac{1}{\theta}, 1\right). \]

さらに, 求人はどの企業も自由に行うことができる (free entry) を仮定すると,

\[ V(z) = 0. \tag{3.5}\]

よって, 式 3.4 から

\[ \frac{\kappa}{\lambda_{f}(\theta)} = \beta \mathbb{E}[J(z') | z]. \]

直感的には, 求人を出すコスト \(\kappa\) はマッチした時の期待値 \(\beta \mathbb{E}[J(z') | z]\) とマッチする確率 \(\lambda_{f}(\theta)\) の積で決まること解釈できます.

労働者

  • 無限期間の線形効用を最大化すると考える. 割引率は \(\beta\).
  • 雇用されている労働者の価値関数を \(W(z)\), 失業している労働者の価値関数を \(U(z)\) とする

\[ \begin{aligned} W(z) &= w(z) + \beta \mathbb{E}[(1-\sigma)W(z') + \sigma U(z') | z] \\ U(z) &= b + \beta \mathbb{E}[\lambda_w(\theta)W(z') + (1-\lambda_w(\theta))U(z') | z]. \end{aligned} \tag{3.6}\]

賃金交渉

  • マッチした労働者と企業は賃金を交渉すると考える
  • 一般ナッシュ交渉を仮定する

\[ \max_{w} \left(\tilde{W}(w, z) - U(z)\right)^{\gamma}\left(\tilde{J}(w, z) - V(z)\right)^{1-\gamma}. \]

ここで, \(\tilde{W}(w, z)\), \(\tilde{J}(w, z)\) は今期の賃金が \(w\) の時の労働者と企業の価値関数を表します. そのため, 今までの表現 \(W(z), J(z)\) は, 均衡賃金 \(w(z)\) をすでに考慮した書き方になっていたということです.

ここで, 一階条件をとると

\[ (1-\gamma)\left(\tilde{W}(w, z) - U(z)\right) = \gamma \left(\tilde{J}(w, z) - V(z)\right). \tag{3.7}\]

\(U(z)\), \(V(z)\) は労働者と企業からみた交渉決裂点 (disagreement point, outside option) であり, それと比べた場合の余剰 (surplus) を交渉力 \(\gamma\), \(1 - \gamma\) で重み付けて均等化しているということがわかります. もう一つの解釈は, 均衡における総余剰 \(\mathcal{S}\) を以下のように定義した時,

\[ \mathcal{S}(z) = \underbrace{W(z) - U(z)}_{\text{Worker Surplus}} + \underbrace{J(z) - V(z)}_{\text{Firm Surplus}}, \]

一階条件 式 3.7 は以下のように書き換えられます.

\[ \begin{aligned} W(z) &= U(z) + \gamma \mathcal{S}(z), \\ J(z) &= V(z) + (1-\gamma) \mathcal{S}(z). \end{aligned} \]

つまり, 労働者と企業は outside option に加えて, 総余剰のそれぞれの交渉力に応じた部分を得ることができるという解釈です.

均衡

式 3.4, 式 3.5, 式 3.6, 式 3.7 によって均衡が定義されます. これらを整理すると, 次の Job Creation Condition (JC) が得られます.

\[ \frac{\kappa}{(1-\gamma)\lambda_{f}(\theta_t)} = \beta \mathbb{E}\left[z_{t+1} - b + \frac{1-\sigma-\gamma\lambda_w(\theta_{t+1})}{1-\gamma}\frac{\kappa}{\lambda_{f}(\theta_{t+1})}\right]. \tag{3.8}\]

導出は 命題 B.4 を参照してください. ここで定常状態を考えると,

\[ \frac{\kappa}{(1-\gamma)\lambda_{f}(\overline{\theta})} = \beta \mathbb{E}\left[\overline{z} - b + \frac{1-\sigma-\gamma\lambda_w(\overline{\theta})}{1-\gamma}\frac{\kappa}{\lambda_{f}(\overline{\theta})}\right]. \tag{3.9}\]

式 3.9 は定常状態の \(\overline{\theta} = \frac{\overline{v}}{\overline{u}}\) を定める式とみなすことができます. したがって, 均衡における求人 \(v\) と失業率 \(u\) の関係は, 式 3.2 (BC) と 式 3.9 (JC) の交点によって決定されます.

Determination of Steady State

Transition of Steady State
図 3.5: Figure 20.5 and 20.6 from Azzimonti et al. (2025).

図 3.5 の左図は, \(BC\)\(JC_1\) の交点によって失業率 \(\overline{u}\) と求人 \(\overline{v}\) が決定される様子を示しています (\(SS_1\)).

ここで予期しない恒常的な生産性の低下, \(\overline{z}\) が下がったとします. すると 式 3.9 から \(\overline{\theta}\) が下がり, \(JC_1\) から \(JC_2\) へシフトします. この時, 移行過程では右図のような変化が起きると考えることができます. 失業率 \(u\) はすぐには変化できないため, 求人 \(v\) が大きく低下します. その後, 失業率 \(u\) が徐々に上昇し, 新しい均衡点 \(SS_2\) に到達します.

3.4 Calibration

3.4.1 Functional Forms

マッチング関数は 式 3.3 で表されると仮定し, 生産 \(z_t\) は以下のように表されるとします.

\[ \hat{z}_{t+1} = \rho \hat{z}_t + \varepsilon_{t+1} \]

ここで, \(\hat{z}_{t}\) は steady state \(\overline{z}\) からの log-deviation, つまり

\[ \hat{z}_{t} = \log z_t - \log \overline{z}. \]

3.4.2 Parameter Values

モデルのパラメータは先行研究に従い, 以下のように設定します.

表 3.1: Parameter values for the DMP model
Parameter Value Source
\(\beta\) 0.996 Cooley and Prescott (1995)
\(\rho\) 0.949 Hagedorn and Manovskii (2008)
\(\sigma_{\varepsilon}\) 0.0065 Hagedorn and Manovskii (2008)
\(\sigma\) 0.034 Shimer (2005)
\(\chi\) 0.45 Shimer (2005)
\(b\) 0.4 Shimer (2005)
\(\gamma\) 0.72 Shimer (2005)
\(\eta\) 0.72 Shimer (2005)
  • モデルの一期間は1ヶ月とする (Hagedorn and Manovskii (2008) では1週間)
  • RBCモデルで標準的な1年の割引率 \(\beta = 0.947\) (Cooley and Prescott 1995) を1ヶ月に直すと \(0.947^{\frac{1}{12}} = 0.996\)

3.5 Simulation

Code
@model DMP begin
    κ / ((1 - γ) * λ_f[0]) =
        β * (z[0] - b + (1 - σ - γ * λ_w[1]) / (1 - γ) */ λ_f[1]))
    λ_f[0] = χ * θ[0]^(-η)
    λ_w[0] = χ * θ[0]^(1 - η)
    u[0] = (1 - λ_w[-1]) * u[-1] + σ * (1 - u[-1])
    v[0] = θ[0] * u[0]
    log(z[0]) - log(z̄) = ρ * (log(z[-1]) - log(z̄)) + σ_ε * ε[x]
end

@parameters DMP begin
    β = 0.996
    ρ = 0.949
    σ_ε = 0.0065
    σ = 0.034
    χ = 0.45
    b = 0.4
    γ = 0.72
    η = 0.72
= 1.0
    θ̄ = 1.0
    λ̄_w = χ * θ̄^(1 - η)
    λ̄_f = χ * θ̄^(-η)
    ū = σ / (λ̄_w + σ)
    κ = (1 - γ) * λ̄_w * β * (z̄ - b) / (1 - β * (1 - σ - γ * λ̄_w))
end
Code
plot_irf(DMP, variables=[:u, :v, :z, :θ], periods=100);
図 3.6: Impulse Response Functions of the DMP Model
表 3.2: Summary Statistics for Quarterly U.S. Data from 1951 I to 2004 IV. (Azzimonti et al. 2025, Table 19.2)
Code
function sim_one(; burnin, periods, mdl=DMP)
    sim = get_simulation(mdl, variables=[:u, :v, :z, :θ], periods=periods + burnin, levels=true)
    us = sim[1, burnin+1:end]
    vs = sim[2, burnin+1:end]
    zs = sim[3, burnin+1:end]
    θs = sim[4, burnin+1:end]

    xs_quarterly = [[mean(xs[i:i+2]) for i in 1:3:length(xs)-3] for xs in (us, vs, θs, zs)]
    cycles = [hp_filter(log.(xs), 1600)[1] for xs in xs_quarterly]

    std_mdl = [std(xs) for xs in cycles]
    acor_mdl = [cor(xs[2:end], xs[1:end-1]) for xs in cycles]
    cor_mdl = vcat([cor(cycles[1], cycles[i]) for i in 2:4],
        [cor(cycles[2], cycles[i]) for i in 3:4],
        [cor(cycles[3], cycles[4])])

    df = DataFrame(
        pars=["std_u", "std_v", "std_θ", "std_z",
            "acor_u", "acor_v", "acor_θ", "acor_z",
            "cor_uv", "cor_uθ", "cor_uz", "cor_vθ", "cor_vz", "cor_θz"],
        value=vcat(std_mdl, acor_mdl, cor_mdl))
end

function get_table(; n_sim=1000, burnin=100, periods=648)
    df = sim_one(burnin=burnin, periods=periods)
    for i in 2:n_sim
        df_i = sim_one(burnin=burnin, periods=periods)
        df = vcat(df, df_i)
    end

    res = combine(groupby(df, :pars),
        [:value] .=> mean .=> [:value]
    )[!, :value]

    tb = DataFrame(
        desc=["Standard Deviation", "Quartely Autocorrelation", missing,
            "Correlation Matrix", missing, missing],
        tmp=["", "", "\$u\$", "\$v\$", "\$v/u\$", "\$z\$"],
        u=[res[1], res[5], 1, missing, missing, missing],
        v=[res[2], res[6], res[9], 1, missing, missing],
        θ=[res[3], res[7], res[10], res[12], 1, missing],
        z=[res[4], res[8], res[11], res[13], res[14], 1]
    )

    return tb
end

df_mdl = get_table()
pretty_table(df_mdl, backend=:markdown, allow_markdown_in_cells=true,
    alignment=[:l, :c, :r, :r, :r, :r],
    column_labels=["", "", "\$u\$", "\$v\$", "\$v/u\$", "\$z\$"],
    formatters=[
        (v, i, j) -> ismissing(v) ? "" : v,
        (v, i, j) -> v isa Number ? @sprintf("%.3f", v) : v
    ]
)
表 3.3: Model Statistics
\(u\) \(v\) \(v/u\) \(z\)
Standard Deviation 0.005 0.016 0.020 0.013
Quartely Autocorrelation 0.805 0.670 0.738 0.738
\(u\) 1.000 -0.822 -0.893 -0.894
Correlation Matrix \(v\) 1.000 0.990 0.990
\(v/u\) 1.000 1.000
\(z\) 1.000

表 3.3 はシミュレーションの結果を示しています. 表 3.2 と比較すると, 各パラメータの相関はおおむね一致しています. しかし, \(u, v, \theta = v/u\) の標準偏差が実際のデータよりも小さくなっていることがわかります. この点は, DMPモデルの重要な課題の一つとして知られており, “Labor Market Volatility Puzzle”, あるいは Shimer Puzzle (Shimer 2005) と呼ばれます.


  1. NBERのBusiness Cycle Dating には雇用に関する指数も含まれているため, ある意味当然の結果とも言えます.↩︎