この記事は、職業訓練を受けると年収が上がるのかを、観察データで確かめる回です。訓練を受けた 185 人と、無関係な調査から集めた一般の働く人とでは、訓練の前から年齢も収入も違うので、そのまま比べられません。受けた 1 人ひとりに似た相手を探して比べるマッチングを、実験の答えが分かっている LaLonde の職業訓練データで組み立てます。
登場人物
遠藤顧問: データ分析の社外顧問。答えを言わずに問いで返す/さくら: データアナリスト 1 年目。数字を出すのは速いが、相関を因果と読み違える
1. 1 文で言うと
1 文で言うと
マッチングは、処置を受けた 1 人ひとりに、共変量(実務では傾向スコア)がそっくりな対照を 1 人探してペアを組み、ペアの差の平均で ATT(処置群の平均処置効果)を出す方法です。うまくいったかは効果の数字ではなく、アウトカムを見る前の共変量のバランス(SMD)で判定します。
- 今日の数字: マッチング後の ATT は +2,202ドル で、実験の答え +1,794ドルの近くまで戻りました。
2. 今日の問い
今日の問い
職業訓練が年収を上げるか。実験の答えは +1,794ドル と分かっている。
手元にあるのが「訓練を受けた185人」と「無関係な調査から集めた15,992人」だけだったとしても、この答えに辿り着けるか?
読み終えたら、似た相手を探してペアを組み ATT を出す手順と、うまくいったかをバランスで判定する方法を説明できます。
Day 7 の IPW は、全員を残して重みで集団を「ならす」方法でした。今日はもう1つの道、処置を受けた一人ひとりに似た比較相手を「探す」マッチングをコードにします。そして観察データの推定を、実験の答えにぶつけて採点します。3.1 で式を読み、3.2 でバランスの物差し SMD を押さえ、4 で実データに当てて実験の答えと照らします。前の回から使うのは次の 2 つです。
- Day 7(傾向スコアとIPW): 傾向スコア e(x) は、共変量から処置の受けやすさを 1 つの数にまとめたもの。今日はその近さで相手を探す
- Day 6(割付メカニズムと非交絡性): 非交絡性とオーバーラップ。この 2 つが成り立つ前提で、似た人を比べる
3. 概念
先に、手元の道具との違いを置きます。A/B テストなら、無作為に分けた 2 群を比べれば、引き算がそのまま効果になります。回帰なら、年齢や訓練前の年収を説明変数に入れて係数を読みたくなります。今日の場面は、訓練を受けた 185 人と、年齢も訓練前の年収も分布のずれた一般の 15,992 人で、くじ引きで分けたデータではありません。回帰は、分布が重ならないところまで直線を延ばして補ってしまいます。マッチングは、似た相手がいる範囲だけで比べ、似ていない人は使いません。
3.1 マッチング:重みで「ならす」か、ペアで「探す」か
この小節が今日の主役です。前半で式を読み、後半でペアの相手の選び方(ATT・復元あり・前提)を押さえます。
知りたいのは、訓練を受けた 1 人ひとりが、もし受けていなかったらいくら稼いでいたか、です(Day 2 の潜在的結果 $Y(0)$)。この「受けなかった姿」はどこにも記録されないので、誰かで代用するしかありません。対照群の平均で代用すると、年齢も訓練前の年収も違う人まで混ざります(今日の問いの 15,992 人がそれです)。そこで発想を変えて、処置を受けた 1 人ごとに共変量がそっくりな対照を 1 人探し、その人の結果を代役にします。このペアの引き算を全員ぶん平均したものが、今日の中心の式です。
ペアさえ組めれば、推定量はペア内の引き算の平均です。
$$
\hat{\tau}{\text{ATT}} = \frac{1}{N_t} \sum{i:,W_i = 1} \bigl( Y_i - Y_{m(i)} \bigr)
$$
式は左からではなく、Σ の下の条件から読みます。「$i:,W_i = 1$」は「処置を受けた人 $i$ について」という意味で、Σ はその人たちだけを 1 人ずつ足し上げる印です。$m(i)$ は「$i$ のために探してきた相手(match)」で、$Y_{m(i)}$ はその相手の結果、つまり $i$ が受けなかった姿の代役です。つなげると、右辺は「処置を受けた人 $i$ ごとに、自分の結果 $Y_i$ からペア相手の結果 $Y_{m(i)}$ を引き、処置群の人数 $N_t$ で割って平均する」と読めます。難しいことは何もしておらず、ペアの引き算を全ペア分ならしているだけです。
式にしたご利益は、比較に誰を使ったかが式の上で見えることです。式に出てくる対照は、$m(i)$ として呼ばれた人だけです。処置群の誰とも似ていない対照は、ペアに選ばれないので一度も登場しません。Day 7 の IPW が対照群を全員残して重みで分布をならしたのに対し、マッチングは似ていない対照をそもそも使いません。その違いが、この 1 行に書いてあります。
IPWとマッチングは、同じ非交絡性の土台の上に立つ兄弟です。IPWは対照群全員を使い、処置群に似た人を重く、似ていない人を軽くして分布をならします。マッチングは逆に、処置ユニット $i$ ごとに共変量(実務では傾向スコア)が最も近い対照ユニット $m(i)$ を1人探してペアを組み、似ていない対照はそもそも使いません。機械学習の言葉にすると K=1 のK近傍法そのもので、実装も sklearn の NearestNeighbors で済みます。
マッチング推定量が自然に答えるのは ATT(処置群における平均処置効果) $E[Y(1) - Y(0) \mid W = 1]$ です。比較相手を探してもらえるのは処置群の側だからです。今日の問いなら「訓練を受けた人たちにとって、訓練は効いたか」であって、CPSの平均的な人が訓練を受けたらどうなるか(ATE)ではありません。
また今日は復元ありマッチングを使います。同じ対照が複数の処置ユニットのペアになることを許す方式です。似ている相手を何度でも呼び出せるのでマッチの質は上がり、バイアスは減ります。その代わり実質的に使われる対照の人数が減るので、推定のばらつき(分散)は増えます。このトレードオフを承知のうえで使います。
前提はDay 6 の道具立てそのままです。仮定は次の 3 つです。
- 非交絡性。この $X$ で条件付ければ割付は as-if random、つまりくじ引きで分けたのと同じように見なせる、という仮定です。
- オーバーラップ。Day 6 の条件で、4.3 の共通サポートがその線引きです。
- Day 2 の SUTVA。暗黙に仮定しています。職業訓練は労働市場を介して干渉しうる、つまり訓練を受けた人が職を得た分だけ受けなかった人の職が減るなら、ペアの引き算は「訓練の効果」と「押しのけの効果」を混ぜてしまいます。今日はこれを仮定で封じ、崩れる世界は Day 28(空間干渉)で扱います。
3.2 バランス診断:アウトカムを見る前に、SMDで設計を合格させる
マッチングが上手くいったかは、効果の数字ではなく共変量のバランスで判定します。定番の物差しが SMD(標準化平均差) です。
$$
\mathrm{SMD} = \frac{\bar{X}_t - \bar{X}_c}{\sqrt{(s_t^2 + s_c^2)/2}}
$$
分子は処置群の平均 $\bar{X}_t$ と対照群の平均 $\bar{X}_c$ の差、分母は両群の分散を平均して平方根をとった値で、これをプールした標準偏差と呼びます。平均差をプールした標準偏差で割るので、年齢もドルもダミー変数も同じ物差しで比べられます。
経験的な目安は |SMD| < 0.1。全共変量についてマッチング前後のSMDを並べた図はラブプロットと呼ばれ、4.3 の Fig 7 がそれです。
大事なのは診断の順番です。Imbens & Rubin はマッチングを設計フェーズの道具と位置づけます。バランスが合格するまでは、アウトカム re78 を一切見ません。効果の数字を見ながら傾向スコアのスペックをいじり始めると、好みの答えが出るスペックを選ぶ誘惑に勝てないからです。
4. 手を動かす
4.1 実験ベンチマーク +1,794ドルを確定する
NSW(National Supported Work、全米支援雇用実証) は1970年代の米国で、仕事に就きにくい人へ職業訓練を提供した実験で、参加者をくじ引きで訓練群と対照群に分けました。ランダムに割り付けたので訓練の効果という答えが分かっています。この実験の対照群を、まったく無関係な政府の労働力調査 CPS(Current Population Survey) の一般労働者にすり替えると、答え合わせのできる観察データが手に入ります。「実験の答えを知ったうえで、観察データの手法がどこまで迫れるか」を測れる、という設定そのものが教材です。
LaLonde (1986) はこの実験の答えを金標準に据え、対照群だけをCPSやPSIDといった一般調査に差し替えて当時の計量経済学の手法を試し、どの手法も実験の答えを再現できないことを示しました。観察研究への警鐘として有名になった論文です。13年後、Dehejia & Wahba (1999) が同じデータに傾向スコア法で再挑戦し、共通サポートに注意すれば実験の答えの近くまで戻れることを示しました。今日使う nsw_mixtape はその Dehejia-Wahba サンプルです。
最初に金標準を確定します。実験の中の単純比較です。
コード
from causaldata import nsw_mixtape
nsw = nsw_mixtape.load_pandas().data # NSW職業訓練実験(Dehejia-Wahbaサンプル)
t = nsw.query("treat == 1") # 職業訓練を受けた処置群
c_exp = nsw.query("treat == 0") # 実験の対照群
bench = t["re78"].mean() - c_exp["re78"].mean()
print("実験ベンチマーク = %+.0f ドル(処置 %d人, 対照 %d人)" % (bench, len(t), len(c_exp)))
出力
実験ベンチマーク = +1794 ドル(処置 185人, 対照 260人)
re78 は1978年(訓練後)の年収です。無作為割付なので、Day 4 で見たとおり引き算がそのまま因果効果になります。訓練は年収を平均 +1,794ドル 押し上げました。以降、この数字を答えとして持ち歩きます。
4.2 素朴比較が -8,498ドルに崩壊する
ここからが観察研究の設定です。実験の対照群260人を捨て、代わりに一般人口の調査CPSから15,992人を対照群として連れてきます。まず何も考えずに引き算します。
コード
import pandas as pd
from causaldata import nsw_mixtape, cps_mixtape
nsw = nsw_mixtape.load_pandas().data
cps = cps_mixtape.load_pandas().data # CPS:一般人口の調査データ(観察対照群)
t = nsw.query("treat == 1")
naive = t["re78"].mean() - cps["re78"].mean()
print("素朴比較(NSW処置群 vs CPS対照群)= %+.0f ドル" % naive)
cols = ["age", "black", "marr", "re74"]
cmp = pd.DataFrame({
"NSW処置群": t[cols].mean(),
"CPS対照群": cps[cols].mean(),
}).round(2)
print(cmp)
出力
素朴比較(NSW処置群 vs CPS対照群)= -8498 ドル
NSW処置群 CPS対照群
age 25.82 33.23
black 0.84 0.07
marr 0.19 0.71
re74 2095.57 14016.80
訓練を受けると年収が 8,498ドル下がる、という数字が出ました。最初にこの符号を見たときは、まず自分のコードを疑いました。もちろん訓練のせいではありません。下の共変量を見れば理由は明白です。NSWの対象者は若く、84%が黒人で、既婚率19%、訓練前(1974年)の年収は平均2,096ドルの低所得層です。CPSは平均的な米国の労働者で、訓練前から年収が14,017ドルあります。そもそも年収水準の違う2つの集団を引き算しているだけで、Day 6 の言葉で言えば交絡因子 $X$ の分布が壊滅的にズレています。これが LaLonde が突きつけた出発点です。
表の 4 列は、どれも訓練を受けた人と大きく違います。人種だけをそろえても足りず、4 列でマスを切ると相手のいないマスだらけになります。そこで、受けやすさを 1 つの数にまとめた傾向スコアで、近い相手を探すのが次の 4.3 です。
4.3 傾向スコアで「似た人」を探し、+2,202ドルまで戻す
ここから Dehejia & Wahba の再挑戦をなぞります。手順は 3.2 の Fig 5 のとおり、傾向スコア推定 → 共通サポートへのトリミング → 最近傍マッチング → バランス診断、の順です。共通サポートとは、処置群と対照群の傾向スコアが重なっている範囲のことです。Day 6 のオーバーラップを、実際の数値で線引きしたものと思ってください。マッチングの距離は傾向スコアそのものではなく、ロジット変換した線形化傾向スコア $\log(e/(1-e))$ で測ります。$e(x)$ は0と1の近くで非線形に圧縮されているので、端での「近さ」が歪むのを補正するためです(Imbens & Rubin 第15章)。
出力を開く前に予想してください。CPS の 15,992 人のうち、傾向スコアの帯に入って、比べる相手になれる対照は何人くらいでしょうか。
コード
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
from causaldata import nsw_mixtape, cps_mixtape
from sklearn.neighbors import NearestNeighbors
nsw = nsw_mixtape.load_pandas().data
cps = cps_mixtape.load_pandas().data
t = nsw.query("treat == 1")
bench = t["re78"].mean() - nsw.query("treat == 0")["re78"].mean()
df = pd.concat([t, cps], ignore_index=True).copy()
df["u74"] = (df["re74"] == 0).astype(int) # 1974年に収入ゼロ
df["u75"] = (df["re75"] == 0).astype(int) # 1975年に収入ゼロ
# 傾向スコア(Dehejia & Wahba 1999 流のスペック)
f = ("treat ~ age + I(age**2) + I(age**3) + educ + I(educ**2)"
" + black + hisp + marr + nodegree + re74 + re75 + u74 + u75 + educ:re74")
df["ps"] = smf.logit(f, data=df).fit(disp=0).predict(df)
# 共通サポートへのトリミング:処置群の傾向スコア帯の外にいる対照は使わない
tr, co = df.query("treat == 1"), df.query("treat == 0")
co_in = co[co["ps"].between(tr["ps"].min(), tr["ps"].max())]
# 線形化傾向スコア logit e(x) の1次元で、1対1の最近傍マッチング(復元あり)
def lps(p):
return np.log(p / (1 - p))
nn = NearestNeighbors(n_neighbors=1).fit(lps(co_in["ps"]).to_numpy().reshape(-1, 1))
_, idx = nn.kneighbors(lps(tr["ps"]).to_numpy().reshape(-1, 1))
matched = co_in.iloc[idx.ravel()]
att = (tr["re78"].values - matched["re78"].values).mean()
print("共通サポート内の対照 = %d / %d 人" % (len(co_in), len(co)))
print("マッチング後の ATT = %+.0f ドル(実験ベンチマーク %+.0f)" % (att, bench))
# バランス診断:マッチング前後のSMD(標準化平均差)
covs = ["age", "educ", "black", "hisp", "marr", "nodegree", "re74", "re75"]
def smd(a, b):
return (a.mean() - b.mean()) / np.sqrt((a.var() + b.var()) / 2)
bal = pd.DataFrame({
"マッチング前": [smd(tr[v], co[v]) for v in covs],
"マッチング後": [smd(tr[v], matched[v]) for v in covs],
}, index=covs).round(2)
print(bal)
出力
共通サポート内の対照 = 5355 / 15992 人
マッチング後の ATT = +2202 ドル(実験ベンチマーク +1794)
マッチング前 マッチング後
age -0.80 0.10
educ -0.68 -0.18
black 2.43 -0.08
hisp -0.05 0.07
marr -1.23 0.07
nodegree 0.90 0.16
re74 -1.57 0.09
re75 -1.75 -0.00
計算の道筋は次の 3 段です。数字は 4.1 から 4.3 の出力と本文のものです。
まずトリミングの行を見てください。CPSの15,992人のうち、処置群の傾向スコア帯に入る対照は 5,355人 だけです。3人に2人は「NSWの対象者に似ている確率」が低すぎて、比較相手になりません。下の Fig 6 がその様子です。左の網掛けが共通サポートの外で、CPSの大半がここに落ちます。さらに、サポート内の5,355人のうち実際にペアとして選ばれた対照は115人でした。復元ありマッチングでは、よく似た少数の対照が繰り返し使われます。
次にバランス診断です。表の各行が共変量、2列が前後のSMDで、0に近いほど両群がそろっていることを意味します(符号は処置群の平均が小さいときにマイナスになるだけで、大きさだけを見ます)。マッチング前は black のSMDが 2.43、訓練前年収 re75 が 1.75 と、目安 0.1 を桁違いに超える壊滅的な偏りでした。マッチング後は8共変量中6つが0.1の内側に入り、black は 0.08 まで縮みます(educ と nodegree に 0.18、0.16 の偏りが残ります。1次元のスコアでのマッチングは万能ではありません)。ラブプロットで見ると一目瞭然です。
設計が概ね合格したので、ここで初めてアウトカムを見ます。ATTは +2,202ドル。素朴比較の -8,498ドルから、実験の答え +1,794ドルのすぐ近くまで戻りました。185ペアの差のばらつきから、推定値がどれくらいぶれるかの目安である標準誤差を見積もると700ドル弱あります(同じ対照を何度も使ったことを無視した粗い目安です)。この幅を踏まえると、+2,202 と +1,794 の違いはノイズの範囲です。3つの推定を並べたのが下の Fig 8 です。
成り立つ場合と成り立たない場合
| 仮定 | データに出るもの | 今日の数字の読み方 |
|---|---|---|
| 成り立つ: 観測した $X$ で割付が説明できる | バランス表で、black の SMD が 2.43 から 0.08 に縮む | +2,202ドルを、実験の答え +1,794ドルの近くまで戻った数字として読む |
| 成り立たない: 測っていない交絡がある | バランス表は、入れた 8 つの共変量のそろい具合しか映さない | SMD が合格でも、+2,202ドルを真の効果とは確定できない。どれだけ強い交絡で覆るかは Day 9 で測る |
5. 判断の基準
マッチングの推定値を報告してよいか、そしてアウトカムをいつ開けてよいか。問いを 3 つに絞りました。上から順にたどり、最初に右へ出たところが、いまやることです。
- Q1 は仮定の話で、データからは検証できません。 今日実験の答えの近くへ戻れたのは、割付を説明する共変量(特に訓練前2年分の収入)がたまたま観測されていたからです。マッチングがそろえられるのは観測した $X$ の分布だけで、隠れた交絡には無力です。マッチングは非交絡性を信じたときの最善にすぎず、その信念がどれだけ崩れると結論が覆るかは、次回 Day 9 の感度分析で定量化します。
- Q2 と Q3 はデータで確かめられる診断です。 Q2 は共通サポートに入る対照の人数(今日は 15,992 人中 5,355 人、Fig 6)、Q3 はバランス表とラブプロット(Fig 7)です。傾向スコアのスペックで答えは動きます。上のコードから3乗項と交差項を落とした素直なスペックに変えると、ATTは +513ドル まで落ち、バランスも最大|SMD| 0.21 と悪化しました。バランスの良いスペックのほうがベンチマークに近かったのは偶然ではなく、これがバランス診断でスペックを選ぶ(ATTを見て選ばない)という規律の根拠です。
- 全部通ったら、ここで初めてアウトカムを見ます。 効果の数字を見ながらスペックを探すと、+513 から +2,202 まで並んだ候補から好みの答えを選ぶ行為になってしまうからです。報告では、4.3 の標準誤差 700ドル弱が同じ対照を何度も使ったことを無視した粗い目安であることも書き添えます。
注記 答えているのはATTで、しかも共通サポート内の話です。今日の +2,202ドルは「NSWの対象者のような低所得層が訓練を受けたときの効果」であって、CPSの平均的な労働者への効果ではありません。CPSの3人に2人を捨てた時点で、語れる対象は狭くなっています。語れる範囲が狭くなるのは手法の欠点ではなく、外挿で語らないという正直さです。
自分の仕事に当てるなら、次の問いから始められます。いま観察データで効果を報告している施策のうち、受けた側の 1 人ひとりに似た相手を、効果の数字を見る前に選べる共変量だけで探せるものはどれでしょうか。
6. 確認問題
問 1(自分の言葉で説明する) マッチングで ATT を出す手順と、うまくいったかの判定の仕方を、本文を見ずに 2 文で説明してください。
答えと解説
模範解答: マッチングは、処置を受けた 1 人ひとりに共変量(実務では傾向スコア)がそっくりな対照を 1 人探してペアを組み、ペアの差の平均で ATT を出す方法です。うまくいったかは効果の数字ではなく、アウトカムを見る前の共変量のバランス(SMD、目安は絶対値 0.1 未満)で判定し、合格してから初めてアウトカムを開きます。
次の 2 点のどちらかが抜けたら不十分です。
- 似た相手とペアを組み、ペアの差を平均すること(全員の平均とは比べない)
- バランスで判定し、結果を見る前に設計を合格させること(ATT を見て選ばない)
詰まったら 3.1 と 3.2 に戻ってください。
問 2(別の場面へ移す) あるウェブサービスで、新機能を使った 500 人と、使っていない 20,000 人がいます。使った人ごとに傾向スコアが最も近い使っていない人を 1 人選んでペアにし、購入額を比べる前にバランス表を見たところ、最大の |SMD| は 0.35 でした。次の一手として最も適切なものはどれでしょうか。
- ア 購入額の差を、そのまま新機能の効果として報告する
- イ 使っていない 20,000 人の全員の平均と、使った人の平均を比べる
- ウ 購入額の差を見る前に、傾向スコアの式を見直して、バランスを取り直す
- エ 傾向スコアが離れた人も、ペアに足して人数を増やす
答えと解説
ウ。目安の 0.1 を超えているので、設計がまだ合格していません。合格するまでは購入額を見ず、傾向スコアの式を直します(3.2、5 の Q3)。
- ア(不合格のまま効果を読む読み違い): バランスが崩れたままのペアの差には、新機能の効果と、使った人と相手の違いが混ざります。
- イ(全員の平均に戻す読み違い): 今日の素朴比較が -8,498ドルに崩れたのは、似ていない人まで混ぜたからです(4.2)。
- エ(遠い相手まで足す読み違い): 傾向スコアが離れた人には、似た相手がいません。共通サポートの外は語らないのがルールです(5 の Q2)。
問 3(出力を読む) 4.3 のバランス表です。この出力の読み方として正しいものはどれでしょうか。
マッチング前 マッチング後
age -0.80 0.10
educ -0.68 -0.18
black 2.43 -0.08
hisp -0.05 0.07
marr -1.23 0.07
nodegree 0.90 0.16
re74 -1.57 0.09
re75 -1.75 -0.00
ア black は符号がプラスからマイナスに変わったので、偏りが逆向きに悪化した イ 0 に近いほど両群がそろっている。8 共変量中 6 つは目安 0.1 の内側に入ったが、educ と nodegree には偏りが残っている ウ マッチング後の値が小さいので、ATT +2,202ドルは真の効果だと確定した エ re75 が -0.00 になったので、訓練前の年収は効果の推定に関係なくなった
答えと解説
イ。表の各行が共変量、2 列が前後の SMD で、大きさだけを見ます。マッチング前は black 2.43 のように目安の 20 倍を超える偏りがありましたが、マッチング後は 6 つが 0.1 の内側に入りました。educ(-0.18)と nodegree(0.16)には偏りが残り、1 次元のスコアでのマッチングは万能ではありません。
ア: 符号は処置群の平均が小さいときにマイナスになるだけで、大きさは 2.43 から 0.08 に縮んでいます。ウ: バランスは観測した共変量がそろった証拠にすぎず、隠れた交絡と推定のばらつき(標準誤差 700ドル弱)は残ります。エ: ほぼ 0 なのは、マッチした対照と処置群で re75 の平均がそろったという意味です。関係なくなったのではなく、そろえたからこそ比較になっています。
7. おわりに
マッチングは、処置を受けた 1 人ひとりに、共変量(実務では傾向スコア)がそっくりな対照を 1 人探してペアを組み、ペアの差の平均で ATT(処置群の平均処置効果)を出す方法です。うまくいったかは効果の数字ではなく、アウトカムを見る前の共変量のバランス(SMD)で判定します。共通サポートの外は語らず、マッチングが直せるのは観測した $X$ の中の偏りだけです。最後に確かめます。マッチングの手順と、うまくいったかの判定の仕方を、本文を見ずに 2 文で言えますか。詰まったら 3.1 と 3.2 に戻ってください。
8. 参考(本棚)
- Imbens & Rubin『Causal Inference for Statistics, Social, and Biomedical Sciences』第15章 マッチングによる共変量バランスの改善。設計フェーズとしてのマッチング・線形化傾向スコア・「アウトカムを見ない」原則。今日の下敷き
- 同 第18章 マッチング推定量。ATT推定量・復元あり/なしのトレードオフ・バイアス修正。ペアの引き算の式の出どころ
- Matheus Facure『Causal Inference for the Brave and True』第10章(Matching)。KNNとしてのマッチングと、マッチング推定量のバイアスの議論
- LaLonde (1986) "Evaluating the Econometric Evaluations of Training Programs with Experimental Data", American Economic Review。観察手法への警鐘となった原典
- Dehejia & Wahba (1999) "Causal Effects in Nonexperimental Studies", JASA。傾向スコアでの再挑戦。今日のスペックの元
- データ:
causaldataパッケージの nsw_mixtape / cps_mixtape(Scott Cunningham『Causal Inference: The Mixtape』掲載データ、MITライセンス、2026-08-15取得)。本文の数値はすべて掲載コードの実行結果です
この記事の位置づけ
因果推論を「本を読んだ」で終わらせず、自分の言葉で説明でき、コードで再現できる状態まで落とす 30 日連載の Day 8 です。
図は縦が分析の工程、横が流派です。この記事は「③ 推定する(数字を出す)」の、Rubin流(割付を疑う)の「マッチング」を扱います(図の黒い札)。前提になるのは Day 7(傾向スコアとIPW)。ここで覚える考え方や道具は Day 15(DoWhyの4ステップ)・Day 27(落とし穴チェックリスト) で再登場します。
9. 次回予告(Day 9)
Day 9(感度分析)
マッチングもIPWも、そろえられるのは観測できた $X$ だけです。では、測れていない交絡が残っていたら結論はどうなるのか。Day 6 で「非交絡性は検証できない」と観念しましたが、諦める代わりに問いを変えます。「どれだけ強い隠れ交絡なら、この結論が覆るか」。この強さを1つの数字にするのが E-value で、次回Day 9 は感度分析を手組みします。今日の +2,202ドルがどれくらい打たれ強い数字なのかも、そこで採点します。




















