交絡バイアスとその制御法

ある観察研究で「コーヒーを多く飲む人ほど心臓病のリスクが低い」という相関が見つかったとします。コーヒーは心臓に良いのでしょうか。しかし、コーヒーを多く飲む人は運動習慣がある人が多いかもしれません。もしそうなら、心臓病リスクの低さはコーヒーではなく運動に起因しており、「運動習慣」が交絡変数として作用している可能性があります。

交絡バイアス(confounding bias)は、因果推論における最も根本的な障害です。因果推論入門で見たように、交絡変数は処置とアウトカムの両方に影響する第3の変数であり、これを適切に制御しなければ因果効果の推定にバイアスが生じます。

交絡バイアスの理解と制御は、以下の場面で不可欠です。

  • 疫学研究: 喫煙と肺がん、食事と健康の因果関係の解明
  • 社会科学: 教育水準と所得、犯罪政策の効果の評価
  • マーケティング: 広告の因果的効果を、既存顧客の特性バイアスから切り離す
  • 医学: 観察研究から薬の真の効果を推定する

本記事では、交絡バイアスの数理構造を掘り下げ、DAG(有向非巡回グラフ)を用いたバイアスの識別法を解説し、代表的な制御法(回帰調整、層別化、マッチング)を体系的に整理します。

本記事の内容

  • 交絡バイアスの数理的定義と方向性
  • DAGを用いた交絡の識別(バックドアパス)
  • オミッテッド変数バイアスの公式
  • 交絡の制御法の比較(回帰調整、層別化、マッチング)
  • 合流点バイアス(collider bias)— 制御してはいけない変数
  • Pythonシミュレーションによるバイアスの可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

交絡バイアスの数理的構造

交絡の定義

交絡を形式的に定義しましょう。変数 $Z$ が処置 $T$ とアウトカム $Y$ の関係における交絡変数(confounder)であるとは、以下の3条件を同時に満たすことです。

  1. $Z$ は $T$ に影響を与える($Z \to T$ のパスがある)
  2. $Z$ は $Y$ に影響を与える($Z \to Y$ のパスがある)
  3. $Z$ は $T$ の結果ではない($T \to Z$ ではない)

この3つの条件が同時に満たされるとき、$T$ と $Y$ の間の見かけの関連(相関)には、真の因果効果 $T \to Y$ に加えて、$T \leftarrow Z \to Y$ というバックドアパス(backdoor path)を経由した見かけの関連が混入します。

オミッテッド変数バイアスの公式

因果推論入門で導出した交絡バイアスの式を、より一般的に整理しましょう。真のデータ生成過程が次のように与えられているとします。

$$ \begin{equation} Y = \beta T + \gamma Z + \epsilon \end{equation} $$

$$ \begin{equation} T = \alpha Z + \nu \end{equation} $$

ここで $\beta$ は真の因果効果、$\gamma$ は $Z$ の $Y$ への直接効果、$\alpha$ は $Z$ の $T$ への効果です。$\epsilon$ と $\nu$ は互いに独立な誤差項とします。

$Z$ を含めない回帰($Y$ を $T$ のみに回帰)の回帰係数を $\hat{\beta}_{\text{short}}$ とすると、この確率極限はオミッテッド変数バイアス公式(omitted variable bias formula)で与えられます。

$$ \begin{equation} \hat{\beta}_{\text{short}} \xrightarrow{p} \beta + \gamma \cdot \frac{\text{Cov}(T, Z)}{\text{Var}(T)} \end{equation} $$

右辺第2項がバイアスです。この公式は「オミッテッド変数のバイアス = (省略した変数の $Y$ への効果)$\times$(省略した変数と $T$ の回帰係数)」という直感的な形をしています。

バイアスの方向

バイアスの符号は $\gamma \cdot \text{Cov}(T, Z) / \text{Var}(T)$ の符号で決まります。これは $\gamma$ と $\alpha$ の符号の組み合わせによります。

