回帰不連続デザイン(RDD)の理論

テストの点数が60点以上の学生には奨学金が支給され、59点以下の学生には支給されない——こうした「閾値」に基づく処置の割り当てルールは、教育、医療、政策など多くの場面で見られます。この閾値の近傍で処置群と対照群を比較することで因果効果を推定する手法が回帰不連続デザイン(Regression Discontinuity Design, RDD)です。

RDDの巧みさは、閾値のすぐ上と下にいる個体が「ほぼランダムに」処置群と対照群に分かれていると見なせる点にあります。テストで60点を取った学生と59点を取った学生は、実力的にはほとんど変わりません。しかし一方は奨学金を受け、他方は受けません。この「ほぼランダムな」割り当ての性質を利用して、局所的な因果効果を推定します。

RDDは1960年代にThistlethwaiteとCampbellによって提案され、2000年代以降、計量経済学と政治学を中心に爆発的に普及しました。現在では、RCTに次ぐ内的妥当性を持つ準実験デザインとして広く認められています。

RDDは以下のような多様な場面で活用されています。

  • 教育政策: 成績基準による奨学金・補習プログラムの効果(テスト点数をランニング変数とする)
  • 公衆衛生: 年齢基準による健康保険適用の効果(年齢をランニング変数とする、例えば米国のメディケア適用年齢65歳)
  • 選挙研究: 僅差で勝利した候補者の現職効果(得票率をランニング変数とする)
  • 環境政策: 汚染基準による規制の効果(汚染レベルをランニング変数とする)
  • 金融規制: 資産規模基準による規制適用の効果

本記事の内容

  • シャープRDDとファジーRDDの定義
  • 識別仮定(連続性仮定)
  • 局所多項式回帰による推定
  • 帯域幅の選択
  • Pythonによるシミュレーションと推定

前提知識

シャープRDDの理論

設定

RDDでは、ランニング変数(running variable / forcing variable)$X$ とカットオフ(cutoff)$c$ が存在し、処置の割り当てが $X$ の値で決まります。

シャープRDDでは、処置が $X$ の値だけで完全に決まります。

$$ \begin{equation} T_i = \mathbf{1}(X_i \geq c) \end{equation} $$

$X_i \geq c$ ならば必ず処置を受け、$X_i < c$ ならば必ず処置を受けません。

識別仮定: 連続性仮定

RDDの識別は連続性仮定(continuity assumption)に基づきます。

$$ \begin{equation} E[Y(0) \mid X = x] \text{ と } E[Y(1) \mid X = x] \text{ がともに } x = c \text{ で連続} \end{equation} $$

この仮定は、潜在結果の条件付き期待値がカットオフで「ジャンプ」しないことを要求します。もし処置がなければ、アウトカムの条件付き期待値はカットオフを境に不連続に変化しないはずだ、ということです。

RDDが推定するもの

連続性仮定のもとで、カットオフにおける因果効果が次のように識別されます。

$$ \begin{equation} \tau_{\text{RDD}} = \lim_{x \downarrow c} E[Y \mid X = x] – \lim_{x \uparrow c} E[Y \mid X = x] \end{equation} $$

これは局所的平均処置効果(LATE at the cutoff)であり、ランニング変数がちょうどカットオフの値 $c$ である個体に対する処置効果です。

RDDが推定するのはカットオフ近傍の個体にとっての因果効果であり、カットオフから離れた個体には一般化できない点に注意が必要です。

連続性仮定の直感

連続性仮定がなぜ合理的かを直感的に理解しましょう。テストの点数(ランニング変数)がちょうど59点と60点の学生を比べると、これらの学生はテストの日のコンディションの微妙な違いによってカットオフの上か下に位置しており、基礎的な能力は非常に似ているはずです。

つまり、カットオフ近傍では処置の割り当てが「ほぼランダム」であり、RCTに似た状況が生じているのです。正確には、RDDは「カットオフでの局所的なランダム化」と解釈できます。

この解釈をもう少し深めましょう。テストの点数は「真の能力」と「ノイズ」(体調、問題の相性、マークミスなど)の和として構成されています。真の能力が59.5点程度の学生は、ノイズの実現値によってカットオフの上にも下にもなりえます。したがって、カットオフのごく近傍に限定すれば、処置群と対照群は「ノイズの偶然」によって分かれているだけであり、観測可能・不可能を問わずあらゆる共変量の分布が両群で同一になります。

