📈

因果推論におけるDAGについて30分で理解する

に公開

はじめに

因果推論とは

因果推論は、ある変数が別の変数に対して因果的な影響を与えているかを判断する統計的手法です。単なる相関関係ではなく、「XがYの原因である」という因果関係を明らかにすることを目的とします。

例えば、「アイスクリームの売上が増えると、水難事故が増える」という相関関係があったとします。しかし、アイスクリームの売上増加が水難事故の原因でしょうか?実際には、気温という第三の変数が両方に影響を与えており、真の因果関係ではありません。このような見かけ上の相関を適切に扱うために、因果推論の手法が必要となります。

相関と因果の違い

相関関係は2つの変数が同時に変化する傾向があることを示しますが、どちらが原因でどちらが結果かは教えてくれません。一方、因果関係は明確な方向性を持ち、「Xが変化するとYが変化する」という因果的メカニズムを示します。

統計分析において最も重要な原則の一つは、「相関は因果を意味しない(Correlation does not imply causation)」です。観察データから因果関係を推論するには、適切な手法と慎重な分析が必要です。

DAGの役割

DAG(Directed Acyclic Graph:有向非巡回グラフ)は、因果推論において変数間の因果関係を視覚的に表現するツールです。DAGを用いることで、以下のことが可能になります。

  • 変数間の因果構造を明確化する
  • 交絡因子を特定する
  • 適切な調整変数を選択する
  • バイアスの源泉を理解する

DAGは因果推論における設計図のような役割を果たし、分析を始める前に因果構造を整理し、適切な分析戦略を立てるために不可欠なツールです。

DAGの基礎

DAGの定義

DAG(有向非巡回グラフ)は、以下の特徴を持つグラフ構造です。

  • ノード(頂点): 変数を表す
  • エッジ(辺): 変数間の直接的な因果関係を表す矢印
  • 有向: 矢印は因果の方向を示す(原因→結果)
  • 非巡回: ループが存在しない(A→B→C→Aのような循環がない)

非巡回という制約は、時間的な因果関係を前提としています。原因は結果より先に起こるため、結果が原因に影響を与えるような循環は存在しません。

基本的な3つのパターン

DAGにおける変数間の関係は、主に3つの基本パターンに分類されます。

1. 分岐型(Fork / 共通原因)

    Z
   / \
  ↓   ↓
  X   Y

変数Zが変数XとYの両方に影響を与える構造です。Zは「共通原因」または「交絡因子(confounder)」と呼ばれます。

具体例:

  • Z = 気温、X = アイスクリーム売上、Y = 水難事故
  • Z = 家庭の社会経済的地位、X = 教育年数、Y = 収入
  • Z = 年齢、X = 運動能力、Y = 認知機能

分岐型では、ZがXとYの両方に影響を与えるため、XとYの間には見かけ上の相関が生じます。しかし、これはZを通じた間接的な関連であり、XとYの間に直接的な因果関係はありません。

この構造において、Zを調整(統制)しない場合、XとYの関係を正しく推定できません。これが「交絡バイアス」の源泉となります。

2. 連鎖型(Chain / 媒介)

X → Z → Y

変数Xが変数Zを通じて変数Yに影響を与える構造です。Zは「媒介変数(mediator)」と呼ばれます。

具体例:

  • X = 教育、Z = 職業スキル、Y = 収入
  • X = 運動習慣、Z = 体重、Y = 健康状態
  • X = マーケティング支出、Z = ブランド認知度、Y = 売上

連鎖型では、Xの効果がZを経由してYに伝わります。XがYに与える総効果(total effect)は、直接効果と間接効果(Zを通じた効果)の合計です。

媒介変数を調整すると、XからYへの間接的な経路が遮断され、直接効果のみを推定することになります。分析の目的に応じて、媒介変数を調整するかどうかを決定する必要があります。

3. 合流型(Collider / 共通結果)

X   Y
 ↓ ↓
  Z

変数XとYが両方とも変数Zに影響を与える構造です。Zは「合流点(collider)」または「共通結果」と呼ばれます。