$\alpha$($Z \to T$) $\gamma$($Z \to Y$) バイアスの方向
正(過大推定) 健康意識 $\to$ 運動、健康意識 $\to$ 健康
負(過小推定) 重症度 $\to$ 手術、重症度 $\to$ 回復低下
負(過小推定)
正(過大推定)

実際の研究では、バイアスの方向を事前に推測することが重要です。バイアスの方向がわかれば、推定値が真の効果を過大評価しているのか過小評価しているのかの判断ができます。

具体例で確認しましょう。「運動($T$)→ 体重減少($Y$)」の因果効果を推定したいとします。交絡変数として「健康意識($Z$)」が存在すると仮定します。健康意識が高い人ほど運動する($\alpha > 0$)し、健康意識が高い人ほど食事にも気を使い体重が減少する($\gamma > 0$)。このとき、バイアスは正の方向(過大推定)です。ナイーブな推定では、運動の効果に「健康意識による食事管理の効果」が混入し、運動の真の因果効果を過大に見積もることになります。

逆に「手術($T$)→ 回復($Y$)」の場合、重症度($Z$)が高い患者ほど手術を受ける($\alpha > 0$)が、重症度が高いほど回復が悪い($\gamma < 0$)ため、バイアスは負の方向(過小推定)です。これは適応による交絡(confounding by indication)と呼ばれ、観察研究における手術の効果が過小評価される典型的なパターンです。

多変量の場合

交絡変数が複数ある場合、バイアスは各変数からの寄与の合計になります。$k$ 個の交絡変数 $Z_1, \ldots, Z_k$ がすべて省略されている場合、バイアスの構造はより複雑になります。一般には次のような行列形式で表されます。

$$ \hat{\bm{\beta}}_{\text{short}} \xrightarrow{p} \bm{\beta} + (\bm{X}^\top \bm{X})^{-1}\bm{X}^\top \bm{Z} \cdot \bm{\gamma} $$

ここで $\bm{X}$ は含まれている説明変数の行列、$\bm{Z}$ は省略された変数の行列、$\bm{\gamma}$ は省略された変数の真の係数ベクトルです。

交絡バイアスと選択バイアスの区別

因果推論における2つの主要なバイアスの源を区別しておきましょう。

交絡バイアス(confounding bias)は、処置とアウトカムの共通原因(交絡変数)を制御しないことで生じます。DAGの観点では、バックドアパス($T \leftarrow Z \to Y$ のような、$T$ への入射辺から始まるパス)を通じた見かけの関連が混入することです。

選択バイアス(selection bias)は、分析対象のサンプルが母集団を代表していない場合に生じます。例えば、入院患者のみを対象とした研究では、入院という選択が処置とアウトカムの両方に影響されるため、合流点バイアスが生じる可能性があります。

この2つのバイアスは概念的に異なりますが、DAGの枠組みでは統一的に扱えます。両方ともバックドアパスや不適切な条件付けの問題として定式化できるのです。

では、どの変数を制御すべきかを体系的に判定する方法を見ていきましょう。

DAGによる交絡の識別

バックドアパス

DAG(Directed Acyclic Graph、有向非巡回グラフ)を使うと、交絡の構造を視覚的かつ体系的に分析できます。DAG上で $T$ から $Y$ へのバックドアパスとは、$T$ に入ってくる矢印($\leftarrow$)から始まるパスです。

例えば、次のDAGを考えます。

$$ Z \to T, \quad Z \to Y, \quad T \to Y $$

このとき、$T \leftarrow Z \to Y$ がバックドアパスです。$T$ から $Y$ への矢印($T \to Y$)は因果パス(前方パス)であり、これを通じた関連が真の因果効果です。バックドアパスを通じた関連が交絡バイアスです。

バックドア基準

パール(Pearl)のバックドア基準(backdoor criterion)は、因果効果を識別するために条件付けるべき変数の集合 $\bm{S}$ を判定する基準です。