この性質はRCTにおけるランダム化と本質的に同等であり、Lee and Lemieux(2010)はこれを局所的ランダム化の解釈(local randomization interpretation)と呼びました。この解釈のもとでは、フィッシャーの並べ替え検定に基づく正確推論も可能になります。ただし、局所的ランダム化の解釈が成り立つのはカットオフの「十分に近い」近傍に限られ、近傍の範囲が広がるにつれてこの解釈は弱くなります。

連続性仮定とRCTの比較

RDDとRCTの関係をもう少し明確にしましょう。RCTではすべての個体に対して処置の割り当てがランダムであるため、ATEが直接推定できます。一方、RDDでは「カットオフのすぐ近く」の個体に限って処置の割り当てが「ほぼランダム」です。

この違いは、推定できる因果効果の範囲に影響します。RCTはATE(全体の平均処置効果)を推定できるのに対し、RDDはカットオフにおけるLATE(局所的平均処置効果)のみを推定します。テストで60点ちょうどの学生に対する奨学金の効果はわかりますが、30点や90点の学生に対する効果は推定できません。

ただし、RDDの大きな利点は外部からの介入なしに因果効果を推定できることです。RCTの実施には倫理的・実務的な障壁がしばしばありますが、RDDは閾値ルールに基づく自然な処置割り当てを利用するため、既存の行政データや記録から分析を行えます。

連続性仮定の脅威

連続性仮定が破れる典型的なケースを理解しておくことは重要です。

ランニング変数の操作(manipulation): カットオフの値を知っている個体が、ランニング変数を操作してカットオフの上側に入ろうとする場合、連続性仮定は破れます。例えば、奨学金の基準が60点であることを知っている学生が、採点者に頼んで59点を60点にしてもらうと、カットオフのすぐ上にいる学生は「操作に成功した」特殊な学生となり、カットオフのすぐ下の学生とは質的に異なります。

他の政策のカットオフとの一致: ランニング変数の同じカットオフに別の政策も紐づいている場合、観察された不連続が分析対象の処置によるものか、別の処置によるものか区別できません。

離散的なランニング変数: ランニング変数が連続でなく離散的な場合(例: 年齢)、カットオフの近傍で「ほぼ同じ」個体を比較するという論理が弱くなります。年齢が65歳をカットオフとする場合、64歳と65歳の間には1年の差があり、この間に他の変化が生じているかもしれません。

処置の波及効果(SUTVA違反): カットオフのすぐ上の個体への処置が、カットオフのすぐ下の個体のアウトカムに影響を与える場合、RDDの推定量にバイアスが生じます。例えば、奨学金を受けた学生が受けなかった学生に教材を共有するようなスピルオーバーがある場合です。

カットオフの変更に対する予期: カットオフが過去のデータから予測可能である場合、個体がカットオフの変更を予期して行動を変える可能性があります。例えば、「今年のカットオフは60点だが、来年は55点に下がる」という予想があれば、個体の行動が歪み、連続性仮定が脅かされます。

操作の検定

連続性仮定の間接的な検証として、以下の検定が一般的に行われます。

マッキャリー密度検定(McCrary density test): ランニング変数の密度関数がカットオフで不連続であるかを検定します。もし個体がカットオフを操作しているなら、カットオフのすぐ上に個体が「積み上がる」ため、密度関数にジャンプが生じます。密度関数が連続であることは、操作が行われていない証拠になります。

共変量のバランス検定: カットオフの上下で観測可能な共変量(性別、年齢、社会経済的変数など)の分布を比較します。RDDの論理では、カットオフ近傍の個体は「ほぼ同じ」はずなので、共変量の分布に不連続があってはなりません。もし共変量にジャンプが見つかれば、処置の割り当てがランダムでなく、連続性仮定が疑わしいことを示唆します。

プラセボ検定(偽のカットオフ検定): カットオフ以外の位置にカットオフを設定して同じ推定を行い、不連続が検出されないことを確認します。真のカットオフ以外の位置で不連続が検出されるならば、それは処置効果ではなくモデルの不備や関数形のミスを示唆します。

これらの検定は連続性仮定を直接証明するものではありませんが、仮定に矛盾する証拠がないことを確認するための重要なステップです。実証研究では、マッキャリー密度検定と共変量バランス検定を標準的に報告することが求められます。

操作の検定を理解したところで、次にシャープRDDの仮定が完全には成り立たない場合のデザインを見ましょう。

ファジーRDD

シャープRDDではカットオフで処置が完全に決まりますが、現実にはこの条件が満たされないことも多くあります。例えば、テストが60点以上の学生に奨学金の「資格」が与えられるが、全員が実際に申請するわけではないかもしれません。あるいは、60点未満の学生でも特別な事情で奨学金を受けられるかもしれません。このような場合に適用するのがファジーRDDです。

