mcpField
A
alterlab-test-selection-guard

alterlab-test-selection-guard

github.com/alterlab-ieuデータ・データベース7859 回インストール5 週間前に更新
リポジトリ

alterlab-test-selection-guard について

alterlab-test-selection-guardは、P値ではなく研究課題とデータ構造に基づく検定選択を促す統計規範スキルです。検定を選ぶ、または見直す研究者向けで、計算やモデル適合は関連スキルに引き継ぎます。

主な機能

  1. 01データ構造に基づく検定選択
  2. 02仮定チェックの実施と報告
  3. 03結果を見た後の検定変更を検出
  4. 04仮説ごとの多重検定への対処
  5. 05コマンドライン検定選択ツール

活用シーン

  1. 01変数と研究デザインに応じた検定選択
  2. 02非有意結果を受けた検定変更の検討
  3. 03同一仮説に対する複数検定の点検
  4. 04選択した検定の実行を関連スキルに引き継ぐ

インストール

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

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-test-selection-guard

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

同梱ファイル

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

evals/
evals.json
references/
assumption_gate.md
decision_tree.md
multiplicity.md
rationalizations.md
scripts/
test_picker.py

詳細

検定選択ガード — 鉄の掟:p 値を見た後に検定を選ばない

スキルの種類:規律を徹底するスキル。 これは統計エンジンではなく、規律を徹底する薄いレイヤーです。検定を実行したり、モデルを当てはめたり、検出力を計算したりはしません。検定を結果ではなくデータの形状に基づいて選ぶよう、手順の順序を徹底します。実際の計算は、以下のスキルに引き継いでください。

必須の前提知識 — このスキルは各処理を統括しますが、再実装はしません。

  • alterlab-statistical-analysis — 選択した検定、仮定の確認(assumption_checks.py:Shapiro-Wilk、Levene、Q-Q)、検出力、APA 形式の報告を実行します。
  • alterlab-statsmodels — 検定が確定した後にモデル(OLS/GLM/mixed/ARIMA)を当てはめます。
  • alterlab-scientific-thinking — 上流工程で研究デザインの妥当性、バイアス、交絡因子を評価します。
  • alterlab-preregistration-discipline — このゲートが前提とする、凍結済みの分析計画です。

ユーザーが実行を求めている場合は、該当するスキルに引き継いでください。このスキルの役割は、最初の scipy.stats 呼び出しより前に何をするかに尽きます。


鉄の掟

NO TEST CHOSEN AFTER SEEING THE P-VALUE.

検定は、研究課題とデータの構造(アウトカムの種類、群の数、対応の有無、仮定の確認)に基づいて決まり、p 値が見える前に固定されます。有意かどうかに応じて検定を選んだり切り替えたりすることは、p 値ハッキングです。第 I 種過誤率を未知の程度まで押し上げ、報告された p 値を虚偽にします。

事前に指定した検定の文言に違反することは、推論の精神に違反することです。

有意でない結果は、別の検定を試す理由にはなりません。それも一つの知見です。


このスキルを使う場面

検定の選択、正当化、または切り替えが行われる際は、このガードを起動してください。

  • 「この研究デザイン/変数には、どの統計検定を使えばよいですか?」
  • 「t 検定で有意になりませんでした。代わりに Mann-Whitney を試すべきですか?」(←典型的な落とし穴)
  • 「同じ仮説について ANOVA、t 検定、回帰分析を実行しました。どれを報告すべきですか?」
  • 「.05 を下回るように、これらの外れ値を除外したり、この共変量を加えて再実行したりしてもよいですか?」
  • 「今からノンパラメトリック検定に切り替えてもよいですか?」

このスキルは決定木に沿って検討し、検定を特定します。そして何より重要なこととして、切り替えのタイミングと動機を問いただします。

起動しない場合

