このページ内のセクションへ素早く飛べます:
🍰 まずはやさしく
間違いの割合をコントロールする道具です。
たくさん調べる時のミスを減らすために使います。
スマホのアプリを大量に試す時に便利です。
この章ではFDRの結論を短くまとめます。
🍰 まずはやさしく
たくさんのデータをまとめて調べる方法です。
現実的な正解を見つけるために使います。
都道府県ごとのデータを一気に比べる時に役立ちます。
このページではFDRの使い方を詳しく解説します。
FDR (False Discovery Rate, 偽発見率) は、 「複数の検定を実施したとき、 有意と判定された検定の中で偽陽性が占める割合の期待値」を制御する多重検定補正の枠組み。 Benjamini & Hochberg (1995) が提案した BH 法は、 現代統計のメガヒット論文(引用数 8 万超)となり、 ゲノミクス・脳イメージング・大規模 A/B テストでの標準補正法。 SSDSE-B-2026 の 47 都道府県 × 125 項目を一気に検定するような場面で、 「現実的な検出力」を残したまま偽陽性を制御する道具。
本ページは FDR (False Discovery Rate) を、 ジャストインタイム型データサイエンス教育の文脈で 12 セクションに分けて解説。 「💡 30 秒結論」→「🧮 実値計算」→「🐍 Python 実装」で 20 分で実用最低限まで届きます。
🍰 まずはやさしく
完璧主義ではなく現実的な考え方です。
見逃しを減らして効率よく発見するために使います。
犯人を逃さないために少々のミスを許す捜査に似ています。
ここではFDRの考え方を直感的に説明します。
FWER の世界観: 「1 件でも偽陽性を出してはならない」という厳格主義。 m=10,000 検定なら α=0.05/10000=5×10⁻⁶ という極めて厳しい閾値。 検出力ほぼゼロ。 FDR の世界観: 「100 件発見した中で偽陽性が 5 件以下なら良し」という現実主義。 同じ m=10,000 でも数百〜数千件の発見が可能。
たとえ話: 警察の捜査で「絶対に冤罪を出さない」(FWER 主義)なら、 多くの真犯人を取り逃す。 一方「逮捕者の 5% までは冤罪を許容、 その代わり多くの真犯人を捕まえる」(FDR 主義)なら、 検挙率は跳ね上がる。 大規模スクリーニング(数万遺伝子から数百の疾患関連を発見する等)では FDR 主義が現実的。
具体的な FWER vs FDR の比較(m=1000、 真の H₁ が 100 件):
| 補正法 | α_adj / 閾値 | 期待発見数 | 偽陽性割合 | 検出力 |
|---|---|---|---|---|
| 補正なし | 0.05 | ~125 件 | ~36% (偽陽性多) | 高 |
| Bonferroni (FWER) | 5×10⁻⁵ | ~30 件 | < 5% | 非常に低 |
| Holm (FWER) | 段階的 | ~32 件 | < 5% | 非常に低 |
| BH (FDR=0.05) | 段階的 | ~80 件 | ≤ 5% | 高 |
📌 FDR は「発見の中の偽陽性割合」を制御するため、 大規模検定で検出力を最大化できる。 m=10,000 規模では FWER 制御は実用不能で FDR が事実上の唯一解。
逆に小規模 (m ≤ 20) で「厳格に偽陽性を排除したい」場合は FWER (Holm) が適切。 FDR と FWER は競合ではなく、 目的が異なる補正法として理解すべし。
🍰 まずはやさしく
間違いが占める割合を数式にしたものです。
正しく判定できているかを計算するために使います。
テストの結果を分ける表を作る時に役立ちます。
ここではFDRの定義と計算方法を学びます。
$$ \text{FDR} = E\!\left[\frac{V}{R} \mid R > 0\right] \cdot P(R > 0) = E\!\left[\frac{V}{\max(R, 1)}\right] $$
V = 偽陽性数 (False Positives)、 R = 棄却された検定の総数 (Rejections)、 R=0 のときは V/R を 0 と定義。 FDR は 「棄却した検定の中で偽陽性が占める割合」の期待値。
| 棄却しない | 棄却する | 合計 | |
|---|---|---|---|
| 真の H₀ (差なし) | U (真陰性) | V (偽陽性) | m₀ |
| 真の H₁ (差あり) | T (偽陰性) | S (真陽性) | m₁ |
| 合計 | m - R | R = V + S | m |
FWER = P(V ≥ 1) (偽陽性が 1 件以上ある確率) / FDR = E[V/R] (棄却の中の偽陽性割合の期待値)。 R=V+S なので、 R が大きいほど V/R は小さくなりやすい。
手順は step-up procedure:
$$ k = \max\left\{ i : p_{(i)} \leq \frac{i \alpha}{m} \right\}, \quad \text{棄却} \Leftrightarrow p_{(i)} \leq \frac{k \alpha}{m} $$
$$ p_{(i)}^{BH} = \min_{j \geq i}\left( \frac{m}{j} p_{(j)} \right), \quad \text{ただし } \leq 1 \text{ にキャップ} $$
補正後 p 値 (BH-adjusted p / q 値) と元の α を比較。 順位 i の補正後 p 値は、 自身以降の最小値で単調性を保証。
$$ p_{(i)}^{BY} = \min_{j \geq i}\left( \frac{m \cdot c(m)}{j} p_{(j)} \right), \quad c(m) = \sum_{i=1}^{m} \frac{1}{i} \approx \ln(m) + 0.577 $$
BH は正依存性を仮定。 任意の依存性下でも FDR 制御を保証するのが BY 法。 ペナルティ係数 c(m) ≈ ln(m) で BH より保守的(m=1000 で約 7.5 倍厳しい)。
$$ q(p_i) = \min_{t \geq p_i} \frac{\hat{m}_0 \cdot t}{R(t)}, \quad \hat{m}_0 = \frac{\#\{p_j > \lambda\}}{1 - \lambda} $$
Storey の q 値は、 真の H₀ の数 m₀ を推定して使う positive FDR。 BH 法より検出力が高く、 ゲノミクスで広く利用。 R では qvalue パッケージ。
「FDR = E[V/R]」と「BH 閾値 i*α/m」の関係を言葉で確認します。
| 記号 | 意味と注意点 |
|---|---|
| $m$ | 同時に実施する検定の総数。 ファミリーサイズ。 |
| $m_0$ | 真の H₀ の数(観測不可)。 Storey の q 値ではこれを推定。 |
| $m_1$ | 真の H₁ の数 (= m - m₀)。 真に「差がある」検定の数。 |
| $V$ | 偽陽性数 (False Positives)。 真は H₀ なのに棄却したもの。 |
| $S$ | 真陽性数 (True Positives)。 正しく H₀ を棄却したもの。 |
| $R = V + S$ | 棄却された検定の総数 (Rejections)。 「発見」の総数。 |
| $p_{(i)}$ | 昇順に並べた p 値の i 番目。 $p_{(1)} \leq p_{(2)} \leq \cdots$ |
| $\alpha$ | 目標 FDR 水準。 通常 0.05 や 0.10。 |
| $i \alpha / m$ | BH 閾値。 順位 i に対し線形に変化する閾値。 |
直観: 「もし全 H₀ が真なら、 順位 i の p 値の期待値は i/m。 だから BH 閾値 iα/m を超えなければ偽陽性割合 ≤ α に保てる」。 これが BH 法の核心アイデア。
「Bonferroni 閾値 α/m」と「BH 閾値 iα/m」の本質的違い: Bonferroni は 全順位で同じ α/m(保守的)。 BH は 順位 i に応じて緩く(i=m なら α まで緩む)。 これが BH の高検出力の理由。
SSDSE-B-2026 を題材に、 47 都道府県それぞれの出生率(人口千対)を全国平均と比較する 1 標本 t 検定を実施。 補正前 / Bonferroni 補正後 / BH (FDR) 補正後を比較し、 「BH 法が手で計算可能なほど単純」であることを実演します。
📌 BH 法は「閾値が順位に応じて線形に伸びる」だけ。 Bonferroni と違い、 全閾値を一律 α/m=0.001 にしない。 順位 16 の閾値は 0.0170 まで緩む → 検出力大幅向上。
$$ \alpha_{\text{Bonf}} = \frac{0.05}{47} = 0.001064 \quad \text{(全順位で一律)} $$
$$ \alpha_{\text{BH}}^{(i)} = \frac{i \cdot 0.05}{47}, \quad i = 1, 2, \ldots, 47 $$
BH 閾値は順位 i が増えるほど緩くなる → 後ろの順位ほど緩い基準で判定。
| 補正方法 | 制御対象 | 閾値 | 有意な県数 | 特徴 |
|---|---|---|---|---|
| 補正なし | なし | 0.0500 | 21 / 47 | 偽陽性多発 |
| Bonferroni | FWER ≤ 0.05 | 0.00106 | 3 / 47 | 最も保守的 |
| Holm | FWER ≤ 0.05 | 段階的 | 3 / 47 | FWER 制御で高検出力 |
| BH (FDR) | FDR ≤ 0.05 | iα/m | 16 / 47 | 最も高検出力 |
| BY (FDR 任意依存) | FDR ≤ 0.05 | iα/(m·c(m)) | 3 / 47 | BH より保守的 |
BH 補正は 16 件 =「FDR ≤ 5%」を保証した発見。 つまり 16 件中 期待 1 件以下が偽陽性。 Holm 補正の 3 件は「FWER ≤ 5%」(1 件以上の偽陽性確率 ≤ 5%)を保証。 用途が異なる。
📌 SSDSE-B-2026 では BH (16 件) が Holm (3 件) より 13 件も多く発見。 効果量が中〜小の県が多いほど BH の検出力優位が顕著になる。 ゲノミクスのように効果量が小さい大規模検定では、 BH と FWER 法の差は 数百倍に達することがある。
m=5, α=0.05 の小さな例で、 BH 補正と Bonferroni 補正の差を「電卓だけで」再現します。
Step 1 — 元の p 値を昇順に並べる:
Step 2 — BH 閾値 iα/m を順位ごとに計算:
Step 3 — p(i) ≤ iα/m を満たす最大 i を探す:
Step 4 — 順位 1〜4 を「FDR ≤ 5% で有意」と判定。 Bonferroni 閾値は 0.05/5=0.010 一律で順位 1 だけ → BH は 4 件、 Bonferroni は 1 件発見。
Step 5 — Python (statsmodels) で同じ判定を再現:
1 2 3 4 5 6 | import numpy as np from statsmodels.stats.multitest import multipletests p = np.array([0.001,0.008,0.012,0.035,0.420]) rej_bh, _, _, _ = multipletests(p, alpha=0.05, method='fdr_bh') rej_bn, _, _, _ = multipletests(p, alpha=0.05, method='bonferroni') print(f"BH 棄却: {rej_bh.sum()} 件 / Bonferroni 棄却: {rej_bn.sum()} 件") |
💬 手計算 (Step 3〜4) と Python 出力が完全一致。 BH の検出力は Bonferroni の 4 倍。 同じデータでも「FDR ≤ 5% を保証するか / FWER ≤ 5% を保証するか」で発見数が大きく変わることが、 5 個の p 値だけでも体感できる。
FDR (BH 法) の標準ライブラリは statsmodels.stats.multitest.multipletests(method='fdr_bh')。 method 引数で 'fdr_bh' (BH)、 'fdr_by' (BY)、 'fdr_tsbh' (two-stage BH) を切り替え可能。 R では p.adjust(p, method='BH') や qvalue パッケージ。
🎯 このコードでやること: SSDSE-B-2026 から県別出生率を計算し、 47 県それぞれについて「全国平均と差がない」という H₀ を 1 標本 t 検定。 得られた 47 個の p 値に対し BH 補正 (FDR=0.05) を適用し、 「FDR ≤ 5% を保証した発見」の県数を求める。 Bonferroni と比較。
📥 入力データ: SSDSE-B-2026 の 47 県 × 12 年(2012-2023)× A1101 総人口、 A4101 出生数。 各県の年次出生率(人口千対)を 12 年分使って 1 標本 t 検定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import pandas as pd import numpy as np from scipy import stats from statsmodels.stats.multitest import multipletests df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 # 出生率(人口千対) nation_mean = df['birth_rate'].mean() # 全国年次平均 # 各県について 12 年分のデータで 1 標本 t 検定 p_values = [] prefs = [] for pref, g in df.groupby('Prefecture'): t, p = stats.ttest_1samp(g['birth_rate'], nation_mean) p_values.append(p) prefs.append(pref) p_values = np.array(p_values) print(f'検定数 m = {len(p_values)}') print(f'補正前: 有意な県数 = {(p_values < 0.05).sum()}') # BH 補正 (FDR ≤ 0.05) reject_bh, p_bh, _, _ = multipletests(p_values, alpha=0.05, method='fdr_bh') print(f'BH 補正後 有意県数 = {reject_bh.sum()}') # 比較: Bonferroni (FWER ≤ 0.05) reject_bf, p_bf, _, _ = multipletests(p_values, alpha=0.05, method='bonferroni') print(f'Bonferroni 補正後 有意県数 = {reject_bf.sum()}') # 結果データフレームでまとめ表示 results = pd.DataFrame({ 'pref': prefs, 'p_raw': p_values, 'p_bh': p_bh, 'reject_bh': reject_bh, 'p_bf': p_bf, 'reject_bf': reject_bf }).sort_values('p_raw').head(8) print(results.to_string(index=False)) |
📤 実行結果:
💬 結果の読み方: 補正前 21 県 → BH 16 県 (FDR ≤ 5% 保証) → Bonferroni 3 県 (FWER ≤ 5% 保証)。 BH 補正は Bonferroni より 13 県多く発見。 ただし「BH の 16 県中 期待 1 件未満が偽陽性」、 「Bonferroni の 3 件は偽陽性確率 ≤ 5%」 — 制御目標が違う。 沖縄県の p_adj=1.28×10⁻⁵ という極小値は「偶然ではなく本物の差」と確信できる根拠。
🎯 このコードでやること: 47 県の p 値を昇順に並べ、 横軸=順位 i、 縦軸=p 値でプロット。 同時に Bonferroni 閾値 (横線 α/m) と BH 閾値 (斜線 iα/m) を重ね、 「BH は順位が大きくなるほど閾値が緩む」ことを視覚化。
📥 入力データ: SSDSE-B-2026 から計算した 47 県の p 値配列。 既に①で計算済みの p_values を再利用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import numpy as np import matplotlib.pyplot as plt import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 nation_mean = df['birth_rate'].mean() p_values = np.array([stats.ttest_1samp(g['birth_rate'], nation_mean)[1] for _, g in df.groupby('Prefecture')]) p_sorted = np.sort(p_values) m = len(p_sorted) alpha = 0.05 # BH 閾値 (順位 i に対し i*α/m) bh_threshold = np.arange(1, m+1) * alpha / m bonf_threshold = alpha / m # プロット plt.figure(figsize=(11, 6)) plt.plot(range(1, m+1), p_sorted, 'go-', label='SSDSE 47 県 p 値(昇順)', markersize=5) plt.plot(range(1, m+1), bh_threshold, 'b-', label=f'BH 閾値 iα/m (α={alpha})', linewidth=2) plt.axhline(bonf_threshold, color='red', linestyle='--', label=f'Bonferroni 閾値 α/m={bonf_threshold:.5f}') plt.axhline(alpha, color='gray', linestyle=':', label=f'補正なし α={alpha}') # 棄却点を強調 k_max = max([i for i in range(1, m+1) if p_sorted[i-1] <= i*alpha/m]) plt.axvline(k_max, color='orange', linestyle=':', alpha=0.5, label=f'BH 棄却境界 k={k_max}') plt.yscale('log') plt.xlabel('順位 i (昇順 p 値)') plt.ylabel('p 値(対数スケール)') plt.title('BH 法の閾値カーブ — SSDSE 47 県出生率') plt.legend(loc='lower right') plt.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('bh_threshold_curve.png', dpi=120) print(f'BH 法による棄却数: k = {k_max}') print(f'Bonferroni 棄却数: {(p_values < bonf_threshold).sum()}') |
📤 実行結果:
💬 結果の読み方: 青の BH 閾値は左下から右上に伸びる斜線、 赤の Bonferroni 閾値は水平。 順位 i の p 値が青線より下にあれば棄却。 BH は順位が大きい (相対的に大きい p 値の) ところで閾値が緩むため、 Bonferroni では棄却できない 13 県(順位 4〜16)も BH では棄却される。 これが BH の高検出力の視覚的説明。
🎯 このコードでやること: BH 法のアルゴリズムを numpy だけで実装し、 statsmodels の結果と一致することを確認。 「BH 法は内部で何をしているのか」を完全に理解できる。
📥 入力データ: SSDSE-B-2026 から計算した 47 県の p 値配列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import numpy as np import pandas as pd from scipy import stats from statsmodels.stats.multitest import multipletests df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 nation_mean = df['birth_rate'].mean() p_values = np.array([stats.ttest_1samp(g['birth_rate'], nation_mean)[1] for _, g in df.groupby('Prefecture')]) def bh_manual(p, alpha=0.05): """Benjamini-Hochberg 法を手で実装""" m = len(p) order = np.argsort(p) # 昇順インデックス p_sorted = p[order] # 各順位 i (1-indexed) で BH 閾値 = i*α/m bh_thresh = np.arange(1, m+1) * alpha / m # p_(i) <= i*α/m を満たす最大の i を探す below = p_sorted <= bh_thresh if below.any(): k = np.max(np.where(below)[0]) + 1 # 1-indexed else: k = 0 # 順位 1〜k を棄却 reject_sorted = np.zeros(m, dtype=bool) reject_sorted[:k] = True # 補正後 p 値: min_{j>=i} (m/j * p_(j)) p_adj_sorted = np.minimum.accumulate( (m / np.arange(1, m+1) * p_sorted)[::-1])[::-1] p_adj_sorted = np.minimum(p_adj_sorted, 1.0) # 元の順序に戻す reject = np.zeros(m, dtype=bool) p_adj = np.zeros(m) reject[order] = reject_sorted p_adj[order] = p_adj_sorted return reject, p_adj # 手実装 BH reject_man, padj_man = bh_manual(p_values, alpha=0.05) print(f'手実装 BH: 棄却数 = {reject_man.sum()}, 最小 p_adj = {padj_man.min():.4e}') # statsmodels と比較 reject_lib, padj_lib, _, _ = multipletests(p_values, alpha=0.05, method='fdr_bh') print(f'statsmodels: 棄却数 = {reject_lib.sum()}, 最小 p_adj = {padj_lib.min():.4e}') print(f'結果一致: reject={np.array_equal(reject_man, reject_lib)}, ' f'p_adj 最大差={np.abs(padj_man - padj_lib).max():.2e}') |
📤 実行結果:
💬 結果の読み方: 手実装と statsmodels の結果が完全一致 → BH 法のアルゴリズム理解が正しい。 BH 法は「ソート → BH 閾値で比較 → 最大 k を発見 → 棄却」の 4 ステップだけ。 ライブラリ任せにせず内部を理解することが重要。 補正後 p 値の min_{j>=i} の単調化トリックも要点(BH 補正後 p の単調性を保証)。
🎯 このコードでやること: SSDSE データに加え、 既知の m₀=900 (真の H₀) / m₁=100 (真の H₁) のシミュレーションで BH 法を多数回適用し、 実測 FDR が目標 0.05 を実際に下回るか検証。 検出力も併せて確認。
📥 入力データ: SSDSE-B-2026 を真の H₀ シナリオの分散構造のリファレンスとして使用。 検定統計量は SSDSE の標準偏差を参考にした正規分布から生成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import numpy as np import pandas as pd from scipy import stats from statsmodels.stats.multitest import multipletests # SSDSE で SD を取得(実データの分散構造を参考に) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 sd_ref = df['birth_rate'].std() print(f'SSDSE 出生率 SD (参考) = {sd_ref:.3f}') # シミュレーションパラメータ m, m1 = 1000, 100 # 全体検定数、 真の H1 数 m0 = m - m1 d = 0.5 # 効果量 n_sim = 200 rng = np.random.default_rng(0) # 種を固定して毎回同じ結果にする fdr_observed, power_observed, fwer_observed = [], [], [] for sim in range(n_sim): # 1 本ずつ for で回すと 1000 回 × 200 周で非常に遅い。 # 行方向にまとめて t 検定すると同じ結果が一瞬で出る。 p_h0 = stats.ttest_ind(rng.normal(0, 1, (m0, 30)), rng.normal(0, 1, (m0, 30)), axis=1)[1] p_h1 = stats.ttest_ind(rng.normal(0, 1, (m1, 30)), rng.normal(d, 1, (m1, 30)), axis=1)[1] p_all = np.concatenate([p_h0, p_h1]) truth = np.concatenate([np.zeros(m0), np.ones(m1)]) # BH 補正 reject, _, _, _ = multipletests(p_all, alpha=0.05, method='fdr_bh') V = ((reject) & (truth == 0)).sum() S = ((reject) & (truth == 1)).sum() R = reject.sum() fdr_observed.append(V / max(R, 1)) power_observed.append(S / m1) fwer_observed.append(1 if V >= 1 else 0) print(f'BH 法 (FDR=0.05) の実測:') print(f' 実測 FDR = {np.mean(fdr_observed):.4f} (目標 ≤ 0.05)') print(f' 実測 検出力 = {np.mean(power_observed):.4f}') print(f' 実測 FWER = {np.mean(fwer_observed):.4f}') print(f' 検出力 / Bonferroni 比 = ', end='') # Bonferroni 検出力(同じシミュ条件で) b_power = (p_h1 < 0.05 / m).sum() / m1 # 最後の 1 周ぶんの概算 print(f'~ {np.mean(power_observed) / (b_power + 1e-9):.1f}x') |
📤 実行結果:
💬 結果の読み方: ① BH の実測 FDR=4.12% で目標 5% を下回る ✓。 ② 検出力は 2.98% と低いが、これは 1000 件も検定すると、効果量 d=0.5・n=30 では 1 件あたりの証拠が弱すぎるため。 それでも Bonferroni の約 3.0 倍は拾える。 ③ FWER は 18.0% と高い(BH は FWER を制御しないため当然)。 教訓: 「偽陽性を 1 件も出したくない」なら BH 不可、 「発見の中の偽陽性割合を抑えたい」なら BH 最適。 ゲノミクスのようなスクリーニングでは検出力 3-5 倍の差は致命的。
※ より高度な例(Storey q-value、 Knockoff filter、 階層 FDR)は 多重検定ページと hypothesis-testing 教材を参照。
qvalue::qvalue()、 Python は statsmodels.stats.multitest.fdrcorrection_twostage。1990 年代初頭、 ゲノム科学の発展で「数万遺伝子の発現を一度に検定する」需要が爆発的に増加。 既存の FWER 制御 (Bonferroni / Holm) では検出力がほぼゼロになり、 実用不能。 Yoav Benjamini と Yosef Hochberg は 1995 年 JRSS-Bで「Controlling the False Discovery Rate」を発表。 「全偽陽性率を制御する」のではなく「発見された結果の中の偽陽性割合を制御する」という発想転換が革命的だった。
この論文は当初なかなか受け入れられず(5 年間引用 50 以下)、 統計学界の主流は FWER 制御。 だが 2000 年代の DNA マイクロアレイ・GWAS ブームで「FDR でないと話にならない」状況が生まれ、 引用数が爆発。 現在は 引用数 8 万超、 統計学のメガヒット論文に。 2007 年 Benjamini はイスラエル科学賞を受賞。
| 領域 | データサイエンスが使われる場面 |
|---|---|
| 大学・大学院教育 | 統計学・バイオインフォマティクス・心理統計の必修トピック |
| 医療・ゲノミクス | GWAS、 トランスクリプトーム解析、 メタゲノミクス、 メチル化解析 |
| 創薬・医薬品開発 | 候補化合物スクリーニング、 サブグループ解析、 副作用検出 |
| マーケティング | 多次元 A/B テスト、 顧客セグメント分析、 推薦システム評価 |
| 公的統計の解析 | 47 都道府県 × 125 項目の SSDSE 全数解析、 EBPM での効果検証 |
| 機械学習 | 特徴量選択、 異常検知、 グラフィカルモデル構造学習 |
multipletests(method='fdr_bh') が返す pvals_corrected は BH 補正後 p 値 = q 値。 ただし「Storey の q 値」は m₀ 推定を組み込んだ精緻版で、 BH 補正後 p より僅かに小さい(検出力高い)。 qvalue パッケージ (R)、 fdrcorrection_twostage (Python) で計算。10 検定の極小例で BH 法を手作業で実行。 数式を覚えるより、 1 度自分で動かす方が確実に理解できる。
p = [0.001, 0.008, 0.039, 0.041, 0.042, 0.060, 0.074, 0.205, 0.212, 0.501] (昇順)
α=0.05、 m=10 → BH 閾値 iα/m = 0.005, 0.010, 0.015, 0.020, 0.025, 0.030, 0.035, 0.040, 0.045, 0.050
| i | p_(i) | iα/m | p_(i) ≤ iα/m? | BH 補正 p_adj | 棄却? |
|---|---|---|---|---|---|
| 1 | 0.001 | 0.005 | ✓ | 0.010 | 棄却 |
| 2 | 0.008 | 0.010 | ✓ | 0.040 | 棄却 |
| 3 | 0.039 | 0.015 | × | 0.084 | 棄却(k=5) |
| 4 | 0.041 | 0.020 | × | 0.084 | 棄却(k=5) |
| 5 | 0.042 | 0.025 | × | 0.084 | 棄却(k=5) |
| 6 | 0.060 | 0.030 | × | 0.100 | 不棄却 |
| 7 | 0.074 | 0.035 | × | 0.106 | 不棄却 |
| 8 | 0.205 | 0.040 | × | 0.265 | 不棄却 |
| 9 | 0.212 | 0.045 | × | 0.265 | 不棄却 |
| 10 | 0.501 | 0.050 | × | 0.501 | 不棄却 |
📌 BH の段階法: 順位 1, 2 は p ≤ iα/m を満たすが、 順位 3-5 は満たさない。 ところが「順位 5 まで含めて棄却」する → なぜ? BH 法は「条件を満たす最大の k」を探し、 そこまで全部棄却する。 ここでは順位 1, 2 が条件を満たすため k=2 ではなく、 「最大の k」を探す必要あり。 …
…実は上記の表では順位 1, 2 のみが条件を満たし、 k=2。 「順位 3-5 棄却」は誤り — 訂正: k=2 で棄却は順位 1, 2 のみ。 BH 補正後 p_adj 列は単調化処理後の値(順位 3-5 は p_adj=0.084 だが順位 1 の p_adj=0.010 から派生する最小値)。
$p_{(i)}^{BH} = \min_{j \geq i}\left(\frac{m}{j} p_{(j)}\right)$ で「自身以降の最小値」を取る。 これにより p_adj が単調非減少になる。
例: 順位 3 の p=0.039 → 10/3*0.039=0.130。 順位 4=10/4*0.041=0.1025。 順位 5=10/5*0.042=0.084。 順位 3 以降の最小値は 0.084 → 単調化された p_adj=0.084。 p_adj < α=0.05 を満たすかで棄却判定(順位 1, 2 のみ)。
| 手法 | 提案年 | 仮定 | 特徴 |
|---|---|---|---|
| BH (1995) | Benjamini & Hochberg, JRSS-B | 独立検定 / PRDS (正依存) | 標準的 FDR 制御。 シンプル。 statsmodels の fdr_bh |
| BY (2001) | Benjamini & Yekutieli, Annals of Stat | 任意の依存性 | BH より保守的(c(m)≈ln(m) ペナルティ)。 安全だが検出力低 |
| Storey q (2002) | Storey, JRSS-B | 独立検定、 m₀/m を推定 | BH より高検出力。 m₀ 推定で adaptive。 R の qvalue |
| two-stage BH | Benjamini, Krieger & Yekutieli (2006) | 独立 / PRDS | m₀ を 2 段で推定 → BH より強力。 fdr_tsbh |
| Local FDR | Efron (2007) | 経験ベイズ | 各検定の事後 H₀ 確率を推定。 ベイズ的解釈 |
| Knockoff | Barber & Candes (2015) | 線形回帰モデル | 高次元回帰での FDR 制御。 偽特徴量との比較 |
🎯 このコードでやること: m=1000 検定で真の H₀=900、 真の H₁=100、 効果量 d=0.5。 200 回シミュレーションし BH (FDR) と Bonferroni / Holm (FWER) の実測 FDR・FWER・検出力を比較。 SSDSE-B-2026 を分散構造の参考に使用。
📥 入力データ: SSDSE-B-2026 の出生率 SD を分散構造リファレンスとして使用。 シミュレーションパラメータ(m=1000, m₁=100, d=0.5, n=30)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import numpy as np import pandas as pd from scipy import stats from statsmodels.stats.multitest import multipletests # SSDSE で 分散参考値を取得 df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 sd_ref = df['birth_rate'].std() m, m1, d, n = 1000, 100, 0.5, 30 m0 = m - m1 n_sim = 200 rng = np.random.default_rng(1) # 種を固定して毎回同じ結果にする print(f'SSDSE-B-2026 出生率 SD (参考): {sd_ref:.3f}') print(f'シミュ設定: m={m}, m1={m1}, d={d}, n={n}, sims={n_sim}\n') results = {'method': [], 'FWER': [], 'FDR': [], 'Power': [], 'Discoveries': []} for method in ['bonferroni', 'holm', 'fdr_bh', 'fdr_by']: fwer_arr, fdr_arr, power_arr, R_arr = [], [], [], [] for _ in range(n_sim): # 検定はまとめて計算する(1 本ずつ回すと 80 万回の t 検定になる) p_h0 = stats.ttest_ind(rng.normal(0, 1, (m0, n)), rng.normal(0, 1, (m0, n)), axis=1)[1] p_h1 = stats.ttest_ind(rng.normal(0, 1, (m1, n)), rng.normal(d, 1, (m1, n)), axis=1)[1] p_all = np.concatenate([p_h0, p_h1]) truth = np.concatenate([np.zeros(m0), np.ones(m1)]) reject, _, _, _ = multipletests(p_all, alpha=0.05, method=method) V = ((reject) & (truth == 0)).sum() S = ((reject) & (truth == 1)).sum() R = reject.sum() fwer_arr.append(1 if V >= 1 else 0) fdr_arr.append(V / max(R, 1)) power_arr.append(S / m1) R_arr.append(R) results['method'].append(method) results['FWER'].append(round(np.mean(fwer_arr), 4)) results['FDR'].append(round(np.mean(fdr_arr), 4)) results['Power'].append(round(np.mean(power_arr), 4)) results['Discoveries'].append(round(np.mean(R_arr), 2)) print(pd.DataFrame(results).to_string(index=False)) |
📤 実行結果:
💬 結果の読み方: ① Bonferroni / Holm の FWER ≤ 5% ✓、 BY も FDR < 5% ✓。 BH の実測 FDR は 5.6% とわずかに 5% を超えているが、これは 200 回のシミュレーションのばらつきの範囲(回数を増やすと 5% 以下に収まる)。 ② 検出力: BH (3.35%) > Holm (1.30%) > Bonferroni (1.14%) > BY (0.44%)。 BH は Bonferroni の約 3 倍の検出力。 ③ 平均発見数: BH 3.6 件、 Bonferroni 1.2 件。 教訓: 大規模検定で「発見数最大化」を目指すなら BH。 ただし BH は FWER=23.5% で「1 件以上の偽陽性」が起きやすい点に注意。
BH 法が FDR ≤ α を保証する直感的説明。 厳密な証明は Benjamini & Hochberg (1995)、 Benjamini & Yekutieli (2001)。
真の H₀ が m₀ 個あるとき、 これらの p 値は H₀ 下で一様分布 U(0,1)。 そのうち m₀ × t 個が p < t を満たすことが期待される(一様分布の定義)。
BH 法で R 件棄却した場合、 偽陽性数 V の期待値は:
$$ E[V] \leq m_0 \times \frac{R \alpha}{m} $$
なぜなら、 BH 法の閾値 Rα/m を超えない H₀ の p 値の期待数は m₀ × (Rα/m)。 したがって FDR:
$$ \text{FDR} = E\!\left[\frac{V}{R}\right] \leq \frac{m_0}{m} \alpha \leq \alpha $$
最後の不等式は m₀ ≤ m から成立。 これが BH 法の核心。 m₀ < m なら FDR は α より厳しく抑えられる(過剰補正) → Storey の q 値で m₀ を推定して緩める動機。
BH 法は厳密には「独立」または「PRDS」条件下で FDR 制御を保証。 PRDS は「真の H₀ の p 値と他の p 値が正に依存する」緩い条件で、 多くの実用ケースで成立:
PRDS が成立しない一般依存性下では BY 法を使う。 ペナルティ係数:
$$ c(m) = \sum_{i=1}^{m} \frac{1}{i} = H_m \approx \ln(m) + \gamma, \quad \gamma \approx 0.5772 $$
| m | c(m) | BY 閾値(BH の何倍厳しい) |
|---|---|---|
| 10 | 2.93 | 3 倍厳しい |
| 100 | 5.19 | 5 倍厳しい |
| 1,000 | 7.49 | 7.5 倍厳しい |
| 10,000 | 9.79 | 10 倍厳しい |
| 100,000 | 12.09 | 12 倍厳しい |
大規模検定で BY を使うと検出力が大幅に下がる。 そのため、 PRDS 条件を満たすことを確認できれば BH のほうが実用的。
数百万 SNP(一塩基多型)と疾患の関連性を検定。 標準的な GWAS 有意閾値は p < 5×10⁻⁸(500 万独立 SNP に対する Bonferroni 閾値の経験的近似)。 さらに探索的フェーズでは BH 補正の q < 0.05 で サジェスティブな SNPを抽出し、 複製コホートで確認する 2 段階デザイン。
2 条件(例: 正常 vs 病態)で 2-3 万遺伝子の発現量を比較。 各遺伝子に Wald 検定 / 尤度比検定 → BH 補正 (q < 0.05)。 DESeq2、 edgeR、 limma が標準ツール。 fold change 閾値 (|log2FC| > 1) と組み合わせて多重スクリーニング。
脳全体を 2-3mm 立方ボクセルに分割(10-20 万ボクセル)し、 各ボクセルで条件間の血流変化を t 検定。 隣接ボクセルが強相関するため、 単純な BH ではなく Cluster-based FDR や FDR-corrected p-map を使用。 SPM、 FSL、 AFNI が標準。
Web サービスで「10 バリアント × 5 KPI × 100 セグメント」のような多次元検定 (m=5,000)。 補正なしでは「サジェスティブな勝者」が多発。 FDR 補正で「真に効果があった組み合わせ」に絞る。 Microsoft の ExP、 Booking.com、 Amazon が実装。
医薬品の副作用候補 1,000+ 種類を各群で比較。 各副作用を Fisher の正確検定 → BH 補正で「シグナルあり」を抽出。 PMDA / FDA の市販後安全性監視 (PMS) で適用。 シグナル検出は探索的なので FDR が適切。
N 人のユーザー間の「友達関係」が独立か(ランダム)の検定を全ペア (NC2 通り) で実施。 N=1,000 なら 50 万検定 → BH 補正で「真に関連の強いペア」を抽出。 コミュニティ検出の前処理として使用。
学力テスト(数学、 国語、 英語、 理科、 社会、 etc.) × 介入グループ × 学年で 50-100 検定。 主要評価項目を 1-2 個に絞り Holm、 副次的・探索的アウトカムは BH。 階層的検定戦略との組み合わせ。
QTL マッピング(量的形質遺伝子座)で数百〜数千の遺伝マーカーを検定。 BH 補正で「真の QTL」を発見。 ブリーディング(品種改良)の対象選定に使用。
タイトル: "Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing"。 Journal of the Royal Statistical Society, Series B, Vol. 57, No. 1, pp. 289-300. 当初 5 年は引用 50 未満で「無名」だったが、 2000 年代のゲノミクスブームで爆発的に引用増加。 2024 年時点で 引用数 8 万超、 統計学の最重要論文の 1 つ。
| 年 | 著者 | 貢献 |
|---|---|---|
| 1979 | Holm | Holm-Bonferroni 法(FWER 制御の段階法) |
| 1995 | Benjamini & Hochberg | BH 法、 FDR 概念の提案 |
| 2001 | Benjamini & Yekutieli | BY 法、 任意依存性下 FDR 制御 |
| 2002 | Storey | q 値、 positive FDR、 m₀ 推定 |
| 2004 | Storey & Tibshirani | ゲノム解析での q 値の実用 |
| 2006 | Benjamini, Krieger & Yekutieli | Two-stage BH 法(adaptive) |
| 2007 | Efron | Local FDR、 経験ベイズ的解釈 |
| 2007 | Benjamini | イスラエル科学賞受賞(FDR 業績) |
| 2008 | Sun & Cai | 最適 FDR 制御(Compound Decision) |
| 2010 | Efron 著書 | Large-Scale Inference(FDR の体系化) |
| 2015 | Barber & Candes | Knockoff Filter(線形回帰での FDR) |
| 2018 | Yekutieli | 階層 FDR(樹構造をもつ検定) |
| 2021 | Vovk & Wang | e-value、 anytime-valid FDR |
| 2023 | 最新研究 | 機械学習駆動の FDR、 Conformal Prediction との統合 |
| 用語 | 正しい意味 | よくある誤解 |
|---|---|---|
| FDR | 棄却された中の偽陽性割合の期待値 E[V/R] | 「全検定の偽陽性率」と混同 |
| FWER | 少なくとも 1 件の偽陽性が出る確率 | FDR と同義に扱う |
| q 値 | BH 補正後 p 値 = その検定を棄却するときの予想 FDR | 単なる p 値の補正と誤認 |
| BH 法 | Benjamini-Hochberg、 step-up procedure | step-down と混同 |
| step-up | 最大 p から順に判定 (BH は逆向きに最大 k を探す) | step-down と同義 |
| Local FDR | 各検定の事後 H₀ 確率 (Efron 2007) | 通常 FDR と同義 |
| positive FDR (pFDR) | R>0 の条件付き FDR = E[V/R | R>0] | 通常 FDR と差を見落とす |
| PRDS | Positive Regression Dependency on a Subset | 単に「正相関」と理解 |
| m₀ | 真の H₀ の数(観測不可、 推定対象) | m と混同 |
| two-stage BH | m₀ を 1 段目で推定 → 2 段目で BH (adaptive) | 単純 BH と同義 |
FDR (False Discovery Rate, 偽発見率) は多重検定における誤判定制御の枠組み。 古典的な FWER (Family-Wise Error Rate) よりも緩いが検出力が高い制御方法で、 ゲノミクス・心理学・経済学など「数百〜数万の検定を同時に行う」分野で必須となる。 SSDSE-B-2026 (47 県) では 47 個の t 検定をかける際に α=0.05 で誤発見が累積する問題を BH 法で制御する。
【多重検定の誤り制御 2 大方針】
多重検定 (m 個の仮説)
│
┌───────────────┴───────────────┐
▼ ▼
FWER 制御 FDR 制御 ★ 本ページ
(少なくとも 1 つの誤りを抑える) (誤り率の期待値を抑える)
│ │
┌────────────┼────────────┐ ┌──┴──┐
▼ ▼ ▼ ▼ ▼
Bonferroni Holm Šidák BH 法 BY 法
α/m 段階的 1-(1-α)^m 独立性 依存性
(保守的) (改良) (中庸) 前提 対応
【FDR の定義式】
FDR = E[V/R | R>0] × Pr(R>0)
V = 偽発見数 (棄却したが真は H₀)
R = 総棄却数
【BH 法 (Benjamini-Hochberg) アルゴリズム】
1. m 個の p 値を昇順ソート: p_(1) ≤ p_(2) ≤ ... ≤ p_(m)
2. p_(i) ≤ (i/m) × α を満たす最大の i を k とする
3. H_(1), ..., H_(k) を棄却
4. これで FDR ≤ α が保証 (独立 or 正依存の場合)
【上位概念ツリー】
仮説検定 (Hypothesis Testing)
├─ 単独検定
│ ├─ t 検定 / F 検定 / カイ二乗
│ └─ 有意水準 α (Type I Error)
└─ 多重検定 (Multiple Testing)
├─ FWER 制御
│ ├─ Bonferroni ─ α/m で各検定
│ ├─ Holm-Bonferroni ─ 段階的に緩める
│ └─ Šidák ─ 独立性を仮定
└─ FDR 制御 ★ 本ページ
├─ BH 法 (Benjamini-Hochberg) ─ 標準
├─ BY 法 (Benjamini-Yekutieli) ─ 依存性対応
├─ Storey q-value ─ 適応的
└─ Local FDR ─ ベイズ的解釈
【適用ドメイン】
ゲノミクス ─ 数万遺伝子発現の差分検定 (BH 標準)
脳画像 (fMRI) ─ 数万ボクセル比較 (BH or random field theory)
A/B テスト群 ─ 同時複数指標 (CTR/CVR/離脱率) の評価
経済学多重比較 ─ クロスセクション分析の頑健性
要点: FDR は「誤りを許容する代わりに検出力を上げる」設計思想。 Bonferroni では検出力が極端に下がる m 数百〜数万のケースで威力を発揮する。 ただし因果検証や医療判断のように 1 件の誤りが致命的な場面では FWER 制御を優先する。
multipletests(method='fdr_bh') で実行multipletests(method='fdr_bh') 関数を用いた。」
研究者が「BH 補正後 q < 0.05」と報告し、 「だから誤って報告する可能性は 5% 以下」と主張。 正しくは「棄却した中の偽陽性割合が 5% 以下」。 個別の発見は 5% の確率で偽陽性。 これは「全体保証」と「個別保証」の混同。 教訓: FDR 制御済みでも個別発見は再現実験が必要。
fMRI で BH 補正後 100 ボクセル有意と報告。 「広範な脳活動」と解釈。 だがこれは FDR=0.05 で偽陽性 5 ボクセル混在を意味する。 隣接ボクセルが強相関なら BH は FDR を制御できないリスク → Cluster-based FDR や置換検定の検討が必要。
新薬の臨床試験で主要評価項目(OS、 PFS、 ORR)の検定に BH 補正を適用。 FDA 査読で却下 → 主要評価項目は FWER 制御 (Bonferroni or Holm) が必須。 FDR は探索的解析にのみ許容される。 教訓: 確証的 vs 探索的の区別を明確に。
GWAS 結果を BH 補正のみで報告。 「100 SNP が q < 0.05」と発表。 だが SNP は連鎖不平衡 (LD) で強相関するため、 BH の FDR 制御が保証されない可能性。 標準は ゲノムワイド有意 (p < 5×10⁻⁸) + 複製コホートの 2 段階。 BH は exploratory phase に限定。
RNA-seq で「差次的発現遺伝子」を BH 補正で発見 (n=300) → さらにこれらで GO 解析(n=500 経路の検定)。 GO 解析でも BH 補正が必要だが、 忘れて補正なし発表。 結果、 偽 GO 富化が混入。 教訓: 多段階解析では各段階で補正必須。
FDR で発見数が少なかったので「もっと厳しい FWER 制御に変更」と判断 → 逆効果。 FWER は FDR より厳しい補正なので、 発見数はさらに減る。 教訓: BH で発見数が少ないなら、 効果量や検出力の問題(n 不足)、 真の m₁ が少ない可能性を疑う。 補正法の変更は誤った解決策。
10,000 検定を実施し、 上位 100 件を「興味あり」と選び、 これらだけに BH 補正適用。 これは selection bias。 補正は 全検定対象に適用すべし。 教訓: 補正対象は事前に決定、 事後選択は不正。
SSDSE-B-2026 の各項目について「県別に全国平均と差があるか」を 1 標本 t 検定。 m=5,875 で補正なしでは膨大な偽陽性。 BH 補正 (FDR=0.05) で「真に全国平均と異なる項目×県」を抽出。 各県の「特徴的な指標プロファイル」が見える分析。
125 × 124 / 2 = 7,750 ペアの相関係数を一括検定。 Spearman/Pearson の検定で p 値を取得 → BH 補正。 「真に意味のある相関」を抽出して因子分析や PCA の前処理に活用。 補正なしだと 380 件以上が偶然有意 → BH 補正で適切に絞る。
47C2 = 1,081 ペアで出生率を Welch t 検定。 Bonferroni α=4.6×10⁻⁵ は厳しすぎ → BH 補正で実用的な検出力を確保。 「真に差のある県ペア」のネットワーク構造が見える。
2014-2023 の 10 年 × 47 県 = 470 検定で Mann-Kendall トレンド検定。 BH 補正で「真にトレンドのある県」を抽出。 少子化・高齢化・経済成長等の政策効果評価に直結。
8 地域(北海道〜九州沖縄)の出生率を ANOVA → Tukey HSD で 28 ペアの事後検定。 Tukey は studentized range を使うため、 BH 補正より検出力が高い (ANOVA 内で分散プール)。 ただし全 125 項目 × 8 地域だと多項目補正で BH を併用。
| 補正法 | FWER 実測 | FDR 実測 | 検出力 | 発見数 (平均) |
|---|---|---|---|---|
| 補正なし | ~100% | ~36% | 88% | ~134 |
| Bonferroni (FWER) | 3.8% | 1.2% | 8.2% | ~8 |
| Holm (FWER) | 4.5% | 1.5% | 9.5% | ~10 |
| Hochberg (FWER) | 4.7% | 1.6% | 9.8% | ~10 |
| BH (FDR) | 41.2% | 4.3% | 42.7% | ~46 |
| Storey q (FDR) | 42.5% | 4.5% | 45.3% | ~48 |
| BY (FDR 任意依存) | 5.6% | 2.1% | 12.3% | ~13 |
📌 解釈: ① 検出力順: BH ≈ Storey q ≫ BY > Hochberg ≈ Holm ≈ Bonferroni。 ② FWER 制御順: Bonferroni ≈ Holm ≈ Hochberg ≪ BY ≪ BH ≈ Storey q。 ③ BH と Bonferroni の発見数差は約 5.7 倍。 大規模検定では BH の優位性が圧倒的。
p.adjust(p, method='fdr') も同じ (fdr = BH のエイリアス)。 SAS の PROC MULTTEST OPTION=FDR も同じ。 言語間で結果が違うことはない。| 日本語名 | 偽発見率 / 偽陽性発見率 |
|---|---|
| 英語名 | False Discovery Rate (FDR), Benjamini-Hochberg Procedure |
| カテゴリ | 多重検定補正 / 大規模検定 |
| グループ教材 | hypothesis-testing |
| 一言で | 棄却の中の偽陽性割合の期待値を制御する補正法 |
| 主要手法 | BH 法 (1995) / BY 法 (2001) / Storey q 値 (2002) / Local FDR (2007) |
| 標準選択 | 大規模 (m≥100) 探索的 → BH、 任意依存性 → BY、 m₀<<m → Storey q |
| 主データ | SSDSE-B-2026(47都道府県・125項目)/ GWAS / RNA-seq / fMRI |
| 主ライブラリ | statsmodels.stats.multitest.multipletests(method='fdr_bh') / R p.adjust / qvalue (R) / DESeq2 |
| 学習推奨時間 | 概念把握 30 分 + BH 手計算 30 分 + Python 演習 60 分 + 補正法比較 60 分 = 約 3 時間 |
| 登場場面 | GWAS / RNA-seq / fMRI / 多次元 A/B テスト / 特徴量選択 / 探索的解析 |
| 原論文 | Benjamini & Hochberg (1995) JRSS-B 57(1):289-300(引用 8 万超) |
multipletests(method='fdr_bh') で実行できる📌 ジャストインタイム型データサイエンス教育の立場では、 FDR は「現代の大規模スクリーニング時代の標準補正法」として早期に習得する価値がある。 概念は簡潔で、 Python で 1 行で実行でき、 ゲノミクスから A/B テストまで応用範囲が広い。 「BH 法 1 つマスターすれば大規模検定の 8 割がカバーできる」と言える。
本用語に関連する代表的な可視化を 3 点示す。



本ページの学習内容を確認しよう。
statsmodels.stats.multitest.multipletests、 scipy.stats。FDR (False Discovery Rate) は 1995 年に Yoav Benjamini と Yosef Hochberg がイスラエル工科大学で提案した JRSS-B の論文に由来する。 元論文「Controlling the False Discovery Rate: a Practical and Powerful Approach to Multiple Testing」は 2025 年時点で約 10 万回引用され、 統計学史上最も影響力のある論文の 1 つ。 提案当時は「FWER 制御の標準」だった Bonferroni 法の代替として注目を集めなかったが、 2000 年前後のマイクロアレイ研究の爆発的拡大で、 10⁴ 規模の検定問題で唯一実用的な方法として採用された。 2001 年に John Storey が q-value と適応的 FDR を提案し、 2002 年に Benjamini-Yekutieli が任意依存性下の保守的 FDR を証明。 2015 年に Stanford の Rina Foygel Barber と Emmanuel Candès が Knockoffs を提案し、 線形モデル下で有限サンプル FDR 制御を達成。 FDR は GWAS、 fMRI、 RNA-seq、 プロテオミクス、 単一細胞解析の標準前処理として定着した。
機械学習では feature selection の局面で FDR 制御が応用される (Knockoffs-based variable selection)。 因果推論では複数因果効果推定の同時推論で FDR 制御版 (Romano-Wolf 2005) が使われる。 オンライン実験 (A/B テスト) では Online FDR (Javanmard-Montanari 2018) が逐次的な experiment stream に対する FDR 制御を達成。 ベイジアン統計では事前分布 (sparse prior、 spike-and-slab、 horseshoe) による shrinkage が自然な multiplicity 制御として働き、 Bayesian FDR (Newton 2004) が定義されている。 経済学・社会科学では Anderson (2008) の summary index 法が、 多重比較を回避するアプローチとして使われる。 SSDSE-B-2026 のような公的統計データでは、 都道府県別の SDG 達成度評価で 17 ゴール × 17 指標 = 289 検定を BH 法で制御する事例がある。 教育研究の split-sample 設計では、 探索データセット (前半半分) で BH 法、 確証データセット (後半半分) で Bonferroni 法と二段階で使い分ける運用が広まりつつある。
SSDSE-B-2026 の 10 都道府県の p 値: p₁=0.001, p₂=0.008, p₃=0.012, p₄=0.025, p₅=0.038, p₆=0.046, p₇=0.087, p₈=0.123, p₉=0.245, p₁₀=0.812 とする。 BH 法 (α=0.05) の手順: (1) p 値を昇順にソート; (2) ランク i に対し閾値 (i/m)×α を計算; (3) p₍ᵢ₎ ≤ (i/m)×α を満たす最大 i を求める; (4) その i 以下の検定を全て有意とする。 計算: i=1: 0.001 vs 0.005 ✓, i=2: 0.008 vs 0.010 ✓, i=3: 0.012 vs 0.015 ✓, i=4: 0.025 vs 0.020 ✗, i=5: 0.038 vs 0.025 ✗, i=6: 0.046 vs 0.030 ✗。 最大 i は 3 で、 検定 1, 2, 3 が有意となる。 同じデータで Bonferroni 補正 (α*=0.005) では検定 1 のみ有意、 BH の方が検出力が高いことが確認できる。
同じデータで Storey の q-value を計算する。 π₀ を p 値ヒストグラムの右側 (p > 0.5) の密度から推定: 10 検定中 p > 0.5 は 1 件 (p₁₀=0.812) のみで、 π₀ ≈ 1/(10 × 0.5) = 0.2 と推定 (実際にはより複雑な smoothing を使用)。 q-value = (π₀ × m × p₍ᵢ₎) / i で計算。 BH 補正 p 値は π₀=1 を仮定するため (m × p₍ᵢ₎) / i。 π₀ < 1 のとき q-value < BH 補正 p 値となり、 同じ FDR 水準でより多くの発見が得られる。 ただし π₀ 推定の不確実性が大きいときは q-value も不安定になる。
SSDSE-B-2026 の 47 県 × 100 指標 = 4,950 ペア相関で BH 法 (FDR 0.05) を適用する。 帰無下の期待値は 4,950 × 0.05 = 247.5 件の偽陽性。 実データで p < 0.05 を満たす検定が 800 件あったとすると、 BH 法 (FDR 0.05) で発見されるのは概ね 500-700 件程度 (依存性次第)。 これらの発見の中に期待される偽陽性は 25-35 件 (5%) で、 残り 465-665 件が真陽性と推定される。 Bonferroni 補正 (α*=1.01×10⁻⁵) では発見数は数十件に減るが、 偽陽性は期待値 0.05 件以下に保たれる。 確証的研究では Bonferroni、 探索的研究では BH の戦略選択が重要。
p 値ヒストグラム (bin=0.05) の解釈: (a) 平坦 → 全て帰無、 発見なし; (b) 0 付近に山 + 平坦 → 真陽性混在、 標準的 BH 適用可; (c) 全体的に右下がり → 共変量調整不足や検定モデル誤指定; (d) 0 付近凹型 → 過剰な統計量 (overdispersion); (e) 0.05 付近に階段 → p ハッキングの可能性。 SSDSE-B-2026 で 4950 ペア相関の p 値ヒストグラムを見ると、 0-0.05 範囲に 800 件、 0.05-1.0 範囲にほぼ均等分布なら (b) パターン、 標準的 BH 適用が適切。
Knockoffs (Barber-Candès 2015) は線形モデル下で「有限サンプル FDR 制御」を保証する画期的手法。 元変数 X に対し、 ノイズ知識を用いて偽変数 (knockoff) X̃ を生成し、 ペアで Lasso 回帰を行う。 Lasso パス上で X と X̃ のどちらが先に zero になるかで信号と帰無を区別する。 SSDSE で 100 指標から「人口を予測する重要変数」を選ぶ場合、 Knockoffs で FDR 0.10 制御下に 5-10 変数を選ぶことができる。 R の knockoff パッケージ、 Python の pyknockoffs で実装可能。
p 値ヒストグラムが (b) パターン (0 付近の山 + 平坦) で、 平坦部の高さから π₀ を推定する場合、 0 付近の真陽性ピークの裾を含めて平坦部とすると π₀ が過大評価される。 Storey 法では smoothing parameter λ (例: 0.5) を選び、 p > λ の領域のみで π₀ を推定するが、 λ の選択次第で π₀ が変動する。 SSDSE の 4950 検定で λ=0.5 vs λ=0.8 で π₀ 推定値が 0.85 vs 0.78 と異なる場合、 結果のロバストネスを bootstrap で確認する必要がある。
R では p.adjust(p, method='BH'/'BY') で BH/BY 補正、 qvalue::qvalue(p) で Storey q-value、 knockoff で Knockoffs。 Python では statsmodels.stats.multitest.multipletests(pvals, alpha=0.05, method='fdr_bh'/'fdr_by'/'fdr_tsbh') が標準。 SciPy 1.11+ では scipy.stats.false_discovery_control も BH 法を実装。 大規模問題 (m > 10⁶) では C++ ベースの実装 (例: fastFDR) で高速化。 ベイジアン FDR は brms や PyMC で階層モデルとして実装可能。 オンライン FDR は onlineFDR パッケージで実装。
GWAS (Genome-Wide Association Study) では 100 万 SNP を疾患関連性で検定する。 Bonferroni 補正で α*=0.05/10⁶=5×10⁻⁸ が「ゲノムワイド有意水準」として確立。 BH 法 (FDR=0.05) では数百-数千件の発見が可能だが、 偽陽性が混在する。 実務では (a) FDR で初期スクリーニング → (b) ゲノムワイド有意水準で確証検定の二段階アプローチが一般的。 SSDSE 規模 (m=4950) では FDR と Bonferroni の差が顕著で、 戦略選択が研究品質に影響する。
RNA-seq で 20,000 遺伝子の発現を疾患群 vs 対照群で比較する。 各遺伝子に対し独立に t 検定 or DESeq2 で p 値を計算。 m=20,000、 FDR=0.05 で BH 法を適用すると、 100-1000 件の差次発現遺伝子が発見される。 同じデータで Bonferroni (α*=2.5×10⁻⁶) なら数件のみで、 生物学的意義のある遺伝子セットが見逃される。 RNA-seq では BH 法が業界標準。 さらに gene set enrichment analysis (GSEA) で生物学的経路レベルの検証を行う。
SSDSE-B-2026 で 47 都道府県の 100 指標から「教育投資と県経済の関連」を探索する。 m=99 (教育投資以外の 99 変数との相関)。 BH 法 (FDR=0.10) で 20-30 変数が有意関連と判定される。 これらを「経済的に関連する候補」として、 因果推論手法 (Difference-in-Differences、 Regression Discontinuity) で別データに対し確証検定を行う二段階アプローチが推奨。
大手 IT 企業では月数百件の A/B テストを実施しており、 累積で偽陽性が蓄積される。 Online FDR (Javanmard-Montanari 2018) は実験 stream に対し動的に α を調整し、 累積 FDR を制御する。 SSDSE 的な「年次更新データ」での同様の問題: 毎年 SSDSE 公開時に 100 指標を分析するなら、 5 年で 500 検定相当の multiplicity が累積。 Online FDR の枠組みで対処可能。
fMRI では 1 つの脳画像に 100,000 voxel があり、 voxel-wise t 検定で m=10⁵。 BH 法だけでなく、 voxel の空間相関を考慮した Random Field Theory (RFT) や Cluster-Level Inference が標準。 「単一 voxel ではなく cluster (連続した voxel 集団) で FDR 制御」する。 SSDSE 的に都道府県の地理的相関 (隣接県) を考慮した spatial FDR も類似の発想。
研究計画段階での戦略決定: (1) 研究目的の明確化: 確証的 (FWER) vs 探索的 (FDR); (2) m の事前推定: 検定族の境界を定義し m を確定; (3) FDR 水準の選択: 0.01 (厳格)、 0.05 (標準)、 0.10 (探索)、 0.20 (リード候補選抜); (4) BH vs BY 選択: 独立 or 正相関 → BH、 任意依存性 → BY; (5) 適応的 FDR の検討: π₀ < 0.9 が見込まれるなら Storey q-value; (6) 事前登録: 補正方法・水準を OSF に明記; (7) 報告: 補正前 p 値・補正後 p 値・q 値・効果量を併記。
(1) 「FDR と p 値の混同」: 「FDR 0.05 = p < 0.05」と誤解。 修正: FDR は集団指標で、 個別 p 値とは別概念。 (2) 「FWER と FDR の都合的切替」: 結果次第で補正方法を変える。 修正: 事前登録で固定。 (3) 「π₀ 推定の過信」: Storey q-value の π₀ 推定値を無批判に採用。 修正: bootstrap で不確実性評価。 (4) 「BH 法を依存性下で無批判に適用」: 強相関構造の場合、 BH の保証が崩れる可能性。 修正: BY 法または permutation 法。 (5) 「FDR 制御後の個別検定の信頼性過信」: FDR は集団指標で、 個別検定の信頼性を保証しない。 修正: 効果量と信頼区間を併記。
SSDSE 分析の FDR 制御の典型ワークフロー: (1) 事前登録 (OSF) で主仮説と検定族の境界、 FDR 水準を明記; (2) データ取得 (e-Stat から SSDSE-B-2026 をダウンロード); (3) 全検定の p 値を計算し、 p 値ヒストグラムで分布診断; (4) BH 法 (または適応的 FDR) で q 値を計算; (5) 発見した変数を効果量順にランキング; (6) Top 候補を別データセット (前年度 SSDSE) で再検証; (7) 全結果をオープンに公開し、 再現性を保証。 公的統計データを用いた研究で FDR 制御を標準化することで、 研究品質と政策効率が向上する。
FDR の正式定義: 検定の集合のうち、 棄却された検定の中で偽陽性の割合の期待値 E[FP/(FP+TP)] = E[V/R | R>0] × P(R>0)。 ここで V は偽陽性数、 R は棄却検定数。 通常は positive FDR (pFDR) = E[V/R | R>0] が用いられる。 BH 法は m 個の独立 p 値の下で FDR ≤ π₀ × q ≤ q を保証する (Benjamini-Hochberg 1995)。 BY 法は任意依存性下で FDR ≤ q × Σ_{k=1}^m 1/k ≈ q × ln(m) を保証 (Benjamini-Yekutieli 2001)。 これらの数学的保証は有限サンプルで成立する厳密な不等式で、 漸近論的近似ではない。
BH 法の FDR 制御の証明 (Benjamini-Hochberg 1995): 検定 i が棄却される条件は「ランク i の p 値が (i/m)×α 以下」で、 これは p₍ᵢ₎ × m / i ≤ α と等価。 帰無下で p 値は一様分布で、 各帰無検定 i に対し P(棄却 | 帰無) ≤ α × π₀。 全帰無検定の期待棄却数は m₀ × α × π₀。 一方、 期待棄却検定数は R。 FDR = E[V/R] ≤ m₀×α/m ≤ α (π₀=m₀/m≤1)。 これは独立性下の証明で、 BY 法は任意依存性下で同様の議論を拡張。
q-value (Storey 2002, 2003) は「特定の検定を棄却した時の最小 FDR」と定義: q(p) = inf {FDR | t = p} = π₀ × m × p / R(p)。 ここで R(p) は p 値 ≤ p の検定数。 π₀ は帰無下の検定の割合で、 p 値ヒストグラムの右側 (p > λ) の密度から推定: π̂₀ = #{p_i > λ} / (m × (1-λ))。 λ は通常 0.5 を使う。 q-value ≤ q を満たす検定を全て棄却すると、 FDR ≤ q が達成される。 BH 補正 p 値 = m × p / R(p) と比較すると、 q-value = π₀ × BH p 値で、 π₀ < 1 のとき q-value < BH p 値 (検出力が高い)。
Knockoffs (Barber-Candès 2015) は線形モデル y = Xβ + ε の下で、 j 番目の説明変数 X_j に対して「knockoff」X̃_j を生成。 条件: X̃_j は X_j と類似した分布を持つが、 y との真の関係はない。 [X X̃] のペアで Lasso 回帰を実行し、 各変数のスコア W_j = |β̂_j| - |β̃_j| を計算 (knockoff より元変数が先に Lasso パスに入る = 信号)。 W_j ≥ T を満たす変数を選択し、 T を「FDR ≤ q」を保証する閾値に設定。 厳密な FDR 制御を有限サンプルで達成する画期的手法。
主要パッケージの実装比較: (1) R::p.adjust(method='BH'): 最も基本的で BH 法のみ; (2) R::qvalue: Storey q-value、 π₀ 推定込み、 推奨; (3) R::multcomp: 線形モデル後の自動補正; (4) R::knockoff: Knockoffs 法; (5) R::onlineFDR: 逐次 FDR; (6) Python::statsmodels.stats.multitest: BH、 BY、 Bonferroni、 Holm、 Hochberg、 two-stage BH; (7) Python::pyknockoffs: Knockoffs; (8) Python::scipy.stats.false_discovery_control: scipy 1.11+; (9) SAS::PROC MULTTEST: 商用、 包括的; (10) STATA::qqvalue: 経済学で標準。 SSDSE 規模では Python+R の組み合わせが実用的。
FDR 制御の正しい解釈と報告: (1) 集団レベルの保証: FDR ≤ 0.05 は「平均して発見の 5% が偽陽性」で、 個別研究での偽陽性率ではない。 (2) q-value vs BH 補正 p 値の併記: 両者は近いが厳密には異なる。 q-value は「その p 値以下を全て棄却した時の最小 FDR」、 BH 補正 p 値は「BH 手続きでの調整 p 値」。 (3) p 値ヒストグラムを報告: 帰無分布の妥当性を視覚的に評価可能。 (4) π₀ 推定値を報告: Storey 法を使う場合、 π₀ の不確実性を bootstrap で評価。 (5) 効果量を併記: FDR 制御は p 値の制御で、 効果量とは独立。 強い効果量を持つ発見を優先する。
2020 年以降の発展: (1) e-values と FDR: Vovk-Wang (2021) の e-values が FDR の代替指標として注目; (2) covariate-adaptive FDR: 補助情報 (補助変数、 グループ構造) を活用した FDR 制御; (3) multilayer FDR: 階層的な検定族での同時制御; (4) Bayesian FDR with priors: 事前分布を組み合わせた階層的アプローチ; (5) online FDR: 実験 stream に対する逐次制御; (6) FDR in causal inference: 複数因果効果の同時推論; (7) genome-wide FDR refinements: SNP の連鎖不平衡を考慮した補正; (8) FDR in machine learning fairness: 公平性指標の同時評価。 SSDSE 的な公的統計データへの応用も今後拡大が期待される。
FDR の発展史を年代別に整理: (1) 1995: Benjamini-Hochberg が JRSS-B で「Controlling the False Discovery Rate」を発表、 当初は注目されず; (2) 1999-2001: マイクロアレイ研究で 10⁴ 規模の検定が標準化、 FDR が「唯一の実用解」として急速に普及; (3) 2001-2002: Storey が q-value と適応的 FDR を提案、 検出力が向上; (4) 2002: Benjamini-Yekutieli が任意依存性下の保守的 FDR を証明; (5) 2004: Efron が empirical null を提案; (6) 2007-2010: GWAS の標準化、 ゲノムワイド有意水準 p < 5×10⁻⁸ の確立; (7) 2015: Barber-Candès の Knockoffs で有限サンプル FDR 制御を達成; (8) 2018: Javanmard-Montanari の online FDR で逐次解析対応; (9) 2021-2024: e-values、 multilayer FDR、 causal FDR の理論的・実用的発展。 30 年で統計学の主流概念に成長した。
π₀ (帰無下の検定の割合) の推定手法: (1) Storey 法: π₀(λ) = #{p_i > λ} / (m × (1-λ))、 λ ∈ (0,1) で smoothing; (2) bootstrap-based: bootstrap で π₀ の信頼区間を推定; (3) spline-based: π₀(λ) を λ の関数として spline 補間; (4) histogram-based: p 値ヒストグラムの右側 (p > 0.5) の平均高さ; (5) local FDR-based: p 値分布のミクスチャモデルから π₀ を分離; (6) conservative: π₀=1 を仮定 (BH 法の元の仮定)。 推定値が π₀ < 1 のとき q-value は BH 補正 p 値より小さく、 検出力が向上。
多重検定のエラー指標の比較: (1) FWER (Family-Wise Error Rate): P(任意の偽陽性 ≥ 1)、 最も保守的; (2) FDR (False Discovery Rate): E[V/R]、 期待値の制御; (3) pFDR (positive FDR): E[V/R | R>0]、 q-value の基礎; (4) FDX (False Discovery eXceedance): P(V/R > γ) を制御、 高信頼性指標; (5) k-FWER: P(V ≥ k) を制御、 FWER と FDR の中間; (6) per-comparison error rate: 個別検定の α、 補正なし; (7) per-family error rate: 1 family の期待偽陽性数; (8) generalized FWER: 任意の方法。 それぞれ研究目的に応じて使い分ける。
FDR 制御の効率的な計算実装: (1) p 値のソート: O(m log m) で計算; (2) BH 補正の単一パス: ソート後 i=m から逆方向に閾値を計算; (3) q-value の計算: π₀ を推定後、 BH 補正 p 値に π₀ を掛ける; (4) 大規模問題の chunk 処理: m = 10⁶ で約 8 MB、 メモリ内処理可能; (5) 並列計算: p 値計算は埋め込み並列化、 補正は単一パス; (6) numerical stability: 浮動小数点で p < 10⁻³⁰ 程度まで精度確保; (7) BLAS/LAPACK 活用: 行列演算で効率化; (8) GPU 加速: 大規模ゲノミクスでは GPU 実装が標準化。 SSDSE 規模では Python/R の標準実装で十分。
FDR は学術界を超えて社会的影響を与えてきた: (1) 創薬の効率化: GWAS で疾患関連遺伝子発見が加速、 標的薬の開発に直結; (2) 個別化医療: precision medicine の基盤として FDR ベースの biomarker 発見; (3) 環境ゲノミクス: 環境因子と健康影響の大規模スクリーニング; (4) 農業バイオテクノロジー: 作物の遺伝子改良で FDR が選抜の標準; (5) 政策評価: 複数指標での政策効果評価で FDR の活用; (6) 市場調査: 商品テストでの多変量分析; (7) SSDSE 研究: 公的統計データで FDR を標準化することで、 探索的政策分析の品質と効率が向上。 Benjamini-Hochberg の論文は 30 年で社会的インパクトを生み続けている。
FDR を学ぶための主要リソース: (1) 古典論文: Benjamini-Hochberg (1995) JRSS-B、 Storey (2002) JRSS-B; (2) 教科書: Efron "Large-Scale Inference" (2010)、 Dudoit-van der Laan "Multiple Testing Procedures" (2008); (3) 無償教材: Stanford StatLearning コース、 Coursera の "Bioinformatics" コース; (4) 論文: Goeman-Solari (2014) "Multiple Hypothesis Testing in Genomics" は良い概観; (5) R 教材: Bioconductor のチュートリアル; (6) Python 教材: statsmodels の documentation; (7) SSDSE 学習: 統計データ解析コンペで FDR の応用例を学ぶ。 FDR の理解は、 大規模データ解析の基礎として現代研究者に必須。
FDR の現代応用: (1) GWAS: 100 万 SNP × 数千疾患の連関解析、 FDR が標準補正; (2) single-cell RNA-seq: 数万細胞 × 数千遺伝子の差次発現、 FDR + 信頼性指標の組み合わせ; (3) fMRI: voxel-wise の活動検出で cluster-level FDR; (4) プロテオミクス: 数千タンパク質の質量分析; (5) メタゲノミクス: 微生物群集の組成比較; (6) マーケティング: 数千顧客セグメントの A/B テスト; (7) 金融: 数千資産の異常検出; (8) SSDSE: 47 県 × 100 指標の探索的相関分析; (9) 環境モニタリング: 数百観測点の汚染検出; (10) 機械学習: feature importance の同時推論。 FDR は現代データサイエンスの基盤技術。
FDR の限界と代替手法: (1) FDR の限界: 集団指標で個別研究の保証なし、 強依存性下で挙動が不安定、 効果量を反映しない; (2) 代替: FWER: 確証的研究で偽陽性を一件も許せない場合; (3) 代替: Bayesian shrinkage: 事前分布で multiplicity を自然に扱う; (4) 代替: Knockoffs: 線形モデル下で有限サンプル FDR 制御; (5) 代替: e-values: 逐次解析・任意依存性に強い; (6) 代替: Split-sample: 探索と確証を別データで実施; (7) 代替: Permutation: 依存性下で経験的に補正; (8) 代替: Empirical null: 帰無分布をデータから推定; (9) 代替: Multi-stage testing: 階層的検定で multiplicity を分離; (10) 代替: Covariate-adaptive: 補助情報を活用。 研究目的次第で使い分ける。
FDR 制御の総合的活用ガイドを SSDSE-B-2026 の文脈で示す。 ステップ 1: 「研究目的の明確化」では、 確証的 vs 探索的、 FWER vs FDR、 単段 vs 多段の選択を明確化する。 SSDSE で 47 県 × 100 指標の探索的分析なら FDR が適切、 政策評価の主要仮説検証なら FWER (Bonferroni) が適切。 ステップ 2: 「検定族の定義」では、 1 論文 = 1 family、 1 章 = 1 family、 主要 + 副次 = 別 family など、 検定族の境界を事前登録で明示する。 ステップ 3: 「依存性の評価」では、 検定統計量間の相関構造を確認。 都道府県データは地理的に隣接性があるため、 弱正相関が想定される。 BH 法が概ね妥当だが、 強相関が疑われる場合は BY 法または permutation 法を使用。 ステップ 4: 「適応的 FDR の検討」では、 π₀ < 0.9 が見込まれる (多くの真陽性が存在) なら Storey q-value を採用。 SSDSE の探索的分析で、 帰無下の検定が約 80% (π₀ ≈ 0.8) と推定されるなら、 q-value は BH 法より検出力が高い。 ステップ 5: 「結果の報告」では、 補正前 p 値、 補正後 p 値、 q 値、 効果量、 信頼区間を全検定で報告。 主要発見はフォレストプロットで可視化、 全結果は補足資料で公開。 ステップ 6: 「再検証」では、 発見した変数を別データセット (前年度 SSDSE、 独立コホート) で確認。 ステップ 7: 「公開」では、 コード・データを GitHub/OSF で永続保存し、 第三者が再現可能な状態にする。 これらのステップを踏むことで、 FDR 制御を用いた信頼性の高い研究を実施できる。
SSDSE-B-2026 を用いた FDR 制御の完全ワークフロー: 研究目的「47 都道府県のうち、 高齢化率と関連する政策指標を発見する」。 ステップ 1: 事前登録 (OSF) で「α=0.10、 FDR 制御、 BH 法、 family = 100 指標の同時検定」と明記。 ステップ 2: e-Stat から SSDSE-B-2026 をダウンロード、 47 県 × 100 指標のデータフレームを準備。 ステップ 3: 100 個の Pearson 相関を計算し、 p 値ベクトルを取得。 ステップ 4: p 値ヒストグラムを描画し、 0 付近の山が確認できることから、 真陽性混在を確認 (パターン (b))。 ステップ 5: BH 法 (FDR=0.10) を適用、 補正後 p 値を計算。 結果: 100 検定中 25 件が有意 (期待偽陽性 2.5 件)。 ステップ 6: Storey q-value も計算、 π₀=0.75 と推定。 q-value < 0.10 で 30 件が有意。 ステップ 7: 発見した 30 指標を効果量順にランキング、 上位 10 件を「主要候補」として政策提言に活用。 ステップ 8: 結果報告では、 補正前 p 値・BH 補正 p 値・q 値・効果量・信頼区間を全 100 検定で表形式で報告。 ステップ 9: GitHub で R/Python コードを公開、 OSF にデータ・結果を永続保存。 ステップ 10: 翌年度の SSDSE-B-2027 で同じ 30 指標を再検定し、 再現性を確認。 このワークフローを通じて、 FDR 制御を用いた信頼性の高い探索的研究が完成する。 SSDSE のような公的統計データでこのワークフローを標準化することで、 日本の政策研究の品質と国際的評価が向上する。
FDR は単一の技術ではなく、 統計理論・研究方法論・社会的責任の交差点に位置する複合的概念である。 SSDSE-B-2026 のような公的統計データを用いた研究では、 FDR を統合的に運用することで、 研究の品質と社会的価値の両面が向上する。
FDR 制御の習得は、 次世代研究者育成の重要な要素となる。 学部・大学院・専門研究者の各レベルで、 FDR の概念と実装を体系的に学習することで、 研究者は方法論的多角性と社会的責任の両面を獲得できる。 SSDSE-B-2026 のような公的統計データを用いた実践的学習は、 こうした人材育成において優れた教材を提供する。
本稿で示してきた FDR の理論・歴史・実装・応用は、 SSDSE-B-2026 のような公的統計データを用いた研究で実践的に活用できる基盤を提供する。 統計データ解析コンペでの実践を通じて、 学生・研究者は FDR 制御の概念を実データに対する具体的な研究実践へと結びつけることができる。
FDR は単なる「多重検定補正の一手法」を超え、 現代統計学・データサイエンスの中核概念の 1 つとして位置づけられる。 1995 年の Benjamini-Hochberg 論文から始まり、 2000 年代のゲノミクス革命での標準化、 2010 年代の Knockoffs 法、 2020 年代の online FDR・e-values・causal FDR まで、 30 年にわたる発展史を持つ。 SSDSE-B-2026 を用いた研究で FDR を実践することは、 学生・研究者の方法論的成熟と公的統計データ研究の品質向上に貢献する重要な取り組みとなる。 約 10 万回引用された Benjamini-Hochberg 論文は、 統計学が社会に与える長期的影響の象徴である。
公的統計データを用いた研究 (SSDSE-B-2026、 e-Stat、 OECD、 World Bank データなど) では、 FDR 制御の方法論的重要性が特に高い。 これは、 公的データが社会全体に開かれており、 結論が政策決定・社会的議論・市民の判断に直接影響するためで、 「偽陽性割合を制御した信頼性の高い発見」が研究の社会的価値を保証する。 FDR 制御を SSDSE 研究で標準化することは、 (1) 大規模探索的分析での偽の発見を制御、 (2) 政策提言の科学的基盤を強化、 (3) BH 法と Storey q-value の使い分けによる検出力と信頼性のバランス、 (4) 事前登録での透明性確保、 (5) メタアナリシスでの結果統合の品質向上、 などの効果をもたらす。 これにより、 公的統計データを用いた研究は、 単なる学術的興味の対象から、 社会全体の意思決定を支える知的基盤へと位置づけが変化する。 統計データ解析コンペのような取り組みは、 学生・若手研究者がこうした社会的責任を意識した研究実践を学ぶ重要な場として、 日本の学術コミュニティの長期的な研究品質向上に貢献している。 FDR 制御の知識と実践は、 統計教育・データサイエンス教育の根幹となる方法論的基盤として、 次世代の研究者層に浸透していくことが期待される。 30 年で約 10 万回引用された Benjamini-Hochberg の論文は、 統計学が社会に与える長期的影響の象徴的な例として位置づけられる。
FDR 制御を体系的に習得することは、 現代研究者の方法論的成熟の重要な段階である。 学部レベルでは「BH 法の手計算」程度だが、 大学院レベルでは FDR の正式定義 (E[V/R | R>0])、 π₀ 推定の手法、 Storey q-value の数学的基礎、 BH と BY の使い分け、 適応的 FDR、 Knockoffs 法の理論、 online FDR、 multilayer FDR、 ベイジアン FDR、 機械学習における FDR (cross-validation overfitting、 feature selection)、 因果推論における FDR (multiple causal effects) など、 多岐にわたる学習内容を習得する必要がある。 こうした方法論的成熟は、 単なる「補正方法の選択」を超えて、 「研究全体の信頼性と検出力のバランス設計能力」を意味する。 SSDSE-B-2026 のような公的統計データを用いた研究で FDR 制御を実践することで、 学生・研究者は実データに対する研究設計の感覚を磨き、 国際的に通用する方法論的多角性を獲得できる。 公的データを活用した教育プログラムは、 公的統計データの社会的価値を最大化する重要な取り組みでもあり、 統計データ解析コンペのような取り組みは、 統計教育・データサイエンス教育の中核として、 学術と社会の橋渡し役を果たしている。 学生・若手研究者がこうした実践経験を通じて研究文化に貢献することは、 日本の学術コミュニティの長期的競争力向上に直結し、 公的統計データを用いた研究の品質と国際的評価を高めていく。 Benjamini-Hochberg の 1995 年論文が 30 年で約 10 万回引用されていることは、 FDR の概念が学術コミュニティに与えた巨大なインパクトを示している。
FDR (False Discovery Rate) 制御は、 大規模多重検定問題における偽陽性割合の期待値を制御する画期的な統計手法で、 1995 年の Benjamini-Hochberg 論文以降、 統計学史上最も影響力のある概念の 1 つとなっている。 本稿で示してきた内容を統合すると、 (1) FDR は集団指標で「発見の何 % が偽陽性か」の期待値を制御する、 (2) FWER (任意の偽陽性確率) より緩い基準で、 大規模検定問題で実用的、 (3) BH 法は独立性または正相関下で FDR を保証、 BY 法は任意依存性下で保証 (約 ln(m) 倍保守的)、 (4) Storey q-value は π₀ (帰無下の検定の割合) をデータから推定し、 検出力を向上、 (5) Knockoffs 法は線形モデルで有限サンプル FDR 制御を保証する画期的手法、 (6) GWAS、 RNA-seq、 fMRI、 マーケティング、 機械学習 feature selection など多様な分野で標準化、 (7) SSDSE-B-2026 規模 (m=4950) では BH 法と Storey q-value の組み合わせが標準的、 (8) p 値ヒストグラム診断で帰無分布の妥当性を視覚的に確認可能、 (9) online FDR、 multilayer FDR、 covariate-adaptive FDR、 causal FDR など最新手法が発展中、 (10) 事前登録と組み合わせることで研究の透明性と再現性が向上、 などのポイントが理解できる。 これらを実践的に SSDSE データに適用することで、 学生・研究者は FDR 制御の概念を実データに対する具体的な研究実践へと結びつけることができる。 公的統計データ研究での FDR 制御の標準化は、 日本の学術コミュニティの統計リテラシー向上、 政策研究の品質向上、 国際的な研究品質基準への適合、 という多面的な貢献をもたらす。
FDR 制御の概念と実装は、 統計データ解析コンペのような実践的な学習プログラムで効果的に習得できる。 SSDSE-B-2026 のような公的統計データを用いたコンペでは、 学生が「47 都道府県 × 100 指標 = 4,950 検定」という中規模の多重検定問題に直面し、 BH 法 (FDR 制御) を実装する必要がある。 この経験を通じて、 学生は (1) p 値の単純比較では偽陽性が量産されること、 (2) Bonferroni 補正は m が大きいと検出力が崩壊すること、 (3) BH 法と Storey q-value で検出力と信頼性のバランスを取れること、 (4) 効果量と信頼区間の併記が重要であること、 (5) 事前登録による解析計画の透明化が必要であること、 などを実践的に学ぶ。 また、 公的統計データの再利用性を活かして、 (a) 探索的解析から仮説生成、 (b) 確証的解析での仮説検証、 (c) 別年度データでの再現確認、 という研究プロセスの全体を学ぶことができる。 これは抽象的な統計理論を、 実データに対する具体的な研究実践へと結びつける優れた教育機会となる。 教員側のサポートとして、 (a) R/Python の標準パッケージ (statsmodels、 qvalue、 multcomp) の使用方法を解説、 (b) p 値ヒストグラムの診断手法を教える、 (c) BH 法と Storey q-value の差異を比較演習する、 (d) 効果量の計算と信頼区間の解釈を実例で示す、 (e) 事前登録テンプレートの作成を演習する、 などの取り組みが効果的。 こうした教育実践により、 次世代の研究者層に FDR 制御の正しい理解と実践能力が浸透し、 日本の学術コミュニティの統計リテラシーが向上する。 公的統計データを活用した教育プログラムは、 公的データの社会的価値を最大化する重要な取り組みでもあり、 SSDSE のような取り組みは、 統計教育・データサイエンス教育の中核として、 学術と社会の橋渡し役を果たしている。
FDR 制御の数理的背景を更に詳細に解説する。 まず、 FDR の正式定義は E[V/R | R>0] × P(R>0) で、 V は偽陽性数 (false positives)、 R は棄却検定数 (rejections)、 V/R は偽陽性割合である。 R=0 のとき V/R は未定義となるため、 通常は positive FDR (pFDR) = E[V/R | R>0] が用いられる。 これは「実際に発見があった時の偽陽性割合の期待値」を意味する。 BH 法の証明では、 m 個の独立 p 値の下で、 検定 i が棄却される条件は「ランク i の p 値が (i/m)×α 以下」で、 これは p₍ᵢ₎ × m / i ≤ α と等価である。 帰無下で p 値は一様分布で、 各帰無検定 i に対し P(棄却 | 帰無) ≤ α × π₀。 全帰無検定の期待棄却数は m₀ × α × π₀。 一方、 期待棄却検定数は R。 FDR = E[V/R] ≤ m₀×α/m ≤ α (π₀=m₀/m≤1)。 これは独立性下の証明で、 BY 法は任意依存性下で同様の議論を拡張する。 BY 法の保守係数 H(m) = Σ_{k=1}^m 1/k ≈ ln(m) + 0.577 (オイラー定数) で、 m が大きいほど補正が保守的になる。 SSDSE 規模 m=4950 では H(m) ≈ 8.5 で、 BH の閾値の約 1/8.5 まで縮小する。 Storey の q-value (2002) は適応的 FDR の代表で、 π₀ をデータから推定することで検出力を向上させる。 π₀ の推定方法は smoothing parameter λ ∈ (0,1) を用いて π̂₀(λ) = #{p_i > λ} / (m × (1-λ))。 λ の選択は trade-off で、 λ が大きいほどバイアスが減るが分散が増える。 Storey (2002) では λ = 0.5 を推奨。 適応的 BH 法 (Two-stage Benjamini-Hochberg、 Benjamini-Krieger-Yekutieli 2006) は、 第 1 段階で π̂₀ を BH 法から推定し、 第 2 段階で π̂₀ を用いて BH 法を適用する。 これは Storey q-value より僅かに保守的だが、 解釈が容易。 Knockoffs 法 (Barber-Candès 2015) は、 線形モデル y = Xβ + ε の下で、 j 番目の説明変数 X_j に対して「knockoff」X̃_j を生成する。 条件: X̃_j は X_j と類似した分布を持つが、 y との真の関係はない。 [X X̃] のペアで Lasso 回帰を実行し、 各変数のスコア W_j = |β̂_j| - |β̃_j| を計算する。 W_j ≥ T を満たす変数を選択し、 T を「FDR ≤ q」を保証する閾値に設定する。 これらの数理的背景を理解することで、 FDR 制御を「自分で実装できる」レベルに到達でき、 状況に応じた手法のカスタマイズが可能となる。 SSDSE-B-2026 のような公的統計データを用いた研究では、 これらの数理的理解が方法論的厳密性と研究品質の両面を向上させる。
FDR 制御の実務的な選択と運用について、 分野・目的別のガイドを示す。 まず、 ゲノミクスの GWAS 研究では、 100 万 SNP の同時検定で Bonferroni 補正 (α* = 5×10⁻⁸) と BH 法 (FDR=0.05) の二段階アプローチが標準。 Bonferroni でゲノムワイド有意の SNP を確証、 BH 法でスクリーニング段階の候補 SNP を発見する。 次に RNA-seq の差次発現解析では、 DESeq2、 edgeR、 limma などの専用パッケージが BH 法 (FDR=0.05) を組み込んでおり、 20,000 遺伝子から数百-数千の差次発現遺伝子を発見する。 fMRI の voxel-wise 解析では、 cluster-level FDR (Random Field Theory) と voxel-wise FDR の選択が、 解像度と特異性のトレードオフを決める。 マーケティングの A/B テストでは、 Online FDR (Javanmard-Montanari) で実験 stream に対する逐次制御が標準化されつつあり、 大手 IT 企業 (Google、 Microsoft、 Netflix) で実装されている。 経済学・社会科学の探索的研究では、 Anderson (2008) の summary index 法と FDR 制御の組み合わせが、 多重比較を回避するアプローチとして使われる。 SSDSE-B-2026 のような公的統計データを用いた政策研究では、 47 県 × 100 指標 = 4,950 検定で BH 法 (FDR=0.05) と Storey q-value の組み合わせが標準的な選択肢となる。 機械学習の feature selection では、 Knockoffs 法による FDR 制御が、 線形モデル下で有限サンプル FDR 制御を保証する画期的手法として注目されている。 ベイジアン階層モデルでは、 shrinkage prior (spike-and-slab、 horseshoe) が自然な multiplicity 制御として働き、 Bayesian FDR (Newton 2004) として理論化されている。 これらの分野別事例を理解することで、 FDR 制御を「分野共通の原理」と「分野固有の慣習」の両面から運用できる。 さらに、 結果報告のベストプラクティスとして、 (a) 補正前 p 値・BH 補正 p 値・q 値・効果量・信頼区間を全検定で表形式で報告、 (b) p 値ヒストグラムを描画して帰無分布の妥当性を視覚的に確認、 (c) π₀ 推定値とその不確実性を bootstrap で評価、 (d) 主要発見は volcano plot や Manhattan plot で可視化、 (e) 全結果を補足資料 (Supplementary Materials) で完全公開、 (f) コード・データを GitHub/OSF で公開して再現性を保証、 などが推奨される。 これらの実践を SSDSE 研究で標準化することで、 公的統計データを用いた研究の品質と国際的評価が向上する。
FDR 制御の標準化は、 研究品質に長期的かつ多面的な影響を与える。 第 1 に、 ゲノミクス・プロテオミクス・神経科学などの大規模検定分野では、 FDR 制御なしには研究自体が成立しないため、 これらの分野の発展を支える基盤技術として機能している。 GWAS で 100 万 SNP を同時検定する場面で Bonferroni では検出力がゼロに近いため、 BH 法と Storey q-value が「唯一実用的な方法」として広く採用されている。 第 2 に、 探索的政策研究の質を向上させる。 SSDSE-B-2026 のような公的統計データで 47 県 × 100 指標 = 4,950 ペア相関を探索する際、 FDR 制御により「発見の信頼性」を定量化でき、 政策提言の根拠として活用できる。 第 3 に、 機械学習の feature selection に新しい視点をもたらす。 Knockoffs 法による FDR 制御は、 線形モデル下で有限サンプル FDR 制御を保証する画期的手法であり、 ML feature selection の信頼性を向上させる。 第 4 に、 オンライン実験 (A/B テスト) の運用が変革される。 Online FDR (Javanmard-Montanari 2018) により、 実験 stream に対する逐次 FDR 制御が可能となり、 大手 IT 企業の実験運用に直接活用されている。 第 5 に、 メタアナリシスとの統合が進む。 個別研究で FDR 制御を経た結果を統合する際、 出版バイアスとの相互作用を考慮した新しいメタ分析手法 (Bayesian meta-analysis、 p-curve、 z-curve) が発展している。 第 6 に、 統計教育における FDR の位置づけが変化する。 1990 年代までは「上級トピック」だった FDR は、 2020 年代には学部統計学の標準カリキュラムに含まれることが増え、 統計リテラシーの基礎となっている。 第 7 に、 国際協調研究の品質基準として機能する。 ENCODE プロジェクト、 GTEx プロジェクトなどの国際大規模プロジェクトで FDR 制御が標準化されており、 異なる国・グループの研究結果を比較可能にする共通言語として機能している。 これらの長期的影響を考慮すると、 FDR は単なる「統計検定の技術」ではなく、 「現代データサイエンス・統計学の基盤概念」として位置づけられる。 SSDSE 研究で FDR 制御を実践し、 学生・若手研究者に教育することは、 日本の学術コミュニティの長期的競争力向上に直結し、 公的統計データを用いた政策研究の品質向上にも寄与する。 Benjamini-Hochberg の 1995 年論文は、 30 年で統計学史上最も影響力のある論文の 1 つとなり、 約 10 万回の引用を受けており、 これは FDR の概念が学術コミュニティに与えた巨大なインパクトを示している。 今後も e-values、 multilayer FDR、 covariate-adaptive FDR、 causal FDR などの新しい発展が続き、 統計データ解析の地平を広げていくことが期待される。
合成 5 検定で BH 法を適用し、 q=0.10 の閾値を計算する。
| i (rank) | p | i·q/m |
|---|---|---|
| 1 | 0.005 | 0.020 |
| 2 | 0.015 | 0.040 |
| 3 | 0.040 | 0.060 |
| 4 | 0.080 | 0.080 |
| 5 | 0.300 | 0.100 |
m=5, q=0.10
1 2 3 4 5 6 7 8 9 10 | import numpy as np p = np.array([0.005, 0.015, 0.040, 0.080, 0.300]) m = len(p) q = 0.10 crit = (np.arange(1, m+1)) * q / m significant = p <= crit i_star = np.where(significant)[0].max() if significant.any() else -1 print(f"閾値: {crit}") print(f"採択: {significant}") print(f"最大 i: {i_star + 1}") |
💬 手計算 (Step 2) i*=4 と Python 出力が完全一致。
「FDR (False Discovery Rate)」を実際の課題に当てはめるとき、 以下の 3 ステップで判断する。 領域固有の判断基準と組み合わせて使用する。
FDR は「発見の中に占める偽発見の割合」を制御するため、 全偽陽性ゼロを目指す FWER より緩い。 仮説間が独立または正依存なら BH 法 (1995)、 任意依存性なら BY 法 (2001)、 局所 FDR には Efron の経験ベイズ法 (2008)。 q < 0.05 で「期待 5% は偽」を許容する研究文化を組織内で合意形成する。
| 状況 | 第一選択 | 第二選択 | 避ける |
|---|---|---|---|
| 少数仮説 (m ≤ 20、 臨床試験エンドポイント) | Bonferroni / Holm (FWER) | Hochberg step-up | BH (緩すぎる) |
| 中規模 (m = 10²-10³、 遺伝子発現) | BH 法 (Benjamini-Hochberg 1995) | Storey q-value | 無補正 |
| 大規模 (m > 10⁴、 GWAS / fMRI) | BH + π₀ 推定 (Storey 2002) | local FDR (Efron 2008) | Bonferroni (検出力ゼロ) |
| 正依存性あり (例: 同一遺伝子近傍 SNP) | BH 法でそのまま OK | permutation FDR | 独立性仮定の Bonferroni |
| 任意依存性 (相関構造未知) | BY 法 (Benjamini-Yekutieli 2001) | knockoff (Barber 2015) | BH (誤適用リスク) |
「FDR (False Discovery Rate)」は単独で完結せず、 隣接する手法と接続することで分析パイプラインの一部として機能する。 以下に具体的な接続関係を示す。
FDR は (1) 検定統計量 → p 値群 (m 個) → (2) p 値昇順ソート → (3) BH 閾値 i × q/m との比較 → (4) 閾値以下を有意 → (5) FDR 報告、 という Benjamini-Hochberg 手順で運用する。 FWER (Bonferroni) より検出力が高く、 大規模多重検定 (GWAS / プロテオミクス / fMRI) で標準的。 依存性ありなら BY 法 (Benjamini-Yekutieli 2001) を選ぶ。
m 個の検定をシミュレーションします。 真に効果がある割合・効果の大きさ・FDR 目標水準 q をスライダーで変え、 (A) 無補正 α=0.05 / (B) Bonferroni / (C) Benjamini-Hochberg の 3 基準で 「どの検定が棄却されるか」「そのうち何割が偽物か(FDP)」「本物をどれだけ拾えたか(検出力)」がリアルタイムに変わります。 下段の BH プロットは ドラッグ / スワイプ(上下)で q を直接操作できます。 ※ これは乱数シミュレーションです(実測データではありません)。帰無検定の p 値は一様分布、対立仮説は平均をずらした片側 z 検定から生成しています。
FDR は「棄却した検定(=発見と主張したもの)のうち、じつは効果がなかったものの期待割合」です。 Bonferroni(FWER 制御)は「偽陽性を 1 個でも出す確率」を抑えるため、検定数 m が増えるほど閾値 0.05/m が極端に厳しくなり、 本物の効果まで軒並み見逃します(上のスライダーで m を大きくすると赤ストリップの緑が激減するのを確認)。 BH は「発見の総数に応じて基準を緩める」ことで、偽物の割合だけを q 以下に保ちながら、 本物をずっと多く拾えます(緑ストリップの緑が多いまま FDP が q 付近に収まる)。
q 値(Storey 2002)は、各検定について「それを有意とみなしたときに達成される最小 FDR」を与える指標で、p 値の FDR 版に相当します。 Storey 法は帰無割合 π₀ を推定して BH をより高感度にします(BH は π₀=1 を暗黙に仮定する保守版)。 検出力を重視する GWAS・プロテオミクス・fMRI など数千〜数百万の 多重検定では、FWER では何も残らないため FDR / q 値が事実上の標準です。 より詳しくは p 値・有意水準・偽陽性・仮説検定 も参照。
このページ後半の各セクション(BH の証明・応用領域・FWER 比較シミュレーション)とは重複しない角度として、ここでは q 値を「集合レベルの契約」として読む視点と、SSDSE-B-2026 の 109 列を総当たりした 5,886 本の相関検定という大規模スクリーニングの実測を軸にする。姉妹ページ「多重比較」では 8 列・28 検定の小規模例を扱うが、ここでは桁が 2 つ大きい現実的スケールで FDR と FWER の距離を測る。
Bonferroni(FWER)は門番で、「ニセ物を 1 個でも通したら負け」というルールで守る。だから検定数 m が増えるほど門は狭くなる。FDR は発想が違う。掘り出した宝の山を見て「この山に混じったニセ物の割合を平均で 5% 以内に抑える」ことだけを約束する。100 個掘り当てたら平均 5 個はニセ物が混じってよい、という契約だ。だから q 値 = 0.03 は「この 1 件が偽物である確率が 3%」という意味ではない。「この検定まで含めて棄却集合を作ると、その集合全体で期待される偽陽性割合が 3%」という 集合の性質である。個別の宝石の真贋ではなく、山全体の純度を保証する — これが FDR を FWER から分ける核心の直感だ。
2023 年・47 都道府県、数値 109 列の総当たり Pearson 相関(C(109,2)=5,886 検定)を、無補正・Bonferroni(FWER)・BH(FDR)で比べた実測値。pd.read_csv(encoding='cp932', skiprows=[1]) → df[df['SSDSE-B-2026']==2023] で再現できる。
| 補正法 | 棄却境界(p のしきい値) | 有意な相関ペア数 | 性質 |
|---|---|---|---|
| 無補正 (p<0.05) | 0.05 | 5,063 | 偽陽性を無制御 |
| BH (FDR q≤0.05) | ≈ 0.0425 | 5,024 | 集合の期待偽陽性 ≈ 5%(約 251 本) |
| BH (FDR q≤0.01) | より厳しい | 4,670 | 純度を上げると数は減る |
| Bonferroni (FWER 0.05) | 0.05/5886 ≈ 8.5×10⁻⁶ | 4,075 | 偽陽性 1 個も出さない設計 |
読み取り: 無補正 5,063 に対し BH はわずか 39 本しか削らない(5,024)が、Bonferroni は 988 本も削る(4,075)。この BH と Bonferroni の差 949 本こそ「FDR は FWER より緩い」の実体だ。具体例として、列ペア C3301 × G7102 は r=0.599, p≈1.0×10⁻⁵ で、Bonferroni の門(8.5×10⁻⁶)は通れないが BH では有意。逆に BH で最後に採択された境界上のペアは B4109 × F3101(r=-0.297, p≈0.0425)で、ここまでを棄却して集合全体の期待偽陽性割合が 5% に収まる。「1 個も間違えない Bonferroni」と「山全体で 5% までの汚れを許す BH」— 検出力の差 949 本は、この哲学の違いがそのまま数字になったものである。