差分の差 (DiD) と Event Study

30 分で学ぶ初学者向け入門

Ryohei

2026-05-23

はじめに

本セッションの到達目標

30 分で学ぶ DiD と Event Study

  • 教材:Baker, Callaway, Cunningham, Goodman-Bacon, Sant’Anna (2025)
  • 原典:“Difference-in-Differences Designs: A Practitioner’s Guide” (arXiv:2503.13323v3)

到達目標:

  1. 2×2 DiD を「4 平均」と「回帰 1 式」の 2 通りで理解する
  2. 平行トレンドATT の意味を 1 文で説明できる
  3. 共変量調整(条件付き平行トレンド・二重頑健 DiD) の役割を把握する
  4. Event Study 図でプリトレンドと動学効果を読み取れる
  5. 段階的採択 での注意点を把握する(TWFE の落とし穴・Callaway-Sant’Anna)

Part 1: DiD のイメージ作り

DiD とは何か

  • 社会科学最古級の因果推論手法(1840 年代 John Snow のロンドンコレラ研究)
  • 基本構造 = 3 要素:
    1. 2 つのグループ:介入群(treated) / 対照群(control)
    2. 2 つの時期:介入前(pre) / 介入後(post)
    3. 共通の時間トレンド(=平行トレンド)を仮定

用語:差分の差 (Difference-in-Differences, DiD)

「介入群の前後変化」から「対照群の前後変化」を引いた量:

\[ \widehat{ATT} = \underbrace{(\bar{Y}_{T,\text{post}} - \bar{Y}_{T,\text{pre}})}_{\text{介入群の変化}} - \underbrace{(\bar{Y}_{C,\text{post}} - \bar{Y}_{C,\text{pre}})}_{\text{対照群の変化}} \]

2 つのキー用語:ATT と平行トレンド

用語:ATT(Average Treatment effect on the Treated)

  • 実際に介入を受けた人たちにとっての 平均介入効果
  • DiD で標準的にターゲットにする因果パラメータ

\[ ATT(t) = E[\;\underbrace{Y_{i,t}(1)}_{\text{介入時}} - \underbrace{Y_{i,t}(0)}_{\text{反事実(非介入時)}} \;\mid\; \underbrace{D_i = 1}_{\text{介入群に限る}}\;] \]

用語:平行トレンド(Parallel Trends)

  • 反事実仮定:「介入がなければ、両群は同じトレンドで変化」
  • DiD 妥当性の根幹 — ただし 検定不可能

\[ \underbrace{E[Y_{i,t}(0) - Y_{i,t-1}(0) \mid D_i = 1]}_{\text{介入群の反事実トレンド}} = \underbrace{E[Y_{i,t}(0) - Y_{i,t-1}(0) \mid D_i = 0]}_{\text{対照群の観察トレンド}} \]

Part 2: 2×2 DiD の概念図

2×2 DiD の概念図

図 1

  • 観察可能なもの = 介入群と対照群の前後 2 時点 のみ
  • 「介入群が介入を受けなかったら?」の 反事実は観察不可

2×2 DiD の概念図

図 2

  • 対照群の傾き を借用 → 介入群の介入前値から 平行に延長
  • 平行トレンド仮定 = 「対照群の動きが介入群の反事実」

2×2 DiD の概念図

図 3

  • 赤い両矢印 = DiD で推定したい量(ATT)
  • 観察値 − 反事実 = 因果効果

Part 3: 2×2 DiD の計算

例題:メディケイド拡大と死亡率

  • 論文の問い:「ACA(医療費負担適正化法)のメディケイド拡大は死亡率に影響したか?
  • データ:アメリカの郡レベル成人死亡率 × 州ごとの拡大タイミング(2014/2015/2016/2019/非拡大)
  • 本セッション = 論文の数値を再現する シミュデータ(2,604 郡 × 11 年 = 28,644 行)
  • アウトカム = 20-64 歳成人の粗死亡率(10 万人あたり) → 以下、 推定値の単位は全て 「10 万人あたりの死亡数」