以下の隣接する依頼は、代わりに該当する関連スキルに引き継いでください。このガードは検定を選択して監督しますが、検定の実行、モデル化、研究デザイン、執筆は行いません。

実際の依頼内容…引き継ぎ先このスキルでは対応しない理由
選択した検定の実行、仮定の確認、検出力、APA 形式の執筆alterlab-statistical-analysisこのガードは検定を選び、そのスキルは計算します。
特定のモデルクラス(OLS/GLM/mixed/ARIMA)の当てはめ、係数表、残差診断alterlab-statsmodels検定の選択ではなく、プログラムによるモデルの当てはめです。
エビデンスの質の評価、交絡因子/研究デザインの妥当性/バイアス(GRADE、RoB)の特定alterlab-scientific-thinking研究の上流工程に関する判断であり、検定の選択ではありません。
データを見る前に分析計画全体を固定すること、HARKing、任意停止、共変量の事前固定に関する規律alterlab-preregistration-discipline計画レベルの規律です。このガードはそのうち検定選択に関する部分です。
実行したすべての分析、効果量+CI、執筆時の逸脱の開示に関する報告alterlab-results-transparency報告に関する規律であり、検定選択より後の工程です。
研究デザインそのものの選択(RCT、観察研究、準実験)alterlab-scientific-thinking研究デザインの選択は、検定の選択に先立ちます。
オープンサイエンス/リポジトリ/DMP/事前登録に関する実務(OSF、AsPredicted、Zenodo)alterlab-open-scienceプラットフォーム/ワークフローの案内であり、検定選択のロジックではありません。

決定木

上から順にたどってください。各分岐は、p 値ではなくデータの構造によって決まります。 正規性は、どの検定が「有意になるか」を見た目で判断するのではなく、以下の仮定チェックゲートで判定します。

digraph test_selection {
  rankdir=TB;
  node [shape=box, fontname="Helvetica"];
  q [shape=diamond, label="Outcome type?"];

  q -> cont [label="continuous / ordinal"];
  q -> cat  [label="categorical (counts)"];
  q -> rel  [label="association between\ntwo variables"];

  // --- group comparisons ---
  cont [shape=diamond, label="How many groups?"];
  cont -> two   [label="2"];
  cont -> three [label="3+"];

  two [shape=diamond, label="Paired /\nrepeated?"];
  two -> two_ind   [label="independent"];
  two -> two_pair  [label="paired"];
  two_ind  [shape=diamond, label="Normal?\n(see gate)"];
  two_ind  -> tt  [label="yes"];
  two_ind  -> mwu [label="no"];
  two_pair [shape=diamond, label="Normal\ndifferences?"];
  two_pair -> ptt [label="yes"];
  two_pair -> wil [label="no"];
  tt  [label="independent t-test\n(Welch if unequal variance)"];
  mwu [label="Mann-Whitney U"];
  ptt [label="paired t-test"];
  wil [label="Wilcoxon signed-rank"];

  three [shape=diamond, label="Paired /\nrepeated?"];
  three -> th_ind  [label="independent"];
  three -> th_pair [label="repeated"];
  th_ind  [shape=diamond, label="Normal?"];
  th_ind  -> anova [label="yes"];
  th_ind  -> kw    [label="no"];
  th_pair [shape=diamond, label="Normal?"];
  th_pair -> rm    [label="yes"];
  th_pair -> fried [label="no"];
  anova [label="one-way ANOVA\n(+ planned post-hoc)"];
  kw    [label="Kruskal-Wallis"];
  rm    [label="repeated-measures ANOVA"];
  fried [label="Friedman"];

  // --- categorical ---
  cat [shape=diamond, label="Expected cell\ncount >= 5?"];
  cat -> chi    [label="yes"];
  cat -> fisher [label="no / 2x2 small"];
  chi    [label="chi-square test"];
  fisher [label="Fisher's exact"];

  // --- association ---
  rel [shape=diamond, label="Both continuous?"];
  rel -> rel_norm [label="yes"];
  rel -> reg      [label="outcome + predictors"];
  rel_norm [shape=diamond, label="Linear & normal?"];
  rel_norm -> pearson  [label="yes"];
  rel_norm -> spearman [label="no / monotonic"];
  pearson  [label="Pearson r"];
  spearman [label="Spearman rho"];
  reg [shape=diamond, label="Outcome type?"];
  reg -> linreg [label="continuous"];
  reg -> logreg [label="binary"];
  linreg [label="linear regression"];
  logreg [label="logistic regression"];
}

