論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
検出力
Statistical Power
仮説検定
別称: パワー

🔖 キーワード索引

このページ内のセクションへ素早く飛べます(クリックで該当箇所へジャンプ):

💡 30秒結論📍 文脈🎨 直感🎮 触って理解する📐 数式・定義🔬 数式を言葉で読み解く🧮 SSDSE実値計算🐍 Python実装⚠️ 落とし穴🌐 関連手法🔗 関連用語📚 関連グループ❓ FAQ
検出力 1−β第2種の過誤 β効果量 d有意水準 α非心度 δ必要サンプルサイズ検出可能な最小効果量事前(a-priori)検出力分析事後検出力の誤用検出力曲線Type M errorstatsmodels.stats.powerG*Power

💡 30秒で分かる結論 — 検出力

🍰 まずはやさしく

正解を見逃さないための確率です。

本当に差があることを証明するために使います。

部活の練習で効果が出たか確かめる時に役立ちます。

まずは結論と注意点を短く確認しましょう。

📍 あなたが今見ているもの

🍰 まずはやさしく

分析の準備に欠かせない道具です。

調査に必要な人数を決めるために使います。

アンケートを何人に配るか考える時に必要です。

このページにある12個の解説を案内します。

検出力=1−β(β=第2種の過誤確率)。 検出力分析は必要サンプル数を決めるための必須手続き。 G*Power、 statsmodels.stats.power が定番ツール。

🎨 直感で掴む — 検出力とは何者か

🍰 まずはやさしく

正解を見つける力の強さのようなものです。

分析結果がどれくらい信頼できるか知るために使います。

スマホのアプリで差があるか調べる時に役立ちます。

図や例を使って直感的に仕組みを学びましょう。

検出力(Statistical Power (1−β))は「本当に差があるときに、 t 検定や ANOVA が p<0.05 を返す確率」。 SSDSE-B-2026 で「東日本 23 都道県 vs 西日本 24 府県の高齢化率(A1303÷A1101 から算出)に差があるか」を調べる際、 検出力 0.4 と 0.8 では 「差なし」結論の意味がまるで違います。 ここでは効果量 d / 有意水準 α / サンプル n と検出力が連動する関係を一気に体感しましょう。

🎨 直感で掴む

検出力は「本当に差があるとき、 それを統計的に有意と判定できる確率」。 例えば 47 都道府県で「東日本と西日本の高齢化率に標準偏差の半分(d=0.5)の差がある」が真だった場合、 1 群 24 県ずつで t 検定して p<0.05 を出せる確率が検出力。 効果量 d=0.5・α=0.05・n=24 なら検出力は約 0.40 — 60% は「差が無い」と誤判定する。 低検出力での非有意結果は「差が無い」ではなく「分からない」を意味する。

慣例的に 0.8 以上を目標とし、 d=0.5 を α=0.05 で 0.8 検出するには n≈64 必要。 SSDSE-B-2026 の 47 都道府県では小〜中効果の検出力は不足しがちで、 「東西で差なし」と結論する前に必要 n を G*Power や statsmodels.stats.power で事前計算するのが現代的な手続き。

🎮 触って理解する — H0とH1の重なりで検出力を見る

帰無分布 H0(差がない世界・青)と対立分布 H1(本当は差がある世界・橙)を重ねて描画します。 3 本のスライダーで 有意水準 α・効果量 d(=H1 の中心)・標本サイズ n(1 群あたり)を動かすと、 α=第1種の過誤(赤)・β=第2種の過誤(紫)・検出力 1−β(緑)が塗り分けでリアルタイム更新されます。 効果量↑・n↑・α緩めのどれでも検出力が上がる —— この 4 者の連動を体感してください。 設定は SSDSE-B-2026 の「東日本 vs 西日本」を模した独立 2 群・両側 z 検定(正規近似, σ=1)です。

H0(青)・H1(橙)と臨界値(破線)/塗り=α赤・β紫・検出力緑

🧩 α・β・効果量・n —— 検出力を決める 4 者の関係

検出力 1−β は「本当に差がある(対立仮説 H1 が真)のに、 それを見逃さず棄却できる確率」。 上の図で H1 の右裾が臨界値を超えて緑に入る面積がそれです。 この面積は次の 4 者だけで決まります。

動かすと…図の変化検出力 1−β
効果量 d を上げる(効果量)H1 が右へ離れる上がる ↑
n を増やす両分布が細く尖り重なりが減る上がる ↑
α を緩める(0.05→0.10)臨界値が内側へ動く上がる ↑(ただし第1種の過誤も増)
α を厳しく(0.05→0.01)臨界値が外側へ動く下がる ↓

α と β はトレードオフです。 α(第1種の過誤=差がないのに「差あり」と誤る確率)を小さくすると臨界値が外側へ動き、 β(第2種の過誤=差があるのに見逃す確率)が増えて検出力が下がります。 両方を同時に下げる唯一の正攻法が n を増やすこと —— これが検出力分析でサンプルサイズ設計が中心になる理由です。

📐 検出力分析(事前の必要 n 設計)と過少検出力の問題

事前(a-priori)検出力分析とは、 データを取る前に「目標検出力 0.8・想定効果量 d・α=0.05」から必要 n を逆算する手続きです。 上の「🎯 必要nモード」がまさにこれで、 両側 z 検定なら 1 群あたり n ≈ 2·(z1−α/2+z1−β)² / d² で近似できます。

