🎓 レベル:基礎 | 重要度:A(必須)
📎 前提:因果ダイアグラムとd分離 | 次に読む:識別の仮定 | 数理:重回帰分析(統計)・交絡の調整(統計)
要点(BLUF)
- 識別(identification) とは「観測できる分布だけから因果効果を表す式を作れるか」。表せれば、あとは推定の問題に落ちます。
- バックドア基準:調整集合 が「(a) の子孫を含まず、(b) 以外で に矢印が入る経路(バックドアパス)をすべて塞ぐ」とき、ATE は バックドア調整公式 で識別できます。
- 正しい (交絡)で調整すると真の ATE を当て、合流点や媒介を誤って調整集合に入れると外すことを、
ATE_trueを仕込んだ擬似データで数値で示します。
1. 識別とは何か
因果効果(例:ATE)は反事実 で定義されますが、反事実は片方しか観測できません(潜在結果モデル)。そこで問うのが 識別 です。
観測できる量( の同時分布)だけを使って、因果効果を一意な式で表せるか?
表せれば「識別可能(identifiable)」。あとはその式を有限データで推定するだけ(回帰による調整とその限界 以降)。表せなければ、どれだけデータを集めても因果は出ません。識別と推定を分けるのが因果推論の作法です。バックドア基準は「交絡を調整すれば識別できる」ための、DAG 上の十分条件を与えます。
2. バックドアパスと調整の狙い
と の間の経路のうち、 に矢印が入って始まる経路を バックドアパス と呼びます。下の DAG では がそれです。バックドアパスは交絡由来の見せかけの相関を運ぶので、塞ぎたい。一方 (および )の因果的経路は残したい。
flowchart LR C["交絡 C"] --> X["処置 X"] C --> Y["結果 Y"] X --> M["媒介 M"] --> Y X --> K["合流点 K"] Y --> K X -.->|"直接効果"| Y
この図には罠が3つあります。
- (交絡):バックドアパス を開く。調整して塞ぐべき。
- (媒介): は因果的経路の一部。総合効果を見たいなら調整してはいけない(調整すると効果の一部が消える)。
- (合流点): の共通結果。普段は閉じているが、調整すると開いてバイアスを生む(因果ダイアグラムとd分離)。
3. バックドア基準と調整公式
バックドア基準(Pearl):変数集合 が順序対 に関してバックドア基準を満たすとは、
- (a) のどのノードも の子孫でない、かつ
- (b) が、 に矢印が入って始まる経路(バックドアパス)をすべてブロックする。
このとき ATE は バックドア調整公式(adjustment formula) で識別されます。離散の なら
であり、平均処置効果は各層の効果を の分布で加重した形になります。
ポイントは、右辺がすべて観測できる条件付き期待値と の分布で書けていること。これが「識別できた」状態です。条件 (a) は「媒介や合流点を間違って入れるな」、(b) は「交絡を取りこぼすな」に対応します。
4. 擬似データで「正しい調整」と「誤った調整」を対比する
第2節の DAG をそのまま構造方程式にして、真の総合効果を (直接 +媒介 )と仕込みます。回帰の の係数で効果を推定し、調整集合を変えて当たり外れを見ます。
import numpy as np
import statsmodels.api as sm
# === バックドア:正しい調整集合は真値を当て、合流点/媒介を誤調整すると外す ===
rng = np.random.default_rng(2)
n = 40000
# 構造方程式モデル(SCM)
C = rng.normal(0, 1, n) # 交絡(C→X, C→Y)
X = 0.8 * C + rng.normal(0, 1, n) # 処置
M = 0.5 * X + rng.normal(0, 1, n) # 媒介 X→M→Y
b_X, b_M, b_C = 1.0, 2.0, 1.5
Y = b_X * X + b_M * M + b_C * C + rng.normal(0, 1, n)
K = 0.7 * X + 0.7 * Y + rng.normal(0, 1, n) # 合流点 X→K←Y
# 真の総合効果 = 直接 1.0 + 媒介 2.0×0.5 = 2.0
ATE_true = b_X + b_M * 0.5
print(f"真の総合効果 ATE = {ATE_true:.3f}\n")
def beta_on_X(extra_cols):
design = sm.add_constant(np.column_stack([X] + extra_cols))
return sm.OLS(Y, design).fit().params[1] # 定数の次が X の係数
print(f"素朴 (調整なし) Y~X : {beta_on_X([]):.3f}")
print(f"交絡Cで調整(正解) Y~X+C : {beta_on_X([C]):.3f}")
print(f"媒介Mも調整(過剰) Y~X+C+M : {beta_on_X([C, M]):.3f}")
print(f"合流Kも調整(誤り) Y~X+C+K : {beta_on_X([C, K]):.3f}")
出力:
真の総合効果 ATE = 2.000
素朴 (調整なし) Y~X : 2.720
交絡Cで調整(正解) Y~X+C : 1.991
媒介Mも調整(過剰) Y~X+C+M : 1.005
合流Kも調整(誤り) Y~X+C+K : -0.132
出力の意味:4つの調整を真値 と照らします。
- 素朴(調整なし):バックドアパス が開いたまま。交絡で過大評価。
- 交絡 で調整 ✓:バックドア基準を満たす 。バックドアパスを塞ぎつつ媒介 は残すので、総合効果 を正しく当てる。識別の成功です。
- 媒介 も調整 : を入れると因果的経路 まで遮断され、残るのは直接効果 だけ。総合効果を見たい目的には過剰調整で過小評価。条件 (a)(子孫を入れない)違反です。
- 合流点 も調整 : は の子孫かつ の合流点。条件づけると新たな経路が開き、符号まで壊れる。最悪の誤調整です。
「とにかく多く調整する」が安全でないことが数値で分かります。何を入れ、何を入れないかを DAG とバックドア基準で決める——これが識別の実務です。
5. 仮定の直観的意味:なぜ条件 (a)(b) なのか
- (b) バックドアパスを塞ぐ=交絡経由の見せかけの相関を断つこと。これが満たされると、層 の中では が(潜在結果に対し)あたかもランダムに割り当てられた状態=条件付き交換可能性 に一致します(識別の仮定)。だから各層の素朴差が因果効果になり、 で加重平均すれば ATE です。
- (a) の子孫を入れない=媒介(効果の通り道)や合流点(条件づけで開く)を巻き込まない安全装置。子孫を入れると、塞ぐべきでない因果的経路を塞いだり、閉じていた経路を開いたりして、せっかくの (b) を台無しにします。
要するにバックドア基準は、d分離(因果ダイアグラムとd分離)を「交絡だけをきれいに消す調整集合」の言葉に翻訳したものです。なお交絡を前から塞げないとき(未観測交絡があるとき)でも、媒介を経由して前から識別する フロントドア基準 など別ルートがあり、第6章の構造的因果モデルで扱います。
⚠️ よくある誤解・落とし穴
- 「共変量は多いほど良い」は誤り。媒介・合流点・ の子孫を入れると害になります(第4節)。投入変数は予測精度ではなく因果的役割で選びます。
- 「有意な共変量を全部入れる」も誤り。 とよく相関する変数でも、それが合流点や媒介なら入れてはいけません。 値や AIC は調整集合の選択基準になりません。
- 調整集合は一意でない。バックドア基準を満たす は複数あり得ます( でも でも可なことがある)。必要十分な「最小調整集合」を選ぶのが効率的です。
- 未観測交絡は塞げない。 が観測できなければバックドア基準は満たせず、回帰や傾向スコアでいくら頑張っても識別不能。そのときは操作変数(操作変数法と2SLS)など別デザインや、残るバイアスの感度分析(第7章)に頼ります。
- 線形回帰で当てられたのは設定が線形だから。一般には各層の効果を非線形に推定し で加重する必要があります。回帰一本での調整の限界は 回帰による調整とその限界 へ。
関連ノート
- 第1章 因果推論の枠組み 目次
- 因果ダイアグラムとd分離(前提・d分離の規則)
- 識別の仮定(次のトピック・調整を因果と読む仮定)
- 潜在結果モデル(ATE の定義と識別の対象)
- 回帰による調整とその限界(バックドア調整を回帰で実装する/限界)
- 傾向スコア(高次元の調整集合を1次元に縮約)
- 操作変数法と2SLS(未観測交絡があるときの代替)
- 重回帰分析(統計・回帰係数の解釈)
- 交絡の調整(統計・交絡調整の実務)
- 因果推論テキスト 全体目次