定義

ファジーRDD(Fuzzy RDD)は、カットオフで処置の確率がジャンプするが、処置が完全には決まらない場合です。

$$ \begin{equation} \lim_{x \downarrow c} P(T = 1 \mid X = x) \neq \lim_{x \uparrow c} P(T = 1 \mid X = x) \end{equation} $$

例えば、テストが60点以上の学生には奨学金の「資格」が与えられるが、全員が実際に申請するわけではない、という状況です。

ファジーRDDの推定

ファジーRDDの因果効果は、シャープRDDの推定量を操作変数法と同じ構造で推定します。

$$ \begin{equation} \tau_{\text{Fuzzy}} = \frac{\lim_{x \downarrow c} E[Y \mid X=x] – \lim_{x \uparrow c} E[Y \mid X=x]}{\lim_{x \downarrow c} E[T \mid X=x] – \lim_{x \uparrow c} E[T \mid X=x]} \end{equation} $$

分子は「カットオフでのアウトカムのジャンプ」、分母は「カットオフでの処置確率のジャンプ」です。これはワルド推定量と同じ構造であり、カットオフの上下を操作変数と見なしたIV推定量に相当します。

この推定量の直感を理解しましょう。もしカットオフを超えてもごく一部の個体しか実際に処置を受けないならば(分母が小さい)、アウトカムのジャンプ(分子)が小さくても、処置を受けた個体に対する効果は大きい可能性があります。分母で割ることで、「実際に処置の受否が変わった個体あたりの効果」にスケーリングされるのです。

ファジーRDDの推定方法

実践的には、ファジーRDDは2段階最小二乗法(2SLS)で推定されます。

第1段階: カットオフの上下を操作変数として、処置 $T$ を回帰する

$$ T_i = \alpha_1 + \beta_1 (X_i – c) + \gamma_1 \mathbf{1}(X_i \geq c) + \delta_1 (X_i – c) \mathbf{1}(X_i \geq c) + \nu_i $$

第2段階: 第1段階の予測値 $\hat{T}_i$ を使ってアウトカムを回帰する

$$ Y_i = \alpha_2 + \beta_2 (X_i – c) + \tau \hat{T}_i + \delta_2 (X_i – c) \mathbf{1}(X_i \geq c) + \eta_i $$

$\tau$ がファジーRDDの推定量です。

ファジーRDDが推定するのは、カットオフの変化によって処置の受否が変わる個体(遵守者, complier)に対するLATEです。常に処置を受ける「常受容者」(always-taker)やカットオフに関係なく処置を受けない「常拒否者」(never-taker)の効果は推定できない点に注意が必要です。

シャープRDDとファジーRDDの関係

シャープRDDはファジーRDDの特殊ケースです。シャープRDDでは分母(処置確率のジャンプ)が1であるため、ファジーRDDの推定量はシャープRDDの推定量に一致します。

また、分母が1に近い場合(ほとんどの個体がカットオフルールに従う場合)、ファジーRDDの推定量はシャープRDDの推定量に近くなりますが、コンプライヤーLATEとして解釈されるべきです。

ファジーRDDにおける遵守タイプの分類

ファジーRDDの解釈を深めるために、個体の行動パターンを分類しましょう。操作変数法におけるLATEの枠組みと同様に、個体は以下の4タイプに分類されます。

タイプ $X < c$ のとき $X \geq c$ のとき 説明
遵守者(complier) $T = 0$ $T = 1$ カットオフルールに従う
拒否者(defier) $T = 1$ $T = 0$ カットオフルールに逆らう
常受容者(always-taker) $T = 1$ $T = 1$ 常に処置を受ける
常拒否者(never-taker) $T = 0$ $T = 0$ 常に処置を受けない

単調性の仮定(カットオフの上にいることが処置確率を下げることはない)を置くと、拒否者は存在しないことになり、ファジーRDDの推定量は遵守者に対するLATEとして解釈されます。

この分類が実質的に意味を持つ例を考えましょう。奨学金の基準点が60点の場合、常受容者は「60点未満でも別のルートで奨学金を受ける学生」、常拒否者は「60点以上でも奨学金を申請しない学生」です。ファジーRDDが推定するのは、「60点という閾値の上下で実際に奨学金受給が変わる学生」(遵守者)に対する効果のみです。

ファジーRDDの理論を踏まえて、次にRDDの推定の実装方法を見ていきましょう。

局所多項式回帰による推定