変数集合 $\bm{S}$ が $T$ から $Y$ へのバックドア基準を満たすとは、以下の2条件が成り立つことです。

  1. $\bm{S}$ のどの変数も $T$ の子孫ではない
  2. $\bm{S}$ で条件付けると、$T$ から $Y$ へのすべてのバックドアパスがブロックされる

バックドア基準を満たす $\bm{S}$ で条件付けたとき、因果効果は次の調整公式(adjustment formula)で識別されます。

$$ \begin{equation} P(Y \mid \text{do}(T = t)) = \sum_{\bm{s}} P(Y \mid T = t, \bm{S} = \bm{s})\,P(\bm{S} = \bm{s}) \end{equation} $$

d分離(d-separation)

バックドアパスが「ブロックされる」かどうかを判定するには、d分離の概念が必要です。パス上の変数には3つのタイプがあります。

チェーン(chain): $A \to M \to B$

$M$ で条件付けるとパスがブロックされます。$M$ を観測すると、$A$ と $B$ の関連が遮断されます。

フォーク(fork): $A \leftarrow M \to B$

$M$ で条件付けるとパスがブロックされます。これが典型的な交絡のパターンであり、共通原因 $M$ で条件付けると見かけの関連が除去されます。

合流点(collider): $A \to M \leftarrow B$

$M$ で条件付けないときにパスがブロックされています。$M$ は合流点であり、条件付けずに放置するのが正しいです。$M$ で条件付けるとパスが開いてしまい、$A$ と $B$ の間に見かけの関連が生じます。これが合流点バイアス(collider bias)です。

合流点バイアスは直感に反するため、次のセクションで詳しく解説します。

パスのブロックのルール(まとめ)

パスの構造 条件付けなし 条件付けあり
チェーン: $A \to M \to B$
フォーク: $A \leftarrow M \to B$
合流点: $A \to M \leftarrow B$

このルールを組み合わせて、DAG上のすべてのバックドアパスがブロックされる条件付け変数の集合を見つけることが、交絡制御の核心です。

交絡の識別法がわかったところで、次に合流点バイアスという重要な落とし穴について見ておきましょう。

合流点バイアス — 制御してはいけない変数

合流点バイアスとは

合流点バイアス(collider bias)は、交絡バイアスとは逆の方向の問題です。本来存在しない関連を、不適切な条件付けによって「作り出してしまう」現象です。

$T$ と $Y$ が互いに独立であっても、$T$ と $Y$ の両方が共通の結果 $M$ に影響を与えている場合($T \to M \leftarrow Y$)、$M$ で条件付けると $T$ と $Y$ の間に見かけの関連が生じます。

具体例: 美貌と知性のパラドックス

大学の入学審査では、学力と課外活動の両方が合否に影響するとします。

$$ \text{学力} \to \text{合格} \leftarrow \text{課外活動} $$

入学した学生(合格で条件付け)だけを見ると、「学力が低い学生は課外活動が活発」という負の相関が観測されます。これは学力が低くても合格するには課外活動で補う必要があるためです。しかし、受験者全体で見れば学力と課外活動に相関はありません。

合流点バイアスの数理

合流点 $M$ の最も単純なモデルを考えます。

$$ M = \alpha_T T + \alpha_Y Y + \eta $$

ここで $T$ と $Y$ は独立($\text{Cov}(T, Y) = 0$)とします。$M$ で条件付けずに $T$ と $Y$ の相関を見ると、相関はゼロです。

しかし、$M$ の値を固定して(条件付けて)$T$ と $Y$ の関係を見ると、$M = m$ のもとで $T$ が大きければ $Y$ は小さくならざるを得ず、負の相関が生じます。これは $M$ の値が $T$ と $Y$ の線形結合として「拘束」されるため、一方が増えると他方が減る、という関係が条件付けにより導入されるからです。

実践的な教訓

合流点バイアスからの教訓は明確です。すべての変数を手当たり次第に制御するのは危険ということです。交絡変数は制御すべきですが、合流点(処置とアウトカムの共通の結果)は制御してはいけません。

