このページ内のセクションへ素早く飛べます(クリックで該当箇所へジャンプ):
🍰 まずはやさしく
差を見逃さないための計算方法です。
必要な人数を事前に決めるために使います。
アンケートに何人答えてもらうか決めます。
結論を出すための4つの要素を学びます。
🍰 まずはやさしく
検定を始める前の準備のようなものです。
人数不足で失敗することを防ぐために使います。
県ごとのデータを比べる時に役立ちます。
このページの構成と使い方を説明します。
検出力分析(Power Analysis)は、 仮説検定の 前段階 に位置する手続きです。 「いざ検定を回したら p>0.05 で結論が出せなかった」「サンプルが足りなくて第二種の過誤を量産した」を防ぐため、 実験デザイン時に 必要サンプル数 n を算出します。 SSDSE-B-2026 のような既存データを使う場合でも、 「47 県のサンプルで本当に意味のある差を検出できるか」を点検するのに使えます。
本ページは 検出力分析(Power Analysis) を、 ジャストインタイム型データサイエンス教育の文脈で 12 セクションに分けて解説します。 上から順に読まなくても「🔖 キーワード索引」から必要箇所だけ拾い読み可。 「💡 30 秒結論」→「🧮 実値計算」→「🐍 Python 実装」の順だけでも 15 分で実用最低限が掴めます。
🍰 まずはやさしく
暗闇で星を探すような作業です。
差を正しく見つけられる確率を高めます。
スマホアプリの改善に何人必要か考えます。
直感的に仕組みを理解するための例を見ます。
「暗闇で星を探す」のに似ています。 真に星(差・効果)があるとき、 暗視ゴーグル(検定)でそれを発見できる確率が 検出力 1-β。 ゴーグル性能を上げるには:
実務での意味:A/B テストで「新デザインのコンバージョン率が旧デザインより 1% 高い」を検出したいとき、 必要なユーザー数は何人か? 検出力分析がこれに答えます。 ナイーブに「とりあえず 100 人」では、 真の差があってもほぼ確実に見逃します(検出力 ≈ 0.1)。
| 場面 | 検出力分析の典型用途 | 何が分かるか |
|---|---|---|
| 臨床試験プロトコル | 「新薬と既存薬の差を検出するために何例必要か」 | 必要被験者数、 IRB 申請書の根拠 |
| A/B テスト | 「CVR 1% の改善を検出するためのユーザー数」 | 実験期間と必要トラフィック |
| 公衆衛生調査 | 「県別の有病率比較に必要な調査規模」 | 予算配分、 標本設計 |
| 既存データの再評価 | 「SSDSE 47 県でも差を検出できる効果量の下限は?」 | 研究の限界、 結論の堅牢性 |
| p>0.05 結果の解釈 | 「有意差なし = 差がない?」を検証 | 第2種の過誤の可能性 |
「事前に検出力分析をしていない実験は、 ガソリン残量を見ずに長距離ドライブに出るようなもの」と言われます。 統計学者 Cohen は 1988 年の『Statistical Power Analysis for the Behavioral Sciences』で、 社会科学論文の大半が検出力 0.5 を下回ると警告しました。
🍰 まずはやさしく
検出力を数式で表したものです。
正確な人数を計算するために使います。
テストの点数の差を数値で表します。
計算に使う公式と定義について学びます。
検出力(Power)は「H₁ が真のとき H₀ を正しく棄却する確率」:
$$ \text{Power} = 1 - \beta = P(\text{reject } H_0 \mid H_1 \text{ is true}) $$
2 標本 t 検定(等分散・両側)の場合、 検出力 1-β、 効果量 d、 サンプル数 n、 有意水準 α の関係:
$$ \text{Power} = 1 - \Phi\!\left(z_{1-\alpha/2} - d\sqrt{\tfrac{n}{2}}\right) + \Phi\!\left(-z_{1-\alpha/2} - d\sqrt{\tfrac{n}{2}}\right) $$
Cohen's d(2 群平均差の標準化効果量):
$$ d = \frac{\mu_1 - \mu_2}{\sigma_{\text{pooled}}} , \quad \sigma_{\text{pooled}} = \sqrt{\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1+n_2-2}} $$
必要サンプル数 n は逆関数的に求める(解析的閉形式なし、 数値解):
$$ n \approx \frac{2(z_{1-\alpha/2} + z_{1-\beta})^2}{d^2} $$
この最後の近似式が重要。 例えば α=0.05、 1-β=0.80、 d=0.5 を代入すると n ≈ 2(1.96+0.84)²/0.25 ≈ 63 / 群。
先ほどの「必要サンプル数 n ≈ 2(z_{1-α/2}+z_{1-β})²/d²」を、 一つずつ言葉に翻訳します。
| 記号 | 意味と注意点 |
|---|---|
| $n$ | 1 群あたりのサンプル数(2 群合計ではない)。 出力されるのは「片方の群に必要な被験者数」。 全体は 2n。 |
| $d$ | Cohen's d(標準化平均差)。 0.2=小、 0.5=中、 0.8=大が慣例。 同じ平均差でも標準偏差で割るため 無次元量 になる。 |
| $\alpha$ | 有意水準(第1種の過誤確率)。 通常 0.05。 これを下げる(厳しくする)と n は増える。 |
| $\beta$ | 第2種の過誤確率(H₁ が真なのに H₀ を棄却しない)。 検出力 = 1-β。 慣例で β=0.20(つまり Power=0.80)。 |
| $z_{1-\alpha/2}$ | 標準正規分布の上側 α/2 点。 α=0.05 なら 1.960、 α=0.01 なら 2.576。 |
| $z_{1-\beta}$ | 標準正規分布の上側 β 点。 β=0.20 なら 0.842、 β=0.10 なら 1.282。 |
| $\Phi$ | 標準正規分布の累積分布関数(CDF)。 scipy では stats.norm.cdf。 |
直観: 「検出力を上げる ⇔ z_{1-β} が大きくなる ⇔ 分子が大きくなる ⇔ n が増える」。 効果量 d が小さい(微妙な差)ほど分母が小さくなり、 必要 n は d² に反比例して急増。 d を半分にすると n は 4 倍必要。
例: d=0.5 で n≈63 → d=0.25 にすると n≈252 → d=0.1 にすると n≈1571。 「ごく小さい差」を検出したいなら数千人規模の実験が必要になる、 という現実が見えてきます。
SSDSE-B-2026(47都道府県 × 12 年・2023 年抽出・112 列)から「関東 7 都県 vs その他 40 県」の高齢化率を比較する設定で、 検出力分析を実演します。 すでに観測されている 47 県データを使い、 事後検出力(post-hoc power) と 必要 n の事前計算を両方計算します。
プール標準偏差:
$$ s_p = \sqrt{\frac{(7-1)\cdot 2.97^2 + (40-1)\cdot 3.01^2}{7+40-2}} = \sqrt{\frac{52.93 + 353.34}{45}} \approx 3.01 $$
$$ d = \frac{27.99 - 32.21}{3.01} = \frac{-4.22}{3.01} \approx -1.40 $$
効果量 |d|=1.40 は Cohen の慣例(0.8=大)を超える 「巨大な効果」。 関東と地方の高齢化格差が極端に大きいことを示す。
α=0.05、 d=1.40、 n1=7、 n2=40 で 2 標本 t 検定の検出力:
$$ \text{Power} = 1 - \Phi(z_{0.975} - |d|\sqrt{n_h/2}) \quad n_h = \frac{2 n_1 n_2}{n_1+n_2} = \frac{2 \cdot 7 \cdot 40}{47} \approx 11.91 $$
$$ \text{Power} \approx 1 - \Phi(1.96 - 1.40 \times \sqrt{5.96}) = 1 - \Phi(1.96 - 3.42) = 1 - \Phi(-1.46) = 0.928 $$
検出力 ≈ 0.93(正規近似)。 statsmodels の非心 t 分布による厳密値は 0.918(91.8%)。 いずれも高く、 関東 vs 地方の高齢化格差は十分大きいため、 サンプル 47 県という小さな標本でも検出できる。
仮に高齢化率の差が 1 ポイント程度(d≈0.3)に縮まった場合、 1 群あたり何例必要か:
$$ n \approx \frac{2(1.96+0.84)^2}{0.3^2} = \frac{2 \times 7.84}{0.09} \approx 174 \text{ 例 / 群} $$
d=0.3 では 1 群 174 例、 合計 348 例必要。 都道府県データ(47 件)では捕まえられない大きさ。 市区町村レベルや学区レベルの細かい単位での比較が必要になる。
| 効果量 d | 分類 | 必要 n / 群 | 合計 (2 群) | 直観的な目安 |
|---|---|---|---|---|
| 0.1 | 極小 | 1571 | 3142 | 大規模 RCT、 5000 人調査 |
| 0.2 | 小 | 394 | 788 | A/B テスト 1 週間分 |
| 0.3 | 小-中 | 176 | 352 | 中規模アンケート |
| 0.5 | 中 | 64 | 128 | 教育介入研究の標準 |
| 0.8 | 大 | 26 | 52 | パイロット試験 |
| 1.2 | 巨大 | 12 | 24 | 明らかな差、 12 例で十分 |
| 1.6 | 超巨大 | 8 | 16 | 超巨大効果(SSDSE 実測 d≈1.40 は約 10 例 / 群) |
この表が 検出力分析の心臓部。 効果量を半分にするとサンプル数は約 4 倍必要、 という関係を視覚化したもの。 実験デザイン時、 効果量 d を仮定(先行研究・予備実験から)→ 必要 n を読み取る、 が標準フロー。
検出力分析の標準ライブラリは statsmodels.stats.power。 2 標本 t 検定なら TTestIndPower、 1 標本なら TTestPower、 χ² なら GofChisquarePower、 比率差なら NormalIndPower など、 検定の種類ごとにクラスが用意されています。 4 引数(effect_size, nobs1, alpha, power)のうち 3 つを与えれば 4 つ目を計算します。
🎯 このコードでやること: SSDSE-B-2026 を読み込み、 関東 7 都県と他 40 県の高齢化率について Cohen's d を算出。 statsmodels で事後検出力 (post-hoc power) を計算する。
📥 入力データ: SSDSE-B-2026(112 列)の 2023 年・47 県。 A1101 総人口と A1303 65 歳以上人口の 2 列を使用。
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 | import pandas as pd import numpy as np from scipy import stats from statsmodels.stats.power import TTestIndPower df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023].copy() # 2023 年のみに限定(47 県) df['aging_rate'] = df['A1303'] / df['A1101'] * 100 # 高齢化率(%) kanto = ['茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県'] g1 = df[df['Prefecture'].isin(kanto)]['aging_rate'].values # 関東 7 都県 g2 = df[~df['Prefecture'].isin(kanto)]['aging_rate'].values # その他 40 県 # Cohen's d を計算 mean_diff = g1.mean() - g2.mean() pooled_sd = np.sqrt(((len(g1)-1)*g1.var(ddof=1) + (len(g2)-1)*g2.var(ddof=1)) / (len(g1)+len(g2)-2)) d = mean_diff / pooled_sd print(f'関東平均 = {g1.mean():.2f}%') print(f'その他平均 = {g2.mean():.2f}%') print(f'差 = {mean_diff:+.2f} pp') print(f"Cohen's d = {d:+.3f}") # 事後検出力(既得サンプルでの power) analysis = TTestIndPower() power = analysis.power(effect_size=abs(d), nobs1=len(g1), alpha=0.05, ratio=len(g2)/len(g1), alternative='two-sided') print(f'事後検出力 1-β = {power:.4f}') # t 検定でも検証 t, p = stats.ttest_ind(g1, g2, equal_var=False) print(f't = {t:.3f}, p = {p:.6f}') |
📤 実行結果:
💬 結果の読み方: Cohen's d=-1.40 は「巨大な効果量」(慣例で 0.8 超が大)。 事後検出力 0.918 = この実験デザインなら約 92% の確率で差を検出できる。 実際 Welch の t 検定でも p<0.01 で H₀ 棄却。 関東は地方より平均 4.22pp 若い県集団。 ただし「事後検出力」は議論あり(観測 d 自体が偶然変動するため)。 計画段階の事前検出力が本来の用途。
🎯 このコードでやること: 検出したい効果量 d=0.5 (中)、 有意水準 α=0.05、 検出力 1-β=0.80 のとき、 1 群あたり必要なサンプル数 n を逆算する。 さらに効果量を 0.1〜1.0 まで変えた早見表を作成。
📥 入力データ: 数式パラメータのみ(データファイル不要)。 効果量 d は先行研究や予備調査から得る想定値。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | from statsmodels.stats.power import TTestIndPower import pandas as pd analysis = TTestIndPower() # ケース 1: 標準設定(d=0.5, α=0.05, power=0.80) n_req = analysis.solve_power(effect_size=0.5, alpha=0.05, power=0.80, ratio=1.0, alternative='two-sided') print(f'd=0.5 で必要 n = {n_req:.1f} / 群') # ケース 2: 効果量別の必要 n(早見表) rows = [] for d in [0.1, 0.2, 0.3, 0.5, 0.8, 1.0, 1.2, 1.6]: n = analysis.solve_power(effect_size=d, alpha=0.05, power=0.80, ratio=1.0, alternative='two-sided') rows.append({'Cohen d': d, '必要 n / 群': int(np.ceil(n)), '合計 (2群)': int(np.ceil(n)*2)}) import numpy as np print(pd.DataFrame(rows).to_string(index=False)) |
📤 実行結果:
💬 結果の読み方: 標準仕様(d=0.5, α=0.05, 1-β=0.80)で 1 群 64 例。 d を半分にすると n は約 4 倍に膨らむ(d² に反比例)。 d=0.1 では 1500 例 / 群 という非現実的な規模。 「ごく僅かな差を統計的に有意にしたい」研究設計には警告灯が点る、 という現実を示す。
🎯 このコードでやること: 効果量 d を 0.2/0.5/0.8 と固定し、 サンプル数 n を 5〜200 まで動かしたときの検出力 1-β を曲線として描画。 目標 power=0.80 ラインも合わせて引く。
📥 入力データ: 数式パラメータのみ。 n のグリッド (5〜200 を 40 点)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import numpy as np import matplotlib.pyplot as plt from statsmodels.stats.power import TTestIndPower analysis = TTestIndPower() ns = np.arange(5, 201, 5) plt.figure(figsize=(9, 5)) for d, label in [(0.2, 'd=0.2 (小)'), (0.5, 'd=0.5 (中)'), (0.8, 'd=0.8 (大)')]: powers = [analysis.power(effect_size=d, nobs1=n, alpha=0.05, ratio=1.0, alternative='two-sided') for n in ns] plt.plot(ns, powers, marker='o', label=label, linewidth=2) plt.axhline(0.80, color='red', linestyle='--', label='Power=0.80 目標') plt.xlabel('サンプル数 n / 群') plt.ylabel('検出力 1 - β') plt.title('検出力曲線(α=0.05, 両側 t 検定)') plt.legend() plt.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('power_curve.png', dpi=120) |
📤 実行結果:
💬 結果の読み方: 効果量が小さいほど power 曲線は寝る。 d=0.2 では n=200 でも 50% しか検出できない(コインのように半分は見逃す)。 実験計画で「とりあえず n=100 で」と決めるのは、 d=0.5 以上の効果でないと意味がないことが視覚的に理解できる。 教育・社会科学の研究で d=0.2-0.3 程度の効果を狙うなら、 数百〜数千の標本を準備する覚悟が必要。
🎯 このコードでやること: A/B テストで CVR(コンバージョン率)p1=5%, p2=6% の差を検出したいとき、 1 群あたり必要なユーザー数を比率検定の検出力分析で算出。 効果量は Cohen's h で計算。
📥 入力データ: ベースライン CVR (5%) と目標改善後 CVR (6%) の 2 値のみ。
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 | import numpy as np from statsmodels.stats.power import NormalIndPower from statsmodels.stats.proportion import proportion_effectsize # A/B テスト想定: 旧 5%、 新 6% への改善を検出したい p1, p2 = 0.05, 0.06 h = proportion_effectsize(p1, p2) # Cohen's h print(f"Cohen's h = {h:.4f}") # 必要サンプル数(α=0.05, power=0.80, 両側) analysis = NormalIndPower() n_req = analysis.solve_power(effect_size=abs(h), alpha=0.05, power=0.80, ratio=1.0, alternative='two-sided') print(f'必要 n = {n_req:.0f} / 群') print(f'合計 = {n_req*2:.0f}') # CVR 別の必要 n 早見表 import pandas as pd rows = [] for p_new in [0.051, 0.052, 0.055, 0.06, 0.07, 0.08, 0.10]: h = proportion_effectsize(0.05, p_new) n = analysis.solve_power(effect_size=abs(h), alpha=0.05, power=0.80, ratio=1.0, alternative='two-sided') rows.append({'旧CVR':'5.0%','新CVR':f'{p_new*100:.1f}%', '改善幅 pp':f'{(p_new-0.05)*100:.1f}', "Cohen's h":f'{h:.4f}', '必要 n / 群':int(np.ceil(n))}) print(pd.DataFrame(rows).to_string(index=False)) |
📤 実行結果:
💬 結果の読み方: CVR 5%→6%(1pp 改善)を検出するだけで 1 群 8,143 ユーザー、 合計 16,285 必要(2 標本・両側・statsmodels NormalIndPower)。 5%→5.1%(0.1pp)なら約 75 万人 / 群。 これが A/B テスト現場で「微小改善は検出できない」と言われる根拠。 一方 CVR 5%→10%(倍増)なら 424 人 / 群で十分。 実験開始前に「どれくらいの改善を狙うか」を決めれば、 何週間データ収集が必要かが見える。 ※注意: この n は 2 標本独立検定(statsmodels 0.14.5・実測)の値。 1 標本近似公式 (z_α/2+z_β)²/h² では約半分(≈4,054)となり、 1 標本/2 標本の別や statsmodels のバージョンで数値が変わる点に注意。
※ より高度な例(混合効果モデルの検出力、 シミュレーションベースの検出力、 多重比較補正下の検出力)は hypothesis-testing のグループ教材を参照。
検出力分析に取り組むときに、 学生・実務者・研究者がよく踏むワナをまとめました。 該当しそうな項目があれば、 自分の分析を見直してみてください。
検出力分析の概念は Neyman-Pearson の検定理論(1933 年)から出発。 1962 年に Cohen が『Statistical Power Analysis for the Behavioral Sciences』で「効果量」(effect size) の概念を体系化し、 1988 年第 2 版で社会・行動科学に普及させました。 Cohen は当時の心理学論文の典型的検出力が 0.5 未満であることを暴露し、「実験を計画する前に検出力を計算する」文化を確立した功労者です。
2010 年代に「再現性危機」が表面化すると、 検出力不足は 偽陽性問題と並ぶ主要原因として再注目。 Ioannidis (2005)『Why Most Published Research Findings Are False』では低検出力研究が偽陽性発見率を押し上げる構造が議論されました。 現代の臨床試験では 事前検出力 0.80 以上が IRB / FDA 提出の事実上の必須条件です。
| 領域 | データサイエンスが使われる場面 |
|---|---|
| 高校・大学教育 | 情報 II、 心理統計、 医学統計、 実験計画法の中で必修化が進む |
| 医薬品開発 | 治験プロトコル(PMDA 申請)で必須、 サンプル数算出と CI 記載 |
| マーケティング | A/B テスト基盤(Optimizely、 VWO 等)に検出力分析が標準搭載 |
| 政策評価(EBPM) | RCT 型政策実証(Evidence-Based Policy Making)でサンプル設計に使用 |
| 公衆衛生調査 | 県別・地域別有病率比較に必要な調査規模設計 |
| 混同される概念 | 検出力分析 との違い |
|---|---|
| 有意水準 α | α は第1種の過誤確率 (false positive)、 検出力 1-β は第2種の過誤の補集合 |
| p 値 | p 値は実験後のデータから計算、 検出力は実験前に仮定した d から計算 |
| 信頼区間 | CI は推定の精度、 検出力は仮説検定の感度。 用途が異なる |
| 効果量 | 効果量は検出力分析の 入力、 検出力はその関数として出力される |
| 事前 vs 事後検出力 | 事前検出力 = 計画用 (推奨)、 事後検出力 = 観測 d を入れ直すだけ (非推奨) |
statsmodels.stats.power.TTestIndPower 等で算出したかnumpy.random + scipy.stats または専用ライブラリ simr(R)が便利。検出力分析は「サンプル数を逆算する」だけでなく、 4 つの異なるシナリオで使い分けます。 どのパラメータを既知とし、 どれを求めたいかで適用方法が変わります。
| シナリオ | 既知の入力 | 求めるもの・典型用途 |
|---|---|---|
| A priori (事前) | 効果量 d, α, 1-β | 必要 n を逆算。 IRB 申請・実験計画書の根拠。 最重要・最頻出 |
| Post-hoc (事後) | 観測 d, n, α | 実際に達成された power を算出。 議論あり (Hoenig 2001)、 慎重に使用 |
| Sensitivity (感度) | n, α, 1-β | 「このサンプルで検出可能な最小効果量」を逆算。 既存データの解釈に有用 |
| Compromise (妥協) | d, n, β/α 比率 | サンプル制約下で α と β のバランスを最適化。 リソース不足時の妥協策 |
📌 統計家 Cohen は a priori を「正攻法」、 post-hoc を「弁明用」、 sensitivity を「実用ツール」、 compromise を「妥協案」と位置づけました。 研究計画の初期段階では a priori → sensitivity の二段階で検討するのが堅実。
数式だけ眺めても直観が得にくい検出力。 「H₀ が真のときの統計量分布」と「H₁ が真のときの分布」の 2 つの正規曲線の重なりとして図示すると一気に明瞭になります。
| 領域 | 幾何学的意味 |
|---|---|
| α (第1種の過誤) | H₀ 分布の右側(棄却域)で覆われる面積。 通常 0.025 × 2 = 0.05 |
| β (第2種の過誤) | H₁ 分布のうち棄却域に入らない部分(採択域)の面積 |
| 1-β (検出力) | H₁ 分布のうち棄却域に入る部分の面積 = 「真の差を検出できる確率」 |
| 分布の中心間距離 | d × √(n/2) に等しい。 効果量 ↑ または n ↑ で 2 分布が離れる |
直観的には: 「H₀ 分布と H₁ 分布が離れる → 重なりが減る → 検出力が上がる」。 そして 2 分布が離れる要因は ① 効果量 d を大きく仮定する、 ② n を増やす、 の 2 通り。
この幾何学的視点は 「α と β はトレードオフ」であることを明示する。 棄却域を広げれば α↑ かつ β↓(検出力↑)、 棄却域を狭めれば α↓ かつ β↑(検出力↓)。 両方同時に下げるには n を増やすしかない。
🎯 このコードでやること: SSDSE-B-2026 を 8 地域ブロック(北海道・東北・関東・中部・近畿・中国・四国・九州沖縄)に分け、 各地域と全国平均の出生率差を 1 標本 t 検定。 各地域での検出力を計算し、 県数の少ない地域ほど検出力が低下することを実証。
📥 入力データ: SSDSE-B-2026 の 47 県 × A1101 総人口、 A4101 出生数(出生率 = A4101/A1101*1000)。 地域分類は手動で 47 県を 8 ブロックに割当。
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 | import pandas as pd import numpy as np from scipy import stats from statsmodels.stats.power import TTestPower df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023].copy() # 2023 年度に限定(47 県) df['birth_rate'] = df['A4101'] / df['A1101'] * 1000 regions = { '北海道': ['北海道'], '東北': ['青森県','岩手県','宮城県','秋田県','山形県','福島県'], '関東': ['茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県'], '中部': ['新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県'], '近畿': ['三重県','滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県'], '中国': ['鳥取県','島根県','岡山県','広島県','山口県'], '四国': ['徳島県','香川県','愛媛県','高知県'], '九州沖縄':['福岡県','佐賀県','長崎県','熊本県','大分県','宮崎県','鹿児島県','沖縄県'] } nation_mean = df['birth_rate'].mean() analysis = TTestPower() print(f'全国平均 出生率 = {nation_mean:.3f} (人口千対)') print(f"{'地域':6} {'県数':3} {'地域平均':9} {'差':7} {'Cohen d':8} {'power':6} {'p値':8}") print('-'*70) for reg, prefs in regions.items(): sub = df[df['Prefecture'].isin(prefs)]['birth_rate'].values n = len(sub) d = (sub.mean() - nation_mean) / sub.std(ddof=1) if n > 1 else 0 if n > 1: power = analysis.power(effect_size=abs(d), nobs=n, alpha=0.05, alternative='two-sided') t, p = stats.ttest_1samp(sub, nation_mean) print(f'{reg:6} {n:3} {sub.mean():9.3f} {sub.mean()-nation_mean:+7.3f} ' f'{d:+8.3f} {power:6.3f} {p:.4f}') else: print(f'{reg:6} {n:3} {sub.mean():9.3f} N=1 のため検定不可') |
📤 実行結果:
💬 結果の読み方: 効果量の大きい東北(d=-1.76, 検出力 0.926)と九州沖縄(d=+0.99, 0.674)は差を検出できる一方、 効果量の小さい中部(d=-0.10)は検出力 0.058、 近畿(d=+0.21)は 0.076 と、 「差を検出する力がほぼゼロ」。 これらで「全国と差がない」という結論は有意差なし = 差がない、 ではない典型例。 県数だけでなく効果量の大きさが検出力を左右することが地域比較で明確化される。
計画段階の検出力 0.80 を確保していても、 実施段階で検出力が大幅に低下することがあります。 主な原因 6 つと対策を整理:
| 要因 | 検出力への影響 | 対策 |
|---|---|---|
| ① 脱落 (Attrition) | n が想定より減少 → 検出力直線的に低下 | 計画 n に 1/(1-脱落率) を掛けて余裕を持たせる |
| ② 測定誤差 | σ↑ → d↓(標準化されるため)→ 検出力低下 | 信頼性の高い測定法、 複数測定の平均化 |
| ③ 多重比較補正 | α↓ → 棄却域縮小 → 検出力低下 | Bonferroni 補正後 α で n を再計算 (n 約 30% 増) |
| ④ 不均衡な群サイズ | n₁:n₂ = 1:1 から離れると検出力低下 | 層別化、 群サイズの近似化(80:20 比は避ける) |
| ⑤ 仮定からの逸脱 | 非正規分布、 等分散性違反 → 解析的 power が過大評価 | ノンパラ検定 (Wilcoxon) の使用 or シミュレーション |
| ⑥ 効果量の過大評価 | 実際の d < 仮定 d → 検出力大幅低下 | 先行研究のメタ分析、 保守的見積もり、 アダプティブデザイン |
📌 6 要因が積み重なると、 計画検出力 0.80 が 実質 0.40 以下になることも珍しくありません。 重要な研究では 「実効検出力 = 計画検出力 × Π(各要因の劣化率)」を試算してリスク評価する。
2 群比較は t 検定 + Cohen's d だが、 3 群以上の比較は F 検定(ANOVA)+ Cohen's f を使う。 Cohen's f の慣例値: 0.10 (小)、 0.25 (中)、 0.40 (大)。
🎯 このコードでやること: 3 群比較(小・中・大の効果量)で必要サンプル数を FTestAnovaPower で算出。 群数 k と効果量 f の関係を早見表化。
📥 入力データ: 数式パラメータのみ。 群数 k = 2/3/4/5/6 と効果量 f = 0.10/0.25/0.40 の組み合わせ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import numpy as np import pandas as pd from statsmodels.stats.power import FTestAnovaPower analysis = FTestAnovaPower() rows = [] for k in [2, 3, 4, 5, 6]: for f, label in [(0.10, '小'), (0.25, '中'), (0.40, '大')]: n_per_group = analysis.solve_power( effect_size=f, alpha=0.05, power=0.80, k_groups=k) / k # solve_power は全群合計 nobs を返すため k で割る rows.append({ '群数 k': k, "Cohen's f": f, '分類': label, '必要 n / 群': int(np.ceil(n_per_group)), '合計 N': int(np.ceil(n_per_group * k)) }) print(pd.DataFrame(rows).to_string(index=False)) |
📤 実行結果:
💬 結果の読み方: 群数 k が増えると 1 群あたりの必要 n は減る(df が増えて検定の効率が上がる)が、 合計 N は増える。 中程度の効果(f=0.25)を 6 群で検出するには合計 211 例必要。 SSDSE の 8 地域ブロック比較(k=8)では小効果なら約 180 例 / 地域必要、 47 県では検出力不足だが、 大効果(f=0.40)なら各地域 13 例で十分。
| 年 | 人物・出典 | 貢献 |
|---|---|---|
| 1933 | Neyman & Pearson | 仮説検定の枠組み、 第1種・第2種の過誤の概念化 |
| 1962 | Cohen 初版 | 『Statistical Power Analysis for the Behavioral Sciences』、 効果量の導入 |
| 1988 | Cohen 第2版 | d/f/h/w など各種効果量の体系化、 慣例値の提案 |
| 1996 | Faul & Erdfelder | G*Power 開発、 GUI による検出力分析の普及 |
| 2001 | Hoenig & Heisey | 『The Abuse of Power』、 事後検出力批判 |
| 2005 | Ioannidis | 『Why Most Published Research Findings Are False』、 低検出力研究の問題提起 |
| 2015 | Open Science Collab. | 再現性危機の実証、 検出力分析の見直し気運 |
| 2018 | Lakens et al. | SESOI(Smallest Effect Size of Interest)の概念普及、 同等性検定との統合 |
| 日本語名 | 検出力分析(パワー分析) |
|---|---|
| 英語名 | Power Analysis (Statistical Power Analysis) |
| カテゴリ | 仮説検定 / 実験計画 |
| グループ教材 | hypothesis-testing |
| 一言で | 真に効果があるとき H₀ を正しく棄却する確率 (1-β) を計算 / 必要 n を逆算する手法 |
| 基本式 | n ≈ 2(z_{1-α/2} + z_{1-β})² / d² |
| 慣例値 | α=0.05、 1-β=0.80、 d=0.5(中) → 1 群 64 例 |
| 主データ | SSDSE-B-2026(47都道府県 × 12 年・112 列・564 行)/ e-Stat |
| 主ライブラリ | statsmodels.stats.power (TTestIndPower / NormalIndPower / FTestAnovaPower) / G*Power / pwr (R) |
| 学習推奨時間 | 概念把握 30 分 + Python 演習 60 分 + 早見表暗記 30 分 = 約 2 時間 |
| 推奨タイミング | 実験計画書作成時 / IRB 申請時 / A/B テスト立ち上げ時 / p>0.05 結果の解釈時 |
頻度論の検出力分析は「p<α で H₀ 棄却する確率」だが、 ベイズ流は 「Bayes Factor が閾値 (例: BF₁₀ > 10) を超える確率」を事前計算する。 Schönbrodt & Wagenmakers (2018) が体系化。
| 概念 | 頻度論 | ベイズ流 (BFDA) |
|---|---|---|
| 判定基準 | p < 0.05 | BF₁₀ > 10 (Strong evidence) |
| 事前パラメータ | 効果量 d (点推定) | d の事前分布 (Cauchy(0, 0.707) 等) |
| 出力 | 必要 n(固定) | 「BF が閾値超過する確率 ≥ 0.80 となる n」 |
| サンプル停止 | 事前に固定(peeking 禁止) | Sequential design 可(BF 閾値到達で停止) |
| H₀ の証拠 | 「棄却できない」止まり | BF₀₁ > 10 で「H₀ を積極的に支持」可 |
ベイズ流の最大の利点は 「H₀ を積極的に証拠付けられる」こと。 頻度論では「有意差なし」は不可知論的だが、 BF₀₁ > 10 は「差がない仮説を 10 倍支持」を意味する。 同等性検定(TOST)と並ぶ重要な発展。
📌 SSDSE-B-2026 で「東京と大阪の出生率に 差がないことを統計的に示したい」場合、 頻度論の検出力分析だけでは無理。 ベイズ BFDA か同等性検定で攻めるのが正攻法。
解析的公式が使えない複雑モデル(非正規分布、 階層モデル、 ロジスティック回帰、 生存分析)では、 モンテカルロ・シミュレーションで検出力を推定するのが標準。
🎯 このコードでやること: SSDSE-B-2026 の高齢化率分布をブートストラップ的に再サンプリングし、 関東 7 vs 他 40 県の比較について 5,000 回シミュレーションを実施。 解析的検出力との一致を確認する。
📥 入力データ: SSDSE-B-2026 の 47 県データから経験分布を作成し、 リサンプリングのソースとする。
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 | import pandas as pd import numpy as np from scipy import stats from statsmodels.stats.power import TTestIndPower df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023].copy() # 2023 年のみに限定(47 県) df['aging_rate'] = df['A1303'] / df['A1101'] * 100 kanto = ['茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県'] g1 = df[df['Prefecture'].isin(kanto)]['aging_rate'].values g2 = df[~df['Prefecture'].isin(kanto)]['aging_rate'].values # 経験分布から再サンプリング → シミュレーション検出力 N_SIM = 5000 rng = np.random.default_rng(42) sig_count = 0 for _ in range(N_SIM): sample1 = rng.choice(g1, size=len(g1), replace=True) sample2 = rng.choice(g2, size=len(g2), replace=True) _, p = stats.ttest_ind(sample1, sample2, equal_var=False) if p < 0.05: sig_count += 1 sim_power = sig_count / N_SIM print(f'シミュレーション検出力 (N=5000) = {sim_power:.4f}') # 解析的検出力と比較 analysis = TTestIndPower() mean_diff = g1.mean() - g2.mean() pooled_sd = np.sqrt(((len(g1)-1)*g1.var(ddof=1) + (len(g2)-1)*g2.var(ddof=1)) / (len(g1)+len(g2)-2)) d = mean_diff / pooled_sd analytical_power = analysis.power(effect_size=abs(d), nobs1=len(g1), alpha=0.05, ratio=len(g2)/len(g1)) print(f'解析的検出力 = {analytical_power:.4f}') print(f'差 = {abs(sim_power - analytical_power):.4f}') |
📤 実行結果:
💬 結果の読み方: シミュレーション値(0.973)と解析的値(0.918)に約 5.5% の差。 この差は ① 経験分布が正規分布から乖離している、 ② サンプル数が少ない(n=7+40)ため漸近近似が不正確、 ③ ブートストラップは Welch の t を、 解析式はプール標準偏差を用いる、 の要因による。 いずれも 0.9 超の高い検出力を示すが、 厳密な研究では シミュレーション値を信頼すべき。 解析的公式は「正規・等分散・大標本」の理想条件下での近似値である。
「なぜ多くの研究結果は再現されないのか」 — Ioannidis の 2005 年の論文は、 検出力分析の重要性を社会的に認知させた決定的な論考でした。 核心の式:
$$ \text{PPV} = \frac{(1-\beta) \cdot \pi}{(1-\beta) \cdot \pi + \alpha \cdot (1-\pi)} $$
ここで PPV (Positive Predictive Value) = 「有意」と判定された結果が真である確率、 π = 事前確率(仮説が真である確率)。
| 検出力 (1-β) | 事前確率 π | α | PPV (真陽性率) |
|---|---|---|---|
| 0.80 (標準) | 0.50 (五分五分) | 0.05 | 94.1% |
| 0.80 | 0.10 (探索的) | 0.05 | 64.0% |
| 0.50 (低) | 0.10 | 0.05 | 52.6% |
| 0.30 (検出力不足) | 0.10 | 0.05 | 40.0% |
| 0.30 | 0.01 (極小) | 0.05 | 5.7% |
📌 検出力 0.30、 事前確率 0.01 の研究では、 「有意」と出ても 真である確率 は たった 5.7%。 つまり 94% の有意結果が偽陽性。 これが「再現性危機」の数学的根拠。 検出力を上げる、 事前確率の高い仮説を立てる、 のいずれもが必要。
Ioannidis の警告以降、 「単一の有意結果を信用するな、 メタ分析と再現実験で確認せよ」が現代の科学的態度の基本原則となりました。 検出力分析はそのための事前ツールです。
2 群のサイズが等しい(n₁=n₂)が最も検出力が高い、 が、 実務では群サイズが偏ることが多い。 例: 観察研究で症例 50 vs 対照 500、 SSDSE で関東 7 vs その他 40。
🎯 このコードでやること: 合計 N=100 を固定して n₁:n₂ 比率を変えたときの検出力を計算。 均衡デザインがどれだけ有利かを定量化する。
📥 入力データ: パラメータのみ。 効果量 d=0.5、 合計 N=100、 比率を 5:95 から 50:50 まで動かす。
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 | import numpy as np import pandas as pd from statsmodels.stats.power import TTestIndPower analysis = TTestIndPower() total_n = 100 d = 0.5 rows = [] for n1 in [5, 10, 20, 30, 40, 50]: n2 = total_n - n1 ratio = n2 / n1 power = analysis.power(effect_size=d, nobs1=n1, alpha=0.05, ratio=ratio, alternative='two-sided') rows.append({ 'n1': n1, 'n2': n2, 'n1:n2': f'{n1}:{n2}', '比': f'1:{ratio:.1f}', 'Power': f'{power:.3f}', '損失 (vs 50:50)': f'{(0.697-power)*100:.1f}%' }) print(pd.DataFrame(rows).to_string(index=False)) print('\n結論: 50:50 (均衡) が最も検出力が高い。') print('比率が偏ると検出力が低下する。') |
📤 実行結果:
💬 結果の読み方: 50:50 で検出力 0.697 が最大。 同じ合計 N=100 でも 5:95 にすると 0.190 まで急落(7 割超の損失)。 実務での教訓: ① ランダム割り付け実験では 50:50 を維持、 ② 観察研究で群サイズが偏る場合は層別マッチングで均衡化、 ③ 比率が 80:20 を超えると検出力ペナルティが顕著。 SSDSE 関東 7 vs 他 40(11:89)は 均衡デザインなら d=1.04 で達成できる検出力に等しいと読み替えられる。
正規性を仮定しないノンパラ検定(Mann-Whitney U、 Wilcoxon、 Kruskal-Wallis)は、 正規データでは パラメトリック検定の約 95% の検出力(漸近相対効率 ARE)を持つ。 非正規(歪んだ分布)では逆転し、 ノンパラの方が高検出力。
🎯 このコードでやること: SSDSE-B-2026 (2023 年度) から出生数(右に歪んだ分布)について、 t 検定と Mann-Whitney U 検定の検出力をシミュレーションで比較。
📥 入力データ: SSDSE-B-2026 (2023 年度) の A4101 出生数。 東京・神奈川・大阪など大都市が外れ値となる右に歪んだ分布。
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 | import pandas as pd import numpy as np from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023] # 2023 年度に限定 df = df[df['Prefecture'] != '全国'] # 全国計を除外 births = df['A4101'].values.astype(float) # 出生数(右に歪んだ分布) print(f'歪度 (skewness) = {stats.skew(births):.2f}') print(f'尖度 (kurtosis) = {stats.kurtosis(births):.2f}') print(f'平均={births.mean():,.0f}, 中央値={np.median(births):,.0f}') # 2 群を作成(人口上位 15 県 vs 中位 17 県) df_sorted = df.sort_values('A1101', ascending=False) top_births = df_sorted.head(15)['A4101'].values.astype(float) mid_births = df_sorted.iloc[15:32]['A4101'].values.astype(float) # Welch t 検定 vs Mann-Whitney U t_stat, p_t = stats.ttest_ind(top_births, mid_births, equal_var=False) u_stat, p_u = stats.mannwhitneyu(top_births, mid_births, alternative='two-sided') print(f'\nt 検定: t={t_stat:.3f}, p={p_t:.6f}') print(f'Mann-Whitney U: U={u_stat:.0f}, p={p_u:.6f}') # シミュレーション検出力比較(各群 8 県を復元抽出) N_SIM = 3000 rng = np.random.default_rng(0) t_sig, u_sig = 0, 0 for _ in range(N_SIM): s1 = rng.choice(top_births, size=8, replace=True) s2 = rng.choice(mid_births, size=8, replace=True) if stats.ttest_ind(s1, s2, equal_var=False)[1] < 0.05: t_sig += 1 if stats.mannwhitneyu(s1, s2, alternative='two-sided')[1] < 0.05: u_sig += 1 print(f'\n検出力比較 (N={N_SIM}):') print(f't 検定: {t_sig/N_SIM:.4f}') print(f'Mann-Whitney: {u_sig/N_SIM:.4f}') |
📤 実行結果:
💬 結果の読み方: 出生数は歪度 2.29(強い右歪み、 東京・神奈川など大都市が外れ値)。 このような分布では Mann-Whitney U 検定の検出力(0.9997)が t 検定(0.942)を上回る。 t 検定は正規性を仮定するため、 外れ値の影響で σ が大きく見積もられ d が縮小、 検出力が下がる。 SSDSE のような歪んだ実データでは Mann-Whitney U が安全。 一般則: 歪度>1 または尖度>3 なら ノンパラ を検討。
完全な計算には statsmodels や G*Power が必要だが、 暗算で必要 n の目安を出せる近似式を覚えておくと現場で便利。
$$ n \approx \frac{16}{d^2} \text{ / 群} $$
由来: 2 × (1.96 + 0.84)² ≈ 15.68 ≈ 16。 これを d² で割るだけで暗算可能。
$$ n \approx \frac{8}{d^2} $$
2 標本の半分。 1 標本なら d=0.5 で n ≈ 32 で十分。
$$ n \approx \frac{16 \cdot p(1-p)}{(\Delta p)^2} \text{ / 群} $$
p = ベースライン比率、 Δp = 検出したい差。
$$ n \approx \frac{8}{r^2} + 5 $$
想定相関係数 r が大きいほど少ない n で済む。
| 目標検出力 | z_{1-β} | n の倍率 (vs 0.80) |
|---|---|---|
| 0.70 | 0.524 | 0.79 |
| 0.80 (標準) | 0.842 | 1.00 |
| 0.90 | 1.282 | 1.34 |
| 0.95 | 1.645 | 1.67 |
| 0.99 | 2.326 | 2.32 |
例: 検出力 0.80 で n=64 必要だが、 0.90 にしたければ n ≈ 64 × 1.34 ≈ 86 / 群。
| α (両側) | z_{1-α/2} | n の倍率 (vs 0.05) |
|---|---|---|
| 0.10 | 1.645 | 0.79 |
| 0.05 (標準) | 1.960 | 1.00 |
| 0.01 | 2.576 | 1.49 |
| 0.001 | 3.291 | 2.10 |
📌 Bonferroni 補正で α=0.05/10=0.005 になる場合 → z=2.807 → n の倍率 ≈ 1.71。 つまり 10 個の検定で多重比較補正するなら、 各検定の必要 n を約 71% 増やす必要がある。
Cohen の慣例値(d=0.2/0.5/0.8)は便利だが、 分野ごとに「典型的な効果量」は大きく異なる。 メタ分析から得られた現実的な効果量と必要 n の対応表:
| 分野 | 典型効果量 d | 必要 n / 群 | 代表研究例 |
|---|---|---|---|
| 教育介入 | 0.30 (中央値) | 176 | Hattie (2009) メタ分析 |
| 心理療法 | 0.50-0.85 | 22-64 | Smith & Glass (1977) |
| 薬剤介入(精神科) | 0.30-0.50 | 64-178 | Leucht et al. (2012) |
| 運動・体力テスト | 0.40-0.60 | 44-100 | スポーツ科学レビュー |
| マーケティング A/B | h=0.05-0.15 | 350-3,200 | EC サイト実証 (Optimizely) |
| 行動経済学 | 0.20-0.40 | 100-394 | ナッジ研究メタ分析 |
| 遺伝子発現 | d<0.10 | 1,500+ | GWAS、 マイクロアレイ研究 |
| 物理・化学実験 | 1.0+ | 17 以下 | 高精度測定研究 |
📌 教育・心理・社会科学では d=0.2-0.5 が現実的目標。 マーケティングでは比率差 1-3pp 検出に 数千 n が必要。 遺伝子・脳画像研究では「大規模コホート」が必須。 自分の研究分野の典型値を 先行メタ分析から取得することが鉄則。
大学院生 A さんは新教材の効果を測るため、 統制群 30 人 + 介入群 30 人で実験を実施。 結果は p=0.18 で 「有意差なし」。 だが事後計算すると d=0.32 で、 教育介入の典型効果量と一致。 検出力 0.21 で 真の差を見逃した典型例。 計画段階で n=176/群 (d=0.3, power=0.80) と算出していれば防げた。 教訓: 「教育介入には数百人規模が必須」を覚える。
マーケ担当 B さんは新デザイン A/B テストで「3 日目に p=0.04 で有意」を見て即座に新デザインを採用。 計画 n=10,000 だったが 1,500 で停止。 1 ヶ月後、 別チームが再実験したら効果ゼロ。 これは peeking 問題(中間で見て止める)。 実質的に α が 0.30 程度に膨張。 教訓: 事前に決めた n まで覗かない、 sequential testing を導入する。
製薬企業 C は新薬の効果を 10 個のアウトカム指標で測定。 各検定で α=0.05、 検出力 0.80 で n=64/群と計算し試験実施。 結果 2 つで有意。 だが Bonferroni 補正後の有効 α=0.005 では実質検出力 0.30 程度しかなく、 偶然有意の可能性が高い。 FDA から再試験要求。 教訓: 多重検定の予定があるなら計画段階で α 補正して n を増やす。
研究者 D は 4 つのクラス(各 30 人 = 計 120 人)で読書介入を実施。 個人レベルの n=120 で検出力分析したが、 実際はクラス単位の介入。 級内相関 ICC=0.10 を考慮すると 有効 n は 120 × DEFF⁻¹ ≈ 40。 検出力大幅低下。 教訓: クラスター割り付け実験では DEFF (Design Effect) を考慮し、 n × (1 + (m-1)ρ) で補正。
A 社のデータサイエンティスト E は、 過去データから観察 d=0.6 を見て次回テストの必要 n を 44/群と計画。 実際の効果は d=0.35 で結果は失敗。 観察 d は winner's curse(有意になるデータほど d が過大評価される)の犠牲。 教訓: 計画用 d は「観察 d」ではなく「メタ分析の縮小推定」「下側信頼限界」を使う。
自治体研究員 F は SSDSE-B-2026 から「Aコース実施 10 県 vs 非実施 37 県」の効果検証。 通常の検出力分析で d=0.5 なら検出可能と判断したが、 実際は 不均衡デザイン(10:37)の検出力ペナルティ と 標本数自体が小さい(47 県のみ)の二重ペナルティ。 sensitivity 分析では d=0.8 以上でないと検出できない設計と判明。 教訓: 都道府県横断研究は「巨大効果」しか検出できないと事前理解する。
中間解析で観察効果量を確認し、 必要に応じて n を増減する設計。 ICH-E9(R1) で容認。 Type I error の膨張を防ぐため 条件付き検出力 (conditional power) と α-spending functionを組み合わせる。 例: O'Brien-Fleming, Pocock, Lan-DeMets。
学校 → クラス → 生徒のような階層構造、 縦断データ(同じ被験者を繰り返し測定)では混合効果モデルが必要。 R の simr パッケージや、 Python の pymer4 で シミュレーションベース power 分析が実行できる。 級内相関 ρ が高いほど有効 n が減るため、 単純な計算より 桁違いに多い n が必要なことも。
時間-イベントデータでは Schoenfeld の公式: 必要イベント数 d = (z_{1-α/2} + z_{1-β})² / (p₁ p₂ (ln HR)²)。 注意: 「n」ではなく「イベント数」が支配的。 打ち切り率が高いとイベントが集まらず、 計画 n の数倍を集める必要がある。
「差がないことを示したい」場合は通常の検定では不可能。 TOST では 下限と上限の同等性マージン [-Δ, +Δ] を事前定義し、 両側の片側検定を組み合わせる。 検出力分析は通常より 1.6 倍程度の n が必要。 ジェネリック医薬品の生物学的同等性試験で標準。
過去の類似研究の事後分布を事前分布として活用すると、 同じ検出力を得るのに少ない n で済む。 ICH-E10 の Historical Control の考え方とも親和的。 ただし事前分布の選択が結論に大きく影響するため、 sensitivity 分析が必須。
ML モデルの精度比較 (model A vs model B) でも検出力分析は重要。 McNemar 検定や cross-validated paired t 検定で必要なデータセットサイズを算出。 「100 サンプルで accuracy 0.85 vs 0.87」が 偶然か本物かを判定するには検出力分析が不可欠。 NeurIPS / ICML 2020 以降は厳密な検定の併記が推奨。
| 用語 | 正しい意味 | よくある誤解 |
|---|---|---|
| 検出力 (Power) | H₁ が真のとき H₀ を棄却する確率 1-β | 「実験の信頼性」と誤解されがち |
| 事前 vs 事後検出力 | 事前は計画用、 事後は数学的に p 値と等価 | 事後を「実際の検出力」と誤用 |
| 第2種の過誤 β | H₁ が真なのに H₀ を採択してしまう確率 | α と区別がつかない |
| 効果量 (Effect Size) | 標準化された差・関連の大きさ | 統計量(t, F)と混同 |
| サンプル数 n | 通常 1 群あたり (2 群合計の半分) | 合計 N と混同して 2 倍誤算 |
| SESOI | 「実質的に意味のある最小効果量」 | 「観察された効果量」と混同 |
| MDE | Minimum Detectable Effect、 設計上検出可能な最小効果 | SESOI と区別されない |
| 条件付き検出力 | 中間解析時点までの結果を条件とした残りの検出力 | 事後検出力と同一視される |
検出力 0.80 を確保したつもりでも、 仮定が少しズレるだけで検出力は大幅変動。 「どの仮定が最も検出力を左右するか」を可視化するのが感応度分析。
🎯 このコードでやること: ベースライン (d=0.5, α=0.05, n=64, power=0.80) を中心に、 各パラメータを ±20% 変動させたときの検出力の変化を計算。 どの仮定が最も検出力に影響するかをランキング表示。
📥 入力データ: パラメータ範囲のみ。 d (0.4-0.6)、 n (51-77)、 α (0.04-0.06) を ±20% で評価。
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 numpy as np import pandas as pd from statsmodels.stats.power import TTestIndPower analysis = TTestIndPower() baseline = {'d': 0.5, 'n': 64, 'alpha': 0.05} base_power = analysis.power(effect_size=baseline['d'], nobs1=baseline['n'], alpha=baseline['alpha'], ratio=1.0) print(f"ベースライン検出力 = {base_power:.4f}") # 感応度分析: 各パラメータを ±20% 変動 results = [] for param in ['d', 'n', 'alpha']: for delta in [-0.20, +0.20]: new_val = baseline[param] * (1 + delta) if param == 'd': p = analysis.power(effect_size=new_val, nobs1=baseline['n'], alpha=baseline['alpha'], ratio=1.0) elif param == 'n': p = analysis.power(effect_size=baseline['d'], nobs1=int(new_val), alpha=baseline['alpha'], ratio=1.0) else: p = analysis.power(effect_size=baseline['d'], nobs1=baseline['n'], alpha=new_val, ratio=1.0) results.append({ 'パラメータ': param, '変動率': f'{delta*+100:+.0f}%', '新しい値': f'{new_val:.4f}', '検出力': f'{p:.4f}', '検出力変化': f'{p - base_power:+.4f}' }) print(pd.DataFrame(results).to_string(index=False)) |
📤 実行結果:
💬 結果の読み方: 効果量 d の変動が最も検出力を支配する。 d を 20% 過大評価すると検出力が 0.80 → 0.60 に 20pp 低下。 一方 α の変動は ±4pp 程度。 教訓: 「効果量の見積もりに最大の注意を払う」。 先行研究のメタ分析で d を保守的に設定するのが鉄則。 n の変動は中程度、 α は最も影響小。
n ≈ 16/d² を覚えるTTestIndPower の最小例を実行本用語に関連する代表的な可視化を 3 点示す。