RDDの理論は「カットオフでの極限値の差」として因果効果を定義していますが、実際にはデータは離散的であり、ちょうどカットオフの値を持つ観測が存在しないこともあります。そこで、カットオフ近傍のデータを使って回帰モデルを当てはめ、カットオフにおける予測値を推定する方法が必要になります。

推定の基本的なアイデア

式(3)の極限値を推定するために、カットオフの左側と右側で別々の回帰モデルを当てはめ、カットオフにおける予測値の差を計算します。ここで重要なのは、左側と右側で別々のモデルを使うことです。もし左右を一つのモデルで当てはめると、不連続のジャンプが平滑化されてしまい、処置効果が過小推定される恐れがあります。

最も一般的な方法は局所多項式回帰(local polynomial regression)です。カットオフの左右でそれぞれ多項式を当てはめます。

$$ E[Y \mid X = x] = \begin{cases} \alpha_l + \beta_{l1}(x – c) + \beta_{l2}(x – c)^2 + \cdots & x < c \\ \alpha_r + \beta_{r1}(x - c) + \beta_{r2}(x - c)^2 + \cdots & x \geq c \end{cases} $$

RDD推定量は $\hat{\tau}_{\text{RDD}} = \hat{\alpha}_r – \hat{\alpha}_l$ です。$\hat{\alpha}_l$ はカットオフの左側から外挿した予測値、$\hat{\alpha}_r$ は右側から外挿した予測値であり、その差が不連続のジャンプ——すなわち因果効果の推定量——です。

局所多項式回帰は、重み付き最小二乗法として定式化できます。左側の回帰の場合、

$$ \hat{\bm{\beta}}_l = \arg\min_{\bm{\beta}} \sum_{i: X_i < c} K\left(\frac{X_i - c}{h}\right) \left[Y_i - \sum_{p=0}^{P} \beta_p (X_i - c)^p \right]^2 $$

ここで $K(\cdot)$ はカーネル関数、$h$ は帯域幅、$P$ は多項式の次数です。右側も同様に推定します。

多項式の次数の選択

局所多項式の次数 $p$ の選択も重要です。

$p = 0$(局所定数、ナダラヤ・ワトソン推定量に相当)は最も単純ですが、カットオフでの推定にバイアスが残りやすいです。

$p = 1$(局所線形回帰)は最も広く使われる選択です。カットオフでの境界バイアスを自動的に補正する性質があり、計算も安定しています。

$p = 2$(局所2次回帰)はバイアスをさらに減らせますが、分散が増加します。

一般に、$p = 1$(局所線形回帰)が推奨されます(Imbens and Lemieux, 2008; Cattaneo and Titiunik, 2022)。

局所線形回帰が推奨される理由をもう少し詳しく見ましょう。ノンパラメトリック回帰の境界問題(boundary problem)において、局所定数回帰は境界で大きなバイアスが生じることが知られています。RDDではカットオフが推定の対象点であり、カットオフの左右でデータが片側にしかない(左側の推定では $x < c$ のデータのみを使う)ため、カットオフは常に「境界」です。局所線形回帰はこの境界バイアスを自動的に補正する性質を持ち、バイアスとバリアンスのバランスにおいて理論的に最適な選択とされています。

一方、$p = 2$ の局所2次回帰はバイアスをさらに減らしますが、特に帯域幅が小さい場合に推定値の分散が増大し、結果が不安定になりやすいです。実務的には、局所線形回帰をメインの推定方法とし、局所2次回帰をロバスト性チェックとして併用するのが標準的なプラクティスです。

カーネル関数の選択

局所回帰では、カットオフからの距離に応じてデータ点に重みを付けるカーネル関数を用います。代表的なカーネルは以下の通りです。

$$ K_{\text{uniform}}(u) = \frac{1}{2} \cdot \mathbf{1}(|u| \leq 1) $$

$$ K_{\text{triangular}}(u) = (1 – |u|) \cdot \mathbf{1}(|u| \leq 1) $$

$$ K_{\text{Epanechnikov}}(u) = \frac{3}{4}(1 – u^2) \cdot \mathbf{1}(|u| \leq 1) $$

ここで $u = (X_i – c) / h$ です。三角カーネルはカットオフに近い点に大きな重みを与えるため、RDDの文脈で広く推奨されています。一様カーネル(均等な重み)は単純な重み付けなしの局所回帰に相当します。

カーネル関数の選択は帯域幅の選択ほど推定結果に大きな影響を与えないことが経験的に知られています。理論的には、三角カーネルがMSE最適帯域幅のもとでのMSEを最小化する性質を持つことがFan and Gijbels(1996)によって示されています。このため、三角カーネルがRDDの標準的な選択となっています。