過少検出力(underpowered)な研究は二重に危険です。 第一に、 本当の差を高確率で見逃す(β が大きい)。 第二に、 たまたま有意になった結果は効果量を過大評価しやすく(Type M error)、 追試で再現しません。 これが 再現性の危機 の主要因の一つで、 「非有意 = 差なし」ではなく「検出力不足で判断保留」と書き分けることが、 検出力を理解した分析者の作法です。 SSDSE-B-2026 は 47 行固定なので、 「この n で検出できる最小効果量」を逆算し、 結論の慎重さを担保します。

📐 数式・定義

🍰 まずはやさしく

計算で出せる正確な数値のことです。

目標とする確率を正しく設定するために使います。

買い物で得するプランがあるか計算する時に似ています。

数式や公式を使って定義を詳しく見ていきましょう。

検出力(power)は $1 - \beta$、 すなわち真に差があるとき、 それを検出する確率:

$$ \text{Power} = 1 - \beta = P(\text{reject } H_0 \mid H_1 \text{ true}) $$

効果量 $d$、 サンプル数 $n$、 有意水準 $\alpha$ から計算可能で、 通常 0.80 以上を目標とする。

📐 公式チートシート — 主要検定の検出力

検定必要 n の近似式Python 関数
独立 2 群 t 検定n/群 ≈ 2(z1−α/2+z1−β)² / d²TTestIndPower().solve_power
対応 2 群 t 検定n ≈ (z1−α/2+z1−β)² / dz²TTestPower().solve_power
相関係数の検定n ≈ ((z1−α/2+z1−β)/arctanh r)² + 3NormalIndPower + Fisher z
比率の差(2 群)n/群 ≈ (z1−α/2√{2p̄q̄}+z1−β√{p1q1+p2q2})² / (p1−p2)²NormalIndPower().solve_power
一元配置 ANOVA非中心 F 分布の累積を解く(閉形式なし)FTestAnovaPower
χ² 適合度・独立性非中心 χ² 分布から数値解GofChisquarePower
単回帰(傾きの検定)相関係数の検定と同型FTestPower
重回帰(R² 増加)f² = ΔR²/(1−R²full) を使い非中心 FFTestPower

注:すべて両側・等分散・正規性を仮定した近似。 Welch 補正・ノンパラ・混合モデルでは Monte Carlo シミュレーションでの数値計算が現実的。 R の pwr、 Python の statsmodels.stats.power、 GUI の G*Power 3.1 が標準ツール。

📐 効果量(Effect Size)— 検出力計算の中核概念

検出力計算の最も難しい部分が「効果量をどう設定するか」。 効果量は「差の大きさ」を標準偏差で割って無次元化した量で、 主要な指標を整理する。

Cohen の効果量カタログ

指標 定義 用途 小/中/大の目安
Cohen's $d$$d = (\mu_1 - \mu_2)/\sigma$2 群の平均差0.2 / 0.5 / 0.8
Cohen's $f$$f = \sigma_m / \sigma$ANOVA(多群比較)0.10 / 0.25 / 0.40
Cohen's $w$$w = \sqrt{\chi^2/n}$カイ二乗検定0.10 / 0.30 / 0.50
相関係数 $r$Pearson $r$相関検定0.10 / 0.30 / 0.50
オッズ比 $OR$$P_1(1-P_2) / P_2(1-P_1)$ロジスティック回帰1.68 / 3.47 / 6.71(Chen ら 2010)
$\eta^2$(イータ二乗)SS_between / SS_totalANOVA の説明割合0.01 / 0.06 / 0.14

SSDSE 文脈で「東日本 vs 西日本の高齢化率に差があるか」を t 検定で見るとき、 差 = 2.5%、 SD = 4% なら $d = 2.5/4 = 0.625$(中〜大)。 これを Cohen's d として power 計算に投入する。

効果量の設定 — 3 つの戦略

研究者がやりがちな悪手は「目標 $n$ から逆算して効果量を決める」こと。 「200 件で power 0.8 を達成したいから $d=0.4$ と仮定する」のような循環論。 これは検出力分析を儀式化する典型例。

🔬 数式・定義を「言葉」で読み解く

2 群の平均の差を両側 z 検定で調べるときの検出力は、 正規近似で次のように書ける。

$$1-\beta \approx \Phi\left(\delta - z_{1-\alpha/2}\right) + \Phi\left(-\delta - z_{1-\alpha/2}\right),\qquad \delta = d\sqrt{\frac{n_1 n_2}{n_1+n_2}}$$

各記号を、 2023 年度の東日本 23 都道県と西日本 24 府県の高齢化率(65 歳以上人口 ÷ 総人口)で読むと次のとおり。

記号意味東西の高齢化率での値
$d$効果量。 平均の差を群内の標準偏差で割った「差の大きさ」(31.97 − 31.18) / 3.35 = 0.235
$n_1, n_2$各群の件数。 増やせるなら検出力を上げる最も確実な手段23 と 24(47 県で頭打ち)
$\delta$非心度。 帰無分布から対立分布の中心がどれだけ離れているか(標準誤差の何個分か)0.235 × √(23×24/47) = 0.807
$z_{1-\alpha/2}$両側 α の臨界値。 α を厳しくすると外へ動き、 検出力が下がるα = 0.05 で 1.960
$\Phi$標準正規分布の累積分布関数。 対立分布のうち臨界値を越える面積を測るΦ(0.807 − 1.960) = Φ(−1.153) = 0.125
$1-\beta$検出力。 反対側の裾 Φ(−2.767) = 0.003 を足して0.127(t 分布で正確に計算すると 0.124)

δ が臨界値 1.96 より小さいうちは検出力は 0.5 に届かない。 δ を 1.96 + 0.84 = 2.80 まで押し上げると検出力 0.8 になるので、 d = 0.235 のままなら 1 群あたり約 285 県が必要になる。 「47 県で有意差なし」は、 この δ の小ささを言い換えたものにすぎない。

