mcpField
S
statistical-power

statistical-power

github.com/kalarislabsデータ・データベース7747 回インストール4 日前に更新
リポジトリ

statistical-power について

データ収集前の統計的検出力とサンプルサイズを計算する研究計画向けスキルです。標準的な検定の厳密な公式と複雑なデザインのシミュレーションを扱い、妥当な効果量の選択と感度分析を重視します。

主な機能

  1. 01閉形式による検出力計算
  2. 02モンテカルロ検出力シミュレーション
  3. 03サンプルサイズと最小検出効果の推定
  4. 04検出力曲線と感度分析
  5. 05脱落とクラスタリングの補正

活用シーン

  1. 01研究前のサンプルサイズ計画
  2. 02固定 n で検出可能な効果の推定
  3. 03混合・クラスター設計の検出力評価
  4. 04計画書向けの検出力根拠作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill statistical-power

インストール後、Claude Code で/statistical-powerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
closed_form_recipes.md
effect_sizes.md
simulation_based_power.md
scripts/
power.py
simulate_power.py

詳細

統計的検出力とサンプルサイズ

概要

検出力分析は、研究計画で最も重要な問いの一つに答えるものです。**ある大きさの効果を確実に検出するには、どれくらいのサンプルが必要で、確保できるサンプルでは何を検出できるのでしょうか。**検出力が不足した研究はリソースを浪費し、結論が出ない、または再現できない結果を生みます。検出力が過剰な研究は、参加者や資金を無駄にし、臨床研究では必要以上の人々をリスクにさらします。データ収集の前に適切に判断することは、プロジェクトにおいて最も大きな効果をもたらす統計的決定です。

特定の検定では、サンプルサイズ(n)、効果量、有意水準(α)、**検出力(1 − β)**の4つの量が相互に結び付いています。任意の3つを固定すると、残りの1つが決まります。このスキルで行う計算は、すべてこの関係を変形したものです。

このスキルでは、検出力分析を行う2つの方法を扱います。

  • 閉形式の公式(高速で、標準的な検定では正確)については、references/closed_form_recipes.mdを参照してください。
  • シミュレーション/モンテカルロ法(シミュレーションして分析できるあらゆるデザインやモデルに対応)については、references/simulation_based_power.mdを参照してください。

効果量の選択と変換については(通常、ここが最も難しい部分です)、references/effect_sizes.mdを参照してください。

このスキルを使う場面

  • データ収集前に必要なサンプルサイズを決定する(事前検出力分析)
  • 固定済みのサンプルサイズに対する最小検出可能効果(MDE)を求める
  • 助成金申請やプロトコル向けに検出力曲線(検出力とn、または検出力と効果量の関係)を作成する
  • IRB申請、助成金申請、または事前登録においてサンプルサイズの根拠を示す
  • グループサイズが等しくないデザインや、1:1以外の割り付け比率のデザインで検出力を確保する
  • 教科書に公式がないデザイン(混合モデル、ロジスティック回帰/ポアソン回帰、クラスター無作為化試験、生存分析、媒介分析、交互作用)で、シミュレーションにより検出力を確保する
  • サンプルサイズの推定で、多重比較、脱落、またはクラスター化を考慮する

インストール

uvを使用してください。本番環境ではバージョンを固定し、試行時は固定しなくてもかまいません。

uv pip install "statsmodels>=0.14.6" "scipy>=1.11" "pingouin>=0.6" "numpy>=1.26" matplotlib pandas
# For simulation-based power of advanced models (optional, add as needed):
uv pip install lifelines            # survival
# mixed models and GLMs come with statsmodels

**互換性に関する注意:**SciPy 1.16以降で_lazywhereのインポートエラーを避けるため、statsmodels>=0.14.6とscipy>=1.11を使用してください。Pingouin 0.5以降では、以下で使用する名前に合わせて検出力関数の引数名が変更されています。


すべてを左右する唯一の判断:効果量

