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

🔖 キーワード索引

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

💡 30秒結論📍 文脈🎨 直感🎮 触って理解する📐 数式・定義🔬 数式を言葉で読み解く🧮 SSDSE実値計算🐍 Python実装⚠️ 落とし穴🌐 関連手法🔗 関連用語📚 関連グループ❓ FAQ

statistical power」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「statistical power」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

検定力第2種の誤り (β)1-βサンプルサイズ設計効果量有意水準 (α)G*Power事前/事後解析検出力曲線

これらのキーワードは「statistical power の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

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

🍰 まずはやさしく

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

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

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

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

💡 30秒で分かる結論

対立仮説が真のとき正しく棄却できる確率(1-β)

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

🍰 まずはやさしく

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

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

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

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

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

本ページは 検出力(Statistical Power (1−β)) を、 ジャストインタイム型データサイエンス教育の文脈で 12 のセクションに分けて解説します。 上から順に読まなくても、 「🔖 キーワード索引」から必要箇所だけ拾い読みすることもできます。

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

🍰 まずはやさしく

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

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

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

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

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

場面検出力が登場する例何が分かるか
論文の Methods 節「検出力を用いて分析した」手法の前提と限界が文脈に乗る
実務レポート「検出力の観点で評価」意思決定の根拠が明確化
教育・学習SSDSE-B-2026 を題材に演習実データで本物の感覚が得られる
政策・社会仮説検定 分野で標準的に登場EBPM や DX の議論に直結

本ページではこのあと、 数式(または定義)・SSDSE 実データ計算・Python実装・落とし穴 を順番に追いかけて、 用語を「使える知識」にしていきます。

🎨 直感で掴む

検出力は「本当に差があるとき、 それを統計的に有意と判定できる確率」。 例えば 47 都道府県で「東日本と西日本の平均所得に 10 万円の差がある」が真だった場合、 n=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−p2NormalIndPower().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 が標準ツール。

📐 定義

対立仮説が真のとき正しく棄却できる確率(1-β)

英語名 Statistical Power。 同義・関連語:パワー。

🎯 いつ・どこで使うか

📋 前提条件・適用範囲

この用語を理解・使用するときは、 次のような前提を意識してください:

