この連載について
因果推論を「本を読んだ」で終わらせず、自分の言葉で説明でき、コードで再現できる状態まで落とす30日連載です。Day 4 では、RCT(無作為化比較試験)だと「単純な引き算がそのまま因果効果になる」ことを本物のデータで確かめました。
今日はその引き算の背後をのぞきます。「効果がない」という一見あたりまえの言葉が、実は2つの違う意味を持っていて、それぞれに別の検証のしかたがあります。Fisher と Neyman という2人の巨人が、ほぼ同時期に別の道を切りました。図はDay 4と同じRCTデータで見せます。
TL;DR(3行)
- 「効果がない」には2つの意味。 Fisherの鋭い帰無は「誰ひとりゼロ」($Y_i(0)=Y_i(1)$)、Neymanの平均帰無は「ならしてゼロ」($\bar\tau=0$)。個体で +と− が打ち消し合えば、平均ゼロでも鋭い帰無は偽。
- Fisherは割付をシャッフルするだけ。 分布の仮定なしで、並べ替え検定がp値を出す。Thornton HIV実験の +45.1pt は、10000回混ぜ直しても一度も再現されず p < 0.0001。
- Neymanは同じ引き算を不偏推定量として使う。 反復サンプリング分散から 95%CI [41.0, 49.1]pt を付ける。Fisherは「あるか」、Neymanは「どれくらいか」に答える。
今日の問い
Day 4で「引き算=因果」と分かった。では「効果がゼロ」を疑うとき、私たちは何を疑っているのか。
「誰ひとり効果がない」を疑うのか、「平均すると効果がない」を疑うのか。この2つは同じではないのに、なぜ両方とも「帰無仮説」と呼ばれるのか?
結論から言うと、この2つは別の問いで、答え方も別です。今日はまず違いを言葉にして、次に並べ替え検定を自作し、最後に同じデータへ2つの流派を当てて「答えの形」の違いを体感します。
概念① Fisherの鋭い帰無仮説:全員ゼロだから欠測を全部埋められる
Fisher が立てたのは、鋭い帰無仮説(sharp null hypothesis) です。すべてのユニットで、処置してもしなくても結果が同じ、という仮説です。
$$
H_0:\quad Y_i(0) = Y_i(1)\quad (\text{すべての } i)
$$
この仮説が強力なのは、成り立つと仮定した瞬間、観測できなかった側の結果が全部わかるからです。Day 2で見た「反事実は観測できない」という根本問題を、帰無仮説が一時的に消してくれます。処置群の人は $Y_i(1)$ を観測していますが、鋭い帰無のもとでは $Y_i(0)$ も同じ値だと決まります。欠測がゼロになるのです。
すると、データの中で唯一「偶然で決まった」ものは、誰が処置群に入ったか(コイン投げ)だけになります。だから、割付をもう一度シャッフルし直せば、帰無仮説のもとで観測されえた世界を何通りでも作れます。この「ありえた割付をすべて並べたときの統計量の分布」をランダム化分布と呼び、そこに実際の観測値を重ねて珍しさを測るのが並べ替え検定です。分布のモデル(正規性など)は一切要りません。
概念② Neymanの平均帰無仮説:平均でゼロ、答えは推定と区間
Neyman が見ていたのは、もっと実務的な量、平均処置効果でした。
$$
\tau = \frac{1}{N}\sum_{i=1}^{N}\bigl(Y_i(1)-Y_i(0)\bigr)
$$
Neymanの帰無は「$\tau=0$」、つまりならすとゼロです。これは鋭い帰無より弱い主張です。ある人には +5、別の人には −5 の効果があっても、平均すればゼロになりえます。だから欠測を全部は埋められず、Fisherのような正確な分布は作れません。
そこでNeymanは問いを変えます。「効果はあるか無いか」ではなく、「効果はどれくらいか、その推定はどれだけ揺れるか」。単純な平均差を推定量に使い、割付をやり直したら推定がどうばらつくか(反復サンプリング)から分散を出し、信頼区間を組み立てます。Day 4の「引き算」は、実はこのNeyman推定量そのものでした。
同じ「効果ゼロ」でも、2人は違うものを見ています。
| Fisher | Neyman | |
|---|---|---|
| 帰無仮説 | 鋭い(全員ゼロ $Y_i(0)=Y_i(1)$) | 平均(ならしてゼロ $\tau=0$) |
| 問い | 効果は「あるか無いか」 | 効果は「どれくらいか」 |
| 道具 | 割付の並べ替え(正確検定) | 不偏推定+反復サンプリング分散 |
| 答えの形 | p値 | 点推定+信頼区間 |
| 前提 | 分布モデル不要(ノンパラ) | 大標本の正規近似 |
手を動かす①:6人で並べ替え検定を手で回す
まず仕組みを丸ごと見るため、6人だけの小さな例で並べ替え検定を全列挙します。題材はImbens & Rubin 第5章のハチミツ実験の最初の6人(子どもの咳の頻度)です。先頭3人が処置群、残り3人が対照群です。
鋭い帰無のもとでは6人の値が固定されるので、偶然なのは「どの3人が処置群か」だけです。$\binom{6}{3}=20$ 通りをすべて並べ、観測した差 以上 になる割合を数えれば、それがp値です。
from itertools import combinations
import numpy as np
# Imbens & Rubin 表5.3:ハチミツ研究の最初の6人(咳の頻度)。先頭3人が処置。
y = np.array([3, 5, 0, 4, 0, 1])
obs_treated = (0, 1, 2)
def stat(treated):
t = y[list(treated)]
c = y[[i for i in range(6) if i not in treated]]
return abs(t.mean() - c.mean()) # |処置群平均 − 対照群平均|
T_obs = stat(obs_treated) # 観測した差
dist = [stat(tr) for tr in combinations(range(6), 3)] # ありえた20通り
n_ge = sum(s >= T_obs - 1e-9 for s in dist)
print("T_obs = %.2f" % T_obs)
print("20通り中 %d 通りが T_obs 以上 → p = %.2f" % (n_ge, n_ge / len(dist)))
T_obs = 1.00
20通り中 16 通りが T_obs 以上 → p = 0.80
6人だと、観測した差くらいは偶然でも100回中80回起きます(p=0.80)。効果があるとはとても言えません。並べ替え検定に難しい数式はなく、「ありえた割付を全部並べて、観測がどのへんに居るか数える」だけです。左の図は、その20通りの散らばりと観測値の位置です。
手を動かす②:本物のRCTデータでp値が「絵」になる
同じことを、Day 4のThornton HIV実験(2834人)でやります。ここでは全列挙が不可能です。可能な割付は $\binom{2834}{2211}$ 通りもあり、天文学的だからです。そこでRubin第5.8節どおり、割付をランダムに10000回シャッフルして帰無分布を近似します(モンテカルロ並べ替え)。
import numpy as np
from causaldata import thornton_hiv
d = thornton_hiv.load_pandas().data.dropna(subset=["any", "got"])
t = d[d["any"] == 1].got.values # 処置群のアウトカム(結果受領 0/1)
c = d[d["any"] == 0].got.values # 対照群のアウトカム
obs = t.mean() - c.mean() # 観測した平均差
pool = np.concatenate([t, c])
n_t = len(t)
rng = np.random.default_rng(5)
null = np.empty(10000)
for i in range(10000):
perm = rng.permutation(pool) # 割付ラベルをシャッフル
null[i] = perm[:n_t].mean() - perm[n_t:].mean() # 帰無のもとでの平均差
p_val = np.mean(np.abs(null) >= abs(obs))
print("観測差 = %.4f (%.1f pt)" % (obs, obs * 100))
print("並べ替え10000回でのp値 = %.4f" % p_val)
観測差 = 0.4506 (45.1 pt)
並べ替え10000回でのp値 = 0.0000
上の図の右パネルがその帰無分布です。割付をただ混ぜ直すと、平均差はゼロ付近に山を作り、およそ ±7pt に収まります。ところが実際の +45.1pt は、その山から遥か右に外れています。10000回シャッフルして一度も届きません。だから「これは偶然の産物ではない」と言えて、p < 0.0001 になります。6人では見えなかった効果が、2834人だと一目瞭然です。
手を動かす③:Neyman流で「どれくらいか」に答える
Fisherは「あるか無いか」に答えました。Neymanは同じデータに別の問いを向けます。「では効果は何ポイントで、その推定はどれだけ確かか」。使う推定量はDay 4の引き算と同じ、それに反復サンプリング分散から標準誤差と95%信頼区間を付けます。
import numpy as np
tau_hat = t.mean() - c.mean() # 不偏推定量=単純な平均差
se = np.sqrt(t.var(ddof=1) / len(t) + c.var(ddof=1) / len(c)) # Neymanの反復サンプリング標準誤差
lo, hi = tau_hat - 1.96 * se, tau_hat + 1.96 * se
print("平均処置効果の推定 = %.4f (%.1f pt)" % (tau_hat, tau_hat * 100))
print("標準誤差 = %.4f, 95%%CI = [%.1f, %.1f] pt" % (se, lo * 100, hi * 100))
平均処置効果の推定 = 0.4506 (45.1 pt)
標準誤差 = 0.0209, 95%CI = [41.0, 49.1] pt
Neymanの答えは、p値ではなく 「+45.1pt、幅は [41.0, 49.1]pt」 という数字です。次の図で2つの言語を並べます。左のFisherは帰無分布に照らして「効果はあるか」にYes/Noを返し、右のNeymanは「どれくらいか」を点推定と区間で返します。同じRCTデータでも、引き出す答えの形がまるで違います。
つまづき・誤解しやすい点
- 「鋭い帰無」と「平均帰無」は別物です。 Fisherの「全員ゼロ」を棄却できても「誰かに効果がある」までしか言えず、Neymanの「平均でゼロ」を棄却して初めて「ならして効果がある」と言えます。個体効果が +と− で打ち消し合う世界では、平均帰無は正しくても鋭い帰無は偽です。何を否定したのかを取り違えないようにします。
- 並べ替え検定は分布フリーですが、統計量は先に1つ決めます。 正規性やt分布を仮定せず、割付のシャッフルだけでp値が出るのが強みです。ただし妥当性は「検定統計量を事前に1つへコミットする」ことに依存します。平均差・順位・中央値をいくつも試して一番小さいp値を採るのは反則です(Rubin 第5.5.7節)。なお外れ値や歪んだ分布では、平均差より順位ベースの統計量のほうが検出力が落ちにくく、実務では頼れる既定値です(Rubin 第5.6節)。
- p値の小ささは効果の大きさではありません(Day 4の再確認)。 p < 0.0001 は「偶然では説明しにくい」であって、効果量ではありません。大きさは +45.1pt と信頼区間が語ります。ついでに、Neymanの分散推定は個体レベルの潜在的結果の相関を観測できないぶん、やや広め(保守的)に出る性質があります。区間は「狭すぎる」より「広すぎる」側に転びます。
実務での使いどころ(空間データ/天地人の文脈)
- 小さなパイロットでは、t検定より並べ替え検定が安全です。 自治体を数十件だけ無作為に選んで新機能を試すような場面では、標本が小さく正規近似が甘くなります。分布を仮定せず割付を混ぜ直すFisher流なら、小標本でも正確なp値が出せます。
- 歪んだアウトカムには順位ベースの並べ替えを使います。 漏水量や被害額はロングテールで、少数の巨大値が平均差を振り回します。順位に直してから並べ替えると、外れ値に振られずに効果を拾えます。
- 「あるか」と「どれくらいか」を分けて報告します。 意思決定者に効くのは、Fisherの「偶然ではない」だけでなく、Neymanの「+45ポイント、幅はこれくらい」まで揃えたときです。投資判断は大きさと不確実性で決まります。
- 干渉があると並べ替えの前提が崩れます。 近隣自治体へ効果が波及すると、「各ユニットを独立に混ぜてよい」という並べ替えの仮定(SUTVA)が壊れます。空間データではここが最大の落とし穴で、Day 28(空間×因果)でまとめて掘ります。
参考(本棚)
- Imbens & Rubin『Causal Inference for Statistics, Social, and Biomedical Sciences』第5章 Fisher正確p値・第6章 Neymanの反復サンプリング — 今日の下敷き
- 同 第5章 ハチミツ実験(Paul et al. 2007)の6ユニット例 — 手を動かす①のトイ例の出典
- 安井翔太『効果検証入門』 — RCTと推定の実務視点(Neyman推定量の使いどころ)
- データ出典:Thornton, R. (2008) "The Demand for, and Impact of, Learning HIV Status", American Economic Review.
causaldataパッケージthornton_hiv(MIT License)。取得日 2026-07-21。Day 4と同じデータを2つの流派で読み直しました。
次回予告(Day 6)
Day 4と5で「無作為割付なら引き算が因果になる」ことを、2つの流派で確かめました。でも現実に手元にあるデータは、たいてい割付がランダムではありません。誰が処置を受けるかが本人の意欲や環境で決まる観察データです。次回Day 6は、その割付メカニズムに踏み込みます。「どういう条件がそろえば、観察データでもRCTのように振る舞えるのか」。鍵になる**非交絡性(unconfoundedness)**を、次のテーマにします。

