0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

因果推論 Day 5/全30回 「効果がない」の2つの意味、Fisherの並べ替え検定とNeymanの反復サンプリング

0
Posted at

この連載について

因果推論を「本を読んだ」で終わらせず、自分の言葉で説明でき、コードで再現できる状態まで落とす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通りの散らばりと観測値の位置です。

fig1_permutation.png


手を動かす②:本物の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データでも、引き出す答えの形がまるで違います。

fig2_fisher_vs_neyman.png


つまづき・誤解しやすい点

  • 「鋭い帰無」と「平均帰無」は別物です。 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)**を、次のテーマにします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?