検出力計算の信頼性は、入力する効果量の信頼性に左右されます。**数値をでっち上げないでください。**おおよそ、以下の優先順位で選んでください。

  1. 最小限重要な効果。意思決定を実際に変える、または科学的・臨床的に意味のある最小の効果(「関心のある最小効果量」、SESOI)。最も正当化しやすい根拠です。期待する効果ではなく、重要な効果を検出できるように検出力を設計します。
  2. パイロット研究または先行研究の推定値を使う場合は、値を縮小してください。公表済みの効果やパイロット研究の効果は、出版バイアスや勝者の呪いによって過大になっています。パイロット研究の生の推定値をそのまま使って検出力を設計すると、実際の研究では検出力が不足することがよくあります。
  3. 慣例的な値(Cohenの小・中・大)の使用は最後の手段とし、その旨を明記してください。

どの値を選ぶ場合でも、感度分析を行ってください。単一の値だけでなく、妥当な効果量の範囲にわたって必要なnがどう変化するかを報告します。検出力分析を単一の数値で示すと、最大の不確実性要因が隠れてしまいます。d、f、r、η²、オッズ比、Cohenのh/wの基準値と換算方法については、references/effect_sizes.mdを参照してください。

**事後(「観測された」)検出力は避けてください。**推定したばかりの効果量から検出力を計算するのは循環的です。検出力はp値の決定論的関数であり、新たな情報は何も示しません。研究がすでに完了しており、何を検出できたかを知りたい場合は、感度分析(達成したnでのMDE)を報告するか、より望ましくは観測された効果の信頼区間を示してください。これは査読者からよく指摘される問題です。指摘せずに観測された検出力を提示することは、求められた場合でも避けてください。


クイックレシピ(閉形式)

同梱の scripts/power.py は statsmodels を一貫したインターフェースにまとめているため、検定ごとにどのソルバーを使うか覚える必要はありません。スキルのディレクトリから実行するか、scripts/ を sys.path に追加してください。

from power import sample_size, power, mde, power_curve

# 1. How many per group to detect Cohen's d = 0.5, two-sided, 80% power?
sample_size(test="t_ind", effect_size=0.5, power=0.80, alpha=0.05)
# -> required n per group

# 2. Two groups, 3:1 allocation (e.g. more controls than cases)
sample_size(test="t_ind", effect_size=0.5, power=0.80, ratio=3.0)

# 3. Fixed n=30/group — what's the minimum detectable d at 80% power?
mde(test="t_ind", nobs1=30, power=0.80, alpha=0.05)

# 4. One-way ANOVA, 4 groups, detect Cohen's f = 0.25
sample_size(test="anova", effect_size=0.25, k_groups=4, power=0.80)

# 5. Two proportions: 0.40 vs 0.55 (auto-converts to Cohen's h)
sample_size(test="two_proportions", prop1=0.40, prop2=0.55, power=0.80)

# 6. Correlation: detect r = 0.30
sample_size(test="correlation", effect_size=0.30, power=0.80)

# 7. Power curve for the grant figure
power_curve(test="t_ind", effect_size=0.5, n_range=range(10, 120, 5),
            save="power_curve.png")

サポートされている test= の値:t_ind(2つの独立した平均値)、t_paired/t_one(対応あり、または1標本の平均値)、anova(一元配置)、two_proportions、one_proportion、correlation、chi2(効果量 w による適合度検定/分割表の検定)、linear_regression(R²の増分/f²)。引数の全一覧と基盤となる statsmodels の呼び出しは、references/closed_form_recipes.md に記載されています。


数式がない場合:シミュレーション

閉形式で検出力を計算できるのは、少数の単純な検定に限られます。ロジスティック回帰/ポアソン回帰、混合効果モデル/反復測定モデル、クラスター無作為化試験、生存時間分析、媒介分析、多要因交互作用、その他の標準的でない解析には、シミュレーションが適切な手法です。手順は常に次の3つです。

  1. シミュレーションする: 想定する真の値(検出したい効果に加え、現実的なノイズ、ベースライン率、クラスター構造など)からデータセットを生成します。
  2. 解析する: 実際のデータに使う予定の検定/モデルとまったく同じもので解析します。
  3. 繰り返す: 何度も繰り返します(1,000回以上。80%付近で安定した推定値を得るには5,000~10,000回)。検出力は、検定が有意となった反復の割合です。

scripts/simulate_power.py には、再利用可能なハーネスと実例(2群間の差、ロジスティック回帰、ICCを用いたクラスター無作為化試験、線形混合モデル)が用意されています。中核となる処理は次のとおりです。