具体例:

  • X = 才能、Y = 努力、Z = プロスポーツ選手になる
  • X = 美しさ、Y = 面白さ、Z = 俳優として成功
  • X = 研究能力、Y = 教育能力、Z = 大学教授に採用

合流型の重要な特徴は、XとYは本来独立であるにもかかわらず、Zを調整すると見かけ上の相関が生じることです。これを「コライダーバイアス(collider bias)」または「選択バイアス(selection bias)」と呼びます。

例えば、プロスポーツ選手の中で観察すると、才能と努力の間に負の相関が見られることがあります。これは、プロになるためには才能か努力のどちらか(または両方)が必要なため、才能が低い選手は努力が高い傾向があり、逆もまた然りという選択効果によるものです。

なぜDAGが必要なのか

交絡因子の問題

観察研究において最も深刻な問題の一つが交絡(confounding)です。交絡因子とは、原因変数と結果変数の両方に影響を与える第三の変数のことです。

交絡因子が存在すると、原因変数と結果変数の間に見かけ上の関連が生じ、真の因果効果を正しく推定できません。

例:教育と収入の関係

教育年数(X)が収入(Y)に与える因果効果を知りたいとします。しかし、家庭の社会経済的地位(Z)は、子供の教育年数にも将来の収入にも影響を与える可能性があります。

      Z(家庭のSES)
     / \
    ↓   ↓
X(教育) → Y(収入)

この場合、教育と収入の相関には以下の2つの経路が含まれます。

  1. 直接的な因果効果:X → Y
  2. Zを通じた見かけ上の関連:X ← Z → Y(バックドアパス)

Zを調整せずに単純にXとYの相関を見ると、真の因果効果とバックドアパスによる見かけ上の関連が混ざってしまいます。

バックドアパスとは

バックドアパスは、原因変数から結果変数への矢印に沿わない経路で、原因変数に入る矢印から始まり、結果変数に至る経路のことです。

上記の例では、X ← Z → Y がバックドアパスです。このパスは「開いて」おり、非因果的な関連(交絡)を生み出します。

正しい因果効果を推定するには、全てのバックドアパスを「閉じる」必要があります。これがDAGを用いた分析の核心です。

DAGを使うメリット

  1. 変数間の因果構造を明確化: 頭の中の仮説を図示することで、暗黙の仮定を明示化できます
  2. 交絡因子の特定: どの変数が交絡因子として機能しているかを視覚的に理解できます
  3. 適切な調整変数の選択: どの変数を調整すべきか、してはいけないかが明確になります
  4. バイアスの源泉の理解: 分析結果にどのようなバイアスが含まれうるかを事前に把握できます
  5. 分析の透明性向上: 因果推論の前提を他者と共有し、議論できます
  6. 過剰調整の回避: 必要以上に変数を調整することによる問題を防げます

バックドア基準

バックドア基準の定義

変数の集合Zが、XとYの関係におけるバックドア基準を満たすとは、以下の2つの条件を同時に満たすことです。

  1. Zの中にXの子孫がない: Zに含まれる変数は、Xによって引き起こされた変数ではない
  2. ZがXとYの間の全てのバックドアパスをブロックする: Zを調整することで、非因果的な経路が全て遮断される

バックドア基準を満たす変数セットZを調整することで、XがYに与える因果効果を正しく推定できます。

パスのブロック規則

DAGにおいて、あるパスがブロックされる(閉じる)条件は以下の通りです。

1. 連鎖型と分岐型

連鎖: X → Z → Y
分岐: X ← Z → Y

中間変数Zを調整すると、パスはブロックされます。Zを調整することで、Zを通じた情報の流れが遮断されます。

2. 合流型

X → Z ← Y

合流点Zまたはその子孫を調整しない限り、パスは元々ブロックされています。逆に、Zまたはその子孫を調整すると、パスが開きます(コライダーバイアス)。

最小調整セット

バックドア基準を満たす変数セットは複数存在することがあります。その中で最も少ない変数数を持つものを「最小調整セット」と呼びます。

最小調整セットを用いることで、以下のメリットがあります。

  • 推定の効率が向上する
  • 多重共線性の問題を軽減できる
  • データ収集のコストを削減できる