シンプル化のため Part 3-4 では:

  • 介入群:2014 拡大群(978 郡)
  • 対照群:非拡大群(1,164 郡)
  • 期間:2013 年(介入前)と 2014 年(介入後)のみ

4 つの平均で手計算

表 1
拡大群 非拡大群 群間差
2013 386.63 455.18 −68.54
2014 393.32 465.05 −71.73
差(Trend) 6.69 9.87 −3.19
単位:10 万人あたりの粗死亡率
  • 最下行の「差」列 = DiD 推定量 ≈ −3.2(10 万人あたり死亡率)
  • 計算式:(拡大群の 2013→2014 変化) − (非拡大群の 2013→2014 変化)
  • Excel でも電卓でも実行可能 — 中身は 引き算 2 回

回帰で 1 式に書く

論文 (3.7) 式 = 次の交互作用回帰:

\[ Y_{i,t} = \beta_0 + \underbrace{\beta_1 \mathbf{1}\{D_i=1\}}_{\text{群間レベル差}} + \underbrace{\beta_2 \mathbf{1}\{t=2014\}}_{\text{時間シフト}} + \underbrace{\beta^{2\times 2}(\mathbf{1}\{D_i=1\} \cdot \mathbf{1}\{t=2014\})}_{\text{DiD 推定量}} + \varepsilon_{i,t} \]

  • \(\beta_1\):群間レベル差(介入有無)
  • \(\beta_2\):介入後の時間シフト(全体)
  • \(\beta^{2\times 2}\):交互作用 = DiD 推定量 ← これが本命
  • \(\mathbf{1}\{\cdot\}\) = 指示関数(条件が真なら 1、偽なら 0)

TWFE(二方向固定効果)で書き換える

用語:TWFE (Two-Way Fixed Effects, 二方向固定効果)

回帰モデルに 単位固定効果(郡ダミー \(\alpha_i\))+ 時間固定効果(年ダミー \(\lambda_t\))を 両方 入れる仕様

交互作用回帰(再掲):