from simulate_power import simulate_power

def gen_and_test(n, rng):
    # build a dataset of size n under the assumed effect, run the planned test,
    # return True if the result is significant
    ...

est = simulate_power(gen_and_test, n=200, n_sims=2000, alpha=0.05)
print(f"Power at n=200: {est.power:.3f} (95% CI {est.ci_low:.3f}-{est.ci_high:.3f})")

推定値のモンテカルロ信頼区間(ハーネスが返します)も報告し、0.81と0.79の差がシグナルなのかシミュレーションノイズなのかがわかるようにしてください。目標検出力に達する n の探索方法や、脱落とクラスター化のモデル化方法など、パターンの全容については references/simulation_based_power.md を参照してください。


見落とされがちな調整

これらは、十分な検出力を持つ研究と検出力不足の研究を分ける要因になることがよくあります。明示的に適用し、適用したことを記載してください。

  • 多重比較。 解析で m 個の仮説を検定し、ボンフェローニ方式の補正を行う場合は、補正後の α(例:α/m)で各検定の検出力を計算します。これにより n が増加します。より適切なのは、シミュレーションで家族内誤差率または FDR を制御する手順を直接対象にして検出力を計算することです。これを無視すると、すべての副次評価項目で検出力が気づかないうちに不足します。
  • 脱落/離脱/使用不能なサンプル。 検出力の計算で求められる n は、解析対象となる数です。登録する数は増やしてください:n_enroll = ceil(n_analyzed / (1 − dropout_rate))。脱落率が20%なら、式で得られた数より25%多く登録する必要があります。
  • クラスター化(デザイン効果)。 観測値が入れ子になっている場合(診療所内の患者、動物内の細胞、被験者内の反復測定など)、有効サンプルサイズは実数より小さくなります。デザイン効果 DEFF = 1 + (m − 1)·ICC(m はクラスターサイズ、ICC は級内相関)を使って数を増やしてください。クラスター化データを独立とみなすのは疑似反復であり、検出力を大幅に過大評価します。クラスター無作為化デザインでは、代わりにシミュレーションしてください。
  • 片側検定と両側検定。 デフォルトは両側検定であり、ほとんどの場合、こちらが適切です。片側検定で検出力が上がるのは、予想と反対方向の効果を検出しないことを受け入れるためにすぎません。片側検定を使う場合は、その理由を説明してください。
  • 不均等割り付け。 合計 n が一定なら、群の割り付けは均等が最も効率的です。デザイン上、割り付け比が固定されている場合(例:治療群:対照群=2:1)は、計算に反映されるよう ratio= を指定してください。

ワークフロー

  1. デザインと予定している分析を明示します。 実施する検定によって、適切な検出力の算出方法が決まります。分析が混合モデルまたは GLM の場合は、最初からシミュレーションを使用します。
  2. 効果量を妥当な根拠に基づいて選びます(SESOI > 縮小したパイロット推定値 > 慣例)。その根拠を記録します。
  3. α と目標検出力を設定します。 一般的なデフォルト値は α = 0.05(両側)と検出力 = 0.80 です。確認的研究や臨床研究では 0.90 もよく使われます。設定値を明記します。
  4. scripts/power.py(閉形式)または scripts/simulate_power.py(シミュレーション)で計算します。
  5. 感度分析を行います。 妥当な効果量の範囲で再計算し、検出力曲線を作成します。成果物は単一の数値ではなく、これです。
  6. 脱落、クラスター化、多重性について調整します。
  7. 以下のテンプレートに従って報告します。

報告テンプレート

再現できるように、妥当な検出力の記述にはすべての入力値を含めます。以下を適宜調整してください。