ただし、最小セットが常に最良の選択とは限りません。精度向上のために追加の変数を含めることが有益な場合もあります。

コライダーバイアスの注意点

合流点(コライダー)は調整してはいけない変数です。コライダーを調整すると、本来独立である変数間に見かけ上の相関が生じます。

例:大学教授の研究能力と教育能力

優秀な研究者と優秀な教育者の両方が大学教授に採用されるとします。

研究能力 → 採用 ← 教育能力

「採用された教授」という条件付きで観察すると、研究能力と教育能力の間に負の相関が現れることがあります。これは、研究能力が低い教授は教育能力が高い傾向があり、逆もまた然りという選択効果によるものです。

このようなコライダーバイアスは、以下の状況で頻繁に発生します。

  • サンプル選択がある場合(脱落、参加の自己選択)
  • 層別分析を行う場合
  • 両方の変数に影響される変数を調整する場合

実践:DAGの作成と分析

PythonでDAGを作成する

PythonでDAGを作成・可視化する方法はいくつかあります。ここでは代表的なライブラリを紹介します。

NetworkXを使った基本的なDAG

NetworkXは、グラフ理論の分析に広く使われるライブラリです。

import networkx as nx
import matplotlib.pyplot as plt

# DAGの作成
G = nx.DiGraph()

# ノードの追加
G.add_nodes_from(['教育', '収入', '家庭SES', '能力'])

# エッジ(因果関係)の追加
G.add_edges_from([
    ('家庭SES', '教育'),
    ('家庭SES', '収入'),
    ('能力', '教育'),
    ('能力', '収入'),
    ('教育', '収入')
])

# 可視化
pos = nx.spring_layout(G, seed=42)
nx.draw(G, pos, with_labels=True, node_color='lightblue', 
        node_size=3000, font_size=10, font_weight='bold',
        arrows=True, arrowsize=20)
plt.title('教育と収入のDAG')
plt.axis('off')
plt.show()

causalgraphicalmodelsライブラリ

より因果推論に特化したライブラリとして、causalgraphicalmodelsがあります。

from causalgraphicalmodels import CausalGraphicalModel

# DAGの定義
dag = CausalGraphicalModel(
    nodes=['教育', '収入', '家庭SES', '能力'],
    edges=[
        ('家庭SES', '教育'),
        ('家庭SES', '収入'),
        ('能力', '教育'),
        ('能力', '収入'),
        ('教育', '収入')
    ]
)

# バックドアパスの確認
backdoor_paths = dag.get_all_backdoor_paths('教育', '収入')
print('バックドアパス:', backdoor_paths)

# 調整セットの取得
adjustment_sets = dag.get_all_backdoor_adjustment_sets('教育', '収入')
print('調整セット:', adjustment_sets)

このライブラリを使うと、バックドアパスの識別や調整セットの導出を自動的に行えます。

DAGittyツール

DAGittyは、因果推論のためのDAG作成・分析に特化した強力なツールです。

DAGittyとは

DAGittyは、Johannes Textor氏によって開発された、因果推論のためのDAG分析ツールです。以下の2つの形式で利用できます。

  1. Webアプリケーション: http://dagitty.net/dags.html
  2. Rパッケージ: R環境で使用可能

DAGittyの主な機能

  1. グラフィカルなDAG作成: マウス操作で直感的にDAGを作成できます
  2. バックドアパスの自動識別: 指定した変数間のバックドアパスを自動的に検出します
  3. 調整セットの導出: バックドア基準を満たす最小調整セットを自動的に計算します
  4. 条件付き独立関係の導出: DAGが含意する統計的独立関係を列挙します
  5. テスト可能な含意の生成: DAGの妥当性を検証するためのテストを提案します

DAGittyの使い方(Web版)

  1. Webブラウザで http://dagitty.net/dags.html にアクセス
  2. 画面上で変数(ノード)を配置
  3. 変数間をクリック&ドラッグで矢印を作成
  4. 「exposure」(原因変数)と「outcome」(結果変数)を指定
  5. 「Adjustment sets」タブで調整すべき変数を確認