DAGを用いてバックドア基準を判定し、制御すべき変数と制御すべきでない変数を正しく識別することが不可欠です。

M-バイアスと過剰制御バイアス

合流点バイアスの実務的に重要なケースとして、M-バイアスがあります。以下のDAGを考えましょう。

$$ U_1 \to T, \quad U_1 \to Z, \quad U_2 \to Z, \quad U_2 \to Y $$

ここで $Z$ は $U_1$ と $U_2$ の合流点です。$U_1$ と $U_2$ は未観測であり、$Z$ のみが観測されています。

この構造では、$T$ と $Y$ の間にバックドアパスは存在しません($T$ と $Y$ はd分離されており、因果効果は $T$ から $Y$ への直接パスのみです)。したがって、何も制御しないのが正しい選択です。

しかし、もし $Z$ を制御してしまうと、合流点バイアスが発生します。$Z$ で条件付けることで $U_1$ と $U_2$ の間に見かけの関連が生じ、それが $T$ と $Y$ の間の見かけの関連(バイアス)に変換されるのです。

このM-バイアスの例は、「観測された変数はすべて制御すべき」という素朴な直感が危険であることを示しています。制御すべきかどうかは変数の因果的な役割によって決まるのであり、DAGの分析なしに判断することはできません。

中間変数の制御(悪い制御変数)

合流点以外にも「制御してはいけない変数」が存在します。それは中間変数(mediator)です。

$T \to M \to Y$ という構造で、$M$ は $T$ の効果が $Y$ に伝わる経路上の中間変数です。$M$ を制御すると、$T$ の効果のうち $M$ を経由する部分(間接効果)が遮断されてしまい、総合的な因果効果ではなく直接効果のみが推定されます。

例えば、「教育が賃金に与える効果」を推定する際に、「職業」を制御してしまうと、教育が職業選択を通じて賃金に与える効果(間接効果)が除外されてしまいます。教育の賃金への総合効果を知りたい場合は、職業を制御すべきではありません。

Angrist and Pischke(2009)はこの問題を「悪い制御変数」(bad controls)として警告しています。処置の結果として変化する変数を制御することは、因果効果の推定を歪めるのです。

では、交絡変数が正しく識別された場合の具体的な制御法を見ていきましょう。

交絡の制御法

方法1: 回帰調整

最も直接的な制御法は、交絡変数を回帰モデルに含めることです。

$$ Y_i = \beta_0 + \beta_T T_i + \bm{\gamma}^\top \bm{Z}_i + \epsilon_i $$

この回帰モデルで $\bm{Z}$ を含めることにより、$\bm{Z}$ の影響を除いた後の $T$ の効果 $\beta_T$ が因果効果の推定値になります。

長所: 実装が容易。連続的な交絡変数を自然に扱える。

短所: モデルの関数形(線形性)に依存する。正しいモデルが指定されていなければバイアスが残る。

方法2: 層別化(stratification)

交絡変数 $Z$ の値ごとにデータを層に分け、各層内で処置効果を推定し、層をまたいで加重平均を取る方法です。

$$ \hat{\tau}_{\text{strat}} = \sum_{k=1}^{K} w_k \left(\bar{Y}_{1k} – \bar{Y}_{0k}\right) $$

ここで $w_k$ は第 $k$ 層の重み(通常は各層のサンプルサイズの比率)、$\bar{Y}_{1k}$ と $\bar{Y}_{0k}$ は第 $k$ 層内の処置群・対照群の平均アウトカムです。

長所: ノンパラメトリック。関数形の仮定が不要。

短所: 交絡変数が連続的または高次元の場合、層が細かくなりすぎてサンプルサイズが不足する(次元の呪い)。

方法3: マッチング(matching)

処置群の各個体に対して、交絡変数の値が似ている対照群の個体を「マッチ」させ、マッチしたペアの間でアウトカムを比較する方法です。

最も単純な1対1最近傍マッチングでは、処置群の個体 $i$ に対して次のように対照群の個体を選びます。