A priori power analysis was conducted to determine the sample size needed to detect
a [between-group difference of Cohen's d = 0.50], which we considered the smallest
effect of clinical interest. With α = .05 (two-sided) and power = .80, a two-sample
t-test requires n = 64 per group (128 total; computed with statsmodels 0.14).
Allowing for 20% attrition, we will enrol 160 participants. A sensitivity analysis
showed required n ranges from 45 to 105 per group across plausible effects
d = 0.40–0.60 (Figure X).

シミュレーションの場合は、データ生成の仮定(ベースライン率、残差 SD、ICC、クラスターサイズ)、シミュレーション回数、モンテカルロ信頼区間も明記してください。


よくある落とし穴

  1. 効果量を捏造したり、過大なパイロット推定値をそのまま使ったりすること — 検出力分析が誤る最も一般的な原因です。
  2. 感度分析の範囲や検出力曲線ではなく、単一の n を報告すること。
  3. 事後検出力/観測検出力 — 循環論法であり、情報価値がありません。代わりに感度分析または効果量の CI を使用してください。
  4. クラスター化を無視すること(疑似反復)— 細胞や測定値を、独立した被験者であるかのように数えることです。
  5. 脱落を考慮し忘れること — 解析対象の n に合わせて検出力を設計しながら、同じ人数しか登録しないことです。
  6. α と検出力、または片側検定と両側検定を混同すること。
  7. 主要評価項目だけを対象に検出力を設計すること。報告する副次検定や交互作用検定では、はるかに大きな n が必要になる場合があります。
  8. 実際に当てはめる予定のモデルに、t 検定の公式を使うこと(例:平均値に基づく計算でロジスティック回帰を計画すること)— 検出力の算出方法を、予定している分析に合わせてください。

リソース

スクリプト
  • scripts/power.py — statsmodels/pingouin を用いて、すべての標準的な検定について sample_size、power、mde、power_curve を提供する、統一された閉形式インターフェースです。
  • scripts/simulate_power.py — simulate_power() と find_sample_size() を備え、実行例(2 群、ロジスティック回帰、クラスター無作為化、線形混合モデル)も含むモンテカルロ検出力シミュレーション用ツールです。
参考資料
  • references/closed_form_recipes.md — 比率、カイ二乗、回帰を含む、検定ごとの引数一覧と statsmodels/pingouin の正確な呼び出し方です。
  • references/simulation_based_power.md — GLM、混合モデル、クラスター化デザイン、生存時間解析、脱落に関するシミュレーションの全パターンです。
  • references/effect_sizes.md — 効果量(SESOI)の選び方、Cohen のベンチマーク、d、f、r、η²/f²、OR、h、w の換算方法です。
関連スキル
  • experimental-design — n がわかったら、実際の研究計画(無作為化、ブロック化、要因計画/DOE、クロスオーバー、逐次デザイン)を立てます。
  • statistical-analysis — データ収集後の仮定の確認、検定の実施、効果量、APA 形式での報告を扱います。
  • statsmodels / pymc — ここで言及したモデルの当てはめに使用します。
主要な参考文献
  • Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences(第 2 版)。
  • Lakens, D. (2022). Sample Size Justification. Collabra: Psychology, 8(1).
  • Arnold, B. F. et al. (2011). 検出力を推定するためのシミュレーション手法。BMC Medical Research Methodology, 11:94.

エージェントの運用手順

  1. 環境を確認します。 調査の目的、制約(予算、時間、倫理)と、ユーザーが下す必要のある判断を明確にします。
  2. 入力内容を特定します。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
  3. まず小規模に実行します。 選択肢を広げる前に、前提を明示した短い候補リストを提案します。
  4. 上記の指示と参考資料を使用して、タスク全体を実行します。
  5. 結果を検証します。 前提が明記され、明示的な基準に基づいて代替案が比較され、統計計画に検出力と解析方法の選択が含まれていることを確認します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の事項を明示します。
こうした場合こうしてください
設計上の選択が、不明な効果量やコストに左右される単一の推測ではなく、(楽観的、予想、悲観的な)シナリオを提示します。
これらの指示にある関数、フラグ、エンドポイントがインストール済みバージョンに存在しないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、対応するうえで、その旨をユーザーに伝えます。API を捏造してはいけません。
必須の入力、識別子、パラメーターが曖昧であるユーザーに質問するか、実行前に前提を明示します。

誠実性に関するルール

  • 結果、パラメーター、識別子、引用、統計値を決して捏造してはいけません。実行または検証できない場合は、その旨を明確に伝えます。
  • 推測には推測と明記し、確立された証拠と新しい仮説を区別します。
  • ここに記載されているバージョン固有の詳細は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
  • 金銭がかかる、共有 GPU やクラウドクォータを消費する、個人データや患者データを扱う、または元に戻せない操作を行う前に、ユーザーに確認します。

コメント