この振り分けは、alterlab-statistical-analysis のテスト選択ガイド(references/test_selection_guide.md)に沿ったものです。このガードは、そこにタイミングと検定の選り好みを防ぐ規律を加えています。分岐のロジックとエッジケースの詳細:references/decision_tree.md。回答に基づいて名前付きの検定を出力する、実行可能なルーター:scripts/test_picker.py。


仮定チェックゲート(必須 — 絶対に省略しない)

正規性と等質性は決定木への入力であり、事後的な言い訳ではありません。手順は固定です。

  1. 事前に指定する:データ構造から導かれる検定を指定します(デフォルトではパラメトリック分岐)。
  2. alterlab-statistical-analysis(その assumption_checks.py)を使って仮定チェックを実行します — シャピロ–ウィルク検定(正規性)、ルビーン検定(等分散性)、回帰の残差/Q-Q と線形性を確認します。結果を報告してください。
  3. 仮定の判定結果を確認し、パラメトリック分岐を確定するか、事前に指定したノンパラメトリックの代替手段に移るかをその後にのみ判断します(例:t 検定 → マン・ホイットニー検定、ANOVA → クラスカル・ウォリス検定)。代替手段を選ぶのは仮定チェックであり、p 値ではありません。

仮定チェックを実行して報告していない場合、検定結果は解釈不能です。これは「GREEN の前に RED を確認する」のと同じです。仮定が示されるまでは、GREEN(p 値)を信頼できません。詳細:references/assumption_gate.md。


検定の選り好みを止める(言い訳と実態)

これらは、p 値を見て検定を切り替える前に持ち出される合理化です。自分自身またはユーザーにそのような考えが現れたら、それを指摘して止めてください。

言い訳実態
「t 検定で有意にならなかったから、マン・ホイットニー検定を試してみよう。」結果を基準に検定を選んでいます。これは検定の選り好みです。ノンパラメトリック検定が妥当なのは、(p 値ではなく)仮定チェックによってその検定に進むことになった場合のみです。
「データを見た後で、より適切な検定が分かった。」ノイズに適合させている/HARKing をしています。事前に指定した検定を再実行し、それ以外の結果は探索的なものとして報告してください。
「この 3 つの外れ値を除外して再実行しよう。」外れ値のルールは事前に指定するか、感度分析として報告する必要があります。.05 を超えないために後から作ってはいけません。
「この共変量を加えれば、明らかにモデルが改善する。」事後的に明らかだと言うことは、研究者の自由度があるということです。事前に指定するか、結果を探索的と明記してください。
「ノンパラメトリック検定のほうが保守的だから、切り替えても問題ない。」最初の検定が失敗したから切り替えるのは、依然として結果に基づいて選択することになります。方向にかかわらず、インフレーションは実際に起こります。
「どうせ探索的な分析にすぎない。」それなら、そのことを明示し、確証的な p 値に関する表現をやめ、仮説の検定として報告しないでください。
「みんな、うまくいった検定を報告している。」複数の検定から有意だったものだけを選んで報告するのは p ハッキングです。実行したすべての検定を報告するか、多重性を補正してください。

より多くのパターンと反論:references/rationalizations.md。


危険信号 — 停止