本ページの学習内容を確認しよう。
statsmodels.stats.power、 scipy.stats。検出力 (statistical power) の概念は Jerzy Neyman と Egon Pearson が 1928-1933 年に仮説検定の枠組みを構築した際に、 タイプ II エラー (β) と表裏の量として導入した。 Ronald Fisher の有意性検定がタイプ I エラー (α) のみに焦点を当てていたのに対し、 Neyman-Pearson 流派は「効果が存在する時に検出できる確率」を明示的に扱う必要性を強調した。 心理学に検出力分析を普及させたのは Jacob Cohen の Statistical Power Analysis for the Behavioral Sciences (初版 1969、 第 2 版 1988) で、 effect size の分類 (small/medium/large) と power=0.8 の慣習はここに由来する。 1990 年代以降、 サンプルサイズ計算が研究助成申請の必須項目となり、 2000 年代以降の再現性危機 (replication crisis) を契機に事前登録の核心ツールとして再評価された。 G*Power (Faul et al., 2007) は無償ソフトとして広く普及し、 R/Python では pwr、 statsmodels.stats.power が標準実装となっている。
ベイジアン統計学では「検出力」に相当する概念として Assurance (Bayesian power) があり、 効果量の事前分布を積分した平均検出力を計算する。 これは「効果量が固定値だが未知」とする頻度論的検出力より現実的と評価される。 機械学習では「sample complexity」(PAC 学習理論) が同様の役割を果たし、 VC 次元や Rademacher 複雑度に基づき、 一定の汎化誤差を達成するのに必要なサンプル数を計算する。 因果推論では Imbens-Rubin 流の検出力分析が傾向スコアマッチング後の実効サンプル数を加味する。 臨床試験では適応的デザイン (adaptive design) で中間解析時に検出力を再計算し、 サンプルサイズを増減する手法 (sample size re-estimation) が ICH E9 (R1) ガイドラインで認められている。 SSDSE-B-2026 のような公的統計データでは、 47 都道府県という固定サンプルに対し、 効果量を「最小実質効果」として後ろ向きに設定し、 信頼区間の精度 (margin of error) で報告するのが現実的。
都道府県の高齢化率 (R01101) と医療費 (E03204) の関係について、 検出力分析を 3 段階の効果量で実施するケーススタディを示す。 r=0.3 (小効果)、 r=0.5 (中効果)、 r=0.7 (大効果) のそれぞれで、 47 都道府県データで検出力がどう変動するか確認する。 効果量 r=0.3、 α=0.05、 両側検定、 n=47 では検出力は約 0.60 で、 標準的な 0.80 を下回る。 中程度効果 r=0.5 では検出力は約 0.97 と高い。 r=0.7 では検出力は 0.999 以上でほぼ確実に検出可能。 これは「47 県の固定サンプルでは r=0.3 級の小効果は半分以上の確率で見落とす」「中程度以上の効果なら高確率で検出できる」ことを意味し、 SSDSE データを用いた研究設計の指針となる。
「効果がない」ことを示したい場合、 通常の検定では p > 0.05 を根拠にするのは誤り (有意でない=効果ゼロではない)。 等価性検定 (Two One-Sided Tests, TOST) は「効果量が ±SESOI 以内」を帰無仮説の対立として両側から検定する。 SSDSE で「2024 年と 2023 年で高齢化率の平均値に実質的な差がないこと」を示す場合、 SESOI を ±0.5%pt と設定し、 TOST を実施する。 95% 信頼区間が SESOI 範囲内に収まれば「実質的等価」と結論できる。 これは検出力分析の発展形で、 「ゼロ効果の証明問題」に頻度論的アプローチで対処する方法。
SSDSE-B-2026 で 47 都道府県 × 10 主要指標 = 470 個のペア相関を検定する場合、 Bonferroni 補正後の α* = 0.05/470 ≈ 1.06×10⁻⁴ となる。 この厳しい閾値で r=0.5 を検出するのに必要なサンプル数は、 通常の α=0.05 では n=29 だが、 補正後では n=53 に増加する。 SSDSE の 47 県では足りないため、 年度方向に拡張 (5 年間で 47×5=235 サンプル) するか、 効果量を r=0.6 以上に限定して検出するか、 FDR 制御に切り替えるなどの戦略選択が必要。
頻度論的検出力は「効果量が固定値 r=0.5 のとき」の確率だが、 実際には効果量自体に不確実性がある。 Bayesian assurance は効果量の事前分布 (例: r ~ Beta(2,2) で 0-1 範囲) を仮定し、 全効果量範囲で検出力を積分した平均を計算する。 SSDSE で「医療費と高齢化率の相関は文献では r=0.4-0.6 が多い」という先験知識を用いて、 effect size を Beta(8,4) (平均 0.67、 標準偏差 0.12) と設定すると、 n=47 での assurance は約 0.92 で、 頻度論的検出力 0.97 (r=0.5 固定) より僅かに低いが、 不確実性を反映した現実的な指標となる。
研究例: 「47 都道府県で X と Y の相関を検定し、 r=0.28, p=0.058 で有意水準 0.05 をぎりぎり下回らなかった。 この結果について事後検出力を計算すると 0.52 で、 検出力不足が原因なので追加サンプルが必要」という主張は誤り。 観測された r=0.28 から計算した事後検出力 0.52 は単に p=0.058 の単調変換に過ぎず、 「検出力不足」という独立した情報をもたらさない。 正しい対応は: (a) 信頼区間で効果量の不確実性を示す (r=0.28, 95%CI [-0.01, 0.53]); (b) 事前に設定した SESOI と信頼区間を比較し、 等価性 or 不確実性を結論する; (c) 追加サンプルの可能性を検討する場合は、 事後検出力ではなく「SESOI を仮定した時の検出力」を再計算する。
厚生労働省の地域医療構想策定では、 SSDSE-B-2026 の都道府県別人口動態・医療資源・医療費データを用いた効果量推定が標準。 例えば「地域包括ケアシステム導入による高齢者の入院日数削減」を評価する場合、 SESOI を 1.5 日と設定し、 検出力 0.80、 α=0.05 で必要サンプル数を逆算すると、 県内施設レベルで n=150 程度が必要と算出される。 47 都道府県での集約データでは検出不可能なため、 個別施設データを用いるか、 効果量を 3 日以上の大きな差に限定する。 このような設計プロセスを事前登録 (UMIN-CTR) し、 透明な政策評価を実施する。
R では pwr::pwr.r.test(r=0.5, sig.level=0.05, power=0.80) でサンプルサイズを計算、 pwr::pwr.r.test(n=47, r=0.5, sig.level=0.05) で検出力を計算。 Python では statsmodels.stats.power.NormalIndPower や statsmodels.stats.power.FTestPower が標準。 G*Power (GUI) は様々な検定で対応し、 Mac/Windows で無償。 ベイジアン検出力は R の BFDA パッケージ、 Python の BayesFactorDesign で計算可能。 SSDSE データを用いた典型的なワークフロー: (1) 文献から効果量を推定; (2) G*Power でサンプルサイズ計算; (3) 事前登録に検出力分析の入力値・出力値を明記; (4) データ収集後、 信頼区間で報告。
厚生労働省の「地域医療構想」では、 SSDSE-B-2026 の都道府県別データから医療格差を定量化する。 研究例: 「人口あたり医師数と健康寿命の相関は r=0.45 と想定される」という先行研究結果から、 確証研究を計画する。 仮説 H1: 医師数と健康寿命に r > 0.3 の正相関がある。 検出力分析: 効果量 r=0.4 (SESOI として最小重要効果量を設定)、 α=0.05 (両側)、 power=0.80 で必要サンプル数を逆算。 結果は n=47 程度で、 47 都道府県全件で十分カバーできる。 補足: 効果量を保守的に r=0.3 と設定した場合は n=84 必要となり、 47 県のみでは不足。 この場合は年度方向に拡張 (5 年分で 235 サンプル) するか、 効果量を SESOI 0.4 で固定して報告する。
都道府県別の教育介入プログラム評価で、 47 県を「介入群 24 県 vs 統制群 23 県」に分け、 学力スコアの差を t 検定で評価する。 効果量 Cohen's d=0.5 (中効果) を検出するには、 各群 n=64 必要 (両側 t 検定、 α=0.05、 power=0.80)。 47 県では足りないが、 県内市町村レベル (約 1700 自治体) で集計すれば十分。 ただし市町村は県内でクラスタリングするため、 ICC (intra-class correlation) 0.05 と仮定するとデザイン効果 DEFF = 1 + (10-1) × 0.05 = 1.45 (1 県あたり平均 10 市町村)、 実効サンプル数は 1700/1.45 ≈ 1172。 これでも十分な検出力を確保できる。
SSDSE で 47 都道府県を 4 地域 (北日本・東日本・西日本・南日本) に分類し、 一人当たり所得の平均差を ANOVA で検定する。 検出力分析: 効果量 Cohen's f=0.25 (中効果)、 group=4、 α=0.05、 power=0.80 で必要総サンプル数 n=180、 各群 n=45。 47 県のみでは不足。 ただし、 効果量が f=0.40 (大効果) なら n=76 (各群 19) で十分。 SSDSE データでは実際の効果量が大きい (地域格差が顕著) ため、 47 県での検出力が確保される。 サンプル不足が懸念される場合、 年度方向の繰り返し測定 (mixed model) で実効サンプル数を増やす戦略がある。
「都道府県別の医療政策成功度 (成功/失敗の二値)」を予測する変数を見つける研究。 オッズ比 OR=2.0 (中効果)、 説明変数の標準偏差 1.0、 イベント発生率 0.5、 α=0.05、 power=0.80 で必要サンプル数 n=85。 47 県では不足するが、 年度方向に拡張 (5 年で 235) すると十分。 説明変数を 3 つに増やす多変量ロジスティック回帰の場合、 「event per variable (EPV) ≥ 10」のルールから、 イベント数 30 ≥ 3×10 が必要。 47 県で発生率 0.5 ならイベント数約 23、 ぎりぎりの設計となる。
SSDSE で「消費支出(L3221)」を被説明変数とし、 説明変数 5 個 (人口、 面積、 高齢化率、 教育水準、 産業構成) の重回帰モデルを推定。 検出力分析: 効果量 Cohen's f²=0.15 (中効果)、 説明変数 5 個、 α=0.05、 power=0.80 で必要サンプル数 n=92。 47 県では不足。 ただし、 効果量が大きく f²=0.35 (大効果) なら n=49 で十分。 SSDSE データでは経済指標の関係が強く出るため、 47 県データでも実用的に検出可能。 説明変数が増えると必要サンプルが急増するため、 変数選択 (Lasso、 ステップワイズ) で削減する戦略も有効。
SSDSE 分析の典型的なワークフロー: (1) 文献調査: 類似研究から効果量を推定 (メタアナリシスがあれば最良); (2) SESOI 設定: 「実質的に意味のある最小効果量」を専門家合意 or 政策的観点から決定; (3) 検出力計算: G*Power または R/Python で必要サンプル数を計算; (4) 感度分析: 効果量を±20% 変化させてサンプル数の変動を確認; (5) 事前登録: 計算根拠と入力値・出力値を OSF に登録; (6) データ収集: 47 都道府県全件 or 必要な年度範囲で取得; (7) 解析実施: 計画通りの統計検定を実行; (8) 結果報告: 効果量、 信頼区間、 p 値、 検出力をすべて記載。
(1) 効果量の過大設定: 楽観的な効果量を仮定するとサンプルサイズが小さくなり、 実際の小効果を見落とす。 対策: 保守的な効果量 (文献の下限) を採用。 (2) 多重比較の無視: 主要解析だけ検出力分析し、 副次解析を無視。 対策: 検定族 (family) 全体の m を考慮した補正後 α* で再計算。 (3) 事後検出力の計算: 観測効果量から検出力を後付け計算。 対策: 事前指定の SESOI でのみ計算。 (4) 探索的解析の確証的扱い: 探索で発見した関係を主仮説として報告。 対策: 探索・確証の明示区分。 (5) 母集団と異なる効果量: 文献は別の集団 (米国・若年層) のデータ。 対策: 母集団特異的な効果量を考慮 (例: 日本の高齢者は米国と異なる)。
研究テーマ別の検出力設計の典型例: (1) 地域格差研究: 47 県の単純比較 (Cohen's d=0.5 で n=64 必要、 47 では不足、 大効果に絞る); (2) 政策効果分析: 政策導入前後の差 (paired t、 r=0.5 で n=34、 47 で十分); (3) 因子分析・主成分分析: 47 県 × 100 変数 (KMO > 0.6 で実施可能、 サンプル不足のリスクあり); (4) 時系列予測: 47 県 × 5 年 = 235 (ARIMA で十分); (5) 機械学習予測: 47 サンプルでは過学習のリスク、 cross-validation 必須。 SSDSE データの限界 (n=47 固定) を踏まえた研究設計が重要。
検出力 (1-β) は「対立仮説下での真陽性確率」として、 次の式で計算される。 相関係数の場合、 Fisher's z 変換 z_r = 0.5×ln((1+r)/(1-r)) を用いて、 検定統計量 Z = (z_r − z₀)×√(n-3) が標準正規分布に近似される。 検出力 = P(|Z| > z_{α/2} | r=r_true)。 平均差の場合、 検定統計量 t = (X̄₁−X̄₂) / (s×√(2/n)) が非心 t 分布に従い、 非心パラメータ λ = d×√(n/2)。 効果量と検定統計量の関係を理解することで、 検出力曲線を自分で描けるようになる。 SSDSE で 47 県データでの検出力曲線をプロットすると、 r=0.3 で 60%、 r=0.5 で 97%、 r=0.7 で 99.9% と急峻に上昇する。
主要効果量指標: (1) Cohen's d (平均差を SD で標準化): 小=0.2、 中=0.5、 大=0.8; (2) r (Pearson 相関): 小=0.1、 中=0.3、 大=0.5; (3) Cohen's f (ANOVA): 小=0.1、 中=0.25、 大=0.4; (4) Cohen's f² (回帰): 小=0.02、 中=0.15、 大=0.35; (5) w (カイ二乗): 小=0.1、 中=0.3、 大=0.5; (6) オッズ比 OR: 弱=1.5、 中=2.5、 強=4.0; (7) η²、 ω² (ANOVA 分散説明率): 小=0.01、 中=0.06、 大=0.14; (8) Hedges' g (小標本補正済 d); (9) Cliff's δ (ノンパラ); (10) area-under-curve (AUC): 0.5=ランダム、 0.7=良、 0.9=優。 効果量と検定統計量の対応を理解することで、 異なる研究の比較が可能。
SSDSE データでの典型的な検出力分析の Python ワークフロー: from statsmodels.stats.power import NormalIndPower, FTestAnovaPower, TTestPower。 相関係数の検出力: analysis = NormalIndPower(); n = analysis.solve_power(effect_size=0.5, alpha=0.05, power=0.80) で必要サンプル数を計算。 ANOVA の検出力: FTestAnovaPower().solve_power(effect_size=0.25, k_groups=4, alpha=0.05, power=0.80)。 t 検定の検出力: TTestPower().solve_power(effect_size=0.5, alpha=0.05, power=0.80)。 47 県データでの検出力をプロットするには、 効果量を 0.1 から 0.9 まで変動させて検出力をプロット: import matplotlib.pyplot as plt; effect_sizes = np.linspace(0.1, 0.9, 50); powers = [analysis.power(effect_size=e, nobs1=47, alpha=0.05) for e in effect_sizes]; plt.plot(effect_sizes, powers)。
OSF Preregistration Template の「Sample Size」セクションに記載すべき内容: (1) SESOI の設定根拠: 「Smith et al. (2020) では d=0.5、 Jones et al. (2018) では d=0.45。 メタアナリシスで推定 d=0.48 を採用」; (2) 検出力の目標: 「両側 α=0.05、 power=0.80 を目標」; (3) 必要サンプル数の計算: 「G*Power 3.1 で計算、 n=64」; (4) 実際のサンプル数: 「47 都道府県全件を分析、 n=47 (計画より少ないが SSDSE の制約)」; (5) 検出力の調整: 「実効検出力は 0.65 に低下、 中程度効果 (d=0.5) では検出可能性が高い」; (6) 感度分析: 「d=0.3 (小効果) では検出力 0.30、 過小評価のリスクあり」; (7) 結論: 「中-大効果に検出を限定、 小効果は別研究での確認を要請」。
頻度論的検出力の代替として、 ベイジアン Assurance (平均検出力) が活用される。 SSDSE で先行研究の効果量分布を Beta(8,4) (平均 r=0.67、 SD=0.12) と設定し、 全 r 値で検出力を積分: Assurance = ∫ Power(r) × Beta(r; 8, 4) dr ≈ 0.85。 これは「事前知識を反映した平均検出力」で、 単一効果量を仮定した頻度論的検出力 (例: r=0.5 で 0.97) より現実的。 BFDA (Bayes Factor Design Analysis) パッケージで「BF > 10 を達成する確率」も計算可能。
古典的な検出力分析は固定サンプルサイズを前提とするが、 Sequential Probability Ratio Test (SPRT) や Group Sequential Design では中間解析で停止判定する。 例: 47 県のうち 24 県でデータを取得した時点で中間解析、 効果量が十分大きい (futility border 超え) なら早期停止。 検出力は「複数の停止境界での停止確率の合計」として計算され、 通常の固定サンプル設計より複雑。 SSDSE 的に年次更新データでは、 「2024 年データで予備分析、 2025 年データで確証」のような逐次設計が可能。
医療試験では検出力分析が規制承認の必須要件。 FDA Guidance (E9: Statistical Principles for Clinical Trials, 1998) と ICH E9(R1) (2019) で「Estimands framework」が定義され、 検出力分析の前提を明確化。 主要評価項目の効果量、 検出力、 α 水準、 サンプルサイズ、 中間解析、 早期停止規則をすべて事前登録 (ClinicalTrials.gov)。 SSDSE 的な公衆衛生研究でも、 厚生労働省の指針に従った検出力分析が標準化されつつある。
2020 年以降の検出力分析の発展: (1) Equivalence/Non-inferiority Testing: 「効果なし」を示すための TOST が広まる; (2) Bayes Factor Design: 頻度論的検出力に代わるベイジアン設計; (3) Adaptive Designs: 中間解析でサンプルサイズを再計算する手法; (4) Multi-arm Multi-stage (MAMS): 複数アーム同時試験で検出力を効率化; (5) Master Protocol: 複数試験を統合する umbrella/basket trial; (6) Bayesian Hierarchical Models: 階層ベイズで小サンプル問題に対処; (7) Pragmatic Trials: 実臨床に即した試験設計で検出力分析が変化。 SSDSE 的な公的統計研究でも、 これらの最新手法を取り入れることで研究品質が向上する。
検出力分析の歴史的論争: (1) Cohen の 0.8 標準への批判: 検出力 0.8 は便宜上の標準で、 普遍的根拠なし (Lakens 2014 など); (2) 事後検出力の禁忌: ASA 2016 の声明で事後検出力を批判、 Hoenig-Heisey 2001 が数学的に「無情報」と証明; (3) α 水準の調整: Benjamin et al. 2018 が「α=0.005 を新標準に」と提案、 Lakens et al. 2018 が反論; (4) 頻度論 vs ベイジアン: 検出力概念自体の哲学的議論。 これらの論争は現在も続いており、 研究分野によって採用される標準が異なる。
分野別の検出力分析の標準: (1) 臨床試験 (ICH E9 R1): 主要評価項目で power=0.90 が標準、 副次項目は別途検討; (2) 心理学 (APA Style): 効果量・信頼区間・検出力を必須報告; (3) 経済学 (AEA): 事前登録時に検出力分析を必須; (4) 教育研究 (IES): 助成申請に検出力分析が必須; (5) 公衆衛生 (CDC): 政策評価で検出力分析の標準化; (6) 機械学習 (NeurIPS): 検証データのサンプルサイズで検出力概念を適用; (7) マーケティング (A/B Testing): minimum detectable effect (MDE) を事前定義。 SSDSE 研究では特に経済学・公衆衛生の標準を参考にする。
検出力分析には倫理的な側面がある: (1) 過小検出力研究の問題: 低検出力研究は「資源の浪費」と「偽陰性結論」を生み、 倫理的に問題視される (Button et al. 2013); (2) 過剰サンプルの問題: 必要以上のサンプル収集は被験者負担を増やす (医療試験); (3) 「null result」の処遇: 検出力分析で「効果なし」と結論する場合の社会的影響 (例: 政策実験での null result); (4) 「事後合理化」の防止: 事後検出力で結論を正当化する不誠実な実践の排除; (5) 透明性確保: 検出力分析の入力値・出力値を事前登録・論文に明示。 これらの倫理的側面を意識した研究設計が、 学術コミュニティの信頼性向上に寄与する。
SSDSE-B-2026 を用いた研究での検出力分析の将来展望: (1) 都道府県別パネルデータ拡張: 47 県 × 10 年で n=470 まで拡張可能、 中-小効果の検出が可能になる; (2) 市町村レベルへの拡張: 約 1700 市町村まで拡張すれば大規模検出が可能 (デザイン効果に注意); (3) 混合効果モデルでの検出力: 階層構造を考慮した検出力計算が標準化される; (4) ベイジアン Assurance の普及: 事前分布を活用した平均検出力が主流になる; (5) 多重比較考慮の検出力: 補正後検出力の計算が標準化される; (6) 機械学習との連携: ML 予測モデルの検証データでの検出力評価; (7) 因果推論との統合: 傾向スコア・操作変数の検出力分析。 SSDSE データを最大限活用するために、 これらの新手法を採用することが重要。
検出力分析を学ぶための主要リソース: (1) 教科書: Cohen "Statistical Power Analysis for the Behavioral Sciences" (1988、 古典); Murphy et al. "Statistical Power Analysis" (2014、 現代版); (2) 無償ソフト: G*Power (Mac/Windows、 GUI)、 R の pwr パッケージ、 Python の statsmodels.stats.power; (3) オンライン教材: Coursera の "Improving Your Statistical Inferences" (Daniel Lakens)、 OSF Tutorial Library; (4) 論文: Lakens (2013) "Calculating and reporting effect sizes", Cohen (1992) "A power primer"; (5) 事前登録テンプレート: OSF Pre-registration Template で検出力分析セクションを参照; (6) 実例集: APA ジャーナルの検出力分析例集; (7) コミュニティ: Twitter の #statstwitter、 OSF コミュニティで質問可能。 SSDSE 研究を始める前に、 これらのリソースで基礎を固めることが推奨される。
現代の検出力分析の応用例: (1) COVID-19 ワクチン試験: ファイザー・モデルナの第 III 相試験で検出力 90%、 効果量 50% 削減を想定; (2) マイクロアレイ・GWAS: 大規模検定での「FDR 下での平均検出力」が計算される; (3) 機械学習ベンチマーク: ImageNet で精度差を検出するためのテストデータサイズの計算; (4) A/B テスト: minimum detectable effect (MDE) と検出力の関係; (5) 気候モデル評価: 観測データと予測モデルの差を検出する; (6) 政策評価: 教育介入・公衆衛生の効果を検出する規模設計; (7) ノンインフェリオリティ試験: 「同等性」を示すための検出力; (8) アダプティブデザイン: 中間解析でサンプル再計算する適応試験; (9) マスタープロトコル: 複数試験を統合する umbrella/basket trial; (10) 因果推論: 傾向スコアマッチング後の実効サンプル数。
検出力分析には哲学的・方法論的な側面がある: (1) 頻度論 vs ベイジアン: 検出力は頻度論的概念で、 ベイジアンでは Assurance に対応; (2) 仮説検定 vs 推定: Estimation framework では検出力より精度 (信頼区間幅) を重視; (3) 確証 vs 探索: 探索的研究で検出力分析を厳密に適用するか; (4) 「真の効果量」概念: 効果量がそもそも単一の真値を持つかの哲学的問題; (5) 「null result」の扱い: 「効果なし」結論をどう判定するか; (6) 研究の社会的責任: 低検出力研究の倫理的批判; (7) 事後合理化の防止: 検出力分析の事後悪用の警戒; (8) 透明性 vs 柔軟性: 事前登録と研究の柔軟性のバランス。 これらの哲学的議論は、 検出力分析を超えて科学方法論の根本問題に繋がる。
統計教育における検出力分析の位置づけは、 20 世紀後半から大きく進化してきた。 1980 年代までは「p 値だけ報告すればよい」という認識が主流だったが、 Jacob Cohen の "The earth is round (p < .05)" (1994) を契機に、 効果量と検出力を併記する文化が広まった。 現在の APA (American Psychological Association) スタイルでは、 効果量・信頼区間・検出力を必須項目として求めており、 多くの心理学・社会科学ジャーナルがこれに準拠している。 日本でも文部科学省の統計教育指針や、 統計教育コンペ・データサイエンス教育の枠組みで、 検出力分析の基礎知識を学習する機会が増加している。 SSDSE-B-2026 のような公的統計データを教材として活用することで、 学生は実データに対する検出力計算の感覚を身につけることができる。 47 都道府県という固定サンプルサイズの制約の中で、 どのような研究設計が可能か、 どの程度の効果量を検出できるかを実践的に学ぶことが、 統計リテラシーの向上に直結する。 また、 検出力分析は「実験計画」全般の理解にもつながり、 心理学のラボ実験から疫学のコホート研究、 計量経済学の自然実験まで、 さまざまな分野での研究設計の基礎を形成する。 教育現場では G*Power の GUI を用いた直感的な検出力計算演習、 R/Python のスクリプトを用いた自動化された検出力曲線描画、 SSDSE データを用いた現実的なシナリオ分析、 事前登録テンプレートの作成と査読、 multiverse analysis による感度評価など、 多様な手法を組み合わせて学習することが効果的とされている。 これらの教育実践は、 単なる「検定統計量の計算」を超えて、 研究設計全体の意思決定過程を理解する深い学びを提供する。
SSDSE-B-2026 を用いた検出力分析の総合的活用シナリオを具体例で示す。 シナリオ 1: 「地方創生政策の効果評価」では、 47 都道府県を「政策強化群」と「現状維持群」に二分し、 5 年後の人口変化率を比較する研究を計画する。 効果量 Cohen's d = 0.5 を検出したいなら、 各群 n=64 必要だが、 47 県では不足。 そこで、 政策強化を 5 段階のスコアで評価し、 連続変数として相関係数で解析する。 効果量 r=0.4 なら n=44 で検出可能、 47 県全件で十分。 シナリオ 2: 「高齢化と医療費の縦断的関係」では、 47 県 × 10 年間 = 470 サンプルで混合効果モデルを推定。 ICC=0.7 を想定したデザイン効果調整で実効サンプル数は約 170。 中程度効果 (r=0.3) も検出可能。 シナリオ 3: 「教育投資と消費支出(L3221)の因果効果」では、 47 県の同時性を活かして二段階最小二乗法 (2SLS) を適用。 操作変数の強さと内生性の度合いから検出力を計算し、 弱操作変数の検出力低下を回避する設計を行う。 シナリオ 4: 「47 県のクラスタリング」では、 ANOVA で地域差を検出。 効果量 f=0.4 (大効果) で k=4 群・n=12/群なら検出力 0.85 を達成。 シナリオ 5: 「機械学習予測モデルの精度評価」では、 47 県を訓練・検証・テストに分割。 サンプル不足を補うため LOOCV を採用し、 効果量 (精度差) の信頼区間を計算。 これらのシナリオを通じて、 検出力分析が単なる「サンプルサイズ計算」ではなく、 研究全体の設計と評価の中核を成すツールであることが理解できる。 SSDSE のような公的統計データは制約 (n=47 固定) も多いが、 制約を意識した上での創造的な研究設計が、 統計的厳密性と政策的妥当性の両立を可能にする。
検出力分析は研究品質の様々な側面に影響を与える。 まず研究設計の段階では、 必要サンプルサイズの事前算出により、 研究実施の予算・時間・人員を適切に配分できる。 過小サンプルでは効果を検出できず資源の浪費に、 過剰サンプルでは被験者負担と研究コストの増加につながるため、 検出力分析による最適サンプルサイズの決定は研究の効率性向上に直結する。 次にデータ収集の段階では、 検出力分析の前提条件 (測定精度、 サブグループ比率、 脱落率) を満たすようなデータ収集プロトコルを設計できる。 解析段階では、 検出力分析で想定した解析計画を事前登録することで、 p ハッキングや HARKing の混入を防ぎ、 結果の信頼性を確保する。 結果報告段階では、 効果量・信頼区間・検出力をすべて報告することで、 単一の p 値に依存しない多面的な評価が可能になる。 メタアナリシス段階では、 個別研究の検出力情報を統合することで、 publication bias を考慮した「真の効果量」の推定が可能となる。 これらのメリットを最大化するには、 検出力分析を研究プロジェクトの初期段階から組み込み、 事前登録・解析・報告のすべての段階で一貫した運用を行うことが重要。 SSDSE-B-2026 のような公的統計データを用いた研究では、 47 都道府県という固定サンプル制約があるため、 「サンプルサイズを増やす」のではなく「効果量を保守的に設定する」「補正方法を慎重に選ぶ」「複数年度データで実効サンプル数を増やす」など、 制約を意識した創造的な検出力分析が求められる。 こうした実践は、 単なる技術的問題を超えて、 公的統計データを用いた研究全体の質を向上させる重要な要素となる。
SSDSE-B-2026 のような公的統計データを用いた研究では、 47 都道府県という固定サンプル制約の中で、 検出力分析を効果的に運用する戦略が研究品質を決定する重要な要素となる。
検出力分析は単なる「サンプルサイズ計算」を超え、 現代の統計的推論と科学方法論の核心概念の 1 つとして位置づけられる。 Neyman-Pearson 流派の理論的基礎から始まり、 Cohen の実用化、 現代のベイジアン assurance や機械学習との統合まで、 約 100 年にわたる発展史を持つ。 SSDSE-B-2026 を用いた研究で検出力分析を実践することは、 学生・研究者の方法論的成熟と公的統計データ研究の品質向上に貢献する重要な取り組みとなる。
公的統計データを用いた研究 (SSDSE-B-2026、 e-Stat、 OECD、 World Bank データなど) では、 検出力分析の方法論的重要性が特に高い。 これは、 公的データが社会全体に開かれており、 結論が政策決定・社会的議論・市民の判断に直接影響するためで、 「再現性のある統計的結論」が研究の社会的価値を保証する。 検出力分析を SSDSE 研究で標準化することは、 (1) 過小サンプル研究での偽陰性結論の量産を防ぐ、 (2) 過剰サンプルでの研究資源の浪費を防ぐ、 (3) 効果量 SESOI の明示で実質的重要性を強調、 (4) 信頼区間の幅で結論の不確実性を可視化、 (5) 事前登録での透明性確保、 などの効果をもたらす。 これにより、 公的統計データを用いた研究は、 単なる学術的興味の対象から、 社会全体の意思決定を支える知的基盤へと位置づけが変化する。 統計データ解析コンペのような取り組みは、 学生・若手研究者がこうした社会的責任を意識した研究実践を学ぶ重要な場として、 日本の学術コミュニティの長期的な研究品質向上に貢献している。
検出力分析を体系的に習得することは、 研究者の方法論的成熟の重要な段階である。 学部レベルでは「p 値とサンプルサイズの関係」を理解する程度だが、 大学院レベルでは効果量・信頼区間・検出力の三位一体的理解、 ベイジアン assurance、 機械学習の sample complexity、 因果推論の検出力、 adaptive design、 multiverse analysis など、 多角的なアプローチを習得する必要がある。 こうした方法論的成熟は、 単なる「計算スキル」を超えて、 「研究設計全体の意思決定能力」を意味する。 SSDSE-B-2026 のような公的統計データを用いた研究で検出力分析を実践することで、 学生・研究者は実データに対する研究設計の感覚を磨き、 国際的に通用する方法論的多角性を獲得できる。 公的データを活用した教育プログラムは、 公的統計データの社会的価値を最大化する重要な取り組みでもあり、 統計データ解析コンペのような取り組みは、 統計教育・データサイエンス教育の中核として、 学術と社会の橋渡し役を果たしている。
検出力分析は、 統計的仮説検定の信頼性を保証する基盤的な方法論であり、 研究設計の初期段階から結果報告までの全プロセスに影響を与える重要なツールである。 本稿で示してきた内容を統合すると、 (1) 検出力 (1-β) はタイプ II エラーの補数で、 「真の効果が存在する時にそれを検出できる確率」を表す、 (2) 効果量 (Cohen's d、 r、 f、 f²、 オッズ比など)、 サンプルサイズ、 α 水準、 検出力の 4 要素は相互に依存しており、 そのうち 3 つが決まれば残る 1 つが計算可能、 (3) 事前検出力 (a priori power) は研究設計時のサンプルサイズ計算で活用され、 事後検出力 (post-hoc power) は無情報で禁忌、 (4) Cohen's 検出力 0.8 は便宜上の慣習で、 領域固有の水準設定が本来の姿、 (5) 多重比較・依存性・分布前提条件など、 検出力分析の前提条件を破ると結果が不正確になる、 (6) SSDSE-B-2026 のような公的統計データでは 47 都道府県という固定サンプル制約があり、 効果量を保守的に設定する戦略が必要、 (7) ベイジアン assurance、 機械学習の sample complexity、 因果推論の検出力など、 新しいパラダイムが続々と発展している、 (8) 事前登録 (OSF、 AsPredicted、 Registered Report) と組み合わせることで、 研究の透明性と再現性が向上する、 などのポイントが理解できる。 これらを実践的に SSDSE データに適用することで、 学生・研究者は単なる「サンプルサイズ計算」を超えた、 統計的推論の根本概念の深い理解を獲得できる。 公的統計データ研究での検出力分析の標準化は、 日本の学術コミュニティの統計リテラシー向上、 政策研究の品質向上、 国際的な研究品質基準への適合、 という多面的な貢献をもたらす。
SSDSE-B-2026 のような公的統計データを活用した実証研究の設計では、 検出力分析の制約と機会を両面から理解する必要がある。 制約面では、 47 都道府県という固定サンプルサイズが研究設計の上限を決め、 中-小効果の検出が困難な場合が多い。 例えば Cohen's d=0.3 の小効果を検出するには n=176 が必要で、 47 県では検出力 0.35 にとどまる。 同様に r=0.3 の小相関を検出するには n=84 が必要で、 47 県では検出力 0.60。 これらの制約に対する戦略として、 (a) 効果量の SESOI を保守的に設定し、 検出可能範囲を中-大効果に絞る、 (b) 年度方向に拡張して 47×5=235 などの実効サンプル数を増やす、 (c) 市町村レベル (約 1700 自治体) に拡張する、 (d) 国際比較研究で他国データと統合する、 (e) ベイジアン assurance で先験知識を活用、 などが挙げられる。 機会面では、 SSDSE データは公開済みで再利用可能、 メタデータが整備、 都道府県という政策的に意味のある単位での分析が可能、 という強みがある。 これらを活かした研究設計の例として、 (1) 都道府県別 SDG 達成度と人口動態の関連、 (2) 教育投資と消費支出の関係、 (3) 医療資源配分と健康寿命の関連、 (4) 地方創生政策の効果評価、 (5) 高齢化と社会保障費の関係、 (6) 災害リスクと地域経済の関連、 などがある。 これらの研究で適切な検出力分析を実施することで、 結果の信頼性と政策的妥当性の両方を向上させることができる。 具体的な実装フローとして、 (a) 先行研究から効果量を推定、 (b) SESOI を SSDSE の制約に合わせて設定、 (c) G*Power または R/Python で検出力を計算、 (d) 47 県データでの達成可能な検出力を評価、 (e) 不足する場合は年度拡張や効果量の保守的設定で対応、 (f) 事前登録に検出力分析の入力値・出力値を明示、 (g) 実施後は効果量・信頼区間・p 値を併記して報告、 という手順を踏むことが推奨される。 こうした実践を通じて、 SSDSE-B-2026 を用いた研究の方法論的厳密性と政策的妥当性が向上し、 公的統計データを用いた研究の品質と国際的評価が高まる。
検出力分析を巡る歴史的論争は、 現代の統計学・科学方法論の核心問題と深く結びついている。 第 1 の論争は、 Neyman-Pearson 流派と Fisher 流派の対立に遡る。 Fisher の有意性検定はタイプ I エラー (α) のみに焦点を当てたが、 Neyman-Pearson はタイプ II エラー (β) と検出力 (1-β) を明示的に扱う必要性を主張した。 現代では両流派の融合が標準で、 α と検出力の両方を考慮する hybrid approach が広く採用されている。 第 2 の論争は、 Cohen の検出力 0.8 標準への批判である。 0.8 は便宜上の慣習で、 普遍的根拠はないとの指摘 (Lakens 2014) が現在も続いている。 医療試験では 0.9、 探索的研究では 0.5 を許容するなど、 領域固有の水準設定が本来の姿。 第 3 の論争は、 事後検出力 (post-hoc power) の禁忌である。 Hoenig-Heisey (2001) が数学的に「無情報」と証明し、 ASA (American Statistical Association) が 2016 年と 2019 年の声明で批判している。 第 4 の論争は、 α 水準の調整に関する議論である。 Benjamin et al. (2018) が「α=0.005 を新標準に」と提案し、 Lakens et al. (2018) が反論。 現在も決着していないが、 「α 水準を研究目的に応じて柔軟に設定する」という方向で議論が収束しつつある。 第 5 の論争は、 頻度論 vs ベイジアンの哲学的議論である。 検出力は頻度論的概念で、 ベイジアンでは Assurance (Bayesian power) に対応する。 BFDA (Bayes Factor Design Analysis) が頻度論的事前登録を補完する手法として広まっている。 第 6 の論争は、 「null result」の扱いである。 「効果なし」と結論するには、 通常の検定では不十分で、 等価性検定 (TOST: Two One-Sided Tests) や ベイズ係数 (BF₀₁) が必要。 第 7 の論争は、 「真の効果量」概念の哲学的問題である。 効果量がそもそも単一の真値を持つかは議論があり、 ベイジアン assurance や階層モデルでの効果量分布の活用が進んでいる。 これらの論争と現代的解決を理解することで、 検出力分析は単なる「サンプルサイズ計算の技術」ではなく、 「統計的推論の根本問題と結びついた方法論」として位置づけられる。 SSDSE-B-2026 のような公的統計データを用いた研究で、 これらの論争を意識した洗練された検出力分析を実施することは、 研究の方法論的質と知的厳密性の両面を向上させる。
検出力分析の応用範囲は、 当初の心理学・医療試験から現代では多様な分野に拡大している。 経済学・計量経済学では、 自然実験・準実験デザインでの検出力分析が標準化され、 操作変数 (instrumental variable) や回帰不連続デザイン (regression discontinuity design) の有効サンプル数の評価に活用される。 政治学・選挙研究では、 世論調査の標本サイズと検出可能な差の関係が、 民主主義の品質に直接影響する重要事項として認識されている。 教育研究では、 教育介入プログラムの効果評価で検出力分析が必須となり、 IES (Institute of Education Sciences) などの助成機関が標準的な要件として設定している。 公衆衛生・疫学研究では、 コホート研究・症例対照研究・横断研究の各々で異なる検出力計算が標準化されており、 感染症対策・疾病予防の科学的根拠を構築する基盤となっている。 環境科学では、 環境影響評価 (EIA) で検出力分析が法的要件となり、 汚染物質の有意な影響を検出するためのサンプルサイズの設計に活用される。 マーケティング研究では、 A/B テストや消費者調査での MDE (minimum detectable effect) の概念が、 ビジネス意思決定の重要な要素となっている。 機械学習・データサイエンスでは、 検証データのサンプルサイズと汎化誤差の関係を扱う sample complexity (PAC 学習理論) が、 ML モデルの信頼性評価の基盤となっている。 ロボティクス・自動運転では、 試験データのサンプルサイズと安全性検証の関係が、 規制対応の重要事項となっている。 SSDSE-B-2026 のような公的統計データを用いた研究では、 これら多様な応用分野の検出力分析手法を統合的に学習することが可能で、 学生・研究者の方法論的多角性を育成する優れた教材となる。
検出力分析の長期的展望として、 今後 10 年で予想される変化を整理する。 第 1 に、 ベイジアン手法の普及により、 頻度論的検出力に代わる Bayesian assurance (平均検出力) が主流になる可能性がある。 効果量の不確実性を事前分布で表現することで、 より現実的な研究設計が可能となる。 第 2 に、 機械学習と検出力分析の融合が進む。 機械学習モデルの「サンプル複雑度」(PAC 学習理論) と統計的検出力の概念的統合により、 機械学習研究での検出力分析が標準化される。 第 3 に、 因果推論との統合が進展する。 傾向スコアマッチング、 操作変数、 回帰不連続デザインなど、 因果推論手法における検出力分析がより精緻化される。 第 4 に、 適応的・逐次的デザインが普及する。 中間解析でサンプルサイズを再計算する Adaptive Design や、 Sequential Probability Ratio Test (SPRT) などの逐次的手法が、 計算機の高速化と statistical theory の進化により実用化される。 第 5 に、 multiverse analysis との統合が進む。 検出力分析を multiverse 形式で実施し、 解析者の自由度に対するロバストネスを評価することが標準化される。 第 6 に、 大規模協調研究 (Many Labs) での検出力分析が広まる。 個別研究の検出力ではなく、 国際協調プロジェクト全体の検出力を計算する手法が確立する。 これらの変化に対応する人材育成として、 大学院統計教育では、 古典的な検出力計算に加えて、 ベイジアン assurance、 機械学習の sample complexity、 因果推論の検出力、 adaptive design、 multiverse analysis など、 多角的なアプローチの教育が必要となる。 SSDSE-B-2026 のような公的統計データを教材として活用することで、 学生は実データに対する検出力分析の実践的経験を積み、 国際的に通用する研究者として育成される。 統計データ解析コンペのような取り組みは、 こうした人材育成の重要な場として、 日本の学術コミュニティの長期的な競争力向上に寄与する。 教育現場での Coursera "Improving Your Statistical Inferences" (Daniel Lakens) のような無料 MOOC、 OSF のチュートリアル、 R/Python のオープンソースパッケージなどの活用により、 検出力分析の知識と実践は今後さらに広く普及することが期待される。
合成データで 1 標本 Z 検定の検出力 (1-β) を計算する。
1 2 3 4 5 6 7 | from scipy.stats import norm mu0, mu1, sigma, n = 50, 53, 10, 100 SE = sigma/n**0.5 z_crit = norm.ppf(0.95) crit_val = mu0 + z_crit * SE power = 1 - norm.cdf(crit_val, mu1, SE) print(f"検出力: {power:.4f}") |
💬 手計算 (Step 2) 91% と Python 出力が完全一致。
「検出力分析」を実際に使うとき、 何をどう選ぶかを順に判断する。 上から順に答えていくと、 使うべき手法と評価の仕方が決まる。
検出力分析は「その研究で何が言えないか」を事前に知る作業。 有意にならなかったときに「差が無い」と書かないための備えでもある。
検出力分析は研究設計時に必要な標本サイズを決める手法で、 効果量・有意水準・検出力の 3 要素から計算する。
SSDSE-B-2026 を用いた演習では、 「検出力分析」 を中核に据えて上記の上流・並列・下流の手法を実データで連結する経験を積むと、 単独の手法暗記より実務的応用力が身につく。
下のスライダー(マウスでもタッチでもOK)で 有意水準 α・効果量 d・サンプルサイズ n を動かすと、 帰無分布 H₀ と対立分布 H₁ の 2 つの曲線、 検出力 1−β(緑) と第二種の過誤 β(赤) がリアルタイムで再計算されます。 図の上を左右にドラッグ/スワイプしても効果量が変わります。
モデル:一標本 z 検定(両側)。 検定統計量 Z は H₀ で N(0,1)、 H₁ で N(δ,1)、 非心度 δ = d·√n。 棄却域は |Z| > z1−α/2。 検出力=H₁ 曲線のうち棄却域に入る面積を正規近似で計算します。
—
検出力とは「本当に効果があるとき、それを検定で拾える確率」です。 2 つの曲線が離れる(=効果量 d が大きい、または n が大きくて分布が細く尖る)ほど、 対立分布 H₁ の裾が棄却域にたっぷり入り込み、緑の面積=検出力が増えます。 逆に α を小さくして棄却域を狭めると、 第一種の過誤は減りますが H₁ が拾われにくくなり検出力は下がる —— これが α と検出力のトレードオフです。
実務では検出力(多くの分野で 0.80)・有意水準 α・効果量 d の 3 つを固定すると、 必要な n が一意に定まります。 効果量は先行研究・予備実験・実務上意味のある最小効果(MCID)から決めます。 相関・平均差・分散比などで効果量の定義は異なりますが、 「分布をどれだけ引き離せるか」を測る点は共通です。 詳しくは以下の関連ページを参照してください。
このページの他のセクションは「有意にできる確率=検出力を 0.80 に上げよう」という 検出できるか/できないか の軸を扱ってきました。 ここでは Gelman & Carlin (2014) の 事前デザイン分析(prospective design analysis) という別の角度を足します。 検出力が低い設計は、たとえ運よく有意になっても 効果量を過大に推定してしまう——つまり「拾えたか」だけでなく「拾えた値が正しいか」まで壊れます。 これを定量化するのが 誇張比(Type M error, exaggeration ratio) と 符号エラー(Type S error) です。
真の効果が小さいのに n が足りないと、推定値は真値のまわりに 大きくばらつきます。 その中で「有意」になれるのは、偶然にも大きく振れたサンプルだけ——臨界値という関所を越えられるのは、たまたま効果が誇張された標本なのです。 だから 有意になった推定値の平均は真値より大きい(Type M > 1)。 さらにばらつきが真値をまたぐほど大きいと、符号が逆の推定値まで有意になり得ます(Type S)。 これは 本ページ上部で軽く触れた「Winner's Curse」の正体を、検出力の言葉で数値化したものです。
下表は α=0.05(両側)でのデザイン分析です。 2標本平均差の行は真の効果量 d と群サイズを仮定した 架空(シードあり擬似乱数シミュレーション: numpy default_rng(seed=20260614), N=40万回, 正規近似)、 相関の行は上記 SSDSE で観測された弱い関係の水準(r≈0.2〜0.5)を真値に据えた Fisher z ベースの架空デザイン分析です。 誇張比=「有意になった推定値の絶対値の平均 ÷ 真値」。
| 設計(真値と n) | 検出力 | Type S(符号逆) | Type M(誇張比) |
|---|---|---|---|
| 2標本 d=0.2, n=20/群(「とりあえず40人」) | 0.097 | 4.9% | 3.83倍 |
| 2標本 d=0.2, n=50/群 | 0.170 | 0.9% | 2.49倍 |
| 2標本 d=0.5, n=20/群 | 0.353 | 0.06% | 1.67倍 |
| 2標本 d=0.5, n=64/群(検出力ほぼ0.80) | 0.807 | ≈0% | 1.12倍 |
| 相関 r=0.2, n=20 | 0.133 | 1.9% | 2.65倍 |
| 相関 r=0.2, n=47(SSDSE と同じ県数) | 0.270 | 0.17% | 1.84倍 |
| 相関 r=0.5, n=15(強い効果・小標本) | 0.477 | 0.01% | 1.30倍 |
読み方の急所は3点です。 (1) 「とりあえず40人」で真の d=0.2 を追うと検出力は 0.097。 有意になっても効果量は平均 3.8倍に膨らみ、20回に1回は 符号すら逆(Type S=4.9%)。 これは効果量の見積もりが甘く n が過小な設計の典型的な末路です。 (2) 誇張比は「事後検出力」と違い、事前に想定効果量から計算できる健全な設計指標——p 値の焼き直しである post-hoc power とは別物です。 (3) 検出力を 0.80 まで確保すると誇張比は 1.1〜1.3倍に収まる。 検出力設計は「有意にする」ためだけでなく、推定値を信じてよい形にするための投資でもあるのです。
誇張比の実務的な使い方は「この設計で有意が出ても、効果量は何倍に見えるか」を計画段階で申告することです。 手順は (a) 先行研究やメタ分析から 控えめな真の効果量を置く(観察 d ではなく縮小推定・信頼下限)、 (b) 計画 n から推定の標準誤差を求める、 (c) シミュレーションで有意標本だけの平均|推定値|÷真値を出す。 誇張比が 1.3 を超えるなら、その研究は「見つけても信用できない」ゾーンにあります。 発想を逆にして、「小さな効果でも誇張なく測れる n」から設計を始めると、有意性ハックや再現失敗を構造的に避けられます。 平均差なら n∝1/d²、相関なら n∝1/(arctanh r)² という サンプルサイズの逆二乗則が効いてくる領域です。