Mímisbrunnr知恵の泉

← 因果推論 一覧

🎓 レベル:発展 | 重要度:B(標準)

📎 前提:バックドア基準と識別 | 構造的因果モデルとdo演算子 | 関連:過剰調整とMバイアス

要点(BLUF)


1. 媒介の構造:通る道と通らない道

処置 XX が結果 YY に効くとき、その効き方には2通りの経路があり得ます。

flowchart LR
    X["処置 X"] --> M["媒介 M"]
    M --> Y["結果 Y"]
    X --> Y

MMXX子孫であり、XMYX\to M\to Y因果ダイアグラムとd分離鎖(媒介) です。ここで決定的に重要なのは、MM は交絡ではないこと。交絡は XXXCYX\leftarrow C\to Y)でしたが、MMXXです。にもかかわらず「関係しそうな変数だから」と MM を調整集合に入れると、本来見たい効果の通り道を塞いでしまいます(第4節)。


2. 効果の分解:自然直接効果と自然間接効果

効果を厳密に定義するため、入れ子の反事実を使います(潜在結果モデル反事実とPearlの因果の階梯)。

これを使うと、総効果(TE)

TE  =  E[Y(1,M(1))Y(0,M(0))]\text{TE} \;=\; E\big[\,Y(1,M(1)) - Y(0,M(0))\,\big]

と書け、次のように分解できます。自然直接効果(NDE) は、媒介を「処置しなかったときの値 M(0)M(0)」に固定したまま XX だけを 010\to1 に変えた効果。

NDE  =  E[Y(1,M(0))Y(0,M(0))]\text{NDE} \;=\; E\big[\,Y(1,M(0)) - Y(0,M(0))\,\big]

自然間接効果(NIE) は、X=1X{=}1 に固定したまま、媒介を M(0)M(0) から M(1)M(1) へ変えた効果(=媒介が動いたことによる分)。

NIE  =  E[Y(1,M(1))Y(1,M(0))]\text{NIE} \;=\; E\big[\,Y(1,M(1)) - Y(1,M(0))\,\big]

すると2つを足すと中間項 E[Y(1,M(0))]E[Y(1,M(0))] が打ち消し合い、きれいに総効果に戻ります。

TE  =  NDE+NIE\text{TE} \;=\; \text{NDE} + \text{NIE}

線形・交互作用なしの場合、これは古典的な「係数の積」になります。M=α0+αX+εMM=\alpha_0+\alpha X+\varepsilon_MY=β0+θX+γM+εYY=\beta_0+\theta X+\gamma M+\varepsilon_Y とすると、

NDE=θ,NIE=αγ,TE=θ+αγ\text{NDE}=\theta,\qquad \text{NIE}=\alpha\gamma,\qquad \text{TE}=\theta+\alpha\gamma

直接効果は XX の係数 θ\theta、間接効果は「XMX\to M の係数 α\alpha」×「MYM\to Y の係数 γ\gamma」。Pearl はこの積が、線形・無交互作用のもとで NIE に一致することを示しました(Baron–Kenny 法の因果的な裏づけ)。


3. 識別の仮定:媒介分析は交絡に二重に弱い

NDE・NIE が観測データから識別できるには、逐次的無交絡(sequential ignorability) が要ります。直観的には4つです。

  1. XYX{-}Y の交絡がない(処置の割り当てが結果に対して交換可能)
  2. XMX{-}M の交絡がない(処置が媒介に対して交換可能)
  3. MYM{-}Y の交絡がない(媒介が結果に対して、XX と共変量で条件づけたうえで交換可能)
  4. XX に影響される MYM{-}Y 交絡がない(媒介と結果の共通原因が、それ自身 XX の下流にない)

総効果だけなら XX をランダム化すれば 1・2 は満たせますが、3・4 はランダム化でも保証されませんMM は割り当てられた変数ではないからです。媒介分析が「交絡に二重に弱い」と言われるゆえんで、特に 4(処置後交絡)が崩れると NDE/NIE は非パラメトリックには識別できなくなります。本ノートのシミュレーションは XX をランダム化し、MYM{-}Y 交絡もゼロに作って 1〜4 を満たしています。


4. 擬似データで分解し、過剰調整を再現する

真の直接効果 1.01.0・間接効果 1.21.2・総効果 2.22.2 を仕込みます。XX は無作為割り当てです。総効果・直接効果を回帰で取り出し、間接効果を「係数の積」と「総効果 − 直接効果」の2通りで回収します。最後に、MM を調整すると何が起きるかを見ます。

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

