rigorous-experiments について
観察データや個人の時系列データを使う統計実験を設計、実施、検証するスキルです。事前登録、正確な置換検定、データ検証、慎重な結果解釈を重視します。
主な機能
- 01研究設計と事前登録
- 02データソースの検証
- 03正確な置換検定の手順
- 04手がかりと結果の相互検証
- 05結果エクスプローラーと評価チェック
活用シーン
- 01時系列の仮説検定を計画
- 02新しい個人データソースを確認
- 03探索的な統計上の手がかりを調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ glebis/ claude-skills --skill rigorous-experimentsインストール後、Claude Code で/rigorous-experimentsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/run_evals.pyevals/cases/bad_exp.pybad_results.jsoncases.jsongood_exp.pygood_results.jsonreferences/cross-validation.mddata-validation.mddesign.mdlead-investigation.mdstatistics.mdscripts/explorer.pyperm_stats.pytriage.py詳細
厳密な実験
精査に耐える、観察データや個人の時系列データを対象とした統計実験を実施します。サンプリングされた置換検定、欠損データによるアーティファクト、アプリの分類バグ、共線性のあるメカニズムが「発見」を繰り返し捏造し、そして覆した、54件の N-of-1 プログラムから要点をまとめています。ここにあるルールはどれも、それがなかったために誤った結論が一度でも生じたことを受けて設けられています。
モード
依頼に合ったモードを選んでください。本格的な研究では、複数のモードを組み合わせます。
| モード | 使用する場面 | 参照先 |
|---|---|---|
| design | 新しい仮説や研究 | references/design.md |
| conduct | 実験の実装と実施 | references/statistics.md |
| validate-data | 新しいデータソースを信頼する前 | references/data-validation.md |
| cross-validate | 擁護に値する発見、コードレビュー、外部モデルによるレビュー(例:GPT Pro) | references/cross-validation.md |
| investigate-leads | スイープ/実行で有望な手がかりが得られた場合(p<0.06、FDR で未確認) | references/lead-investigation.md |
| audit | 過去の主張や発見の記録を再検討する場合 | references/statistics.md §監査 |
譲れない基本原則(すべてのモード)
- 計算前に事前登録してください。 仮説、正確な検定、ファミリーサイズ m、採択基準を、最初の実行前にスクリプトの docstring に記載します。事後的な検定は記述的な結果として報告し、確認的な結果として扱いません。
- n が小さい場合は、サンプリングせず厳密な置換検定を行ってください。 n=19 のセッション系列には円環シフトが 18 通りあり、正直に得られる最小の p 値は約 1/19≈0.05 です。
復元抽出でシフトを 2000 回サンプリングすると、精度を偽装することになります(これにより、目玉となる「q=0.028」という結果が誤りだと判明しました)。
scripts/perm_stats.pyを使用してください。 - 圧縮した系列ではなく、カレンダー全体にわたって置換してください。 欠損区間を圧縮した系列をシフトすると、時系列が崩れます。欠損は NaN マスクとして保持し、シフトごとに再適用してください。イベント指標は欠損のない 0/1 のみとし、欠損は結果系列にのみ存在させます。
- 事前に設計時点で宣言した固定のファミリーサイズ m を BH に使用してください。 m はリテラル定数でなければなりません。
len(tests)は使用しないでください(事前登録の目的に反するため、リンターで拒否されます)。実行結果が宣言した m と一致することをアサートしてください。確認的なファミリーは小規模にし、探索的なスイープとは分けます。すべてを 1 つの BH にまとめると真の効果が埋もれ、都合のよいファミリーだけを選ぶと効果を捏造することになります。通常の BH は、検定が独立または正の依存関係にあることを前提とします。ラグのファミリーに強い依存関係がある場合は、BH-Yekutieli または maxT リサンプリングを使用してください。 - トレンドのある系列を相関させる前に定常性を確認してください。 トレンドのある系列に対する厳密な円環シフトは「厳密に、再現可能なかたちで誤っています」。前白色化した r(AR1 残差)と定常ブートストラップを併せて報告してください。
- プールする前に層別化してください(シンプソンのパラドックスを確認)。グループ内(例:セラピー/コーチング)およびレジーム内(既知の変化点の前/後)で確認してください。プールした r=−0.25 の結果が、セラピー −0.64 とコーチング +0.53 の違いを一度覆い隠していました。
- 対照変数は、結果を覆すだけでなく、別の解釈を示すこともあります。 対照変数を入れると効果が消える場合は、対照変数と予測変数の共線性を確認してください。対照変数と予測変数の相関 r(self-focus, session-length)=0.79 は、「効果が偽物」ではなく「メカニズムが曖昧」を意味していました。分解結果を報告してください。
- ステータスは正直に付けてください。 confirmed(q<0.10 の厳密な検定)≠ lead(p<0.06)≠ null ≠ descriptive です。ステータスの変更は記録し、黙って編集しないでください。十分な検出力がある場合の帰無結果も発見です。頑健性 ≠ 有意性です。n が小さいときに leave-one-out を通過した lead も、依然として検出力不足です。発見ではなく、前向き検証の候補として扱ってください。 8b. 系列のスコープも検定の一部です。 ラグ付きの「[t+1]」は、仮説の対象となる系列における次の単位を意味し、プールした行の次の行ではありません。ラグを取る前にスコープを定義してください(これが原因で符号が反転したことがあります)。過去の結果を再計算する際は、まず保存済みのアーティファクトをそのスコープで再現してください。
- プライバシー: 生のテキストや音声を出力ファイルや外部へのアップロードに含めないでください。統計量、割合、埋め込み由来のスコアのみを扱います。
- 平易な言葉で報告してください。 各統計量には実用上の意味を併記し、r/p/q/n はレポート内で一度定義してください。未翻訳の専門用語の直訳は使いません。説明を先に述べ、数値はそれを裏付けるものとして示します。
ワークフロー(完全な調査)
- 新しいデータソースには
validate-dataのゲートを適用してください(リファレンスを参照してください。チェックリストでは、ゼロと欠損の混同、重複排除の意味、部分文字列によるカテゴリ判定の不具合、ローリング期間の除外、タイムゾーンの規則を検出してきました)。 design:事前登録した仮説、ファミリー、検出力の妥当性確認。conduct:scripts/perm_stats.pyを使って実装し、実行します。検定、ステータス、既知の制約を含む注意事項を記載した結果の JSON を作成します。cross-validate:結果を信頼する前に、敵対的なコードレビュー(例:Codex による読み取り専用レビュー)を行います。指摘事項を修正し、再実行します。重要な主張については、プライバシーに配慮して選別したアーカイブを使い、外部モデルによるレビューを受けます。- lead として浮上したものはすべて
investigate-leadsで調査します(同じ規模の分析を繰り返すのではなく、トリアージ用の一連の分析を行います:LOO、方向性、トレンド除去と段差の比較、サイクル内分析、前白色化+ブートストラップ。同じ方向の lead は 1 つの合成指標にまとめます)。診断実行にはdescriptive_only: trueとマークします。 - 正直な文章で結論を示します(混在または棄却も認めます)。レポートを作成し、ステータスの来歴とともにレジストリを更新します。
結果の表示
結果 JSON が格納された任意のディレクトリで、同梱のエクスプローラーを起動します。
python3 scripts/explorer.py <results_dir> [--port 8799] [--pattern "exp*.json"] [--sort newest|oldest]
ディレクトリに explorer.html を生成し、ポート上でループバック HTTP サーバーを起動(または既存のものを再利用)して、ブラウザーを開きます。実験の一覧には確認済み/リードのバッジ、フィルター、ステータスごとに色分けされた並べ替え可能なテストテーブル、判定、注意事項、生の JSON が表示されます。ページは結果ファイルをリアルタイムで取得します。実験を再実行すると表示が更新されるため、新しい結果ファイルが追加されたときだけスクリプトを再実行してください。localhost 経由で配信し、file:// 経由(CDN フォントのため)は使わないでください。また、非ループバックインターフェースでは配信しないでください(結果に個人統計が含まれる場合があります)。
評価
python3 evals/run_evals.py を実行し(スキルディレクトリから)、実験スクリプトと結果のペアが標準(事前登録があること、m が固定のリテラルであること、perm の使用が正確であること、注意事項、生のテキストを出力に含めないこと)に適合しているかをチェックします。新しいテストを意図的に作成しない診断/トリアージ実行では、結果 JSON に descriptive_only: true を設定すると、「テストがあること」のチェックを満たせます。evals/cases/ の評価ケースには、合格/不合格の想定例が記載されています。