因果関係を議論するとき、「AがBの原因で、BがCの原因で、DはBとCの共通の結果で…」と文章で説明するのは複雑で間違いやすいものです。変数の数が増えると、どの変数を制御すべきか、どのパスが交絡を生むのかを頭の中だけで整理することは困難になります。
DAG(Directed Acyclic Graph、有向非巡回グラフ)は、変数間の因果関係を図で表現する強力なツールです。ジュディア・パール(Judea Pearl)によって因果推論の中心的なフレームワークとして発展させられたDAGは、複雑な因果構造を可視化し、因果効果の識別可能性を体系的に判定する方法を提供します。
DAGを使いこなすと、以下の問いに体系的に答えられるようになります。
- 因果効果を推定するためにどの変数を制御すべきか(バックドア基準)
- どの変数を制御してはいけないか(合流点バイアス)
- 観測データから因果効果を識別できるか否か
本記事の内容
- DAGの定義と基本要素
- マルコフ条件と因果的独立性
- d分離の理論と3つの基本パターン
- バックドア基準とフロントドア基準
- Pythonによるd分離の可視化
前提知識
- 因果推論入門 — 相関と因果の違い
- 交絡バイアスとその制御法 — 交絡の基本概念
DAGの定義
グラフの基本要素
身近な例から始めましょう。喫煙と肺がんの関係を考えます。「喫煙 → 肺がん」という矢印は、喫煙が肺がんの原因であることを意味します。ここに「遺伝的要因」を加えると、「遺伝的要因 → 喫煙」(喫煙しやすい遺伝的傾向)と「遺伝的要因 → 肺がん」(遺伝的な肺がんリスク)という矢印も描けます。さらに「タール沈着」を加えると「喫煙 → タール沈着 → 肺がん」という経路も描けるでしょう。
このように、変数をノード(点)、因果の向きを矢印(有向辺)で描いたグラフがDAGです。DAGは、形式的には以下の要素からなるグラフです。
- ノード(node): 各変数を表す。$X$, $Y$, $Z$ などの確率変数に対応
- 有向辺(directed edge): 矢印 $\to$ で因果関係を表す。$X \to Y$ は「$X$ が $Y$ の直接原因である」ことを意味する
- 非巡回性(acyclicity): グラフにループ(巡回路)が存在しない。すなわち、矢印を辿っても同じノードに戻ってこない
非巡回性の条件は、「原因と結果が循環しない」という因果関係の基本的な性質を反映しています。例えば「AがBの原因で、BがCの原因で、CがAの原因」という循環は、因果推論の枠組みでは通常許されません。これは時間的に「原因は結果より前に生じる」という仮定に対応しています。ただし、フィードバック系を扱うときは時間を展開して非巡回にするか、構造方程式モデル(SEM)の枠組みで別の取り扱いをします。
構造因果モデル(SCM)との対応
DAGは構造因果モデル(Structural Causal Model, SCM)のグラフ的な表現でもあります。SCMでは、各変数 $X_j$ が構造方程式
$$ X_j = f_j(\text{pa}(X_j), U_j) $$
によって定義されます。ここで $\text{pa}(X_j)$ は $X_j$ の親変数、$f_j$ は決定的な関数、$U_j$ は外生的なノイズ(通常は他のすべての $U_k$ と独立)です。DAGの矢印は、この構造方程式の引数関係を反映しています。
例えば、上述の喫煙と肺がんの例では次のようなSCMが考えられます。
$$ \text{遺伝的要因} = U_G $$
$$ \text{喫煙量} = f_S(\text{遺伝的要因}, U_S) $$
$$ \text{タール沈着} = f_T(\text{喫煙量}, U_T) $$
$$ \text{肺がんリスク} = f_C(\text{遺伝的要因}, \text{タール沈着}, U_C) $$
各方程式の右辺に現れる変数から左辺の変数に矢印を引くと、DAGが得られます。
因果的な意味
DAGの矢印 $X \to Y$ は「$X$ を介入的に変化させると $Y$ が変化しうる」という因果的な意味を持ちます。これは単なる統計的な相関ではなく、構造的な因果関係を表しています。ここで「変化しうる」という表現を使っているのは、$X$ を変化させても $Y$ が変化しない場合($f_Y$ が $X$ に依存しない形)もありうるためです。矢印は「直接的な因果経路の存在可能性」を示しています。
重要な点として、DAGに含まれていない矢印も情報を持ちます。$X$ と $Y$ の間に矢印がないことは、$X$ は $Y$ の直接原因ではない(他のすべての変数を条件付けたとき、$X$ と $Y$ は独立)という因果的排除を表しています。DAGの強みは、存在する因果関係だけでなく、存在しない因果関係も明示的に表現できることにあります。
用語の整理
DAG上の変数間の関係を記述する用語を整理します。
- 親(parent): $X \to Y$ のとき、$X$ は $Y$ の親。$\text{pa}(Y)$ と表記
- 子(child): $X \to Y$ のとき、$Y$ は $X$ の子。$\text{ch}(X)$ と表記
- 祖先(ancestor): 矢印を辿って $X$ に到達できるすべてのノードの集合。$\text{an}(X)$ と表記。言い換えると、$X$ に直接的または間接的に因果的影響を及ぼしうる変数の集合
- 子孫(descendant): $X$ から矢印を辿って到達できるすべてのノードの集合。$\text{de}(X)$ と表記。$X$ が直接的または間接的に因果的影響を及ぼしうる変数の集合
- パス(path): 矢印の向きを無視してノードを結ぶ一連の辺。因果的な向きに沿ったパスを有向パス、向きを無視したパスを無向パスと呼ぶ
- マルコフブランケット(Markov blanket): 変数 $X$ のマルコフブランケットは、$X$ の親、子、および子の他の親の集合。マルコフブランケットで条件付けると、$X$ はグラフ上の他のすべての変数と条件付き独立になる
マルコフ条件
因果マルコフ条件
DAGの中心的な仮定は因果マルコフ条件(causal Markov condition)です。これは「各変数は、その親ノードの値さえ知っていれば、祖先以外のどんな情報を追加で知っても予測が改善しない」という直感に対応します。
数学的には、因果マルコフ条件は同時分布の因数分解として表されます。
$$ \begin{equation} P(X_1, X_2, \ldots, X_p) = \prod_{j=1}^{p} P(X_j \mid \text{pa}(X_j)) \end{equation} $$
ここで $\text{pa}(X_j)$ は $X_j$ の親ノードの集合です。親ノードがない変数(根ノード)については $P(X_j \mid \text{pa}(X_j)) = P(X_j)$ と解釈します。
この因数分解は、ベイジアンネットワークでも同じ形で現れます。実際、因果ベイジアンネットワークはベイジアンネットワークに因果的解釈を与えたものと見なせます。
具体例: $Z \to X \to Y$ というDAGを考えます。因果マルコフ条件により、同時分布は次のように因数分解されます。
$$ P(Z, X, Y) = P(Z) \cdot P(X \mid Z) \cdot P(Y \mid X) $$
この因数分解から、$X$ の値が与えられたとき $Y$ と $Z$ が条件付き独立であること($Y \perp\!\!\!\perp Z \mid X$)が導かれます。これは「$X$ が $Z$ から $Y$ への情報伝達の唯一の経路である」というグラフの構造を正確に反映しています。
因果マルコフ条件の妥当性
因果マルコフ条件はどのような場合に妥当でしょうか。SCMの構造方程式 $X_j = f_j(\text{pa}(X_j), U_j)$ において、外生変数 $U_j$ がすべて互いに独立であるとき、因果マルコフ条件は自動的に成り立ちます。
逆に、因果マルコフ条件が成り立たない典型的なケースは以下の2つです。
- 未観測の共通原因がある場合: 2つの変数 $X$ と $Y$ に観測されていない共通原因 $U$ がある場合、$U$ をDAGに含めないと因果マルコフ条件が壊れる。解決策は $U$ をDAGに明示的に含めること(観測できなくても)
- 選択バイアスがある場合: データの収集過程で特定のサンプルが選択されている場合、選択条件で条件付けられた分布には因果マルコフ条件が成り立たないことがある
したがって、DAGを描く際には、関連するすべての変数(観測の有無を問わず)を含めることが重要です。
忠実性仮定
忠実性仮定(faithfulness assumption)は、DAGのd分離から導かれる条件付き独立性のみが同時分布に成り立つという仮定です。つまり、DAGに起因しない「偶然の」条件付き独立性は存在しないとします。
忠実性仮定が破れる例を見てみましょう。$X \to Y$ かつ $X \to Z \to Y$ というDAGで、$X$ から $Y$ への直接効果が $+1$、$Z$ を経由する間接効果が $-1$ だとすると、2つの効果が打ち消し合って $X$ と $Y$ が周辺的に独立になります。しかし、DAGの構造からはこの独立性は予測されません。忠実性仮定はこのような「偶然の相殺」を排除する仮定です。
忠実性仮定は、DAGから読み取れる独立性の情報が完全であることを保証します。この仮定のもとでは、d分離と条件付き独立性が一対一に対応するため、観測データの独立性テストからDAGの構造を学習(因果発見)することが可能になります。
因果的最小性
因果マルコフ条件と忠実性仮定に加えて、因果的最小性(causal minimality)の仮定がしばしば置かれます。これは「DAGからどの辺を1つ除去しても、因果マルコフ条件が壊れる」という条件です。余分な矢印を含まない最小のDAGを要求する仮定であり、オッカムのカミソリの精神に対応します。
これら3つの仮定——因果マルコフ条件、忠実性、因果的最小性——がDAGベースの因果推論の基盤となります。次のセクションで導入するd分離は、因果マルコフ条件と忠実性仮定のもとで、DAGから条件付き独立性を読み取るためのグラフ理論的な基準です。
d分離 — 条件付き独立性の判定
DAGの最大の利点は、グラフの構造を「見る」だけで、どの変数の組が条件付き独立であるかを判定できることです。この判定基準がd分離(d-separation)です。「d」は “directional” を意味し、矢印の向きを考慮した分離の概念です。
d分離を理解するために、まず3つの基本的なパスのパターンを整理しましょう。
3つの基本パターン
交絡バイアスとその制御法で紹介した3つのパターンを、d分離の観点から再整理します。
パターン1: チェーン(chain / mediator): $A \to M \to B$
チェーンは「$A$ が $M$ を介して $B$ に影響する」という媒介関係です。
- $M$ で条件付けない場合: パスは開。$A$ と $B$ は関連がある。$A$ の変化が $M$ を通じて $B$ に伝わるため
- $M$ で条件付ける場合: パスは閉。$A$ と $B$ は条件付き独立。$M$ の値を固定すると、$A$ の変化がそれ以上 $B$ に伝わらないため
具体例を挙げましょう。$A$ = 運動量、$M$ = 体脂肪率、$B$ = 血圧とします。運動量は体脂肪率を下げ、体脂肪率の低下は血圧を下げます。体脂肪率で条件付ける(同じ体脂肪率の人だけを比較する)と、運動量と血圧の関連は消えます(少なくともこの経路を通じた関連は)。
パターン2: フォーク(fork / common cause): $A \leftarrow M \to B$
フォークは「$M$ が $A$ と $B$ の共通原因である」という交絡の関係です。
- $M$ で条件付けない場合: パスは開。$A$ と $B$ は関連がある。$M$ が共通原因として見かけの相関を生み出すため
- $M$ で条件付ける場合: パスは閉。$A$ と $B$ は条件付き独立。共通原因を固定すると、見かけの相関が消えるため
具体例として、$M$ = 気温、$A$ = アイスクリームの売上、$B$ = 水難事故の件数を考えます。気温が高いとアイスクリームがよく売れ、水泳する人が増えて水難事故も増えます。気温で条件付ける(同じ気温の日だけを比較する)と、アイスクリームの売上と水難事故の相関は消えます。
パターン3: 合流点(collider / common effect): $A \to M \leftarrow B$
合流点は「$M$ が $A$ と $B$ の共通の結果である」という関係です。このパターンは他の2つとは逆の振る舞いをします。
- $M$ で条件付けない場合: パスは閉。$A$ と $B$ は独立。2つの独立な原因は、結果を知らない限り独立のまま
- $M$(またはその子孫)で条件付ける場合: パスは開。$A$ と $B$ は条件付き従属。結果を固定すると、一方の原因の情報がもう一方の原因について情報を提供する
この直感を「説明バイアス」(explaining-away)と呼びます。具体例として、$A$ = 学業成績、$B$ = スポーツ能力、$M$ = 名門大学への合格を考えます。学業成績とスポーツ能力は独立かもしれませんが、名門大学の合格者($M=1$)の中では、学業成績が低い人はスポーツ能力が高い傾向があります。一方の原因が弱ければ、もう一方の原因が強くないと結果を「説明」できないからです。
この合流点バイアスはバークソンのバイアス(Berkson’s bias)とも呼ばれ、因果推論で最も注意すべき落とし穴の一つです。不用意に合流点で条件付けると、存在しない関連を作り出してしまいます。
d分離の定義
3つの基本パターンを理解したところで、一般的な定義に進みましょう。
変数集合 $\bm{Z}$ が与えられたとき、$A$ と $B$ がd分離(d-separated)であるとは、$A$ と $B$ を結ぶすべてのパスが $\bm{Z}$ によってブロックされていることです。逆に、少なくとも1つの開いたパスが残っている場合、$A$ と $B$ はd連結(d-connected)であると言います。
パスがブロックされる条件は以下のとおりです。
- パス上にチェーンまたはフォークのノード $M \in \bm{Z}$ が存在する(条件付けにより閉じる)
- パス上に合流点ノード $M$ があり、$M \notin \bm{Z}$ かつ $M$ の子孫のいずれも $\bm{Z}$ に含まれない(条件付けないことにより閉じたまま)
忠実性仮定のもとで、d分離と条件付き独立性は同値になります。
$$ \begin{equation} A \perp\!\!\!\perp B \mid \bm{Z} \quad \Longleftrightarrow \quad A \text{ と } B \text{ が } \bm{Z} \text{ でd分離} \end{equation} $$
d分離の判定アルゴリズム
複雑なDAGでd分離を判定するための体系的な手順を示します。
- $A$ と $B$ を結ぶすべてのパス(矢印の向きを無視)を列挙する
- 各パスについて、パス上の各ノードを調べる
- 各ノードの局所構造がチェーン、フォーク、合流点のどれであるかを判定する
- ブロック条件を適用して、そのパスがブロックされるかどうかを判定する
- すべてのパスがブロックされていれば「d分離」、1つでも開いたパスがあれば「d連結」
変数の数が多い場合、パスの数は組み合わせ的に爆発しうるため、実際にはベイジアンネットワークのライブラリ(pgmpyなど)を用いてアルゴリズム的にd分離を判定することが多いです。
d分離の複合的な例
複数のパスが共存する場合を考えましょう。以下のDAGを考えます。
$$ Z \to X, \quad Z \to Y, \quad X \to M \to Y, \quad X \to C \leftarrow Y $$
$X$ と $Y$ を結ぶパスは以下の3つです。
- パス1: $X \leftarrow Z \to Y$(フォーク)— $Z$ で条件付けると閉じる
- パス2: $X \to M \to Y$(チェーン)— $M$ で条件付けると閉じる
- パス3: $X \to C \leftarrow Y$(合流点)— $C$ で条件付けないと閉じたまま
$\bm{Z} = \{Z\}$ で条件付けると、パス1はブロックされ、パス3は合流点で閉じたまま。しかしパス2は開いています。したがって $X$ と $Y$ は $\{Z\}$ でd連結です。
$\bm{Z} = \{Z, M\}$ で条件付けると、パス1も2もブロックされ、パス3は合流点で閉じたまま。したがって $X$ と $Y$ は $\{Z, M\}$ でd分離です。
ただし、$\bm{Z} = \{Z, M, C\}$ で条件付けると、パス3の合流点 $C$ で条件付けてしまうため、パス3が開きます。したがって $X$ と $Y$ は $\{Z, M, C\}$ でd連結です。これは「すべてを制御する」ことが危険である具体例です。
バックドア基準
d分離の概念は理論的に美しいですが、因果推論において実際に最も使われるのは、d分離の応用としてのバックドア基準(backdoor criterion)です。
因果効果を推定したい場面を考えましょう。処置 $T$ がアウトカム $Y$ に与える因果効果を知りたいとします。$T$ から $Y$ への因果的なパス(フロントドアパス、例えば $T \to Y$ や $T \to M \to Y$)は推定したい因果効果そのものを表しているので、これをブロックしてはいけません。問題は $T$ と $Y$ を結ぶバックドアパス——$T$ に入射する矢印から始まるパス(例えば $T \leftarrow Z \to Y$)——であり、これが交絡を生み出します。
変数集合 $\bm{S}$ が処置 $T$ からアウトカム $Y$ への因果効果に対してバックドア基準を満たすとは、以下の2条件が成り立つことです。
- $\bm{S}$ のどの変数も $T$ の子孫ではない
- $\bm{S}$ で条件付けると、$T$ と $Y$ を結ぶすべてのバックドアパスがブロックされる
条件1が必要な理由は、$T$ の子孫で条件付けると、$T$ からその子孫への因果効果を通じてバイアスが生じうるからです。特に、$T$ と $Y$ の合流点(共通の結果)の子孫で条件付けると、合流点バイアスが発生します。
条件2は、交絡を生み出すすべてのバックドアパスが $\bm{S}$ で条件付けることによりブロックされることを要求します。
バックドア基準を満たす $\bm{S}$ が見つかれば、因果効果は調整公式(adjustment formula)で識別可能です。
$$ P(Y \mid \text{do}(T = t)) = \sum_{\bm{s}} P(Y \mid T = t, \bm{S} = \bm{s})\,P(\bm{S} = \bm{s}) $$
この式は、$\bm{S}$ の各層(stratum)ごとに $T$ と $Y$ の関係を見て、その加重平均をとることで因果効果を推定しています。$\bm{S}$ で条件付けることで交絡が除去され、$P(\bm{S} = \bm{s})$ で周辺化することで全体の因果効果に戻しています。
バックドア基準を満たす集合の選び方: バックドア基準を満たす変数集合は一般に複数存在します。どれを選ぶかは実際的な問題です。原則として、以下のガイドラインに従います。
- $T$ の子孫は決して含めない(条件1の要請)
- 合流点の子孫も含めないのが安全(合流点バイアスのリスク)
- すべてのバックドアパス上の変数を少なくとも1つ含める(条件2の要請)
- できるだけ少ない変数で基準を満たすのが推定効率の面で有利
フロントドア基準
バックドア基準は交絡変数が観測されている場合に使えますが、交絡変数がすべて未観測の場合はどうでしょうか。フロントドア基準(front-door criterion)は、このような場合でも因果効果を識別できることがあることを示す重要な基準です。
$U \to T$、$U \to Y$、$T \to M \to Y$ というDAGで $U$ が未観測の場合を考えます。バックドアパス $T \leftarrow U \to Y$ を $U$ でブロックできないため、バックドア基準は使えません。しかし、中間変数 $M$ が観測されていれば、フロントドア基準により次の公式で因果効果が計算できます。
$$ P(Y \mid \text{do}(T = t)) = \sum_m P(M = m \mid T = t) \sum_{t’} P(Y \mid T = t’, M = m) P(T = t’) $$
フロントドア基準の詳細はdo計算とバックドア基準で解説します。
Pythonによるd分離の判定
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
def draw_dag(ax, nodes, edges, title="", conditioned=None):
"""DAGを描画する"""
if conditioned is None:
conditioned = set()
for name, (x, y) in nodes.items():
color = "lightcoral" if name in conditioned else "lightblue"
circle = plt.Circle((x, y), 0.15, color=color, ec="black", linewidth=2, zorder=3)
ax.add_patch(circle)
ax.text(x, y, name, ha="center", va="center", fontsize=14, fontweight="bold", zorder=4)
for (start, end) in edges:
x1, y1 = nodes[start]
x2, y2 = nodes[end]
dx = x2 - x1
dy = y2 - y1
length = np.sqrt(dx**2 + dy**2)
dx_n = dx / length * 0.15
dy_n = dy / length * 0.15
ax.annotate("", xy=(x2 - dx_n, y2 - dy_n),
xytext=(x1 + dx_n, y1 + dy_n),
arrowprops=dict(arrowstyle="-|>", color="black", lw=2))
ax.set_xlim(-0.5, 3.5)
ax.set_ylim(-0.5, 2.5)
ax.set_aspect("equal")
ax.set_title(title, fontsize=12)
ax.axis("off")
fig, axes = plt.subplots(2, 3, figsize=(15, 9))
# (a) Chain: A -> M -> B
nodes = {"A": (0, 1), "M": (1.5, 1), "B": (3, 1)}
edges = [("A", "M"), ("M", "B")]
draw_dag(axes[0, 0], nodes, edges, "Chain: A -> M -> B")
# (b) Chain conditioned on M
draw_dag(axes[0, 1], nodes, edges, "Chain | M: A _||_ B | M", conditioned={"M"})
# (c) Fork: A <- M -> B
nodes = {"A": (0, 0.5), "M": (1.5, 1.5), "B": (3, 0.5)}
edges = [("M", "A"), ("M", "B")]
draw_dag(axes[0, 2], nodes, edges, "Fork: A <- M -> B")
# (d) Collider: A -> M <- B
nodes = {"A": (0, 1.5), "M": (1.5, 0.5), "B": (3, 1.5)}
edges = [("A", "M"), ("B", "M")]
draw_dag(axes[1, 0], nodes, edges, "Collider: A -> M <- B\n(A _||_ B)")
# (e) Collider conditioned on M (opens path!)
draw_dag(axes[1, 1], nodes, edges, "Collider | M: A NOT _||_ B | M", conditioned={"M"})
# (f) 複雑なDAGの例
nodes = {"T": (0, 1), "Y": (3, 1), "Z": (1.5, 2),
"M": (1.5, 0), "W": (1.5, 1)}
edges = [("Z", "T"), ("Z", "Y"), ("T", "W"), ("W", "Y"), ("T", "M"), ("Y", "M")]
draw_dag(axes[1, 2], nodes, edges,
"Complex DAG\nBackdoor: condition on Z")
plt.tight_layout()
plt.savefig("dag_dseparation.png", dpi=150, bbox_inches="tight")
plt.show()
このDAGの可視化から、d分離の3つの基本パターンとその条件付けによる変化が確認できます。
-
チェーンとフォーク(上段): 中間ノードMで条件付けるとパスがブロックされ、AとBが条件付き独立になります
-
合流点(下段左・中): 条件付けない場合はAとBは独立ですが、Mで条件付けるとパスが開き、見かけの関連が生じます
-
複雑なDAG(下段右): TからYへの因果効果を推定するには、バックドアパス $T \leftarrow Z \to Y$ をブロックするためにZで条件付ける必要があります。MはTとYの合流点なので条件付けてはいけません
do演算子と介入分布
観測と介入の区別
DAGの中心的な概念の1つに、パールが提唱したdo演算子があります。$P(Y \mid X = x)$($X = x$ であることを観測した場合の $Y$ の分布)と $P(Y \mid \text{do}(X = x))$($X$ を介入的に $x$ に設定した場合の $Y$ の分布)は、一般に異なります。
直感的な例で考えましょう。$X$ = 消防車の出動数、$Y$ = 火災の被害額とします。消防車が多く出動した火災($X$ が大きい)は被害額も大きい($Y$ が大きい)という正の相関が観測されます。しかし、消防車を追加で派遣する($\text{do}(X = x + 1)$)と被害は減少するはずです。観測的な相関と介入的な因果効果が逆になるのは、火災の規模($Z$)が共通原因として $X$ と $Y$ の両方に影響しているからです。
切断化因数分解
do演算子の数学的な定義は、DAGの構造方程式モデルに基づきます。$\text{do}(X = x)$ という介入は、$X$ の構造方程式 $X = f_X(\text{pa}(X), U_X)$ を定数 $X = x$ に置き換え、他のすべての構造方程式はそのまま保持する操作です。
この操作により、介入後の同時分布は切断化因数分解(truncated factorization)で表されます。
$$ \begin{equation} P(X_1, \ldots, X_p \mid \text{do}(X_j = x)) = \prod_{k \neq j} P(X_k \mid \text{pa}(X_k)) \Big|_{X_j = x} \end{equation} $$
$X_j$ の条件付き分布 $P(X_j \mid \text{pa}(X_j))$ が積から除去されている点に注意してください。介入により $X_j$ は親変数の影響を受けなくなり、強制的に $x$ に設定されるためです。
この切断化因数分解から、バックドア基準で調整された因果効果の式が導出されます。詳細はdo計算とバックドア基準で解説します。
観測分布と介入分布が一致する条件
$P(Y \mid X = x) = P(Y \mid \text{do}(X = x))$ が成り立つのは、$X$ に交絡がない場合、すなわち $X$ と $Y$ の間にバックドアパスが存在しない場合です。このとき、観測的な条件付き分布がそのまま因果効果を表します。
バックドアパスが存在する場合には、バックドア基準を満たす変数集合 $\bm{S}$ で条件付けることで、調整公式
$$ \begin{equation} P(Y \mid \text{do}(X = x)) = \sum_{\bm{s}} P(Y \mid X = x, \bm{S} = \bm{s}) P(\bm{S} = \bm{s}) \end{equation} $$
により介入分布を計算できます。
マルコフ等価クラス
同じ条件付き独立性を含意するDAG
異なるDAGが同じ条件付き独立性の集合を含意することがあります。このようなDAGの集合をマルコフ等価クラス(Markov equivalence class)と呼びます。
例えば、$A \to B \to C$、$A \leftarrow B \to C$、$A \leftarrow B \leftarrow C$ の3つのDAGは、すべて同じ条件付き独立性 $A \perp\!\!\!\perp C \mid B$ を含意します。したがって、これらは同じマルコフ等価クラスに属します。
しかし、$A \to B \leftarrow C$(合流点)は、$A \perp\!\!\!\perp C$(無条件独立)かつ $A \not\perp\!\!\!\perp C \mid B$($B$ で条件付けると従属)を含意し、他の3つのDAGとは異なる独立性パターンを持ちます。したがって、合流点構造は別のマルコフ等価クラスに属します。
マルコフ等価の判定
2つのDAGがマルコフ等価であるための必要十分条件は、VermаとPearl(1991)によって明らかにされました。
定理: 2つのDAGがマルコフ等価である $\iff$ 同じ骨格(skeleton、矢印の向きを無視したグラフ)と同じ非遮蔽合流点(unshielded collider)を持つ。
非遮蔽合流点とは、$A \to C \leftarrow B$ かつ $A$ と $B$ の間に辺がない構造です。$A$ と $B$ の間に辺がある場合(遮蔽された合流点)は向きの識別に寄与しません。
この定理は、観測データからDAGの構造を学習する際の本質的な限界を示しています。データからは骨格と非遮蔽合流点の向きしか決定できず、他の辺の向きは決定できません。追加の辺の向きを決めるには、時間的順序やドメイン知識などの追加情報が必要です。
完全部分有向非巡回グラフ(CPDAG)
マルコフ等価クラスを1つのグラフで表現するために、CPDAG(Completed Partially Directed Acyclic Graph)が使われます。CPDAGでは、向きが決定できる辺は矢印で、決定できない辺は無向辺で表されます。PCアルゴリズムなどの因果発見アルゴリズムは、観測データからCPDAGを出力します。
マルコフ等価クラスの概念を理解したところで、DAGの実践的な応用に進みましょう。
DAGの実践的な応用
因果発見 — データからDAGを学習する
ここまではDAGの構造が既知であることを前提にしてきましたが、実際にはDAGの構造が分からないことがほとんどです。因果発見(causal discovery)は、観測データからDAGの構造を推定する手法の総称です。
代表的なアルゴリズムとして以下のものがあります。
制約ベースの手法(PCアルゴリズム): 条件付き独立性テストを繰り返し行い、独立な変数対の間の辺を除去していくアプローチです。忠実性仮定のもとで、マルコフ等価クラス(同じ条件付き独立性を含意するDAGの集合)を識別できます。
スコアベースの手法(GES、BIC最適化): DAGの「良さ」を測るスコア関数(BIC、BDeuなど)を定義し、スコアが最大になるDAGを探索するアプローチです。
関数形の制約を利用する手法(LiNGAM): 線形モデルかつ非ガウスノイズを仮定すると、DAGが一意に識別できることを利用する手法です。日本の清水昌平らが開発しました。
因果発見は活発な研究分野ですが、データだけからDAGを完全に確定することは一般に困難であることに注意が必要です。多くの場合、複数のDAGが同じ観測分布と整合的であり(マルコフ等価)、追加の仮定やドメイン知識なしにはDAGを一意に決定できません。
DAGの限界と注意点
DAGは因果推論の強力なフレームワークですが、いくつかの限界があります。
-
フィードバック系: DAGは非巡回性を仮定するため、フィードバックループを直接表現できません。例えば「不安が不眠を引き起こし、不眠が不安を悪化させる」という双方向の因果関係は、時間を展開した動的DAGや他の枠組み(directed cyclic graphsなど)で扱う必要があります。
-
DAGの正当性の検証: DAGの構造は研究者のドメイン知識に基づいて描かれることが多いですが、その正当性を完全に検証することは困難です。DAGが含意する条件付き独立性がデータで成り立つかをテストすることで部分的な検証は可能ですが、DAGから矛盾しない複数の構造が存在しうるため、「正しいDAG」を確定することはできません。
-
変数の定義と粒度: 同じ因果システムでも、変数の定義や粒度によってDAGの構造が変わります。例えば「教育」を1つの変数にするか、「初等教育」「中等教育」「高等教育」に分けるかでDAGが異なります。適切な変数の定義は、研究の目的とドメイン知識に依存します。
-
時間の扱い: DAGは暗黙に時間的な順序を仮定しますが、時間を明示的に含めたDAG(temporal DAG)を描くと、より正確な因果構造を表現できます。
まとめ
本記事では、DAGと因果グラフの理論を解説しました。
- DAGは変数間の因果関係を有向辺で表現するグラフであり、因果マルコフ条件のもとで同時分布が因数分解される
- d分離はDAG上の条件付き独立性を判定する基準であり、チェーン・フォーク・合流点の3パターンが基本
- バックドア基準はd分離の応用であり、因果効果を識別するための条件付け変数集合を判定する
- 合流点で条件付けるとパスが開いてバイアスが生じるため、「すべてを制御する」のは危険
次のステップとして、以下の記事も参考にしてください。
- do計算とバックドア基準 — パールの因果推論の完全な理論
- 媒介分析 — 直接効果と間接効果の分解
- 交絡バイアスとその制御法 — 交絡制御の実践的手法