ただし、カーネル関数の選択に対する推定結果のロバスト性を確認するために、複数のカーネルで結果を比較することが望ましいです。結果がカーネルの選択によって大きく変わる場合は、帯域幅の選択やデータの質に問題がある可能性を示唆しています。

帯域幅の選択

局所回帰では、カットオフの近傍のデータのみを使用します。この「近傍」の範囲を帯域幅(bandwidth)$h$ と呼びます。$|X_i – c| \leq h$ の個体のみを使用して回帰を推定します。

帯域幅の選択にはバイアスと分散のトレードオフがあります。

  • $h$ が小さい: バイアスは小さい(カットオフに近い個体のみを使うため局所近似が正確)が、サンプルサイズが減って分散が大きくなる
  • $h$ が大きい: サンプルサイズが増えて分散は小さくなるが、カットオフから離れた個体を含むためバイアスが大きくなる

最適な帯域幅はこのトレードオフを最小化するように選択されます。具体的には、MSE(平均二乗誤差)を最小化する帯域幅 $h_{\text{opt}}$ を目指します。

$$ h_{\text{opt}} = \arg\min_h \left[ \text{Bias}^2(h) + \text{Variance}(h) \right] $$

代表的な自動帯域幅選択法として以下があります。

Imbens and Kalyanaraman(2012)のIK法: MSE最適帯域幅を推定する方法。回帰関数の2次微分を推定し、バイアスの大きさを評価します。

Calonico, Cattaneo, and Titiunik(2014)のCCT法: IK法を改良し、バイアス補正を組み込んだロバスト信頼区間を提供する方法。現在最も広く使われています。

実践上は、メインの帯域幅で推定した後、帯域幅を半分や2倍にした場合の結果も報告して、推定の頑健性を確認するのが標準的なプラクティスです。

共変量の役割

RDDは共変量なしで因果効果を識別できるデザインですが、共変量を追加することで推定精度を向上させることができます。具体的には、局所回帰モデルに共変量 $\bm{W}$ を追加します。

$$ Y_i = \alpha + \tau T_i + \bm{\beta}^\top (X_i – c) + \bm{\gamma}^\top T_i (X_i – c) + \bm{\delta}^\top \bm{W}_i + \text{error}_i $$

共変量を含めることの利点は、条件付き分散 $\text{Var}(Y \mid X, \bm{W})$ が $\text{Var}(Y \mid X)$ よりも小さくなるため、推定量の標準誤差が減少することです。ただし、共変量を含めても推定量の一致性は変わりません(連続性仮定が成り立つ限り、共変量なしでも一致推定が得られます)。

共変量の追加は推定精度の向上に有用ですが、共変量がカットオフで不連続に変化する場合には注意が必要です。そのような共変量は処置の影響を受けている可能性があり、「悪い制御変数」として因果効果の推定を歪める恐れがあります。安全なのは、処置前に測定された変数のみを共変量として使うことです。

RDDの外的妥当性の限界

RDDが推定する因果効果は、カットオフにおけるLATEです。この効果はカットオフ近傍の個体にのみ適用されるため、外的妥当性(external validity)が制限されます。

例えば、テスト60点の学生に対する奨学金の効果を推定できても、30点や90点の学生に対する効果は分かりません。カットオフから離れた個体に結果を外挿するには、追加の仮定(関数形の仮定など)が必要です。

この限界は、RDDの内的妥当性(internal validity)の高さとのトレードオフです。RDDはRCTに次ぐ内的妥当性を持つとされますが、推定できるのはカットオフでの局所的な効果に限られます。

RDDの漸近理論

RDD推定量の分布

局所線形回帰に基づくRDD推定量の漸近的な性質を整理しましょう。帯域幅 $h$ を使った局所線形回帰のRDD推定量 $\hat{\tau}$ は、一定の正則条件のもとで以下の性質を持ちます。

$$ \begin{equation} \hat{\tau} = \tau + \text{Bias}(h) + \text{SE}(h) \cdot Z \end{equation} $$

ここで $Z \xrightarrow{d} N(0, 1)$ です。

バイアス: 局所線形回帰のバイアスは、回帰関数の2次微分に依存します。

$$ \begin{equation} \text{Bias}(h) \approx \frac{h^2}{2} \left[\mu_+”(c) – \mu_-”(c)\right] \cdot B \end{equation} $$

ここで $\mu_+”(c)$ と $\mu_-”(c)$ はそれぞれカットオフの右側と左側での回帰関数の2次微分、$B$ はカーネル関数に依存する定数です。帯域幅が大きくなるほどバイアスは $h^2$ に比例して増加します。