🔬 数式を言葉で読み解く — 逐次検定と検出力

大規模 A/B テストでは、 データが集まる途中で「もう差が見えたから止めよう」と判断したくなる。 これを逐次検定(sequential testing)と呼ぶが、 単純に何度も検定すると α が膨張する(peeking problem)。

$$ \alpha_{\text{actual}} \approx 1 - (1-\alpha)^{k} $$

$k$ 回検定すると、 実際の偽陽性率は $\alpha$ の $k$ 倍近くに膨らむ。 $\alpha=0.05$ で 5 回 peek すれば実質 $\alpha \approx 0.23$。 検出力分析でも、 逐次検定を想定するなら群逐次法(O'Brien-Fleming、 Pocock 等)の境界値を使って α を分割する必要がある。

peek 回数 k 単純検定の偽陽性率 Pocock 法での閾値 O'Brien-Fleming 法
10.050.0500.050
30.140.0220.001 → 0.039
50.230.0160.00005 → 0.041
100.400.0106最終段でほぼ 0.05

💬 結果の読み方: ① Pocock 法は「各段階で同じ閾値」、 O'Brien-Fleming は「序盤厳しく、 終盤 0.05 に近づける」設計。 ② どちらも検出力を維持するためには、 単純な n より 1.07 〜 1.20 倍の標本が必要。 ③ SSDSE のような固定 47 件のクロスセクションでは逐次検定の余地はないが、 時系列で年次が増えるパネルデータでは関係する。

📖 物語で理解する検出力 — 「見逃さない統計学」の現場感覚

検出力(statistical power)は数式だけで理解すると「閾値より大きい確率」という抽象的な定義に閉じてしまう。 だが現場の研究者・データサイエンティスト・公衆衛生担当者にとって、 検出力は 「自分の研究が本当に意味のある違いを見つけられるか」 を事前に保証する 研究品質の心臓部 である。 ここでは、 SSDSE-B-2026 都道府県データに即した三つの物語を通じて、 検出力の「実感」を育てる。

物語 1 — 「47 件しかない」呪縛と向き合う県政アナリスト

県政担当のアナリストが、 「人口あたり医師数と平均寿命に関係があるか」を調べたいと考えた。 SSDSE-B-2026 で扱える単位は 47 都道府県、 つまり標本サイズは固定で 47 である。 相関分析を行う場合、 Cohen の慣用値で「中程度の相関」とされる $r=0.30$ を α=0.05 両側、 検出力 0.80 で検出するには、 おおむね n ≈ 84 件が必要になる。 つまり 47 件では、 中程度の相関すら確実には拾えない可能性が高い。 では諦めるしかないのか? 答えは「効果量の前提を見直す」「結論の書き方を変える」の二段構えである。

第一に、 公的統計を都道府県単位で扱う領域では、 各観測点が 「数万〜数百万人の集約」であるためノイズが小さく、 同じ $r=0.30$ でも単一個人を観察する研究より「実質的に強い相関」を意味する。 第二に、 47 件で検出できるのは概ね $r \geq 0.40$(中〜大)の関係に限られるため、 結果には必ず「47 件・検出力 0.80 で検出可能な最小相関は約 0.40 である」と 事前検出力分析(a priori power analysis)の前提 を明示する。 これにより、 「弱い相関が出なかった=関係がない」と早合点する読者を防げる。 検出力分析は 「自分の研究の限界を honest に書く道具」 なのである。

物語 2 — 新薬の効果を「見逃さない」治験統計家

製薬企業の治験統計家にとって、 検出力は 「失敗治験のコスト」と直結する。 ある第 III 相試験で、 新薬と既存薬の血圧降下効果の差を $d=0.30$(標準偏差換算)と想定し、 α=0.05、 検出力 0.90、 1:1 割付、 両側検定で計算すると、 必要総標本は概ね n ≈ 470 となる。 ここで「検出力 0.80 で十分」と妥協すると、 n は 350 程度で済むが、 もし本当に効果が $d=0.30$ あった場合、 20% の確率でその効果を見逃す。 治験全体の費用が数十億円規模であることを考えれば、 0.10 の検出力の差は数億円の保険料に相当する。

さらに multi-arm 試験(用量を 3 段階比較する等)では、 多重比較補正(Bonferroni / Hochberg / BH)を入れた後の 調整後検出力 を計算する必要があり、 単純計算で求めた n では 15〜25% 不足するのが普通である。 治験プロトコルでは検出力分析の手順、 想定効果量の根拠(先行 phase II データ)、 脱落率(dropout rate、 通常 10〜20%)を加味した最終 n を 必ず書面化する。 規制当局(FDA、 PMDA、 EMA)は検出力分析を含まない申請書を受理しない。

物語 3 — A/B テストを 100 回走らせる EC サイトのデータエンジニア

大手 EC サイトでは年間 100 件以上の A/B テストを走らせる。 各テストでコンバージョン率(CV)を 1.0% 改善できるかを判定したい。 ベース CV が 3.0% の場合、 効果量はリスク比 1.33(オッズ比 1.34)に相当し、 α=0.05 両側、 検出力 0.80 で 各群 n ≈ 4,650、 総 n ≈ 9,300 セッション必要になる。 日次 PV が 5,000 のサービスであれば、 結論まで 約 2 日。 ここで「検出力 0.50」で妥協すると、 n は半分以下で済むが、 真に効果のある施策の半分を「効果なし」と誤判定し、 競合に差をつける機会を毎週捨てていることになる。

逆に、 ベース CV が 0.5% のように低い場合、 同じ 1.0% 改善でも 各群 n ≈ 1,600 で済む(差の絶対値が小さくても、 比率としては大きいため)。 一方、 ベース CV が 30% と既に高い場合、 1.0% の絶対改善を検出するには 各群 n ≈ 40,000。 つまり 「ベース値」と「改善幅」の組み合わせで必要 n が桁違いに変わるため、 A/B テスト設計時は必ず両者を入力した検出力曲線を可視化する。 statsmodels の NormalIndPower や GofChisquarePower で 5 分以内に計算できる。

「事前」と「事後」 — post-hoc power の罠

研究を 終えてから「うちの研究の検出力は 0.62 だった」と計算する 事後検定力分析(post-hoc power)は、 多くの統計学者から 誤用と批判されている。 理由は、 観測された効果量を使って計算する事後検出力は、 p 値と 1 対 1 で対応するだけで、 新しい情報を提供しないからである(Hoenig & Heisey, 2001)。 「p=0.06 だったが事後検出力は 0.80 だから効果はある」という主張は 循環論法になる。

代わりに使うべきは 「信頼区間の幅」と 「最小検出可能効果(MDE:Minimum Detectable Effect)」である。 「我々の研究では効果量 $d \geq 0.45$ ならば 80% の確率で検出できたが、 観測効果量は $d=0.22$ で 95%CI は [-0.08, 0.52] であった」と書けば、 「効果があったかなかったか」「あったとしてどの範囲か」を読者に honest に提示できる。 検出力分析は research 前夜のチェックリストであり、 終わってからの後付け説明には使わない。

🧪 効果量の本質を掘る — なぜ「同じ p 値」でも研究の価値が違うのか

検出力を計算する三要素のうち、 α・n は実務的に動かしにくい(α は学術的慣習で 0.05 固定、 n は予算で決まる)。 唯一、 研究者が 研究設計で大きく動かせる変数が 効果量(effect size)である。 そして効果量こそ、 「統計的有意」と「実質的有意」を分ける唯一の橋渡しとなる量である。

Cohen's d — 平均差を「標準偏差で物差し化」する

二群の平均差 $\mu_1 - \mu_2$ を、 群内の標準偏差 $\sigma_{\text{pooled}}$ で割った量が Cohen の $d$ である。 SSDSE-B-2026 で「東日本 vs 西日本」の平均寿命差を見たとき、 もし $d=0.20$ なら 「ほとんど見えない違い」、 $d=0.50$ なら 「グラフを見れば気付ける程度」、 $d=0.80$ なら 「素人にも明らかな差」に対応する。 この「言語感」を持っていると、 検出力分析のインプットが現実離れしなくなる。

注意点として、 教育評価・心理学では $d=0.40$ 程度が「教育介入として意味がある」とされる(Hattie の効果量メタ分析)ため、 「中程度」と分類される $d=0.50$ でさえ、 介入研究としては かなり強い効果である。 一方、 医療では $d=0.30$ でも数千人規模では命を救う可能性があるため 「小さくても重要」な効果量となる。 つまり 効果量の解釈は領域文化に依存するのが現実で、 一律の閾値で「大/中/小」を機械的に当てはめてはいけない。

$\eta^2$ と $f$ — 分散分析の効果量

ANOVA では $\eta^2$(eta-squared)または $\omega^2$(omega-squared)を効果量として報告する。 $\eta^2 = SS_{\text{between}} / SS_{\text{total}}$ で、 「全変動のうち何 % が群差で説明されるか」を意味する。 Cohen の慣用では $\eta^2 \geq 0.01$ が小、 $\geq 0.06$ が中、 $\geq 0.14$ が大。 検出力分析では $f = \sqrt{\eta^2 / (1-\eta^2)}$ という変換量を入力に取る。 例: $\eta^2 = 0.06$ なら $f = 0.25$ で「中程度の効果」。

$\eta^2$ は 分散の比なので、 サンプルサイズが大きくなると「偏り」が出る(過大推定)。 これを補正したのが $\omega^2$ で、 不偏推定量に近い性質を持つ。 査読論文では両方を併記するか、 サンプル数が大きい場合は $\omega^2$ を採用するのが推奨される(Kirk, 1996)。

Cohen's $w$ と $\phi$ — カテゴリデータの効果量

カイ二乗検定では $w$(または $\phi$、 Cramer の $V$)を効果量として用いる。 $w = \sqrt{\chi^2 / N}$ で、 「クロス表の独立性からのズレ」を 0〜1 で表現する。 慣用では $w \geq 0.10$ が小、 $\geq 0.30$ が中、 $\geq 0.50$ が大。 検出力分析の入力としては、 帰無分布(独立性が成立する場合)と対立分布(観測されたクロス表)を比較する形で計算する。

2×2 クロス表に限れば $\phi$(phi 係数)と $w$ は一致する。 多群クロス表(例: 都道府県 47 × 業種 5)では Cramer の $V$ を使うのが標準。 $V = \sqrt{\chi^2 / (N \cdot (k-1))}$ で $k = \min(\text{行数}, \text{列数})$。

相関 $r$ と $r^2$ — 「相関の大きさ」と「説明分散」の違い

相関分析の効果量は単純に $r$ そのもの。 ただし「説明力」は $r^2$ で、 $r=0.30$ でも $r^2 = 0.09$、 つまり「変動の 9% しか説明していない」。 SSDSE-B で「医師数 vs 平均寿命」を $r=0.45$ で確認したとしても、 「医師数で平均寿命の 20% を説明している」が現実的な解釈で、 残り 80% は他要因(食生活・気候・経済・遺伝)である。 検出力曲線では $r$ を Fisher の z 変換 $z = 0.5 \ln((1+r)/(1-r))$ で正規化して計算する。

回帰分析では $f^2 = R^2 / (1-R^2)$ を効果量として使う。 $f^2 = 0.02$ が小、 $0.15$ が中、 $0.35$ が大。 階層回帰では「追加投入した変数群が独自に説明する分散」 $\Delta R^2$ を分子に置く $f^2_{\text{add}}$ を計算する。 これも statsmodels や G*Power で計算可能。

📊 サンプルサイズ計算の早見表 — 6 検定 × 効果量 × 検出力

研究計画時に最も頻繁に問われるのが「最低何人必要か」である。 ここでは α=0.05 両側、 検出力 0.80 を標準に、 主要 6 検定について必要 n を整理する。 数字は statsmodels で計算した近似値で、 厳密値は数件単位で前後する。

検定 効果量小 効果量中 効果量大 備考
1 標本 t 検定n≈199 (d=0.2)n≈34 (d=0.5)n≈15 (d=0.8)片側ならさらに小
独立 2 標本 t 検定各群 n≈393各群 n≈64各群 n≈26合計 n は 2 倍
対応のある t 検定n≈199n≈34n≈15差の平均で計算
1 要因 ANOVA (3 群)各群 n≈322 (f=0.1)各群 n≈52 (f=0.25)各群 n≈21 (f=0.4)事後比較で n 増
相関分析n≈782 (r=0.1)n≈84 (r=0.3)n≈29 (r=0.5)Fisher z 変換ベース
カイ二乗(2×2)n≈785 (w=0.1)n≈87 (w=0.3)n≈31 (w=0.5)セル期待度 5 以上必要

💬 読み方: ① 効果量を「中」(d=0.5 / r=0.3 / w=0.3)と置けば、 多くの検定で 各群 n=30〜90 で済む。 ② 効果量を「小」と置くと n=200〜800 必要になり、 治験・大規模調査でないと現実的でない。 ③ 相関分析・カイ二乗は同じ n でも要求が厳しい(情報量が低いため)。 ④ 1 標本 t 検定と対応のある t 検定は 差の標準偏差で計算するため、 独立 2 標本より n が小さくて済むことが多い(被験者内変動を活用できるため)。

⚠️ 多重比較を入れた場合の必要 n: 3 群比較で Bonferroni 補正(α=0.0167)を入れると、 各群必要 n は 約 1.3 倍に膨らむ。 ANOVA の F 検定で全体差を検出した後の事後比較(Tukey HSD 等)も実質的に α 補正が入るので、 ANOVA の n 計算だけで安心せず、 「事後比較込みの保守的設計」を目指す。

🧮 SSDSE-B 実値で計算してみる

SSDSE-B-2026 の 2023 年度から、 このページの検出力計算で使う高齢化率(A1303÷A1101)と、 あわせて眺める合計特殊出生率(A4103)・有効求人倍率を 4 県で示す。

都道府県総人口(千人)高齢化率(%)TFR有効求人倍率(F3103÷F3102)
東京都14,08622.80.991.56
大阪府8,76327.71.191.23
沖縄県1,46823.81.601.12
秋田県91439.11.101.40
47 都道府県(合計・全体比率、 TFR は単純平均)124,35329.11.291.30

秋田県と東京都の高齢化率は 16 ポイント以上離れているが、 県をどう 2 群に分けるかで群平均の差は大きく変わる。 次の事例のように東日本・西日本で分けると差は 0.79 ポイントにとどまり、 群内のばらつき(標準偏差 3.35)に比べて小さいため、 47 県では検出力が出ない。

🧮 SSDSE-B-2026 実値での検出力計算

SSDSE-B-2026 は 47 都道府県 × 112 列のデータ(12 年分で 564 行、 横断は 2023 年を抽出)。 47 行は固定サイズ(増やせない)なので、 「47 件で十分検出できる効果量はどれくらいか」を逆算する事例を見る。

事例: 東日本 vs 西日本の高齢化率比較

東日本 23 都道県 vs 西日本 24 府県の 2 群比較(独立 t 検定)を想定。 α = 0.05、 検出力 = 0.80 の標準設定。

設定: n1 = 23 (東日本) n2 = 24 (西日本) α = 0.05 (両側) 検出したい効果量: ? 統計理論より: total n = 47 で power = 0.80 を達成する効果量 → Cohen's d ≈ 0.83 (大効果) つまり: - 東日本平均と西日本平均の差が「SD の 0.83 倍以上」なら、 47 件で検出できる確率が 80% - SD が 4% なら、 平均差は 0.83 × 4 = 3.32% 以上必要 - 差が 1.5% 程度なら、 SSDSE では検出できない可能性大

事例: 相関係数の検定

「総人口(A1101)」と「出生数(A4101)」の相関は SSDSE で $r \approx 0.99$。 47 都道府県で何の相関を検出できるか?

n = 47, α = 0.05, power = 0.80 → 検出可能な r ≈ 0.40 意味: - SSDSE の 47 都道府県で「中程度の相関 (r > 0.40)」なら検出できる - 「弱い相関 (r = 0.2)」は検出できない可能性 (power ≈ 0.35) - 「強い相関 (r > 0.5)」はほぼ確実に検出 (power > 0.95)

🧮 数式に値を入れて手で計算する: 検定力

合成データで n と効果サイズ別の検定力を計算する。

Step 1: パラメータ

α=0.05, μ₀=0, μ₁=0.5 (中効果) σ=1, n=64 SE = 1/8 = 0.125

Step 2: 検定力

臨界値 z*=1.645, 臨界 = 0 + 1.645·0.125 = 0.206 power = P(x̄ > 0.206 | μ=0.5) = P(Z > (0.206-0.5)/0.125) = P(Z > -2.355) ≈ 0.991

🐍 Python で再現

1
2
3
4
5
6
from scipy.stats import norm
n=64
SE = 1/n**0.5
crit = norm.ppf(0.95) * SE
power = 1 - norm.cdf(crit, 0.5, SE)
print(f"検定力: {power:.3f}")

📤 実行結果

検定力: 0.991

💬 手計算 (Step 2) 0.991 と Python 出力が完全一致。

🐍 Python 実装

以下は 検出力 を SSDSE-B-2026 で扱うときの典型コード。 encoding='cp932' は政府統計の Shift-JIS 対応。 skiprows=[1] は 2 行目の日本語見出し行をスキップする定石(列名はコード行 A1101 等)。 SSDSE-B-2026 は 2012〜2023 年度の 12 年 × 47 県で 564 行あるため、 横断分析では年度で絞り込む。

🐍 東日本と西日本の高齢化率を t 検定し、 検出力を確かめる

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) 北海道 5,092,000 1,681,000 東京都 14,086,000 3,205,000 沖縄県 1,468,000 350,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd
from scipy import stats