\[ \begin{aligned} Y_{i,t} = \;& \beta_0 + {\color{#2563eb}\beta_1 D_i} + {\color{#d97706}\beta_2 \,\text{post}_t} \\ \;& + {\color{#dc2626}\beta^{2\times 2}(D_i \cdot \text{post}_t)} + \varepsilon_{i,t} \end{aligned} \]

TWFE 式に書き換え:

\[ \begin{aligned} Y_{i,t} = \;& \underbrace{{\color{#2563eb}\alpha_i}}_{\text{単位固定効果}} + \underbrace{{\color{#d97706}\lambda_t}}_{\text{時間固定効果}} \\ \;& + {\color{#dc2626}\beta^{2\times 2}(D_i \cdot \text{post}_t)} + \varepsilon_{i,t} \end{aligned} \]

交互作用回帰 TWFE 役割
\(\beta_0\) \(\alpha_i, \lambda_t\) に吸収 ベースライン
\(\beta_1 D_i\) \(\alpha_i\)(郡ごとの切片) 群レベル差
\(\beta_2 \,\text{post}_t\) \(\lambda_t\)(年ごとの切片) 時間シフト
\(\beta^{2\times 2}(D \cdot \text{post})\) そのまま残る DiD 推定量
  • 2 期 2 群 → 数値的に等価
  • 多群・多期間 → TWFE が一般化形

TWFE は何が良いのか?

  1. 2 種類の交絡を同時に吸収 — 観察できない要因にも対応
    • 単位固定効果 \(\alpha_i\):単位ごとの 時間で変わらない 特性(地理・伝統的健康水準・人種構成 etc.)を全て吸収
    • 時間固定効果 \(\lambda_t\):単位横断で共通の その年だけの ショック(景気変動・全国レベルの政策・パンデミック etc.)を全て吸収
  2. 多群・多期間設定への自然な拡張 — 2×2 の交互作用回帰は単純設定限定だが、 TWFE は 50 州 × 11 年のような大規模パネルでもそのまま使える
  3. 回帰枠組みの実務メリット
    • 標準誤差・信頼区間が自動(郡レベル等でクラスタリング容易)
    • 共変量・時変共変量の追加が柔軟
    • R: feols(Y ~ D:post | county_id + year, cluster = "county_id")1 行

ただし注意:段階的採択では問題あり

介入時期が単位ごとに異なる staggered 設定 では、 TWFE が ATT を一貫して返さない問題が知られる(Part 6 で詳説)

手計算と回帰は等価

表 2
交互作用回帰 TWFE(固定効果)
D -68.54***
(10.58)
post 9.87***
(0.96)
D × post -3.19** -3.19**
(1.17) (1.17)
Num.Obs. 4284 4284
R2 0.228 0.996
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
単位:10 万人あたり死亡率
  • 注目すべき行 = D × post(または D:post) = DiD 推定量
  • 2 仕様で同じ値 ≈ −3.2 → 手計算 = 交互作用回帰 = TWFE
  • 回帰の利点:
    • 標準誤差(SE)・信頼区間が自動
    • 共変量拡張が容易

Part 4: 共変量で平行トレンドを調整する

なぜ共変量調整が必要か

  • 観察研究 → 介入の割当てがランダムでない → 群間で 共変量 X が大きく異なる 場合あり
  • Medicaid 例:拡大群は非拡大群に比べ 白人率が高く、貧困率が低く、所得が高い
  • 既往研究(Currie 2016):「貧困率が違う郡は死亡率トレンドも違う」
  • 結論:メディケイドがなくても両群は異なる死亡率トレンドを持っていた可能性
  • 無条件 PT は疑わしい → 条件付き PT を採用

用語:標準化平均差(SMD, Normalized Difference)

  • 両群の平均差をプールした SD で割った量
  • 経験則:|SMD| > 0.2 で不均衡(Austin 2009 等)
  • 機械的に「SMD > 0.2 → 共変量に追加」運用は非推奨。 DAG / 領域知識で交絡を特定

条件付き平行トレンド

用語:条件付き平行トレンド(Conditional Parallel Trends, CPT)

  • 仮定:「共変量 X が同じならば、介入群と対照群の反事実トレンドが等しい」
  • 無条件平行トレンドより 弱い仮定

\[ \underbrace{E[Y_{i,t}(0) - Y_{i,t-1}(0) \mid D_i = 1, X_i]}_{\text{介入群の反事実トレンド(X 条件付き)}} = \underbrace{E[Y_{i,t}(0) - Y_{i,t-1}(0) \mid D_i = 0, X_i]}_{\text{対照群の観察トレンド(X 条件付き)}} \]

  • 直感:「同じ貧困率・所得・人種構成の郡同士で比べれば PT が成立」
  • 識別に必要なもう一つの条件 = 重なり(Overlap):すべての X 値で介入群と対照群の両方に十分なサンプル

共変量の選択と時点

どの変数を入れるか

  • 入れるべき
    • 介入割当てに関わる変数 (政治・経済要因 etc.)
    • \(Y(0)\) のトレンドに影響する変数 (健康格差の構造的要因 etc.)
    • DAG / 領域知識で 交絡因子と特定 された変数
  • 入れてはいけない
    • 介入の 結果として変化する 変数(=媒介変数 / post-treatment 変数)
    • 例:介入後の保険加入率・医療支出 → 効果が吸収
    • アウトカムにも介入にも無関係な変数

どの時点の値を使うか

  • 原則:介入前の固定値(例:ベースライン年 = 2013)
    • 介入後値は 媒介変数化 のリスク(post-treatment bias)
    • DRDID パッケージは 時間不変な共変量 を要求
  • 本セッションの実装
    • 2013 年の pct_white, poverty, median_income を county_id 単位で固定
    • 介入群・対照群とも同じ時点(2013)の値を使用
  • 時変共変量を入れたいとき
    • 別手法 (Caetano et al. 2022 等) が必要

覚え方:「介入の前に確定していて、 介入と \(Y(0)\) の両方に効きそう な変数を入れる」

補足:介入が自然災害の場合

「曝露の交絡因子」と「DiD の交絡」は別概念

  • 地震・津波・原発事故は 地球物理学的に外生 → 古典的意味の曝露の交絡因子は存在しない
  • それでも DiD では「群間で \(Y(0)\) トレンドを違わせる要因」が交絡的に働く
  • 例:沿岸部(津波被災)は元から高齢化トレンドが早い
  • 例:帰還困難区域は農村部 で人口減トレンドを持つ → 事故がなくても両群のトレンドは違った可能性

✅ 入れるべき(被災 の値で固定)

  • 地理特性:標高・海岸/断層/原発距離
  • 被災前の人口構成:高齢化率・人口密度
  • 被災前の産業構成:1 次産業比率 etc.
  • 被災前のアウトカム水準(ラグ項)

❌ 入れない(被災で変化 = 媒介変数)

  • 被災後の人口移動率・避難率
  • 被災後の所得・失業率
  • 被災後の医療機関数・インフラ稼働率
  • 被災後の補助金・復興予算配分

共変量の役割は「曝露を予測する」ではなく「反事実トレンドの群間差を吸収する

3 つの推定量(疫学との対応)

本セッション(DiD) 疫学での呼称 アイデア
Outcome Regression (OR) G 公式 / 回帰標準化 対照群で \(\Delta Y \sim X\) の回帰 → 介入群の X で予測
Inverse Probability Weighting (IPW) 傾向スコア重み付け 傾向スコア \(P(D \mid X)\) の逆数で観測を重み付け
Doubly Robust (DR) AIPW / DR OR + IPW の組み合わせ — 片方 が正しければ一致推定

現代の推奨は DR(二重頑健)

  • OR・IPW のどちらか一方のモデルが誤特定でも頑健
  • R 実装:DRDID::drdid()

共変量付き 2×2 DiD の結果

表 3
推定量 ATT SE
Outcome Regression 0.70 0.43
Inverse Probability Weighting 1.09 0.53
Doubly Robust 0.96 0.47
Doubly Robust(人口加重) −2.15 0.98
単位:ATT・SE とも 10 万人あたりの粗死亡率
  • 3 手法の ATT がほぼ揃う → モデル誤特定の懸念小 のシグナル
  • 人口加重 DR ≈ −2.2 が現代の推奨主結果
  • Part 3 の単純 2×2(≈ −3.2 / 10 万人)と比較すると、 共変量調整で やや効果が縮小 — 観察可能な交絡(白人率・貧困率・所得)による PT 違反が一部存在することを示唆

Part 5: Event Study(複数期間への拡張)

なぜ複数期間に拡張するか

  • 2×2 DiD = 2 時点のスナップショット 1 枚のみ
  • 複数期間に拡張すると 2 つの利点:
  1. プリトレンド検定(介入前の動きの平行性を経験的に検証)
  2. 動学効果(介入後の効果が時間でどう進化するか:即時 / 遅延 / 減衰 / 持続)

→ これが Event Study(イベント・スタディ)

イベント時間 \(e = t - g\) の定義

用語:イベント時間(Event Time)

  • 暦時間 \(t\)(本例:2009〜2019)
  • 介入開始時点 \(g\)(本例:2014 拡大群なら \(g = 2014\))
  • イベント時間 \(e = t - g\)(介入開始からの相対年)
イベント時間 \(e\) 意味 例(2014 拡大群を見る年)
\(e = -3\) 介入の 3 年前 2011
\(e = -1\) 介入の 1 年前(基準年) 2013
\(e = 0\) 介入開始の年 2014
\(e = +2\) 介入から 2 年後 2016

各点 = 独立した 2×2 DiD

  • Event Study の各点(年 \(t\) の推定値):

\[ \widehat{\beta}_t = \underbrace{(\bar{Y}_{D=1, t} - \bar{Y}_{D=1, t_0})}_{\text{介入群:基準年からの変化}} - \underbrace{(\bar{Y}_{D=0, t} - \bar{Y}_{D=0, t_0})}_{\text{対照群:基準年からの変化}} \]

  • 基準年 \(t_0 = g - 1 = 2013\)
  • 横軸の各点 = Part 3 の 2×2 DiD を 1 つ計算したもの
  • Event Study = 2×2 DiD を 11 個並べて 1 枚のグラフにしたもの

→ 負の \(e\)(介入前)= プリトレンド検定、 正の \(e\)(介入後)= 動学効果

平行トレンドの可視化

図 4

  • 2 本の線が 同じ傾き で動く → 平行トレンド仮定が妥当そう
  • 注意:過去が平行でも将来も平行とは限らない(あくまで間接的検証)

Event Study 図の解釈

図 5

  • 左半分(2009〜2013) ≈ 0 で水平 → 平行トレンド支持
  • 右半分(2014〜2019)負方向に進展 → 介入 1 年後から死亡率低下

Event Study 図の読み取りチェックリスト

  1. 介入前(プリトレンド):点が 0 付近で水平か?
    • 水平 → 平行トレンド仮定が支持
    • 系統的傾き → PT 違反のリスク
  2. 基準年(本例 2013):必ず 0(点と CI バーが収束)
  3. 介入後(動学効果):
    • 即時 / 遅延 / 強まる / 減衰 / 持続 のパターンを確認
    • 信頼区間(縦バー)が 0 をまたぐか = 統計的有意性
  4. 大局のメッセージ:介入後一貫して負側 → 「メディケイドが死亡率を下げた」示唆

Part 6: 段階的採択への触り

現実は staggered(段階的採択)

  • 古典的 2×2 DiD の前提 = 「全員が同じ時期に介入
  • 現実(メディケイド例)= 介入時期が単位ごとに異なる:
    • 2014 拡大群:978 郡(37.6%)
    • 2015 拡大群:198 郡(7.6%)
    • 2016 拡大群:132 郡(5.1%)
    • 2019 拡大群:132 郡(5.1%)
    • 非拡大群(never-treated):1,164 郡(44.7%)

用語:段階的採択(Staggered Adoption)

  • 介入開始時期が単位(州・企業・個人など)ごとに異なる状況
  • 現実の政策評価の 大半 が段階的設定

ナイーブ TWFE の落とし穴

  • 段階的設定で最も普及している回帰:

\[ Y_{i,t} = \underbrace{\alpha_i}_{\text{単位固定効果}} + \underbrace{\lambda_t}_{\text{時間固定効果}} + \underbrace{\beta^{\text{TWFE}} D_{i,t}}_{\text{介入下ダミー × 係数}} + \varepsilon_{i,t} \]

  • 近年の指摘(Goodman-Bacon 2021 / Sun-Abraham 2021 / de Chaisemartin-D’Haultfœuille 2020):
    • 異質効果(コホート間で ATT が違う)場合\(\beta^{\text{TWFE}}\) は ATT を返さない
    • 原因:先に介入された群を「対照」に使う 2×2(= forbidden comparison)が混入
  • ナイーブ TWFE は 段階的設定では主結果として使わない のが現代の標準

forbidden comparison とは何か

TWFE は内部で多数の 2×2 比較を加重平均する(Goodman-Bacon 2021)

  • そのうち 「後で介入された群」を介入扱い、「先に介入された群」を対照扱い する 2×2 が混入

例:2016 拡大群を「介入」、 2014 拡大群を「対照」に使う 2×2

2016 群(介入扱い) 2014 群(対照扱い)
2015 まだ未介入 既に介入から 1 年経過
2017 介入 1 年目 既に介入から 3 年経過

何が問題か

  • 「対照群」(2014 群)の 2015 → 2017 の変化 = 2014 群自身の動学効果(2 年目 → 4 年目の進展)を含む
  • これを「共通の時間トレンド」として引いてしまう → 真の ATT から乖離
  • 対照群は本来「未介入の反事実」を表すべきなのに、 既に介入されていてはダメ

解決策

  • Callaway-Sant’Anna 等の現代推定量は、 常に never-treated か not-yet-treated を対照 に使い、 forbidden comparison を排除

Callaway-Sant’Anna 推定量とは

核心アイデア:コホート × 時点別 ATT を 直接 推定

  • TWFE → すべての 2×2 比較を内部で混ぜる → forbidden comparison が混入
  • CS → 各コホート \(g\) × 各時点 \(t\)\(ATT(g, t)\) を別々に推定 → 健全な 2×2 のみ使用

2 段階のワークフロー

  1. did::att_gt() — コホート \(g\) × 時点 \(t\) 別の \(ATT(g, t)\)二重頑健 で推定
  2. did::aggte() — 目的に応じて集約

CS の集約タイプと比較群選択

aggte() の集約タイプ

type 出力 答える問い
"dynamic" イベント時間 \(e = t-g\) 別 ATT(動学効果) 「介入後 \(e\) 年でどう進展?」
"group" コホート別 ATT 「2014 群と 2015 群で効果は違う?」
"simple" 全体平均 ATT(単一値) 「平均してどれくらい効いた?」

比較群の選択(control_group)

  • "nevertreated":一度も介入を受けない群のみを対照 → 最も保守的
  • "notyettreated":その時点でまだ未介入の群を含める → データ活用度が高い (本セッションで採用)

CS による集約 Event Study(結果)

図 6

  • 横軸 = イベント時間 \(e = t - g\)、 4 コホート(2014/2015/2016/2019)を共通軸に揃え加重平均
  • プリトレンド (\(e < 0\)):ほぼ 0 周辺で CI も 0 を含む → 平行トレンドおおむね支持
  • 動学効果 (\(e \geq 0\)):\(e = 1\) 以降で ATT ≈ −2 〜 −4 で安定(死亡率低下)
  • Part 5 の単純 Event Study と違い 多コホートを安全に統合 できるのが強み

まとめ

実務家のための簡略チェックリスト

DiD 研究の 6 ステップ

  1. 目標パラメータの定義 — ATT(t)? ATT(g,t)?
  2. 介入変数の定義 — 段階的? オン・オフ?
  3. 共変量バランスの確認 — SMD で群間不均衡を診断、 領域知識で交絡を特定
  4. 平行トレンドの検査 — プリトレンド・プロット(条件付きも検討)
  5. 推定量の選択 — 共変量あり → DR、 段階的設定 → did::att_gt()、 TWFE 回避
  6. 頑健性チェック — Sun-Abraham、 Borusyak、 staggered 等と比較

本セッションの 4 つの核心メッセージ

  1. 2×2 DiD = 4 つの平均の引き算 ≡ 交互作用回帰(数値的に等価)
  2. 共変量で平行トレンドを弱める → 二重頑健(DR)が現代の推奨
  3. Event Study = 2×2 DiD を時間方向に並べたもの(プリトレンド + 動学効果)
  4. 段階的設定では TWFE 回避、 Callaway-Sant’Anna 等の現代手法を使う

次のステップ・参考文献

詳細版(半日ワークショップ・100 スライド超):

主要文献:

  • Baker, A., Callaway, B., Cunningham, S., Goodman-Bacon, A., & Sant’Anna, P. H. C. (2025). Difference-in-Differences Designs: A Practitioner’s Guide. arXiv:2503.13323v3
  • Callaway, B., & Sant’Anna, P. H. C. (2021). Difference-in-Differences with multiple time periods. J. Econometrics, 225(2), 200-230
  • Goodman-Bacon, A. (2021). Difference-in-differences with variation in treatment timing. J. Econometrics, 225(2), 254-277
  • Sun, L., & Abraham, S. (2021). Estimating dynamic treatment effects in event studies with heterogeneous treatment effects. J. Econometrics, 225(2), 175-199