次のような考えが浮かんだら、停止してください。検定結果に基づいて検定を選ぼうとしています。

  • 「別の検定も試して、どうなるか見てみよう。」
  • 「t 検定の p 値が .07 だったから、ノンパラメトリック検定に切り替えよう。」
  • 「この外れ値を除外して再実行しよう。」
  • 「この共変量を 1 つ加えれば効果が出る。」
  • 「いくつか検定して、有意だったものを報告しよう。」
  • 「もう有意だから、データ収集を今すぐ止めてもよさそうだ。」
  • 「このサブグループは興味深い」(事前に指定していません)。
  • 「アウトカム別に記述統計を見てから検定を選ぼう。」

これらはすべて、停止すべきサインです。研究者の自由度を利用しています。事前に指定した検定に戻るか、分析を探索的と明記して確証的な主張を取り下げてください。


エスカレーションゲート(多重性)

仮説検定に適用する「3回修正したらアーキテクチャを疑う」というルールです。

Ran 3+ tests on the SAME hypothesis searching for significance? STOP.

これは多重比較/検定のつまみ食いです。誠実な選択肢は2つだけです。4回目の検定は決して行わないでください。

  1. すべて補正する。 実際に実施したすべての検定(「うまくいかなかった」検定も含む)からなる検定ファミリー全体に、ボンフェローニ法(アルファを検定数で割る)またはより保守性の低いFDR制御(Benjamini-Hochberg法)を適用します。
  2. 分析が探索的であることを明示する。 探索的であると明記し、実施したすべての検定を報告して、確認的なp値の表現をやめます。

p < .05を見つけるために、検定4を実施してはいけません。補正の計算と検定ファミリーの定義については、references/multiplicity.md を参照してください。


ワークフロー

  1. 研究課題とデータ構造を特定します — アウトカムの種類、グループ、対応関係を確認します。
  2. 決定木に沿って進み(回答をもとに scripts/test_picker.py で実行できます)、結果を見る前に、実施する検定を特定します。
  3. alterlab-statistical-analysis を使って、前提条件のチェックを実行し、その結果を報告します。チェックによって決まる、事前に指定したパラメトリック/ノンパラメトリックの分岐を選びます。
  4. つまみ食いを検出します — 検定の切り替えが提案された場合は、「言い訳/実態」表と危険信号を確認します。切り替えが正当化されるのは、p値ではなく、前提条件のチェックによって判断された場合のみです。
  5. 1つの仮説に対して3つ以上の検定を行った場合は、エスカレーションゲートを適用します。補正するか、探索的であることを明示します。
  6. 実行は alterlab-statistical-analysis / alterlab-statsmodels に引き継ぎ、報告に関する規律は alterlab-results-transparency に委ねます。

報告前のセルフチェック

  • p値を見る前に、データ構造と前提条件のチェックに基づいて検定を決めましたか?
  • Shapiro-Wilk / Levene /線形性のチェックを省略せず、実行して報告しましたか?
  • 有意でない結果を受けて検定を切り替えましたか? その場合は検定のつまみ食いにあたるため、元に戻してください。
  • 1つの仮説に対して3つ以上の検定を行い、補正も探索的であるという明示もしませんでしたか?
  • 実際に実施したすべての検定を開示しましたか(alterlab-results-transparency に引き継ぎましたか)?

参考資料

  • references/decision_tree.md — 分岐ロジック全体、特殊ケース、Welch検定/事後検定の注記(Levene検定による事前検定の代わりに、Welchのt検定を事前に指定する根拠を含む)。
  • references/assumption_gate.md — 解釈前のチェック順序とフォールバックルール。
  • references/rationalizations.md — 反論を含む、詳細な「言い訳/実態」表。
  • references/multiplicity.md — ボンフェローニ法/Benjamini-Hochberg法によるFDR制御と、検定ファミリーの定義。
  • scripts/test_picker.py — 標準ライブラリを使った決定木ルーター。回答から検定名を出力します。

AlterLab Academic Skills suite の一部です。

コメント