# 検出力 文脈での基本的な仮説検定
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df.iloc[:, 0] == 2023]; df['aging']  = df['A1303'] / df['A1101'] * 100
df['region'] = df['Prefecture'].apply(lambda p: '東日本' if p in ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県','茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県','新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県'] else '西日本')

east = df.loc[df['region']=='東日本', 'aging']
west = df.loc[df['region']=='西日本', 'aging']

t, p = stats.ttest_ind(east, west, equal_var=False)
print(f'東日本 平均高齢化率: {east.mean():.2f}%')
print(f'西日本 平均高齢化率: {west.mean():.2f}%')
print(f't = {t:.3f}, p = {p:.4f}')
print('判定:', '有意差あり' if p < 0.05 else '有意差なし')
📤 実行例(実測) 東日本 平均高齢化率: 31.18% 西日本 平均高齢化率: 31.97% t = -0.804, p = 0.4259 判定: 有意差なし

💬 東西の差 0.79 ポイントに対し、各群の標準偏差は東日本 3.62・西日本 3.07 で、効果量は Cohen の d ≈ 0.24 と小さい。23 県対 24 県でこの d を 5% 水準で検出できる確率(検出力)は約 0.12 しかなく、p = 0.4259 の「有意差なし」は差が無いことの証拠ではなく、検出できる設計になっていなかったと読むべきである。d = 0.24 を検出力 0.8 で捉えるには 1 群あたり約 285 の標本が必要で、都道府県が 47 しかない以上、効果量を大きくできる区分を考えるほうが現実的である。

🐍 Python 実装 — statsmodels で検出力分析

このコードでやること: statsmodels.stats.power の TTestIndPower を使い、 ① 47 件で検出できる効果量を逆算、 ② 効果量 0.5 を検出するのに必要な $n$ を計算、 を実行する。

📥 想定するシナリオ:

SSDSE-B-2026 の都道府県データ 分析: 東日本 vs 西日本の高齢化率の差を t 検定で検出 n1=24, n2=23, α=0.05, power=0.80 を維持したい
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import numpy as np
from statsmodels.stats.power import TTestIndPower

# 検出力分析オブジェクト
analysis = TTestIndPower()

# 質問 1: 47 件で power=0.80 を達成する効果量は?
effect = analysis.solve_power(nobs1=24, ratio=23/24,
                                alpha=0.05, power=0.80)
print(f'47 件で power=0.80 を達成する効果量 Cohen \'d = {effect:.3f}')

# 質問 2: 効果量 0.5 を検出するのに必要な n は?
n_required = analysis.solve_power(effect_size=0.5, ratio=1,
                                    alpha=0.05, power=0.80)
print(f'効果量 d=0.5 を検出する必要 n = {n_required:.0f}/群')

# 質問 3: 47 件で d=0.5 のときの検出力は?
power = analysis.solve_power(effect_size=0.5, nobs1=24, ratio=23/24,
                              alpha=0.05)
print(f'47 件で d=0.5 の検出力 = {power:.3f}')

📤 実行すると次の出力が得られる:

47 件で power=0.80 を達成する効果量 Cohen 'd = 0.835 効果量 d=0.5 を検出する必要 n = 64/群 47 件で d=0.5 の検出力 = 0.389

💬 結果の読み方: ① SSDSE の 47 件では「大効果(d ≈ 0.83)」が検出限界。 ② 「中効果 d = 0.5」を確実に検出したいなら各群 64 件、 計 128 件のデータが必要。 ③ 47 件で d=0.5 を検出する確率は 38.9% しかない = 半分以上は見逃す可能性がある。 つまり SSDSE の 47 都道府県データで「微妙な差」を主張するのは統計的に弱い。

🐍 Python 実装 — 検出力曲線を描く

このコードでやること: 効果量 d を横軸、 検出力を縦軸にした「power curve」を、 異なる n(30, 50, 100, 200)について描く。 「どれくらいの効果量が検出できるか」を視覚的に把握できる定番図。

📥 想定する設定:

α = 0.05 (両側) 群サイズ: n = 30, 50, 100, 200 (各群同サイズ) 効果量 d: 0.0 〜 1.5 を 100 ステップ
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
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.stats.power import TTestIndPower

analysis = TTestIndPower()

effect_sizes = np.linspace(0, 1.5, 100)
sample_sizes = [30, 50, 100, 200]

plt.figure(figsize=(10, 6))
for n in sample_sizes:
    powers = [analysis.power(effect_size=d, nobs1=n, alpha=0.05, ratio=1) for d in effect_sizes]
    plt.plot(effect_sizes, powers, label=f'n = {n}/群', linewidth=2)

plt.axhline(0.80, color='red', linestyle='--', label='Power = 0.80 (慣習)')
plt.xlabel('効果量 Cohen \'d')
plt.ylabel('検出力 (1 - β)')
plt.title('検出力曲線 — 標本サイズと効果量の関係')
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig('power_curve.png', dpi=120)

# 数値要約: 各 n で power = 0.80 を達成する効果量 d
print('power = 0.80 を達成する効果量 d:')
for n in sample_sizes:
    d80 = analysis.solve_power(nobs1=n, alpha=0.05, power=0.80, ratio=1)
    print(f'  n = {n}/群 → d ≈ {d80:.2f}')

📤 実行すると次の出力が得られる(数値要約):

power = 0.80 を達成する効果量 d: n = 30/群 → d ≈ 0.74 n = 50/群 → d ≈ 0.57 n = 100/群 → d ≈ 0.40 n = 200/群 → d ≈ 0.28

💬 結果の読み方: n = 50/群 → 200/群 で 4 倍にすると、 検出できる d は 0.57 → 0.28 とほぼ半分になる(d ∝ 1/√n)。 「sample size を 4 倍に増やしても、 検出できる効果量は半分にしか減らない」 — これが統計学の 「平方根の壁」。 SSDSE で n=47 を 4 倍の 188 件にしても、 検出力は劇的には改善しない。 小規模データで「微妙な差」を主張するのが本質的に難しい理由。

⚠️ よくある落とし穴

⚠️ 検出力まわりの落とし穴(深掘り 7 件)

落とし穴 1: 「post-hoc power」 — 事後検定力分析の誤用

分析後に「観察された効果量」と「実際の n」で計算する事後検出力(post-hoc power)は意味がないとされる(Hoenig & Heisey 2001)。 数学的に有意でなかった p 値 → 低い post-hoc power、 と同じ情報を別表現しているだけ。 「power が低かったから結果が無効」「power が高かったから結果が強固」という議論は無効。 対処: 検出力分析は事前(a priori)のみが意味を持つ。

落とし穴 2: 効果量を「自分の期待値」で設定する

研究者が「これくらいの差は見つかってほしい」と希望して効果量を設定すると、 計算された n が現実離れする。 SSDSE 文脈で「都道府県の高齢化率差を検出したい」と d=0.3 で計算すると n=176 件が必要 → SSDSE は 47 件 → そもそも研究設計が破綻している、 という事実が見える。 対処: 効果量は先行研究やパイロットから決める。

落とし穴 3: 多重検定で α 補正を忘れる

SSDSE で 112 列のうち「人口と相関する列」を探すために 111 回相関検定をすると、 α=0.05 のまま使えば期待される偽陽性は 111 × 0.05 ≈ 5.6 個。 検出力計算でも Bonferroni 補正後の α' = 0.05/111 ≈ 0.00045 で再計算しないと意味がない。 対処: 多重検定の場合、 必要 n は劇的に増える(補正後の検出力は急落)。

落とし穴 4: 「両側 vs 片側」を混同する

「東日本の方が高齢化率が高い」と方向が明確なら片側検定。 これだと同じ n でも検出力が約 1.2 倍高くなる。 ただし片側に「賭ける」のは事前登録(pre-registration)が必須。 後から方向を決めると p-hacking。 対処: 検出力分析の段階で両側 / 片側を決定し、 報告書に明記。

落とし穴 5: 「効果量=意味のある差」とは限らない

Cohen の「小(d=0.2)」は統計学的なベンチマークであって、 「実務的に意味のある差」とは別概念。 医療分野では血圧 5mmHg の差(d=0.1)が臨床的に重要かもしれない。 SSDSE 文脈なら「TFR の 0.05 差」が政策的に大きい意味を持つかは別議論。 対処: 「統計的有意」と「実質的有意」を区別してレポートする。

落とし穴 6: 「p < 0.05 だから差がある」一辺倒

大標本 (n>1000) では微小な差も p < 0.05 になりがち。 検出力分析と効果量を併記しないと「sample size 効果による偽の有意」を見逃す。 対処: 必ず効果量と信頼区間を併記。 ASA 声明(2016)でも p 値単独の判断は批判されている。

落とし穴 7: 検定力分析と検定統計量の前提条件

t 検定の検出力分析は「正規分布」「等分散」を前提にしている。 これが破れていると、 計算上の power と実際の power が乖離する。 ノンパラメトリック検定(Mann-Whitney など)を使う場合、 別の検出力公式が必要。 対処: 検定の前提(正規性・等分散)を Shapiro-Wilk・Levene で確認してから検出力を計算。

📊 効果量と必要サンプルサイズの早見表

プロジェクト計画時に手元に置いておきたい早見表。 α=0.05 両側、 検出力 0.80、 各群同サイズの t 検定(独立 2 標本)の場合。

効果量 d Cohen の評価 必要 n/群 合計 N 具体イメージ
0.1極小15703140微小な差、 ほぼ実感できない
0.2小394788心理学の典型的な小効果
0.3小〜中176352A/B テストでの推奨最小差
0.5中64128中規模調査で実用的
0.8大2652SSDSE 規模でも検出可能
1.0非常に大1734明らかに分かるレベル
1.5劇的918パイロット試験レベル

SSDSE-B-2026 の 47 件で確実に検出できるのは d ≥ 0.83 以上の効果。 これは「大効果」レベルで、 「明らかに違う」と言える差。 微妙な差は別データソース(市町村レベル統計など)で n を増やす必要がある。

🗺 概念マップ

検出力 (1-β) を中心に、 事前 / 事後の運用シーンと、 効果量 (d/r) ・ 有意水準 (α) ・ サンプルサイズ (n) の四変数関係を整理する。 研究計画段階での power analysis が正しい運用であり、 SSDSE-B-2026 の都道府県差検証で n=47 が固定の場合は逆算で検出可能な効果量が決まる。

statistical power 事前検出力分析 効果量 Cohen's d 有意水準 α=0.05 サンプル n=47 第2種過誤 β G*Power / statsmodels

検出力 (1−β) の概念マップは「効果量 d / Cohen's d、 有意水準 α、 サンプルサイズ n、 検出力 1−β」の 4 要素の連動関係を中心に置き、 SSDSE-B-2026 の都道府県別データを「47 件しかない」サンプルとして見たときの検出可能効果サイズを試算するワークフローを示す。 d=0.5 (中効果)、 α=0.05、 n=47 では片側検定 1−β≈0.71 となり、 「47 件は中効果なら検出力 7 割」と把握できる。

🔗 隣接手法への橋渡し

検出力分析は研究計画 (a-priori) と事後解釈 (post-hoc) の両局面で機能する。 SSDSE-B-2026 で「東日本 vs 西日本の人口 10 万人あたり一般診療所数(I5102 / A1101)に差はあるか」を検定する前に、 効果量の見積もりからサンプルサイズを逆算するのが正しい順序。

SSDSE のように n=47 固定の場合、 検出力分析は「現状のサンプルで何が検出できるか」を逆算する道具になる (post-hoc 用途)。

🌳 手法選択フロー

検出力分析は「研究前の n 設計」か「研究後の解釈」かで使い方が変わる。 SSDSE-B-2026 のような既存データ分析では②③が中心になる。

  1. ① 研究前 (a-priori): 目標検出力 0.8、 想定効果量 d、 α=0.05 を入力 → statsmodels.stats.power.TTestPower().solve_power() で必要 n を逆算。
  2. ② 既存データ (post-hoc): n=47 (都道府県)、 観測 d、 α=0.05 を入力 → 検出力 1−β を計算。 0.8 未満なら「検出力不足のため有意でないからといって差がないとは言えない」と注釈。
  3. ③ 検出力不足の対処: ペアデータ (前後比較) で n を半減 / 多変量化 (共変量で残差分散を縮小)、 メタ分析で複数研究を統合。

SSDSE-B-2026 を題材にする場合、 47 都道府県という固定 n の制約下で「検出可能な最小効果量」を逆算し、 結論の慎重さを担保する。

🔍 解説を一歩深く — 検出力は「追試の再現確率」でもある

🧭 直感 — power 0.14 の有意結果は、追試すると 7 回に 6 回「消える」

検出力の定義「本当に差があるとき、有意になる確率」は、視点を変えるとそのまま追試の再現確率になる。 真の効果量が変わらない限り、同じ設計で追試したときに再び有意になる確率は元の研究の検出力そのものだからだ。 「有意だったのに追試で消えた」の多くは効果が消えたのではなく、最初から検出力が低くて、たまたま当たっただけという説明がつく。

SSDSE-B-2026 の実測値で確かめる。 2023 年の高齢化率(65歳以上人口 A1303 ÷ 総人口 A1101 × 100)を、東日本 24 道県(北海道〜三重)と西日本 23 府県(滋賀〜沖縄)で比べると:

東日本 (n=24): 平均 31.16% 西日本 (n=23): 平均 32.03% プール SD = 3.35 → Cohen's d = −0.260(小効果) 独立 t 検定: t = −0.891, p = 0.378(非有意) この |d|=0.26 に対する検出力(α=0.05, 両側)= 0.141

仮に「西日本の方が d=0.26 だけ高齢化率が高い」が真実だとしても、 この設計では 14% しか有意にならない。 p=0.378 という非有意は「差がない証拠」ではなく、「この虫めがねでは最初から見えないサイズだった」ことの表れである。

⚠️ 落とし穴(重要)— 有意フィルタと「勝者の呪い」: 低検出力は効果量を水増しする

本文の「post-hoc power の罠」とは別に、低検出力にはもう一つ深刻な副作用がある。 低検出力の研究で有意になった結果は、効果量が系統的に過大推定されるという現象だ(Type M エラー / 勝者の呪い)。 理由は単純で、真の効果が小さいとき、有意という関門(有意フィルタ)を通過できるのは偶然大きめの差が出た標本だけだからである。

上の実測パラメータ(平均 31.16 vs 32.03、SD 3.35、n=24/23)を真の状態と置いたシミュレーション(架空の反復実験: seed=42、2 万回反復)では:

有意 (p<0.05) になった割合 : 14.0%(理論検出力 0.141 と一致) 有意になった回だけの平均 |d| : 0.742 → 真値 0.260 の約 2.85 倍に水増し(Type M エラー) 有意なのに符号が逆(東>西と誤認) : 2.0%(Type S エラー)

つまり検出力 0.14 の世界では、「有意になった研究だけを信じる」と効果を 3 倍近く過大評価し、 50 回に 1 回は方向まで逆に結論する。 「低検出力でも、有意になったのだから結果は信頼できる」は誤りで、実際はその逆——低検出力ほど、有意になった結果こそ疑わしい。 これが再現性の危機で低検出力が主犯格とされる本当の理由である。

🚀 発展 — 検出力を「事後の言い訳」でなく「設計の言語」にする

🔗 関連ページ