この連載について
因果推論を「本を読んだ」で終わらせず、自分の言葉で説明でき、コードで再現できる状態まで落とす30日連載です。直前のDay 20では、閾値で処置が決まる制度の「際」を擬似実験として使う回帰不連続デザインを扱いました。今日はRCTに戻ります。ただし、Day 4の理想のRCTではなく、割付どおりに人が動かないという現実込みのRCTです。実データ(Thorntonのマラウイ HIV 実験)で割付と受療のズレを確かめ、LATEの核心は真の効果を握ったオラクル合成で見せる二段構成にします。
TL;DR(3行)
- 割付と受療は別物。 Thorntonの実験では、クーポンなしでも 33.9% が検査結果を受領し、クーポンありでも21.1%は受領しませんでした。割付そのままの引き算 ITT は「配ったこと」の効果として、それでも厳密に因果です。
- コンプライヤー4分類+単調性のもとで、LATE = ITT ÷ 遵守率。 オラクル合成では ITT 0.82 ÷ 遵守率 0.397 = 2.07 で、真のコンプライヤー効果 2.00 を復元します。割付を操作変数にした2SLSも同じ 2.07 を返します。
- LATEはコンプライヤーの効果であって、ATEではありません。 同じ合成データの真のATEは 3.19。しかも誰がコンプライヤーかは個人単位では特定できません。
今日の問い
無料でHIV検査の結果を知れるクーポンをランダムに配った。でも受け取りに来ない人もいるし、クーポンなしで自分から来る人もいる。
「クーポンを配った効果」と「結果を知った効果」は明らかに別物のはず。割付が守られない実験から、どちらの効果を、どうやって取り出せるか?
今日のゴールは、この2つの効果に ITT と LATE という名前を付け、両者をつなぐ「遵守率で割る」という1本の式を、実データとオラクル合成の両方で手にすることです。ここでDay 17の操作変数法が、RCTの中に再登場します。
概念① 非遵守とITT:それでも割付の引き算は因果である
題材はThornton (2008) の実験です。マラウイの農村で無料のHIV検査を実施し、受検者に「結果を聞きに来ると換金できるクーポン」をランダムに配りました。関心があるのは「自分の感染状態を知ること」がその後の行動(コンドーム購入など)に与える効果です。ここには3つの変数がいます。
- $Z$:クーポンの割付。研究者が制御し、ランダムです。
- $D$:実際に結果を受け取ったか。これは本人が決めます。
- $Y$:その後の行動。効果を知りたい先です。
割付$Z$と受療$D$(実際に処置を受けること。今日のデータでは検査結果を受領すること)が一致しない状態を**非遵守(noncompliance)**と呼びます。クーポンをもらっても行かない人、もらわなくても行く人がいる。Day 4 で「RCTなら引き算が因果」と言ったときは、暗黙に$Z = D$を仮定していました。現実の実験でこの仮定はほぼ必ず崩れます。
では何を引き算すべきか。素朴に「受け取った人と受け取らない人」($D=1$ vs $D=0$)を比べたくなりますが、これは駄目です。$D$は自己選択なので、健康への関心のような交絡が全部戻ってきて、Day 6 以前の観察データに逆戻りします。一方、割付$Z$のままの引き算を考えます。
$$
\mathrm{ITT} = E[Y \mid Z=1] - E[Y \mid Z=0]
$$
右辺は、クーポンを配られた群のその後の行動の平均から、配られなかった群の平均を引いた値です。実際に結果を受け取ったかどうかは一切見ません。この引き算は、$Z$がランダムである限り厳密に因果効果です。これを ITT(intent-to-treat、治療企図効果)と呼びます。ただしその中身は「クーポンを配ったことの効果」であって、「結果を知ったことの効果」ではありません。配っても動かない人の分だけ、知る効果が薄まって混ざった数字です。臨床試験の主解析がITTなのは、この「薄まってはいるが因果として堅い」性質のためです。
概念② コンプライヤー4分類とLATE:割付を操作変数にする
「知ったことの効果」に迫るために、人を割付にどう反応するかで分類します。処置の潜在的結果ならぬ、受療の潜在的結果$D(0), D(1)$(クーポンなし/ありのときに受領するか)を考えると、組み合わせは4通りです。
- コンプライヤー($D(0)=0, D(1)=1$):割付に従う人。クーポンが来たときだけ受領します。
- 常時受領者(always-taker、$D(0)=D(1)=1$):割付に関係なく受領する人。
- 非受領者(never-taker、$D(0)=D(1)=0$):割付に関係なく受領しない人。
- defier(天邪鬼、$D(0)=1, D(1)=0$):クーポンが来るとかえって受領しない人。
やっかいなのは、$D(0)$ と $D(1)$ の両方を同時に観測できないことです。私たちが見られるのは、割付$Z$と受領$D$の組み合わせ4通りだけで、そこからタイプは一意には決まりません。
はっきり見分けられるのは上の2つだけです。下の2つは2タイプの混ざりもので、この見分けのつかなさが、このあとずっと効いてきます。
ここで置く仮定が単調性(monotonicity)です。クーポンをもらって受領をやめる人はいない、つまりdefierはいないとみなします。この設定は、実はDay 17の操作変数の3条件そのものです。$Z$はランダムなので外生、$Z$は$D$を動かすので関連、そして除外制約は「クーポンは、受領$D$を経由してしか$Y$に効かない」という形になります。
単調性と除外制約のもとで、ITTの中身を分解できます。常時受領者と非受領者は、割付が変わっても行動$D$が変わらないので、除外制約より$Y$も変わりません。つまりITTはまるごとコンプライヤーから来ています。ITT =(コンプライヤー割合)×(コンプライヤーの平均効果)。だから遵守率で割れば、知ったことの効果が出ます。
$$
\frac{E[Y \mid Z=1] - E[Y \mid Z=0]}{E[D \mid Z=1] - E[D \mid Z=0]}
= E[,Y(1) - Y(0) \mid D(1) > D(0),]
$$
左辺はWald推定量と呼ばれます。分子はいま定義したITT、分母の$E[D \mid Z=1] - E[D \mid Z=0]$は割付で受領率がどれだけ動いたかで、第1段階(=コンプライヤー割合)と呼ばれます。右辺が LATE(local average treatment effect、局所平均処置効果)、つまりコンプライヤーに限った平均効果です(Imbens & Angrist 1994)。そしてこのWald推定量は、$Z$を操作変数、$D$を内生変数(Day 17 で出た、交絡が混ざってしまう説明変数)とした2SLS(Day 17)と正確に一致します。RCTの非遵守問題と操作変数法は、同じ1つの道具だったわけです。
手を動かす①:実データで割付と受領のズレを見る
causaldata の thornton_hiv で、割付$Z$( any =金銭インセンティブの有無)と受領$D$( got =結果を受け取ったか)のズレを確かめます。なお、このパッケージ収載版には下流のアウトカム$Y$(コンドーム購入など)が入っていないため、実データで見るのは割付と受領の関係まで、ITTとLATEの答え合わせは②のオラクル合成で行います。
from causaldata import thornton_hiv
d = thornton_hiv.load_pandas().data
d = d.dropna(subset=["any", "got"]).copy() # 割付と受領の両方が記録された人に絞る
r0 = d.loc[d["any"] == 0, "got"].mean() # クーポンなしの受領率
r1 = d.loc[d["any"] == 1, "got"].mean() # クーポンありの受領率
n0 = (d["any"] == 0).sum()
n1 = (d["any"] == 1).sum()
print("クーポンなし: 受領率 %.1f%% (%d人)" % (100 * r0, n0))
print("クーポンあり: 受領率 %.1f%% (%d人)" % (100 * r1, n1))
print("第1段階(受領率の差)= %.3f" % (r1 - r0))
print("単調性のもとでの割合: コンプライヤー %.1f%% / 常時受領者 %.1f%% / 非受領者 %.1f%%"
% (100 * (r1 - r0), 100 * r0, 100 * (1 - r1)))
クーポンなし: 受領率 33.9% (623人)
クーポンあり: 受領率 78.9% (2211人)
第1段階(受領率の差)= 0.451
単調性のもとでの割合: コンプライヤー 45.1% / 常時受領者 33.9% / 非受領者 21.1%
割付は見事に守られていません。クーポンなしでも 33.9% が自分から受領し(この人たちが常時受領者の顔です)、クーポンありでも21.1%は受領しません(非受領者)。それでも割付は受領率を33.9%から 78.9% へ、45.1ポイント動かしました。これが第1段階です。ここは、私が今回の準備でいちばん唸った箇所です。単調性とランダム割付を認めるだけで、個人を1人も特定できないのに層の割合は言える。誰がコンプライヤーなのかは最後まで分からないのに、何割いるかは分かる、という妙な状態が成立します。クーポンなし群の受領率がそのまま常時受領者の割合、クーポンあり群の未受領率が非受領者の割合、残りがコンプライヤーです。下の図がこの4分類の地図です。
手を動かす②:オラクル合成でITTを作り、遵守率で割る
LATEが「誰の」効果なのかは、真の効果を握った合成データがいちばんはっきり見せてくれます。Thorntonの構図を模した世界を作ります。コンプライヤー40%・常時受領者30%・非受領者30%で、defierはゼロ(単調性が成り立つ世界)。効果は層ごとに変え、常時受領者は「もともと知りたい人ほど得るものも大きい」つもりで+8.0、コンプライヤーは+2.0、非受領者は0とします。ベースラインも層で変えて、自己選択の交絡を仕込みます。
import numpy as np
rng = np.random.default_rng(21)
N = 50000
# 遵守タイプを仕込む(defier はゼロ=単調性が成り立つ世界)
typ = rng.choice(["complier", "always", "never"], size=N, p=[0.4, 0.3, 0.3])
z = rng.binomial(1, 0.5, N) # 割付(クーポン)はランダム
d_ = np.where(typ == "always", 1,
np.where(typ == "never", 0, z)) # 受領はタイプが決める
tau = np.select([typ == "complier", typ == "always"], [2.0, 8.0], 0.0) # 各層の真の効果
base = np.select([typ == "always", typ == "never"], [10.0, 2.0], 5.0) # 各層のベースライン
y = base + rng.normal(0, 1, N) + tau * d_ # 効果は受領 D を経由してだけ乗る
print("真のATE = %.2f / 真のコンプライヤー効果 = %.2f"
% (tau.mean(), tau[typ == "complier"].mean()))
print("素朴なD比較 = %.2f" % (y[d_ == 1].mean() - y[d_ == 0].mean()))
itt = y[z == 1].mean() - y[z == 0].mean()
fs = d_[z == 1].mean() - d_[z == 0].mean()
print("ITT = %.3f / 第1段階 = %.3f" % (itt, fs))
print("Wald推定 = ITT ÷ 第1段階 = %.3f" % (itt / fs))
真のATE = 3.19 / 真のコンプライヤー効果 = 2.00
素朴なD比較 = 10.45
ITT = 0.822 / 第1段階 = 0.397
Wald推定 = ITT ÷ 第1段階 = 2.071
3つの数字を見比べてください。まず素朴な$D$比較は 10.45。ベースラインの高い常時受領者が$D=1$側に集まるせいで、真のどの効果からもかけ離れます。次にITTは 0.822。真のコンプライヤー効果2.0が、割付で動く人が39.7%しかいないために0.4倍に薄まった数字で、理論値どおり 2.0 × 0.397 ≒ 0.79 の近くにいます。そしてITTを第1段階で割ったWald推定は 2.071。真のコンプライヤー効果 2.00 をほぼ正確に復元しました。真のATE 3.19 ではないことに注意してください。割り算が拡大して見せてくれるのは、あくまで割付で動いた人たちの効果です。
手を動かす③:2SLSで同じ答え、そして真値との突き合わせ
概念②の最後で「Wald推定は2SLSと一致する」と言いました。Day 17で使った linearmodels で、$Z$を操作変数にした2SLSを回して確かめます。
import pandas as pd
from linearmodels.iv import IV2SLS
df = pd.DataFrame({"y": y, "d": d_, "z": z})
df["const"] = 1
iv = IV2SLS(df["y"], df["const"], df["d"], df["z"]).fit(cov_type="robust")
print("2SLSのLATE = %.3f (SE %.3f)" % (iv.params["d"], iv.std_errors["d"]))
print("第1段階のF値 = %.0f" % iv.first_stage.diagnostics.loc["d", "f.stat"])
print("真のコンプライヤー効果 = %.2f / 真のATE = %.2f"
% (tau[typ == "complier"].mean(), tau.mean()))
2SLSのLATE = 2.071 (SE 0.131)
第1段階のF値 = 9344
真のコンプライヤー効果 = 2.00 / 真のATE = 3.19
2SLSの推定値は 2.071 で、②の手計算のWald推定と小数第3位まで一致します。標準誤差と第1段階のF値(Day 17の弱操作変数チェック。遵守率が高いのでFは十分大きい)がおまけで付いてくるのが2SLSを使う実利です。改めて並べると、2SLSが復元したのは真のコンプライヤー効果 2.00 であって、真のATE 3.19 ではありません。もし「この施策を全員に強制したら」を見積もりたいなら、LATEをそのまま使うと36%も過小評価します。逆に常時受領者の効果が小さい世界なら過大評価です。LATEからATEへの外挿は、データではなく仮定が支えます。
つまづき・誤解しやすい点
- LATEは「その操作変数のコンプライヤー」の効果です。 クーポンの金額を上げればコンプライヤーの顔ぶれが変わり、LATEも別の値になります。操作変数が変わると推定対象(estimand)ごと変わる、という点でATEより一段ローカルな量です。「誰に効くか」を正面から扱う道具は Day 22 以降の異質性で登場します。
- 誰がコンプライヤーかは、個人単位では特定できません。 観測できるのは$(Z, D)$の組だけで、たとえば$Z=1, D=1$の人はコンプライヤーと常時受領者の混合です。手を動かす①でやったように割合は言えますが、名簿は作れません。「コンプライヤーだけ抽出して次の施策を当てる」といった使い方は原理的に不可能です。
- 除外制約が崩れると、生き残るのはITTだけです。 クーポンを受け取ること自体が健康意識を刺激して、受領$D$を経由せずに行動$Y$を変えるなら、2SLSのLATEはバイアスを持ちます。一方ITTは「配ったことの効果」として除外制約なしで成立します。臨床試験がITTを主解析に置くのは、この頑健さの序列を反映した設計です。
GISデータ実務での使い方
- 「推奨リストの配布」と「調査の実施」を区別します。 衛星解析で漏水リスクの高い管路エリアを自治体に提示しても($Z$)、実際に調査するか($D$)は自治体が決めます。提示リストがランダム、または擬似ランダムに近い設計なら、ITTは「リストを配る施策」の効果、LATEは「提示されたから動いた自治体」での調査の効果として分けて報告できます。
- 横展開の見積もりにLATEを直接使わない。 LATEが語るのは「推されれば動く自治体」の効果です。推されなくても自主的に調査する先進自治体(常時受領者)や、推しても動かない自治体(非受領者)での効果は別物でありえます。全自治体展開の便益をLATE×自治体数で弾くと、今日の合成例と同じ向きの読み違いをします。
- 意思決定者が動かせるのは$Z$だけ、という場面ではITTが主役です。 国や県が制御できるのは通知・補助金・推奨であって、現場の実施までは強制できません。「配ることの費用対効果」という問いには、薄まったITTこそが直接の答えになります。
参考(本棚)
- Imbens & Rubin『Causal Inference for Statistics, Social, and Biomedical Sciences』第23章・第24章。非コンプライアンス下の操作変数分析。コンプライヤー4分類と単調性の枠組みで、今日の下敷き
- Matheus Facure『Causal Inference in Python』第11章。非遵守・ITT・LATEと2SLSの実装視点
- Thornton, R. (2008) "The Demand for, and Impact of, Learning HIV Status." American Economic Review 98(5)。今日の実データの原論文。金銭インセンティブが結果受領を大きく動かしたRCT
- Imbens & Angrist (1994) "Identification and Estimation of Local Average Treatment Effects." Econometrica 62(2)。LATE定理の原論文
- データ: thornton_hiv(
causaldataパッケージ経由、MITライセンス、取得日2026-08-15)。Thornton (2008) のマラウイHIV実験データの教材用抽出版。収載版は割付(any)と受領(got)までで、下流アウトカムは含まれない
次回予告(Day 22)
Phase 3 はここまで、道具はすべて「平均」を推定してきました。ATE、ATT、そして今日のLATEも、コンプライヤーという集団の平均です。でも平均がゼロでも、半分に+2、半分に-2なら、その施策は捨てるべきではなく「効く半分にだけ」届ければよいはずです。次回からPhase 4、効果の異質性に入ります。平均の裏で誰に効いて誰に効かないのか。まずはCATEの定義と、サブグループ解析が招く古典的な罠からです。