📐 効果量(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.5 / 3.5 / 9.0
$\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$ と仮定する」のような循環論。 これは検出力分析を儀式化する典型例。

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

先ほどの数式・定義に出てきた記号や概念を、 一つずつ確認します。 とくに 検出力 の文脈で意味を取り違えやすい部分を強調します。

記号意味と注意点
$\bar{x}$標本平均。 $\bar{x} = \frac{1}{n}\sum_{i=1}^n x_i$
$\sigma$(または $s$)標準偏差(または標本標準偏差)。 ばらつきの代表指標
$n$標本サイズ(観測数)
$p$p値、 または比率。 文脈で意味が変わる
$\alpha$有意水準(通常 0.05)
$H_0, H_1$帰無仮説と対立仮説

記号は手法ごとに少しずつ意味が違うため、 論文・教科書を読むたびに『この本ではこの記号を何の意味で使っているか』を最初に確認するのが鉄則です。 とくに 検出力 関連の文献では、 ${\sigma}^2$(分散)と $s^2$(標本分散)の区別、 $n$ と $N$(標本サイズ vs 母集団サイズ)の混同に注意。

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

大規模 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 の NormalIndPowerGofChisquarePower で 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(47都道府県・2023 年・112 項目)を題材に、 検出力 に関係する変数を実値で確認します。 とくに東京・大阪・沖縄・秋田 など特徴ある県を比較すると、 用語の重みが体感できます。

都道府県総人口(千人)高齢化率(%)TFR有効求人倍率
東京14,04723.00.991.74
大阪8,77827.91.211.27
沖縄1,46823.51.600.96
秋田93038.61.181.51
全国平均126,14629.11.201.31

これらの値を 検出力 の観点で読み解くと、 都道府県間の格差・特徴・関係性が浮かび上がります。 具体的な計算手順は次の「🐍 Python 実装」セクションで実演します。

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

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

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

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

設定: n1 = 24 (東日本) n2 = 23 (西日本) α = 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 は 2018〜2023 年の 12 年 × 47 県で 564 行あるため、 横断分析では年度で絞り込む。

① 基本パターン(読み込み・確認・主要列抽出)

📥 入力例(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
import pandas as pd

# 検出力 に関連する SSDSE-B-2026 分析の基本パターン
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df.rename(columns={df.columns[0]: 'Year'})
df = df[df['Year'] == 2023]   # 横断分析は 2023 年に統一
print(df.shape)            # (47, 112)

# 主要列にエイリアス(コード列名ベース)
df['総人口']   = df['A1101']
df['65歳以上'] = df['A1303']
df['高齢化率'] = df['65歳以上'] / df['総人口'] * 100
print(df[['Prefecture','総人口','高齢化率']].head())
📤 実行例(実測) (47, 112) Prefecture 総人口 高齢化率 0 北海道 5092000 33.012569 12 青森県 1184000 35.219595 24 岩手県 1163000 34.995701 36 宮城県 2264000 29.240283 48 秋田県 914000 39.059081

② 可視化テンプレ(matplotlib / seaborn)

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4103(合計特殊出生率) 北海道 5,092,000 1,681,000 1.06 東京都 14,086,000 3,205,000 0.99 沖縄県 1,468,000 350,000 1.6 …(全 47 行)
 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 seaborn as sns
import matplotlib.pyplot as plt

# 検出力 の探索的データ分析(EDA)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])

# 主要変数を取り出して名前を分かりやすく
df = df[df.iloc[:, 0] == 2023]; df['総人口']    = df['A1101']
df['65歳以上']  = df['A1303']
df['高齢化率']  = df['65歳以上'] / df['総人口'] * 100
df['TFR']      = df['A4103']

# ヒストグラム
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
sns.histplot(df['高齢化率'], kde=True, ax=axes[0])
axes[0].set_title('高齢化率の分布(47都道府県)')
sns.histplot(df['TFR'], kde=True, ax=axes[1])
axes[1].set_title('TFRの分布')
plt.tight_layout()
plt.savefig('eda_distribution.png', dpi=120)

③ 前処理:欠損・外れ値・型変換

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) Prefecture(都道府県) 北海道 2,023 北海道 東京都 2,023 東京都 沖縄県 2,023 沖縄県 …(全 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
import pandas as pd
import numpy as np

# 検出力 に関わる前処理の典型パターン
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)

# ① 欠損値の確認
print('欠損数:')
print(df.isna().sum().sort_values(ascending=False).head(10))

# ② 数値変換(カンマ・%除去 など)
def to_num(s):
    if isinstance(s, str):
        return float(s.replace(',', '').replace('%', ''))
    return s
_num_cols = [c for c in df.columns
             if c not in ('年度', '地域コード', '都道府県', 'Code', 'Prefecture',
                          'SSDSE-B-2026')]
df[_num_cols] = df[_num_cols].apply(lambda col: col.map(to_num))

# ③ 外れ値検出(IQR)
# 地域コードや都道府県名は大小比較できないので、数値の列だけで判定する
_num = df.select_dtypes(include='number')
q1 = _num.quantile(0.25)
q3 = _num.quantile(0.75)
iqr = q3 - q1
outlier_mask = ((_num < q1 - 1.5*iqr) | (_num > q3 + 1.5*iqr)).any(axis=1)
print('外れ値を含む行数:', outlier_mask.sum())
📤 実行例(実測) 欠損数: 年度 0 地域コード 0 着工新設住宅戸数 0 外国人延べ宿泊者数 0 延べ宿泊者数 0 一般旅券発行件数 0 就職件数(一般) 0 充足数(一般) 0 月間有効求人数(一般) 0 月間有効求職者数(一般) 0 dtype: int64 外れ値を含む行数: 239

④ 検定・推定の最小例(scipy.stats)

📥 入力例(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 判定: 有意差なし

※ より高度な例(クロス集計、 機械学習、 ベイズ推定)は hypothesis-testing のグループ教材を参照。

🐍 Python での扱い

SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:

📥 入力例(SSDSE-B-2026 全体:564 行 × 112 列 = 47 都道府県 × 2012〜2023 年) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) … 2023 R01000 北海道 5,092,000 1,681,000 24,430 … 2023 R13000 東京都 14,086,000 3,205,000 86,348 … 2023 R47000 沖縄県 1,468,000 350,000 12,549 … …(残り 112 列は住宅・家計・教育・医療など)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
import numpy as np

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
print(df.shape)
print(df.dtypes)
print(df.describe())

# 「検出力」の文脈で扱う場合の例:
# 分野: 仮説検定
# 関連手法は同カテゴリの他用語を参照してください。
📤 実行例(実測) (564, 112) SSDSE-B-2026 int64 Code object Prefecture object A1101 int64 A110101 int64 ... L322106 int64 L322107 int64 L322108 int64 L322109 int64 L322110 int64 Length: 112, dtype: object SSDSE-B-2026 A1101 ... L322109 L322110 count 564.000000 5.640000e+02 ... 564.000000 564.000000 mean 2017.500000 2.690688e+06 ... 26931.026596 59784.718085 std 3.455117 2.730951e+06 ... 4219.487086 8813.812956 min 2012.000000 5.370000e+05 ... 14661.000000 35658.000000 25% 2014.750000 1.082250e+06 ... 24200.750000 53794.500000 50% …(以下略)

具体的なコードは 仮説検定の枠組み を参照してください。

📝 レポートでの報告

分析結果を報告するときに含めるべき情報:

✅ チェックリスト

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

このコードでやること: statsmodels.stats.powerTTestIndPower を使い、 ① 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
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)

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

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 が 4 倍になれば検出できる効果量は約半分になる (d の必要量は n に反比例の平方根: d ∝ 1/√n)

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

⚠️ よくある落とし穴(7 件)

検出力 に取り組むときに、 学生・実務者・研究者がよく踏むワナをまとめました。 該当しそうな項目があれば、 自分の分析を見直してみてください。