DAGittyの使い方(Rパッケージ)

# パッケージのインストール(初回のみ)
install.packages("dagitty")

# ライブラリの読み込み
library(dagitty)

# DAGの定義
dag <- dagitty('dag {
  家庭SES -> 教育
  家庭SES -> 収入
  能力 -> 教育
  能力 -> 収入
  教育 -> 収入
}')

# 原因変数と結果変数の指定
exposures(dag) <- "教育"
outcomes(dag) <- "収入"

# 調整セットの取得
adjustmentSets(dag)

# DAGの可視化
plot(dag)

# 条件付き独立関係の確認
impliedConditionalIndependencies(dag)

DAGittyは、因果推論の初心者から専門家まで広く使われており、研究論文でDAGを示す際の標準的なツールの一つとなっています。

具体例で学ぶ

例:喫煙と肺がんの関係

喫煙(X)が肺がん(Y)に与える因果効果を推定したいとします。考慮すべき変数として以下があるとします。

  • 遺伝的要因(G):喫煙傾向と肺がんリスクの両方に影響
  • 年齢(A):喫煙年数と肺がんリスクの両方に影響
  • 職業的暴露(O):肺がんリスクに影響(アスベストなど)
  • 呼吸器症状(S):喫煙と肺がんの両方から影響される

DAGの作成

    G          A
   / \        / \
  ↓   ↓      ↓   ↓
  X → Y  ←  O   X
      ↑ ↓
      S

より詳細には:

G → X → Y ← O
A → X   ↑
A → Y   S
X → S
Y → S

バックドアパスの識別

XからYへのバックドアパスを探します。

  1. X ← G → Y:遺伝的要因を通じたパス
  2. X ← A → Y:年齢を通じたパス

Sはコライダー(X → S ← Y)なので、調整してはいけません。

調整戦略

バックドア基準を満たす調整セットは:

  • {G, A}:両方のバックドアパスをブロック
  • もし遺伝情報が得られない場合は{A}のみ(Gによる交絡は残る)

OはYにのみ影響するため、調整しても交絡は制御できませんが、推定の精度向上には寄与します。

分析手順

  1. G、A、Oのデータを収集
  2. 回帰分析などで、Yを X、G、A、Oで回帰
  3. Xの係数が、G、Aで調整した後の因果効果の推定値
  4. Sは絶対に調整変数に含めない

例:オンライン広告の効果測定

オンライン広告の表示(X)がコンバージョン(Y)に与える効果を測定したいとします。

変数の設定

  • X:広告表示の有無
  • Y:コンバージョン(購入)
  • Z1:ユーザーの購買意欲(広告表示とコンバージョンの両方に影響)
  • Z2:過去の購入履歴(購買意欲に影響し、広告表示のターゲティングにも使用)
  • Z3:広告クリック(広告表示とコンバージョンの間の媒介変数)
  • Z4:サイト訪問(広告クリックとコンバージョンの共通結果)

DAGの構造

Z2 → Z1 → X → Z3 → Y
      ↓         ↓ ↓
      Y         Z4

分析のポイント

  1. Z1(購買意欲)の交絡:これは観測不可能な変数ですが、Z2(過去の購入履歴)で部分的に代理できる可能性があります
  2. Z3(広告クリック)の扱い:総効果を知りたい場合は調整しない、直接効果を知りたい場合は調整する
  3. Z4(サイト訪問):コライダーなので調整してはいけません。「サイトを訪問したユーザー」に限定して分析すると、バイアスが生じます
  4. ランダム化の重要性:広告表示をランダムに割り当てれば、Z1による交絡を排除できます(ランダム化比較試験)

注意点とよくある間違い

1. 矢印の向きを間違える

因果の方向は慎重に決定する必要があります。逆因果(YがXに影響する)の可能性を常に検討しましょう。

例:健康状態と運動習慣

  • 正:運動習慣 → 健康状態(運動が健康を改善)
  • 問題:健康状態 → 運動習慣(健康な人が運動する)
  • 実際:両方向の矢印が必要な場合もあります(ただし、DAGでは循環を許さないため、時間的な区別が必要)