$$ j(i) = \arg\min_{j: T_j = 0} \|\bm{Z}_i – \bm{Z}_j\| $$

ATTの推定値は次のようになります。

$$ \hat{\tau}_{\text{match}} = \frac{1}{n_1}\sum_{i: T_i=1}\left(Y_i – Y_{j(i)}\right) $$

長所: 直感的。アウトカムモデルの仮定が不要。

短所: 次元の呪い(交絡変数が多いと良いマッチが見つからない)。マッチングの品質に結果が依存する。

方法4: 逆確率重み付け(IPW)

傾向スコア法で詳しく解説するIPW推定量は、交絡制御の強力な手法です。傾向スコア(処置を受ける確率)の逆数で各個体を重み付けすることで、疑似的にランダム化されたサンプルを再構成します。

$$ \hat{\tau}_{\text{IPW}} = \frac{1}{n}\sum_{i=1}^n \frac{T_i Y_i}{\hat{e}(\bm{Z}_i)} – \frac{1}{n}\sum_{i=1}^n \frac{(1-T_i) Y_i}{1-\hat{e}(\bm{Z}_i)} $$

IPWの直感は「処置を受ける確率が低い個体が処置を受けた場合、その個体は多くの非処置個体を代表する」という考え方です。確率が低い個体を大きな重みで数えることで、バイアスが除去されます。

方法5: 二重ロバスト推定量

二重ロバスト推定量(Doubly Robust estimator)は、アウトカムモデルと傾向スコアモデルの両方を使い、どちらか一方が正しければ一致推定量になるという性質を持ちます。この「保険」のような性質により、モデルの誤指定に対してロバストな推定が可能です。

二重ロバスト推定量は近年の因果推論において最も推奨される方法の一つであり、片方のモデルが正しければ因果効果の一致推定が保証されるため、実務的な安心感があります。

方法の選択指針

方法 モデルの仮定 次元への頑健性 実装の容易さ
回帰調整 必要(関数形)
層別化 不要
マッチング 不要 低(傾向スコアで改善可)
IPW 必要(傾向スコアモデル)
二重ロバスト 一方のみ必要

実践では、傾向スコア法が多次元の交絡変数を1次元に圧縮して扱う有力な方法として広く用いられています。

Pythonシミュレーションで、各制御法の性能を比較してみましょう。

Pythonシミュレーション

シミュレーション1: 各制御法の比較

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

np.random.seed(42)
n_sims = 500
n = 1000
true_beta = 2.0

naive_list = []
reg_list = []
strat_list = []
match_list = []

for _ in range(n_sims):
    # 交絡変数
    Z = np.random.normal(0, 1, n)

    # 処置割り当て(Zに依存)
    prob_T = 1 / (1 + np.exp(-1.2 * Z))
    T = np.random.binomial(1, prob_T, n)

    # アウトカム
    Y = true_beta * T + 3.0 * Z + np.random.normal(0, 1, n)

    # ナイーブ
    naive_list.append(Y[T==1].mean() - Y[T==0].mean())

    # 回帰調整
    reg = LinearRegression().fit(np.column_stack([T, Z]), Y)
    reg_list.append(reg.coef_[0])

    # 層別化(5層)
    Z_quintiles = np.digitize(Z, np.percentile(Z, [20, 40, 60, 80]))
    strat_effects = []
    for q in range(5):
        mask = Z_quintiles == q
        if T[mask].sum() > 0 and (1 - T[mask]).sum() > 0:
            effect = Y[mask & (T==1)].mean() - Y[mask & (T==0)].mean()
            strat_effects.append(effect)
    strat_list.append(np.mean(strat_effects))

    # マッチング(1対1最近傍)
    treated_idx = np.where(T == 1)[0]
    control_idx = np.where(T == 0)[0]
    if len(control_idx) > 1:
        nn = NearestNeighbors(n_neighbors=1).fit(Z[control_idx].reshape(-1, 1))
        _, indices = nn.kneighbors(Z[treated_idx].reshape(-1, 1))
        matched_control = control_idx[indices.flatten()]
        match_est = np.mean(Y[treated_idx] - Y[matched_control])
        match_list.append(match_est)