❌ 1. 単位とスケールの混同
%・件数・千人・百万円 — 単位を明示せずに比較すると、 まったく違うものを比べてしまう。 グラフの軸ラベル、 表のヘッダで単位を必ず示す。
❌ 2. 時点のズレ
2020 年と 2023 年のデータを混ぜると、 コロナ前後の構造変化を見落とす。 「2023年データ」と明記し、 横断データなら時点を統一する。
❌ 3. 欠損値の暗黙除去
NaN を含む行を dropna() で除いた瞬間、 47県の標本が 30 県に減ることもある。 何件落としたか必ず記録し、 結果に与える影響を考える。
❌ 4. 外れ値の無視と過剰除去
東京・大阪・沖縄など特徴ある県は『外れ値』扱いされがちだが、 実は本質的な情報を含む。 IQR で機械的に切るのではなく、 ドメイン知識で判断。
❌ 5. 相関と因果の混同
2 変数が相関していても、 一方が他方の原因とは限らない。 共通の交絡因子(人口、 産業構造、 気候)を疑う。 因果には RCT・差の差・操作変数法など別の道具が必要。
❌ 6. 有意性と効果量の混同
p < 0.05 は『偶然では説明しにくい』だけで『効果が大きい』ではない。 効果量(Cohen's d、 オッズ比など)と信頼区間を必ず併記する。
❌ 7. サンプル数の都合主義
検出力分析をせず、 集めやすい量で打ち切ると、 第2種の過誤(実は差があるのに気付かない)を量産する。 事前に必要 n を計算しておく。

🧭 詳細解説 — 検出力 を一段深く掘り下げる

歴史的背景

検出力(Statistical Power (1−β))は、 仮説検定 分野における基本概念の 1 つとして発展してきました。 学術領域では 20 世紀後半に体系化が進み、 21 世紀のデータ駆動社会の中で「実務で使う知識」として急速に普及。 とくに 2010 年代後半以降、 ビッグデータ・IoT・AI の進展に伴い、 用語の意味・適用範囲が再定義されつつあります。

日本では総務省・経産省・内閣府の各種計画(Society 5.0、 デジタル田園都市国家構想、 統計改革基本計画)で繰り返し言及される基幹概念。 SSDSE(教育用標準データセット)も、 これらの教育普及を目的に整備されたデータです。

国際的な位置付け

OECD、 国連、 ISO、 IEC などの国際機関が、 検出力 に類する概念・標準を整備してきました。 たとえば:

日本の文脈での意味

検出力 を含むデータ分析の手法は、 日本では次の場面で使われています。 下の表は分野ごとの登場場面で、 この用語だけの話ではなくデータサイエンス全体の広がりを示します:

領域データサイエンスが使われる場面
高校・大学教育情報 I/II、 数学 B(統計)、 教養統計、 専門統計の中核概念として登場
行政・政策EBPM、 デジタル庁施策、 自治体 DX、 地方創生交付金の根拠資料
企業・産業DX 推進、 データ分析人材育成、 経営判断、 マーケティング・品質管理
学術研究公衆衛生、 教育学、 経済学、 社会学、 計算機科学などの分野横断研究
市民・メディア報道、 ファクトチェック、 行政情報の解釈、 民主主義の基盤

よく混同される概念

検出力 は、 隣接概念と混同されやすい用語の代表でもあります。 ここで違いを明確にしておきましょう:

混同される概念検出力 との違い
隣接する 仮説検定 系の用語本ページの「🔗 関連用語」を参照。 並列カテゴリで対比すると明瞭
より広い上位概念hypothesis-testing ページで包含関係を確認
類似名・別名英語名 (Statistical Power (1−β)) を正式表記として参照

学習・教材としての位置付け

本サイト(用語解説)は「ジャストインタイム型データサイエンス教育」のリソースです。 つまり、 論文・実務・授業で その用語に出会ったタイミングで必要最低限の説明を得る、 という使い方を想定しています。 検出力 もその一例。

体系的に学びたい場合は、 まずグループ教材(hypothesis-testing)から始め、 そこから 検出力 のような個別用語にドリルダウンしていくのが効率的です。

参考文献・標準

⚠️ よくある落とし穴

❌ p値の誤解
p < 0.05 は「効果が大きい」「実用的に重要」を意味しません。 効果量と CI を併記。
❌ 片側検定と両側検定
事前に決めずに検定方向を変えるのは p-hacking。 事前登録を推奨。
❌ 独立性の仮定
標本が独立でないと検定の結果は信頼できません。

⚠️ 検出力まわりの落とし穴(深掘り 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.2394788心理学の典型的な小効果
0.3小〜中176352A/B テストでの推奨最小差
0.564128中規模調査で実用的
0.82652SSDSE 規模でも検出可能
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 西日本の人口あたり医師数 (I3101) に差はあるか」を検定する前に、 効果量の見積もりからサンプルサイズを逆算するのが正しい順序。

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 回は方向まで逆に結論する。 「低検出力でも、有意になったのだから結果は信頼できる」は誤りで、実際はその逆——低検出力ほど、有意になった結果こそ疑わしい。 これが再現性の危機で低検出力が主犯格とされる本当の理由である。

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

🔗 関連ページ