# === X→M→Y と X→Y を仕込み、総効果を直接効果+間接効果に分解する ===
rng = np.random.default_rng(604)
n = 20000

# 処置は無作為割り当て(X-Y, X-M に交絡なし → 総効果が識別できる)
X = rng.binomial(1, 0.5, size=n)

# 媒介 M = 0.5 + a_XM*X + ノイズ
a_XM = 1.5
M = 0.5 + a_XM * X + rng.normal(0.0, 1.0, size=n)

# 結果 Y = 1 + 直接効果*X + gamma*M + ノイズ
direct_true = 1.0      # X→Y の直接効果(NDE)
gamma = 0.8            # M→Y
Y = 1.0 + direct_true * X + gamma * M + rng.normal(0.0, 1.0, size=n)

indirect_true = a_XM * gamma          # 間接効果(NIE) = 1.5*0.8 = 1.2
total_true = direct_true + indirect_true   # 総効果 = 2.2

df = pd.DataFrame({"Y": Y, "X": X, "M": M})

# (A) 総効果: Y~X のみ(Mを入れない)。Xが無作為なので E[Y|X=1]-E[Y|X=0]=総効果
total_est = smf.ols("Y ~ X", data=df).fit().params["X"]

# (B) 直接効果: Y~X+M でMを調整したときのX係数(=媒介を固定した分の効果)
fit_full = smf.ols("Y ~ X + M", data=df).fit()
direct_est = fit_full.params["X"]
gamma_est = fit_full.params["M"]

# (C) 間接効果: 係数の積 a_XM*gamma、または 総効果-直接効果
aXM_est = smf.ols("M ~ X", data=df).fit().params["X"]
indirect_prod = aXM_est * gamma_est
indirect_diff = total_est - direct_est

print("真値    : 総効果={:.2f}  直接効果={:.2f}  間接効果={:.2f}".format(
    total_true, direct_true, indirect_true))
print("推定    : 総効果={:.2f}  直接効果={:.2f}".format(total_est, direct_est))
print("間接効果: 係数の積={:.2f}  総効果-直接効果={:.2f}".format(indirect_prod, indirect_diff))
print("-- 過剰調整の罠 --")
print("Mを「交絡だと思って」調整したY~X+MのX係数={:.2f}".format(direct_est))
print("  → これは直接効果(1.0)。間接効果1.2が消え、総効果2.2を1.0と誤る")

実行すると次のように印字されます。

真値    : 総効果=2.20  直接効果=1.00  間接効果=1.20
推定    : 総効果=2.23  直接効果=1.03
間接効果: 係数の積=1.20  総効果-直接効果=1.20
-- 過剰調整の罠 --
Mを「交絡だと思って」調整したY~X+MのX係数=1.03
  → これは直接効果(1.0)。間接効果1.2が消え、総効果2.2を1.0と誤る

出力の意味:総効果 2.232.23・直接効果 1.031.03 がそれぞれ真値 2.22.21.01.0 に一致し、間接効果は「係数の積 1.201.20」「総効果 − 直接効果 1.201.20」のどちらでも真値 1.21.2 を回収しました(線形・無交互作用なので2法が一致)。決定的なのは最後のブロックです。MM を回帰に入れた瞬間、XX の係数は 2.232.23 から 1.031.03 へ落ちます。これは過誤ではなく、XMYX\to M\to Y の経路を MM で条件づけて塞いだ結果で、残った 1.031.03 は直接効果です。もし MM を「念のため入れた共変量」と誤解すれば、本当の総効果 2.22.21.01.0 と過小評価してしまいます。「変数を入れるほど正確になる」という素朴な発想が、媒介の前では逆に働くのです。


5. 仮定の直観的意味:なぜ調整で間接効果が消えるのか

因果ダイアグラムとd分離の d分離で説明できます。XMYX\to M\to Yで、中継点 MM を条件づけると経路は遮断されます。総効果は「XMYX\to M\to Y(間接)」と「XYX\to Y(直接)」の2経路の和でしたが、MM を調整すると間接の経路が閉じ、直接経路しか YY に伝わらなくなる——だから XX の係数は直接効果に縮みます。

ここから実務の指針が出ます。何を見たいかで MM を入れるか決める

交絡 CCXX の親)は「入れるべき」、媒介 MMXX の子)は「総効果には入れてはいけない」。親か子かで真逆であり、両者を「関係する変数」と一括りにするのが過剰調整の温床です(過剰調整とMバイアス)。


⚠️ よくある誤解・落とし穴


関連ノート