# Phase 8 統計解析仕様 ## 1. Phase 8の目的 Prompt/Controlの観測反応率、反応時間、Yaw変化を基本統計・検定・効果量で比較する。因果関係は断定しない。 ## 2. 入力データ仕様 単一または再帰探索した複数の `person_analysis_table.csv`。session summaryもloaderで読込可能。 ## 3. 解析対象の定義 主反応解析は `valid_for_voice_analysis=True` のみ。数値欠損は各metricから除く。 ## 4. prompt/control条件 `prompt_condition`がprompt/controlの行を同一schemaで比較する。disabled/unknownは主比較外。 ## 5. response_rate定義 response count / valid voice analysis count。分母0はNone。 ## 6. 顔向き評価不能の扱い 分析不能をno responseへ混ぜない。件数はcondition summaryと除外集計へ残す。 ## 7. 条件別summary 全件、valid、response/no response、率、除外、reaction/Yaw記述統計、Turn levelを出力する。 ## 8. 反応率検定 autoは期待度数5未満でFisher、それ以外で2x2カイ二乗。率差、odds ratio、φを併記する。 ## 9. reaction_time_sec比較 response detected行のみをMann–Whitney U(既定)またはWelch tで比較する。 ## 10. max_yaw_delta比較 valid turn、valid voice、全non-nullの分母設定から選択し、同じ数値検定を行う。 ## 11. turn_level分布 none、face appeared、subtle、weak、medium、strong、not evaluableを条件別集計する。 ## 12. 除外理由集計 条件内全件を分母にreason別count/ratioを保存する。 ## 13. 出力CSV仕様 condition、response test、numeric、Turn distribution、exclusion、run summaryの6表をUTF-8 BOMで保存する。 ## 14. グラフ出力 matplotlib Aggで反応率bar、reaction/Yaw box、Turn分布、除外理由を英語ラベルPNGへ保存する。空データでも停止しない。 ## 15. CLI `python main.py analyze --input data/logs/unified --output data/analysis`。解析経路はApplicationをimportしない。 ## 16. テスト 読込・型変換・必須列、検定選択、空標本、分母、summary、CSV BOM、overwrite、Agg plotを合成データで検証する。 ## 17. 結果解釈の注意 p値は因果を証明しない。小標本ではFisherを使い効果量を併記する。session ID、カメラ位置、trigger条件が異なるデータを無批判に混ぜない。 ## 18. Phase 9への引き継ぎ 6 CSVと5 PNGを安定した結果閲覧・ファイル選択GUIへ提供する。