分散: 推定量の分散は、

$$ \begin{equation} \text{Var}(\hat{\tau}) \approx \frac{1}{nh} \left[\frac{\sigma_+^2(c)}{f_+(c)} + \frac{\sigma_-^2(c)}{f_-(c)}\right] \cdot V \end{equation} $$

ここで $\sigma_+^2(c)$ と $\sigma_-^2(c)$ はカットオフの右側と左側での条件付き分散、$f_+(c)$ と $f_-(c)$ はランニング変数の密度、$V$ はカーネル関数に依存する定数です。帯域幅が小さくなるほど分散は $1/(nh)$ に比例して増大します。

MSE最適帯域幅

バイアスの二乗と分散の和であるMSEを最小化する帯域幅は、

$$ \begin{equation} h_{\text{opt}} = C \cdot n^{-1/5} \end{equation} $$

のオーダーで減少します。これはノンパラメトリック回帰における典型的な帯域幅の収束レートです。定数 $C$ は回帰関数の曲率、条件付き分散、密度関数に依存します。

MSE最適帯域幅を使ったRDD推定量の収束レートは $n^{-2/5}$ であり、パラメトリック推定量の $n^{-1/2}$ よりも遅くなります。これはRDDがカットオフの1点でのみ識別を行うノンパラメトリック的な手法であることを反映しています。

ロバスト信頼区間

MSE最適帯域幅を使った推定量には無視できないバイアスが残るため、通常の正規近似に基づく信頼区間は被覆確率が名目水準を下回ることがあります。Calonico, Cattaneo, and Titiunik(2014)は、バイアスを推定して補正したロバスト信頼区間を提案しました。

具体的には、バイアスの推定のために帯域幅 $b > h$ を用いた局所2次回帰を行い、推定されたバイアス $\widehat{\text{Bias}}$ を差し引いたバイアス補正推定量

$$ \begin{equation} \hat{\tau}_{\text{bc}} = \hat{\tau} – \widehat{\text{Bias}} \end{equation} $$

を構成します。さらに、バイアス補正の不確実性を考慮した修正標準誤差を用いて信頼区間を構成します。この方法は rdrobust パッケージ(R / Stata / Python)として実装されており、現在のRDD分析の標準的なツールとなっています。

地理的RDDと発展的トピック

空間的な境界を利用したRDD

RDDの概念は、1次元のランニング変数だけでなく、地理的な境界にも拡張できます。例えば、行政区域の境界を挟んで異なる政策が適用される場合、境界の両側に住む住民を比較することで政策の因果効果を推定できます。

地理的RDD(Geographic RDD / Spatial RDD)では、ランニング変数が境界までの距離(正負で側を区別)となります。境界の片側に住む住民が処置群、もう片側が対照群です。

地理的RDDの追加的な仮定として、境界近傍の住民が「ほぼランダムに」境界のどちら側に位置しているかが重要です。実際には、人々は住む場所を選択するため、自己選択バイアスが懸念されます。例えば、税率が異なる行政区域の境界では、低税率の側に移住する人がいるかもしれません。このような操作がないことの検証が不可欠です。

キンクRDD

通常のRDDでは処置変数がカットオフで不連続に変化しますが、キンクRDD(Regression Kink Design, RKD)は処置変数がカットオフで傾きが変化する場合を扱います。

例えば、累進課税制度では所得がある閾値を超えると限界税率が上がります。所得の水準自体は連続的に変化しますが、税率の勾配がキンク(屈折)します。RKDは、このキンクが応答変数の勾配にも影響を及ぼすかを検定することで、限界税率の変化が労働供給に与える因果効果を推定します。

RKDの推定量は次のように定義されます。

$$ \begin{equation} \tau_{\text{RKD}} = \frac{\lim_{x \downarrow c} \frac{dE[Y \mid X=x]}{dx} – \lim_{x \uparrow c} \frac{dE[Y \mid X=x]}{dx}}{\lim_{x \downarrow c} \frac{dE[T \mid X=x]}{dx} – \lim_{x \uparrow c} \frac{dE[T \mid X=x]}{dx}} \end{equation} $$

分母と分子がそれぞれ処置変数と応答変数の勾配の変化であることが、通常のRDDとの違いです。

複数カットオフのRDD

RDDは単一のカットオフを持つ設定に限定されません。複数カットオフRDD(multi-cutoff RDD)は、異なるサブグループごとに異なるカットオフが適用される場合を扱います。例えば、各州が異なる基準点で奨学金の資格を決定している場合です。