2. コライダーを調整してしまう

これは最も頻繁に起こる間違いの一つです。

選択バイアスの例:病院で観察される患者データでは、様々な疾患が「入院」というコライダーに収束します。入院患者のみで分析すると、本来独立である疾患間に見かけ上の負の相関が生じます。

3. 全ての変数を調整すればよいという誤解

「できるだけ多くの変数を調整する」というアプローチは誤りです。

  • コライダーを調整するとバイアスが生じる
  • 媒介変数を調整すると、間接効果が除外される
  • 調整する変数が多すぎると、多重共線性や推定の不安定性が生じる

必要な変数のみを調整することが重要です。

4. DAG作成時の主観性

DAGは研究者の因果仮説を表現したものであり、客観的な真実ではありません。

  • 既存の理論、先行研究、専門知識に基づいて作成する
  • 不確実な関係については複数のDAGを検討する(感度分析)
  • DAGの妥当性を統計的にテストする(条件付き独立性のテスト)
  • 他の研究者と議論し、改善する

5. 測定誤差や欠測データの問題

DAGは変数が完全に測定されていることを前提としています。しかし、実際には:

  • 測定誤差:変数の測定に誤差が含まれる
  • 欠測データ:一部の観測で変数が欠けている
  • 観測不可能な交絡:重要な交絡因子が測定されていない

これらの問題は、DAG分析だけでは解決できません。追加の手法(操作変数法、感度分析など)が必要です。

6. 時間的な関係の無視

因果関係は時間的な順序を持ちます。同時点で測定された変数では、因果の方向が不明確な場合があります。

可能であれば:

  • 縦断データ(複数時点のデータ)を使用する
  • 時間差を考慮したDAGを作成する
  • パネルデータ分析などの手法を併用する

まとめ

DAGの重要性

DAGは因果推論において不可欠なツールです。変数間の因果構造を明示化することで、以下が可能になります。

  • 交絡因子の特定
  • 適切な調整変数の選択
  • バイアスの源泉の理解
  • 分析戦略の透明性向上

実践のステップ

  1. 研究課題の明確化:どの因果効果を推定したいのか
  2. DAGの作成:理論と先行研究に基づいて因果構造を図示
  3. バックドアパスの識別:どの経路が交絡を生むか
  4. 調整戦略の決定:どの変数を調整すべきか
  5. 分析の実施:適切な統計手法で因果効果を推定
  6. 感度分析:DAGの不確実性を考慮した追加分析

DAGの限界

DAGは強力なツールですが、万能ではありません。

  • DAG自体は主観的な仮説である
  • 測定誤差や欠測データは扱えない
  • 観測不可能な交絡には対処が困難
  • 時間的な動的関係は表現しにくい

これらの限界を認識した上で、他の手法と組み合わせて使用することが重要です。

発展的な話題

DAGをマスターした後に学ぶべき発展的なトピックには、以下があります。

1. 操作変数法(Instrumental Variables)
観測不可能な交絡がある場合でも、適切な操作変数があれば因果効果を推定できます。

2. 差分の差分法(Difference-in-Differences)
政策変更などの自然実験を利用した因果推論手法です。

3. 回帰不連続デザイン(Regression Discontinuity Design)
連続変数のカットオフ点を利用した準実験的手法です。

4. 傾向スコア法(Propensity Score Methods)
多数の交絡因子を単一のスコアに要約する手法です。

5. 構造方程式モデリング(Structural Equation Modeling)
複数の因果経路を同時に推定する手法です。

6. 媒介分析(Mediation Analysis)
総効果を直接効果と間接効果に分解する手法です。

最後に

因果推論は、データサイエンスと統計学において最も重要でありながら、最も挑戦的な領域の一つです。DAGはその複雑さを整理し、適切な分析へと導く羅針盤のような役割を果たします。

DAGを活用することで、単なる相関の記述を超えて、「なぜそうなるのか」という因果的理解へと一歩近づくことができます。

因果推論の旅は、DAGから始まります。この記事が、その第一歩となれば幸いです。​​​​​​​​​​​​​​​​

Discussion