この記事は、テキサス州が 1993 年に刑務所を拡張したことで、黒人男性の収監者数がどれだけ増えたのかを推定する回です。拡張したのはテキサス 1 州だけで、収監者数の規模も伸び方も似た州が 1 つもないため、比べる相手を選べません。そんなときの道具、合成コントロール法を、50 州とワシントン DC の 16 年分のデータ texas で組み立てます。
登場人物
遠藤顧問: データ分析の社外顧問。答えを言わずに問いで返す/さくら: データアナリスト 1 年目。数字を出すのは速いが、相関を因果と読み違える
1. 1 文で言うと
1 文で言うと
合成コントロール法は、比べられる対照が無いときに、処置を受けていない州を重み 0 以上・合計 1 で混ぜて「処置が無かったテキサス」を作る方法です。使ってよいのは処置前の軌跡をなぞれたときだけで、偶然かどうかは事前に決めた統計量の順位で語ります。
- 今日の数字: 処置後 8 年の平均で、実測は合成より +21,013 人 多くなりました。
2. 今日の問い
今日の問い
Day 18 のDIDは、処置群と対照群の「前後差の差」だった。でも処置されたのはテキサス州1つだけで、規模も伸びも似た州は1つも無い。
比較できる対照群が存在しないとき、因果効果はどう測るのか。そして推定値が1つしか出ない設計で、「これは偶然ではない」とどう言うのか?
読み終えたら、合成コントロールを使ってよい条件と、出た乖離が偶然でないことの語り方を説明できます。
答えは2段構えです。対照群が無いなら、複数の州を混ぜて作ります(3.1)。標準誤差の代わりに、処置ラベルを他の州に付け替えて同じ分析を回し、本物の順位で珍しさを測ります(3.2)。この両方を scipy で手組みします。前の回から使うのは次の 2 つです。
- Day 18(差分の差分法): 処置群の前後差から対照群の前後差を引く。条件は「処置がなければ同じだけ動いた」という平行トレンド仮定
- Day 5(FisherとNeyman): 「効果は誰にも無い」と置いて処置ラベルを付け替え、本物の順位で珍しさを測る。統計量は先に 1 つ決める
3. 概念
先に、手元の道具との違いを置きます。回帰や予測モデルはたくさんの行から学びますが、今日の処置群はテキサス 1 州で、行を増やして平均を取る進め方ができません。A/B テストのように、無作為に分けた対照も用意されていません。合成コントロールは、処置前の年を学習データに、処置後の年を予測先にして、ドナーの州の重み付き平均でテキサスを当てにいく、制約つきの回帰と読めます。違いは、重みを 0 以上・合計 1 に縛る点と、当てたいものが「処置が無かった場合」という観測できない値である点です。
3.1 合成コントロール:ドナープールの凸結合で対照群を作る
この小節が今日の主役です。前半で混ぜ方の式を読み、後半で重みの制約(凸結合)と事前適合の規律を押さえます。
欲しいのは、1993 年に刑務所を拡張しなかった場合のテキサスの軌跡です。Day 18 の DID なら、似た州を対照に選んで「前後差の差」を取ります。ところが処置されたのはテキサス 1 州だけで、収監者数の規模も伸び方も似た州は 1 つもありません。似ていない州を 1 つ選んでも、平行トレンドに説得力が出ません。そこで発想を変えます。似た州を選ぶのではなく、複数の州を混ぜて、処置前の軌跡をなぞれる対照を作るのです。その混ぜ方を書いたのが、今日の中心の式です。
処置を受けていない州の集まりをドナープールと呼びます。合成コントロール法は、ドナープールの加重平均で処置ユニットの「処置が無かった世界」の軌跡を作ります。
$$
\hat{Y}{1t}^{\text{synth}} = \sum{j=2}^{J+1} w_j, Y_{jt}
\qquad\text{s.t.}\quad w_j \ge 0,\quad \sum_j w_j = 1
$$
式は左からではなく、Σ の下の $j$ から読みます。$j$ はドナープールの州の番号で、テキサスを 1 番としたとき $j = 2$ から $J+1$ まで、つまりテキサス以外の州を 1 つずつ指します。$Y_{jt}$ はドナー $j$ の $t$ 年の値(その年の黒人男性の収監者数)、$w_j$ はその州をどれだけ混ぜるかの重みです。つなげると、右辺は「ドナー各州の $t$ 年の値に重みを掛けて、全州ぶん足す」と読めます。左辺は $t$ 年の「合成テキサス」の値で、s.t. 以下が重みに課す制約(各重みは0以上、合計は1)です。
重み$w$は、処置前の期間で実測の軌跡に最も近づくよう選びます。
$$
\min_{w}\ \sum_{t < T_0} \Bigl( Y_{1t} - \sum_j w_j, Y_{jt} \Bigr)^{2}
$$
処置が始まる年 $T_0$ より前の各年について、実測 $Y_{1t}$ と合成のズレを二乗して足し上げ、その合計がいちばん小さくなる重みを探す、という意味です。ここでも読む順は Σ の下からで、$t < T_0$ は「処置前の年だけ」、$\min_w$ は「$w$ を動かして、右の合計を最小にする」という指示です。処置後のデータは、重みを決めるのに一切使いません。
式にしたご利益は、対照を「選ぶ」作業が「作る」作業に変わることです。DID では対照の州を人が選び、その州と平行だったはずという仮定に頼りました。合成コントロールでは混ぜ方を最適化で決めるので、作った対照が処置前をどれだけなぞれたかが、事前のズレという数字で最初から見えます。なぞれていなければ、その時点で使わないと判断できます。
ポイントは、重みに「0以上・合計1」という凸結合の制約を課すことです。ただの回帰(制約なしの最小二乗)でも事前期間には適合できますが、その場合「カリフォルニアを$-0.5$州分」のような解が平気で出てきます。凸結合ならそれが起きません。第一に、ドナーの値の範囲の外へ外挿しないので、事前期間だけ辻褄を合わせた不自然な合成ができにくくなります。第二に、解が単体(重みの合計1の三角形の高次元版)の角に落ちるため重みが疎になり、「フロリダ37%+ニューヨーク36%+イリノイ27%」のように合成の中身をそのまま言葉で説明できます。
もうひとつの柱が事前適合(pre-treatment fit)の規律です。処置前の軌跡をなぞれない合成は、処置後の反事実としても信用できません。合成コントロールでは、まず事前適合の誤差(RMSPE、処置前の実測と合成のズレを二乗平均平方根でまとめた値)を確認し、なぞれていなければその対象にこの手法を使わない、が運用の第一歩です。この手法が置いている仮定は1文で言えます。処置前の軌跡を再現できた重みは、処置がなかった場合の処置後の軌跡も再現しているはずだ、というものです。
なお Abadie, Diamond & Hainmueller (2010) の原式は、アウトカムのラグに加えて共変量も距離に入れ、変数の重み付け行列$V$まで最適化します。今日は Facure の実装流儀に合わせ、事前期間のアウトカムの軌跡だけに適合させる簡略版でいきます。仕組みの芯は同じです。
- よくある読み違い: 事前期間をよくなぞれる合成ほど、良い対照だ
- 実際は: 制約を外したり、ドナーを増やしたりすれば、事前はいくらでもなぞれます。0 以上・合計 1 の縛りは、ドナーの値の範囲の外へ外挿しないための条件です
3.2 プラセボ置換検定:標準誤差の代わりに順位で語る
合成コントロールの推定値は「テキサスの乖離」というたった1つの数です。処置ユニットが1つしかないので、標本を増やして標準誤差を縮める、という漸近論の道具立てが最初から立ちません。
ここで Day 5 のFisherが戻ってきます。手順は 4 つです。
- 鋭い帰無仮説「処置の効果はどの州にも一切無い」が正しいなら、テキサスが処置されたことに意味はなく、どの州に処置ラベルを付け替えても同じ分析ができるはずです。
- ドナープールの各州を順に「処置された州」とみなして同じ手続きを回します。これがプラセボ置換検定です。
- 効果が無いはずの州でも、事前適合の誤差やノイズで処置後の乖離はゼロにはなりません。その「偶然でも出る乖離」の束の中で、本物のテキサスの乖離が何位に来るかを数えます。
- テキサスが51州中1位なら、帰無仮説のもとでたまたま1位を引く確率は $1/51 \approx 0.020$。これがこの設計のp値です。
Day 5 で置いた規律もそのまま効きます。順位を測る統計量(処置後の平均乖離か、RMSPE比か)は事前に1つ決めてコミットします。いくつも試して一番小さいp値を選ぶのは反則です。これは後半で実際に効いてくるので、覚えておいてください。
4. 手を動かす
4.1 ドナープール50州から凸結合の重みを最適化
データは texas です。1980年、テキサス州は受刑者が起こした訴訟(Ruiz v. Estelle)に敗れ、過剰収容の解消を連邦裁判所に監督される立場になりました。当初は仮釈放を増やして収容数を調整していましたが、1993年、Richards 知事のもとで約10億ドルの刑務所建設計画が動き出し、収容能力は3年で概ね2倍になります。処置は「1993年の刑務所拡張」、アウトカムは州ごとの黒人男性の収監者数( bmprison )です。データは51ユニット(50州+ワシントンDC)×1985〜2000年の16年分で、処置前の期間は8年あります。
重みの最適化は、3.1 の式を scipy.optimize にそのまま渡すだけです。目的関数は事前期間の二乗誤差、制約は「0以上1以下」と「合計1」の2つです。
出力を開く前に予想してください。50州に自由に配ってよい重みは、何州くらいに立つでしょうか。
コード
import numpy as np
import pandas as pd
from causaldata import texas
from scipy.optimize import minimize
d = texas.load_pandas().data
piv = d.pivot(index="year", columns="state", values="bmprison") / 1000 # 千人単位
T0 = 1993 # 刑務所拡張の開始年
years = piv.index.to_numpy()
pre = piv.loc[years < T0] # 事前期間 1985〜1992 の8年
donors = [s for s in piv.columns if s != "Texas"]
def synth_weights(y_pre, Y0_pre):
"""事前期間の軌跡への二乗誤差を最小にする凸結合の重みを解く"""
k = Y0_pre.shape[1]
def loss(w):
r = y_pre - Y0_pre @ w
return r @ r
def grad(w):
return -2 * Y0_pre.T @ (y_pre - Y0_pre @ w)
res = minimize(loss, np.full(k, 1 / k), jac=grad,
bounds=[(0, 1)] * k, # 各重みは0以上1以下
constraints={"type": "eq",
"fun": lambda w: w.sum() - 1}, # 合計は1
# SLSQP=上の2つの制約を守りながら最小値を探すソルバー
method="SLSQP", options={"maxiter": 2000, "ftol": 1e-12})
return res.x
w = synth_weights(pre["Texas"].to_numpy(), pre[donors].to_numpy())
ws = pd.Series(w, index=donors).sort_values(ascending=False)
print(ws[ws > 0.001].round(3))
print("重みの合計 = %.3f, 0.1%%を超える州 = %d" % (w.sum(), (w > 0.001).sum()))
出力
Florida 0.373
New York 0.355
Illinois 0.272
dtype: float64
重みの合計 = 1.000, 0.1%を超える州 = 3
50州に自由に配ってよい重みが、フロリダ 37.3%・ニューヨーク 35.5%・イリノイ 27.2% の3州だけに立ちました。残り47州はすべて0.1%未満、実質ゼロです。これが 3.1 で述べた凸結合の疎性です。下の Fig 5b を見ると、選ばれた理屈も読めます。ニューヨークはテキサスより収監者数の水準が高く、イリノイは低く、フロリダは伸び方が近い。水準も伸びも違う3州を混ぜることで、テキサスの事前8年の軌跡を挟み込むように再現しています。
4.2 合成テキサスと実テキサスの乖離=効果
重みが決まれば、合成テキサスの軌跡は行列積1回で出ます。処置後の期間について、実測から合成を引いた乖離が効果の推定値です。
コード
synth = piv[donors].to_numpy() @ w # 合成テキサスの軌跡
actual = piv["Texas"].to_numpy()
gap = actual - synth # 実測との乖離=効果の推定値
pre_rmspe = np.sqrt(np.mean(gap[years < T0] ** 2))
print("事前適合 RMSPE = %.0f 人(事前平均 %.0f 人の %.1f%%)"
% (pre_rmspe * 1000, actual[years < T0].mean() * 1000,
100 * pre_rmspe / actual[years < T0].mean()))
for yy in [1993, 1994, 1995, 2000]:
i = int(np.where(years == yy)[0][0])
print("%d年: 実測 %5d 人, 合成 %5d 人, 乖離 %+6d 人"
% (yy, round(actual[i] * 1000), round(synth[i] * 1000), round(gap[i] * 1000)))
print("処置後8年の平均乖離 = %+d 人" % round(gap[years >= T0].mean() * 1000))
出力
事前適合 RMSPE = 863 人(事前平均 19449 人の 4.4%)
1993年: 実測 29260 人, 合成 28584 人, 乖離 +676 人
1994年: 実測 40451 人, 合成 30037 人, 乖離 +10414 人
1995年: 実測 55602 人, 合成 31505 人, 乖離 +24097 人
2000年: 実測 61861 人, 合成 32960 人, 乖離 +28901 人
処置後8年の平均乖離 = +21013 人
計算の道筋は次の 3 段です。数字は 4.1 と 4.2 の出力と同じものです。
まず事前適合を確認します。RMSPEは 863人、事前期間の平均約19,400人に対して4.4%です。8年の軌跡をこの精度でなぞれているので、合成を反事実として使う土俵に乗りました。そのうえで処置後を見ると、乖離は着工年の1993年にはまだ +676人 とほぼゼロで、1994年に +10,414人、収容能力の倍増が完了する時期にあたる1995年に +24,097人 へ跳ね、2000年には +28,901人 に達します。実測61,861人は合成32,960人の約1.9倍です。「拡張が完成するにつれて乖離が積み上がる」という制度の時間割と、乖離の立ち上がり方が噛み合っているのも心強い点です。
Day 18 との対比で言うと、DIDは「選んだ対照群と平行だったはず」という仮定を事後には検証しづらいのに対し、合成コントロールは「対照をなぞれているか」が事前適合という数字で最初から見えます。対照群を1つ選ぶ代わりに、なぞれる対照を最適化で作ってしまう。これがこの手法の発明です。
4.3 全州でプラセボ置換し、効果の順位で有意性を語る
ではこの +21,013人は「偶然でも出る乖離」なのでしょうか。3.2 のとおり、全州に処置ラベルを付け替えて同じ手続きを回します。1つだけ注意して、プラセボのドナープールからは本物の処置州テキサスを外します。処置後に爆発するテキサスがプラセボの合成に混ざると、効果が無いはずの州の乖離を歪めるからです。
出力を開く前に予想してください。順位を測る統計量を、処置後の平均乖離から事後RMSPE/事前RMSPE比に替えたら、テキサスの順位は上がるでしょうか、下がるでしょうか、変わらないでしょうか。
コード
rows = []
for target in piv.columns: # 全51州を順に「処置された州」とみなす
pool = [s for s in piv.columns if s not in (target, "Texas")]
wp = synth_weights(pre[target].to_numpy(), pre[pool].to_numpy())
g = piv[target].to_numpy() - piv[pool].to_numpy() @ wp
rows.append((target,
np.sqrt(np.mean(g[years < T0] ** 2)), # 事前RMSPE
np.sqrt(np.mean(g[years >= T0] ** 2)), # 事後RMSPE
g[years >= T0].mean())) # 処置後の平均乖離
r = pd.DataFrame(rows, columns=["state", "pre_rmspe", "post_rmspe", "effect"])
r = r.set_index("state").sort_values("effect", ascending=False)
rank = r.index.get_loc("Texas") + 1
for s, row in r.head(3).iterrows():
print("%-12s 処置後の平均乖離 %+8.0f 人" % (s, row.effect * 1000))
print("テキサスの順位 = %d位 / 51州, p値 = %d/51 = %.3f" % (rank, rank, rank / 51))
print("事前適合が最悪の州 = %s(RMSPE %.0f 人)"
% (r.pre_rmspe.idxmax(), r.pre_rmspe.max() * 1000))
ratio_rank = int((r.post_rmspe / r.pre_rmspe).rank(ascending=False)["Texas"])
print("事後/事前RMSPE比で並べ直すと、テキサスは %d位" % ratio_rank)
出力
Texas 処置後の平均乖離 +21013 人
California 処置後の平均乖離 +7384 人
Georgia 処置後の平均乖離 +3764 人
テキサスの順位 = 1位 / 51州, p値 = 1/51 = 0.020
事前適合が最悪の州 = California(RMSPE 4489 人)
事後/事前RMSPE比で並べ直すと、テキサスは 9位
処置後の平均乖離で並べると、テキサスは 51州中1位 です。2位のカリフォルニア +7,384人 に3倍近い差をつけています。「効果はどの州にも無い」が正しければ、本物がたまたま1位を引く確率は $1/51 \approx$ 0.020。下の図が示すとおり、プラセボ50州の乖離は、事前適合が悪いカリフォルニア(破線)を除けば概ね ±6,000人 の帯に収まり、テキサスだけが帯のはるか外へ抜けていきます。
出力の下2行は、この検定の運用で大事な2つの現実です。ひとつ目、プラセボ側で事前適合が最悪なのはカリフォルニア(RMSPE 4,489人、テキサスの5倍超)です。事前期間で全米最大の収監者数を持つ州は、凸結合では作れません。混ぜて作れるのはドナーの範囲の内側だけだからです。「事前適合(RMSPE)がテキサスの2倍より悪い州はプラセボから除外」という原論文に似た規則を当てても(原論文は MSPE の比で線を引くので、閾値の意味は少し違います)、落ちるのはカリフォルニアだけで、テキサスは 50州中1位、p ≈ 0.02 のまま動きません。
ふたつ目は統計量の選択です。原論文が推す統計量は、事前適合の悪さで割り引いた事後RMSPE/事前RMSPE比ですが、この比で並べ直すとテキサスは 9位 に落ちます。順位が落ちた時点で私はまず自分の実装を疑い、比の上位から確認しました。
1位はペンシルベニアで、比は339倍。その事前RMSPEは 約6人 です。事前8時点に対してドナーが50州もあると、中規模の州は凸結合でほぼ完璧に補間できてしまい、ほぼゼロの分母が比を爆発させるのです。これは効果の証拠ではなく過剰適合の産物ですが、機械的に比で並べれば順位はこうなります。
Day 5 の「統計量は事前に1つ決めてコミットする。並べてから選ばない」という規律は、まさにこの場面のためにあります。ちなみに共変量と入れ子最適化を使う Mixtape の本式では、テキサスは46州中2位(p = 0.04)。どの流儀でも「テキサスは束の外」という図の結論は変わりません。
成り立つ場合と成り立たない場合
| 処置前の軌跡を凸結合でなぞれるか | 出た数字 | 読み方 |
|---|---|---|
| なぞれる(テキサス) | 事前 RMSPE 863 人(事前平均の 4.4%) | 合成を「処置が無かった場合」として使い、処置後の乖離を効果の推定値と読む |
| なぞれない(カリフォルニア) | 事前 RMSPE 4,489 人(テキサスの 5 倍超) | ドナーの値の範囲の外にあり、合成できない。処置後の乖離は効果とノイズの区別がつかない |
5. 判断の基準
合成コントロールを使ってよいか、使うなら何を確かめるか。問いを 3 つに絞りました。上から順にたどり、最初に右へ出たところが、いまやることです。
- Q1 はデータで最初に確かめられる門番です。 事前適合が悪ければ、その対象には使えません。合成が処置前をなぞれていないなら、処置後の乖離は効果とノイズの区別がつきません。カリフォルニアのように、ドナーの凸包の外にあるユニット(全州で最大・最小の州など)は原理的に合成できません。事前RMSPEの報告を必須にし、事前期間の後半を検証用に取り置いて「合成が当てられるか」を確かめてから本番に進むのが安全です。
- Q2 は数字を並べる前に守る規律です。 今日の texas でも、処置後の平均乖離ならテキサスは 51 州中 1 位、事後/事前 RMSPE 比なら 9 位でした。どちらの統計量にも言い分はありますが、並べてから都合の良いほうを選んだ瞬間に p 値は意味を失います。Day 5 と同じく、統計量は事前に 1 つ決めて書いておきます。
- Q3 は仮定の話で、データだけでは確かめきれません。 p = 0.020 は「効果の証明」ではありません。プラセボ検定が語れるのは「効果ゼロの世界でこの乖離の順位は珍しい」ことだけです。1993年前後にテキサスだけを襲った別の要因(州固有の政策変更や経済ショック)があれば、それも乖離に混ざります。ドナーへの処置の波及(テキサスの受刑者移送や犯罪の州間移動)があればSUTVA違反で対照側も汚れます。干渉の扱いは Day 28 でまとめて掘ります。
注記 事前適合が良すぎるのも危険です。事前が8時点しかないのにドナーが50州あれば、効果と無関係にほぼ完璧な補間が偶然できてしまいます(ペンシルベニアの事前誤差6人がその実例)。4.3 のRMSPE比の爆発はこの過剰適合の裏返しです。原式が共変量で距離を縛り、実務でドナープールを処置ユニットと似た州へ絞るのは、この「なんでも作れてしまう」自由度を殺すためです。
自分の仕事に当てるなら、次の問いから始められます。1 か所だけに入れた施策のうち、入れる前の推移を何時点もさかのぼれて、施策を入れていない比較先を複数並べられるものはどれでしょうか。
6. 確認問題
問 1(自分の言葉で説明する) 合成コントロールを使ってよい条件と、出た乖離が偶然でないことの語り方を、本文を見ずに 2 文で説明してください。
答えと解説
模範解答: 合成コントロールを使ってよいのは、ドナーを重み 0 以上・合計 1 で混ぜた合成が、処置前の軌跡をなぞれたときです。偶然かどうかは、処置ラベルを全州に付け替えた乖離の中で本物が何位かで語り、順位を測る統計量は並べる前に 1 つ決めておきます。
次の 2 点のどちらかが抜けたら不十分です。
- 事前適合を先に確かめること(なぞれなければ使わない)
- 統計量を先に 1 つ決めること(並べてから選ばない)
詰まったら 3.1 の後半と 3.2 に戻ってください。
問 2(別の場面へ移す) ある小売チェーンで、売上がチェーンで最大の旗艦店 1 店だけが大規模な改装をしました。残り 30 店を重み 0 以上・合計 1 で混ぜて合成を作ると、改装前 12 か月の誤差は旗艦店の平均売上の 25% でした。次の一手として最も適切なものはどれでしょうか。
- ア 改装後の実測と合成の差を、そのまま改装の効果として報告する
- イ 重みの制約を外した回帰に替え、改装前の誤差を小さくしてから報告する
- ウ この合成は使わない。チェーンで最大の店は、ほかの店を 0 以上・合計 1 で混ぜても作れない
- エ 30 店に付け替えたプラセボ置換検定で 1 位になれば、改装前の誤差は問題にならない
答えと解説
ウ。今日のカリフォルニアと同じ形です。全体で最大のユニットはドナーの値の範囲の外にあり、凸結合では作れません(4.3、5 の Q1)。テキサスの事前誤差が事前平均の 4.4% だったのに対し、25% では処置前をなぞれたとは言えません。
- ア(事前適合を飛ばす読み違い): 処置前をなぞれていない合成では、処置後の差は効果とノイズの区別がつきません。
- イ(事前の誤差は小さいほどよいという読み違い): 制約を外せば事前はなぞれますが、マイナスの重みのような外挿が出ます(3.1)。
- エ(順位が適合の悪さを帳消しにするという読み違い): 事前適合の確認は、順位を見る前の門番です。
問 3(出力を読む) 4.3 の出力の一部です。3 行目でテキサスが 9 位に落ちたとき、どう扱うのが正しいでしょうか。
テキサスの順位 = 1位 / 51州, p値 = 1/51 = 0.020
事前適合が最悪の州 = California(RMSPE 4489 人)
事後/事前RMSPE比で並べ直すと、テキサスは 9位
- ア 比の上位は、事前 RMSPE がほぼゼロの州が分母で比を爆発させた結果と読む。どの統計量で順位を測るかは並べる前に 1 つ決めておき、並べてから 1 位になるほうを選ばない
- イ 比は原論文が推す統計量なので、9 位を根拠に「効果は無かった」と結論する
- ウ 比を見たあとで、1 位になる処置後の平均乖離を改めて採用して報告する
- エ 統計量で順位が変わるのは実装の誤りなので、比の行を消して報告する
答えと解説
ア。比で 1 位のペンシルベニアは比 339 倍で、事前 RMSPE は約 6 人でした。事前 8 時点に対してドナーが 50 州もあると、中規模の州は凸結合でほぼ完璧に補間でき、ほぼゼロの分母が比を爆発させます。効果の証拠ではなく過剰適合の産物です。そのうえで、統計量は並べる前に 1 つ決めてコミットします(Day 5)。
- イ(順位の低さを効果なしと読む読み違い): 9 位は「効果が無い」証拠ではありません。共変量と入れ子最適化を使う Mixtape の本式では、テキサスは 46 州中 2 位(p = 0.04)で、どの流儀でも「テキサスは束の外」という結論は変わりません。
- ウ(並べてから統計量を選ぶ読み違い): 並べてから 1 位になるほうを選ぶのは、Day 5 の規律に反します。
- エ(統計量の性質を実装の誤りと読む読み違い): 実装の誤りではなく、比という統計量の性質です。都合の悪い行を消すのは報告として不誠実です。
7. おわりに
合成コントロール法は、比べられる対照が無いときに、処置を受けていない州を重み 0 以上・合計 1 で混ぜて「処置が無かったテキサス」を作る方法です。使ってよいのは処置前の軌跡をなぞれたときだけで、偶然かどうかは事前に決めた統計量の順位で語ります。良すぎる事前適合と、ドナーへの波及や同じ時期の別のショックには、いつも目を光らせておきます。最後に確かめます。合成コントロールを使ってよい条件と、出た乖離が偶然でないことの語り方を、本文を見ずに 2 文で言えますか。詰まったら 3.1 の後半と 3.2 に戻ってください。
8. 参考(本棚)
- Abadie, Diamond & Hainmueller (2010) "Synthetic Control Methods for Comparative Case Studies"。原論文。カリフォルニアのたばこ規制 Proposition 99 を題材に、共変量と重み行列$V$を含む本式とプラセボ検定の運用を定式化
- Scott Cunningham『Causal Inference: The Mixtape』第10章。texas データの本家。テキサス刑務所拡張の制度背景と、共変量込みの本式で46州中2位(p = 0.04)という結果もこの章
- Matheus Facure『Causal Inference in Python』第9章。事前アウトカムの軌跡に適合させる今日の実装流儀の下敷き
- Imbens & Rubin『Causal Inference for Statistics, Social, and Biomedical Sciences』第5章。プラセボ置換検定の土台になるFisher流ランダム化推測(Day 5 の下敷き)
- データ: texas(
causaldataパッケージ経由、MITライセンス、取得日2026-08-15)。1985〜2000年の州別の黒人男性収監者数と州属性。Cunningham の教材データ
この記事の位置づけ
因果推論を「本を読んだ」で終わらせず、自分の言葉で説明でき、コードで再現できる状態まで落とす 30 日連載の Day 19 です。
図は縦が分析の工程、横が流派です。この記事は「③ 推定する(数字を出す)」の、計量経済(外生の断片)の「合成コントロール」を扱います(図の黒い札)。前提になるのは Day 18(差分の差分法)・Day 5(FisherとNeyman)。ここで覚える考え方や道具は Day 28(空間データ) で再登場します。
9. 次回予告(Day 20)
Day 20(回帰不連続)
今日は「対照群が無いなら合成する」という力技を見ました。次回は逆に、制度の側が対照群を用意してくれている状況です。所得スコアが基準以下なら給付、超えたら対象外。こうして閾値で機械的に処置が決まる制度は、閾値のすぐ両側では処置がほぼ偶然で決まる、つまり実験に化けます。回帰不連続デザイン(RDD)で、制度の「際」から因果効果を取り出します。




