複数カットオフRDDの分析方法には主に2つのアプローチがあります。

正規化アプローチ: 各カットオフ $c_j$ を使ってランニング変数を $\tilde{X}_i = X_i – c_j$ と正規化し、すべてのデータをカットオフ $\tilde{c} = 0$ で統合して推定します。この方法は各カットオフでの効果を加重平均した推定量を提供します。

カットオフ固有の推定: 各カットオフで個別にRDDを推定し、必要に応じて結果を統合します。このアプローチはカットオフごとの効果の異質性を調べることができるという利点があります。

Cattaneo, Keele, Titiunik, and Vazquez-Bare(2021)は、複数カットオフRDDの体系的な方法論を提供しており、正規化の妥当性、最適な統合方法、効果の異質性の検定について議論しています。

漸近理論と発展的トピックを整理したところで、Pythonでの実装に移りましょう。

Pythonシミュレーション

シャープRDDの推定

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

np.random.seed(42)
n = 1000
cutoff = 0.0

# --- データ生成 ---
X = np.random.uniform(-1, 1, n)  # ランニング変数
T = (X >= cutoff).astype(int)    # シャープRDD

# 潜在結果
true_effect = 2.5
Y0 = 3 + 2 * X + 0.5 * X**2 + np.random.normal(0, 0.5, n)
Y1 = Y0 + true_effect
Y = T * Y1 + (1 - T) * Y0

# --- RDD推定(局所線形回帰)---
bandwidths = [0.1, 0.2, 0.3, 0.5, 1.0]
estimates = {}

for h in bandwidths:
    mask = np.abs(X - cutoff) <= h
    X_local = X[mask]
    Y_local = Y[mask]
    T_local = T[mask]

    # 左側(X < c)
    left = X_local < cutoff
    if left.sum() > 2:
        reg_l = LinearRegression().fit((X_local[left] - cutoff).reshape(-1, 1),
                                       Y_local[left])
        y_left = reg_l.predict(np.array([[0]]))[0]
    else:
        y_left = np.nan

    # 右側(X >= c)
    right = X_local >= cutoff
    if right.sum() > 2:
        reg_r = LinearRegression().fit((X_local[right] - cutoff).reshape(-1, 1),
                                       Y_local[right])
        y_right = reg_r.predict(np.array([[0]]))[0]
    else:
        y_right = np.nan

    estimates[h] = y_right - y_left

print(f"真の処置効果: {true_effect:.4f}")
print(f"\n帯域幅別のRDD推定値:")
for h, est in estimates.items():
    print(f"  h = {h:.1f}: {est:.4f} (バイアス: {est - true_effect:+.4f})")

# --- 可視化 ---
fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))

# (a) データとRDD推定
ax = axes[0]
ax.scatter(X, Y, alpha=0.2, s=10, color="gray")

# 回帰線(h=0.3)
h = 0.3
mask = np.abs(X - cutoff) <= h
left = (X < cutoff) & mask
right = (X >= cutoff) & mask

x_plot_l = np.linspace(cutoff - h, cutoff, 100)
x_plot_r = np.linspace(cutoff, cutoff + h, 100)

reg_l = LinearRegression().fit((X[left] - cutoff).reshape(-1, 1), Y[left])
reg_r = LinearRegression().fit((X[right] - cutoff).reshape(-1, 1), Y[right])

ax.plot(x_plot_l, reg_l.predict((x_plot_l - cutoff).reshape(-1, 1)),
        "b-", linewidth=2.5, label="Left regression")
ax.plot(x_plot_r, reg_r.predict((x_plot_r - cutoff).reshape(-1, 1)),
        "r-", linewidth=2.5, label="Right regression")
ax.axvline(cutoff, color="black", linestyle="--", linewidth=1.5,
           label=f"Cutoff (c={cutoff})")

# 不連続の表示
y_l = reg_l.predict(np.array([[0]]))[0]
y_r = reg_r.predict(np.array([[0]]))[0]
ax.plot(cutoff, y_l, "bo", markersize=10, zorder=5)
ax.plot(cutoff, y_r, "ro", markersize=10, zorder=5)
ax.annotate("", xy=(cutoff + 0.02, y_r), xytext=(cutoff + 0.02, y_l),
            arrowprops=dict(arrowstyle="<->", color="green", lw=2))
ax.text(cutoff + 0.05, (y_l + y_r) / 2,
        f"RDD = {y_r - y_l:.2f}", fontsize=11, color="green")