naive_arr = np.array(naive_list)
reg_arr = np.array(reg_list)
strat_arr = np.array(strat_list)
match_arr = np.array(match_list)

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

ax = axes[0]
for data, color, label in [
    (naive_arr, "gray", "Naive"),
    (reg_arr, "blue", "Regression"),
    (strat_arr, "green", "Stratification"),
    (match_arr, "orange", "Matching"),
]:
    ax.hist(data, bins=30, alpha=0.4, color=color, density=True, label=label)
ax.axvline(true_beta, color="red", linewidth=2, linestyle="--", label=f"True = {true_beta}")
ax.set_xlabel("Estimated effect", fontsize=12)
ax.set_ylabel("Density", fontsize=12)
ax.set_title("Comparison of confounding control methods", fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

ax = axes[1]
methods = ["Naive", "Regression", "Stratification", "Matching"]
biases = [naive_arr.mean() - true_beta, reg_arr.mean() - true_beta,
          strat_arr.mean() - true_beta, match_arr.mean() - true_beta]
rmses = [np.sqrt(np.mean((d - true_beta)**2)) for d in
         [naive_arr, reg_arr, strat_arr, match_arr]]
x = np.arange(len(methods))
w = 0.35
ax.bar(x - w/2, biases, w, label="Bias", color="steelblue", alpha=0.7)
ax.bar(x + w/2, rmses, w, label="RMSE", color="salmon", alpha=0.7)
ax.set_xticks(x)
ax.set_xticklabels(methods, fontsize=10)
ax.axhline(0, color="black", linewidth=0.5)
ax.set_ylabel("Value", fontsize=12)
ax.set_title("Bias and RMSE", fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3, axis="y")

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

for name, arr in zip(methods, [naive_arr, reg_arr, strat_arr, match_arr]):
    print(f"{name:15s}: Bias={arr.mean()-true_beta:+.4f}, RMSE={np.sqrt(np.mean((arr-true_beta)**2)):.4f}")

シミュレーション結果から、以下のことが確認できます。

  1. ナイーブ推定は大きな正のバイアスを持ちます。交絡変数 $Z$ を無視した結果、真の因果効果を過大に推定しています

  2. 回帰調整はバイアスがほぼゼロで、RMSEも最小です。モデルが正しく指定されているため(真のモデルが線形)、最も効率的な推定を実現しています

  3. 層別化もバイアスが小さいですが、回帰調整よりやや効率が低い(RMSEが大きい)です。5層への分割は交絡の大部分を除去しますが、層内の残余交絡が少し残ります

  4. マッチングもバイアスが小さいですが、マッチングの品質(最近傍の距離)に依存するため、分散がやや大きくなっています

シミュレーション2: 合流点バイアスの実演

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

np.random.seed(42)
n = 5000

# T -> M <- Y の構造(Tの合流点Mを条件付け)
T = np.random.normal(0, 1, n)  # 処置
Y = np.random.normal(0, 1, n)  # アウトカム(Tと独立!)
M = 0.8 * T + 0.8 * Y + np.random.normal(0, 0.5, n)  # 合流点

# 無条件の相関
corr_unconditional = np.corrcoef(T, Y)[0, 1]

# Mで条件付けた後の相関(残差相関)
reg_T = LinearRegression().fit(M.reshape(-1, 1), T)
reg_Y = LinearRegression().fit(M.reshape(-1, 1), Y)
T_resid = T - reg_T.predict(M.reshape(-1, 1))
Y_resid = Y - reg_Y.predict(M.reshape(-1, 1))
corr_conditional = np.corrcoef(T_resid, Y_resid)[0, 1]

fig, axes = plt.subplots(1, 2, figsize=(13, 5.5))

# (a) 無条件
ax = axes[0]
ax.scatter(T, Y, alpha=0.1, s=5, color="steelblue")
ax.set_xlabel("Treatment T", fontsize=12)
ax.set_ylabel("Outcome Y", fontsize=12)
ax.set_title(f"(a) Unconditional: r = {corr_unconditional:.4f}\n"
             f"T and Y are independent", fontsize=11)
ax.grid(True, alpha=0.3)

# (b) Mで条件付け
ax = axes[1]
colors = plt.cm.RdYlBu(np.linspace(0, 1, 5))
M_quintiles = np.digitize(M, np.percentile(M, [20, 40, 60, 80]))
for q in range(5):
    mask = M_quintiles == q
    ax.scatter(T[mask], Y[mask], alpha=0.15, s=5, color=colors[q],
               label=f"M quintile {q+1}")
ax.set_xlabel("Treatment T", fontsize=12)
ax.set_ylabel("Outcome Y", fontsize=12)
ax.set_title(f"(b) Conditional on M: r = {corr_conditional:.4f}\n"
             f"Conditioning on collider creates spurious correlation",
             fontsize=11)
ax.legend(fontsize=8, markerscale=5)
ax.grid(True, alpha=0.3)

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

print(f"無条件の相関: {corr_unconditional:.4f} (真の関連なし)")
print(f"Mで条件付けた後の相関: {corr_conditional:.4f} (合流点バイアス)")

合流点バイアスの実演結果から、以下の重要な教訓が得られます。

  1. 無条件では $T$ と $Y$ は独立(相関ほぼゼロ)。データ生成過程で $T$ と $Y$ を独立に生成しているため、真の因果効果はゼロであり、相関もゼロに近い値です

  2. $M$ で条件付けると負の相関が出現。合流点 $M$ で条件付ける($M$ を回帰に含める、$M$ の値で層別化するなど)と、$T$ と $Y$ の間に有意な負の相関が生じます。これは完全に見かけの関連であり、$T$ を変えても $Y$ は変わりません

  3. 図(b)では各色($M$ の層)内で右下がりの傾向が見える。$M$ が大きい層(暖色)は左上に、$M$ が小さい層(寒色)は右下に位置しています。各層内では $T$ と $Y$ に負の関連があるように見えますが、これは $M = \alpha T + \beta Y$ の拘束が層内の変動を制限していることの帰結です

未観測の交絡への対処

問題の深刻さ

ここまで議論してきた制御法はすべて、交絡変数が観測されていることを前提としています。しかし、実際の観察研究では重要な交絡変数が観測されていない(未観測の交絡、unobserved confounding)ことがしばしばあります。

未観測の交絡が存在する場合、回帰調整、層別化、マッチング、IPWのいずれを用いてもバイアスは完全には除去できません。この問題に対処するためのアプローチには以下のものがあります。

  1. 操作変数法(IV): 処置には影響するがアウトカムには直接影響しない「操作変数」を利用する手法。詳しくは操作変数法で解説します

  2. 差の差法(DID): 処置前後の変化を比較することで、時間不変の未観測交絡を除去する手法。詳しくは差の差法で解説します

  3. 回帰不連続デザイン(RDD): 処置の割り当てが閾値で決まる場合に、閾値近傍での比較から因果効果を推定する手法。詳しくは回帰不連続デザインで解説します

  4. 感度分析: 未観測交絡の影響がどの程度であれば推定結果が覆るかを分析する手法。詳しくは因果推論の感度分析で解説します

これらの手法は、無視可能性が成り立たない(または疑わしい)場合の因果推定のための重要なツールキットであり、本シリーズの後続の記事で詳しく解説していきます。

交絡の定量的評価

オミッテッド変数バイアスの一般化

交絡バイアスの大きさを一般化して定量的に評価する枠組みは、因果推論の実践において極めて重要です。Cinelli and Hazlett(2020)は、部分R²(partial R-squared)を用いた交絡バイアスの感度分析フレームワークを提案しました。

未観測交絡変数 $U$ による回帰係数 $\hat{\beta}_T$ のバイアスは、次の2つの量で特徴づけられます。

  1. $R^2_{Y \sim U \mid T, \bm{X}}$: アウトカムの分散のうち、$U$ が説明する割合(他の変数で条件付けた後)
  2. $R^2_{T \sim U \mid \bm{X}}$: 処置変数の分散のうち、$U$ が説明する割合(共変量で条件付けた後)

バイアスの上界は、これら2つの部分R²の関数として表されます。研究者は「$U$ が観測された最も強い交絡変数と同程度の影響力を持つ場合」などの基準シナリオでバイアスを評価できます。

E-value

VanderWeele and Ding(2017)が提案したE-valueは、観測された関連を完全に説明するために未観測交絡変数が持つべき最小の強さを表す指標です。

処置とアウトカムの間のリスク比が $RR$ である場合、E-valueは

$$ \begin{equation} \text{E-value} = RR + \sqrt{RR \times (RR – 1)} \end{equation} $$

で計算されます。E-valueが大きいほど、観測された関連を交絡で説明するためには非常に強い未観測交絡が必要であることを意味し、因果的解釈の信頼性が高くなります。

例えば、E-value = 3.0であれば、未観測交絡変数が処置とアウトカムの両方にリスク比3.0以上の関連を持つ必要があり、そのような強い交絡が存在するかどうかはドメイン知識で判断します。

負の対照変数

未観測交絡の影響を間接的に評価するための別のアプローチとして、負の対照変数(negative control)があります。

負の対照アウトカム: 処置の因果効果がないと分かっているアウトカム変数を設定します。もし処置と負の対照アウトカムの間に有意な関連が観測されれば、それは未観測交絡の存在を示唆します。例えば、喫煙と「足の怪我」の間に関連があるかを調べることで、観測データにおける交絡の程度を間接的に評価できます。

負の対照曝露: アウトカムに因果的影響を持たないと分かっている曝露変数を設定します。同様のロジックで未観測交絡を検出します。

これらの手法は、交絡制御が十分かどうかを経験的に評価するための貴重なツールです。

交絡バイアスの歴史的な例

交絡バイアスの重要性を示す歴史的な例を紹介しましょう。

1950年代、喫煙と肺がんの関係が疫学研究で指摘されたとき、統計学者のロナルド・フィッシャーは「喫煙と肺がんの関連は交絡によるものであり、因果関係を示すものではない」と主張しました。フィッシャーは、ある遺伝的素因が喫煙傾向と肺がん感受性の両方に影響している可能性(遺伝的交絡仮説)を提唱しました。

この議論は、交絡がいかに因果推論を困難にするかを象徴的に示しています。その後の膨大な研究により喫煙と肺がんの因果関係は確立されましたが、フィッシャーの指摘した交絡の問題は原理的に完全には排除できないものでした。この経験は、観察研究における因果推論の慎重さの必要性と、感度分析の重要性を教えてくれます。

まとめ

本記事では、交絡バイアスの数理構造と制御法を体系的に解説しました。

  • 交絡バイアスは処置とアウトカムの共通原因(交絡変数)を無視することで生じる。オミッテッド変数バイアスの公式によりバイアスの大きさと方向が定量化できる
  • DAGバックドア基準により、どの変数を制御すべきかを体系的に判定できる。チェーンとフォークは条件付けでブロック、合流点は条件付けで開く
  • 合流点バイアスは、制御すべきでない変数を制御することで生じる見かけの関連であり、「手当たり次第に制御する」ことの危険性を示す
  • 代表的な制御法(回帰調整、層別化、マッチング)はそれぞれ長所と短所を持ち、適切な選択が必要
  • 未観測の交絡は回帰調整では対処できず、操作変数法、差の差法、感度分析などの発展的手法が必要

交絡の制御は因果推論の中心的な課題であり、本記事で紹介した方法論は今後の記事で解説するさまざまな手法の基盤になります。

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