ax.set_xlabel("Running variable X", fontsize=12)
ax.set_ylabel("Outcome Y", fontsize=12)
ax.set_title(f"Sharp RDD (bandwidth h={h})", fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# (b) 帯域幅感度分析
ax = axes[1]
h_range = np.linspace(0.05, 1.0, 50)
est_range = []
for h in h_range:
    mask = np.abs(X - cutoff) <= h
    left = (X < cutoff) & mask
    right = (X >= cutoff) & mask
    if left.sum() > 5 and right.sum() > 5:
        rl = LinearRegression().fit((X[left]-cutoff).reshape(-1,1), Y[left])
        rr = LinearRegression().fit((X[right]-cutoff).reshape(-1,1), Y[right])
        est_range.append(rr.predict([[0]])[0] - rl.predict([[0]])[0])
    else:
        est_range.append(np.nan)

ax.plot(h_range, est_range, "b-", linewidth=2)
ax.axhline(true_effect, color="red", linestyle="--", linewidth=1.5,
           label=f"True effect = {true_effect}")
ax.set_xlabel("Bandwidth h", fontsize=12)
ax.set_ylabel("RDD estimate", fontsize=12)
ax.set_title("Bandwidth sensitivity analysis", fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig("rdd_sharp.png", dpi=150, bbox_inches="tight")
plt.show()

RDDのシミュレーション結果から、以下の知見が得られます。

  1. カットオフで明確な不連続が見える(左図)。カットオフの左右で回帰線が別々にフィットされ、その差がRDD推定量です。推定値は真の処置効果2.5に近い値です

  2. 帯域幅が小さいほどバイアスが小さいが分散が大きくなる(右図)。帯域幅が0.1を下回ると推定値が不安定になり、0.5を超えるとバイアスが増加する傾向が見えます。最適な帯域幅はこのトレードオフのバランスで決まります

  3. 中程度の帯域幅で推定値が安定しています。真の効果の周辺で推定値がほぼ平坦になる帯域幅の範囲があり、この範囲で推定が頑健であることを示しています

RDDの実践的なチェックリスト

RDDを適用する際に確認すべき項目を整理します。

デザインの検証

  1. ランニング変数の操作の検定: マッキャリー密度検定を行い、ランニング変数の密度がカットオフで連続であることを確認する
  2. 共変量のバランス: カットオフの上下で共変量の分布を比較し、不連続がないことを確認する
  3. プラセボ検定: カットオフ以外の位置で「偽のRDD」を行い、そこでは不連続が見られないことを確認する

推定の報告

  1. メインの推定結果: 最適帯域幅での推定値、標準誤差、p値
  2. 帯域幅感度分析: 帯域幅を半分や2倍にした場合の推定値を報告
  3. 多項式次数の感度分析: 線形と2次の両方の結果を報告
  4. データの可視化: 散布図と局所回帰線を描画し、不連続を視覚的に確認

解釈上の注意

推定された効果はカットオフにおけるLATEであることを明確にし、外挿の範囲について慎重に議論する必要があります。また、ファジーRDDの場合は、推定された効果がコンプライヤー(遵守者)に対するLATEであることを明示します。

RDDと他の因果推定手法の比較

RDDの位置づけを明確にするために、主要な因果推定手法を比較しましょう。

特徴 RCT RDD DID IV
内的妥当性 最高 高い 中程度 中程度
外的妥当性 中程度 低い(局所的) 中程度 中程度
推定対象 ATE LATE at cutoff ATT LATE
必要な仮定 ランダム化 連続性 平行トレンド 除外制約
データの種類 実験データ 閾値ルール パネルデータ 操作変数

RDDは内的妥当性が高い一方で、外的妥当性が制限されるという特徴があります。カットオフに基づく処置割り当てルールが自然に存在する場面では、RDDは非常に強力な因果推定の手法です。

まとめ

本記事では、回帰不連続デザイン(RDD)の理論を解説しました。

  • シャープRDDはカットオフで処置が完全に決まる場合のデザインであり、カットオフにおける回帰関数の不連続がLATEを推定する
  • 連続性仮定はRDDの識別仮定であり、潜在結果の条件付き期待値がカットオフで連続であることを要求する
  • ファジーRDDはカットオフで処置確率がジャンプする場合であり、ワルド推定量(IV推定量)の構造を持つ
  • 局所多項式回帰帯域幅の選択がRDD推定の実践上の鍵であり、CCT法による自動帯域幅選択が標準的
  • 操作の検定(マッキャリー密度検定)と共変量バランス検定がデザインの検証に不可欠
  • RDDは高い内的妥当性を持つが、カットオフにおける局所的な効果のみを推定する

次のステップとして、以下の記事も参考にしてください。