Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

案例:学术数据分析辅助

研究人员使用 OpenCode 辅助完成从数据清洗到论文图表的全流程,将分析周期从 1 周压缩到 2 天。

案例概述

学术研究中数据分析是最耗时的环节:清洗数据、编写统计检验代码、生成论文级图表、撰写方法论描述。本案例使用 OpenCode + Python(Pandas、SciPy、Matplotlib)对 500 份问卷数据完成描述统计、差异检验、回归分析和调节效应分析,将 5 天工作压缩到 2 天。

关键约束:AI 生成的统计代码必须经过假设条件验证,引用格式必须符合目标期刊要求。流程中设置了两个核心检查点,防止统计误用。

1. 项目背景

研究场景

一项关于远程办公效率的调查研究,包含 500 份问卷数据:

维度说明
数据规模500 行 × 32 列
变量类型连续变量 12 个、分类变量 8 个、量表变量 12 个
分析目标描述统计、差异检验、回归分析、调节效应
输出要求学术论文格式图表 + 可复现代码仓库

痛点

任务手动耗时难度
数据清洗(缺失值、异常值)1 天
正态性检验 + 统计方法选择0.5 天
回归分析代码编写1 天
图表生成与美化1.5 天
方法论描述撰写1 天

2. OpenCode 配置

AGENTS.md 研究模板

在项目根目录创建 AGENTS.md,定义数据分析角色的约束和行为规范。完整的模板比基础配置更详细,包含统计方法选择指南、输出格式规范和学术诚信约束:

# 数据分析项目 — AGENTS.md

## 角色定义

你是数据分析助手,负责协助完成学术研究的数据处理和统计分析。

## 核心约束

1. **工具栈锁定**:使用 pandas + scipy + statsmodels + matplotlib,不引入 sklearn 等机器学习库
2. **统计严谨性**:所有假设检验必须先验证前提条件(正态性、方差齐性)
3. **引用格式**:APA 第 7 版,统计符号用斜体(*p* < .05)
4. **代码可复现**:设置随机种子(random_state=42),版本锁定依赖

## 统计方法选择指南

根据数据特征选择合适的统计方法:

| 数据特征 | 比较两组 | 比较多组 | 关联分析 |
|----------|----------|----------|----------|
| 正态 + 方差齐 | 独立样本 t 检验 | 单因素 ANOVA | Pearson 相关 |
| 正态 + 方差不齐 | Welch t 检验 | Welch ANOVA | Pearson 相关 |
| 非正态 | Mann-Whitney U | Kruskal-Wallis | Spearman 相关 |
| 配对设计 | 配对 t 检验 / Wilcoxon | 重复测量 ANOVA | — |

## 代码规范

- 每个分析步骤生成独立函数,便于单元测试
- 输出文件统一放在 `output/` 目录
- 图表保存时使用 `bbox_inches='tight'`
- 所有统计函数必须包含假设验证步骤

## 输出要求

- 中文注释,英文变量名
- 统计结果保留 3 位小数
- 生成分析日志到 `analysis_log.md`
- 每个分析步骤输出假设验证结果(正态性、方差齐性、效应量)

学术诚信约束(追加到 AGENTS.md)

## 学术诚信约束

1. **引用验证**:生成任何统计方法描述时,必须标注原始文献来源(作者、年份、期刊)
2. **禁止虚构**:不得生成不存在的文献引用、虚假的 p 值、或伪造的统计量
3. **数据溯源**:每步分析必须记录输入文件名、行数、使用的随机种子
4. **版本锁定**:统计软件版本号必须与实际环境一致(如 scipy==1.11.0)
5. **可复现声明**:输出文件开头添加 `# 复现方法:pip install -r requirements.txt && python analysis.py`

opencode.json 环境配置

{
  "provider": "anthropic",
  "model": "claude-sonnet-4-20250514",
  "env": {
    "VIRTUAL_ENV": ".venv",
    "PATH": ".venv/bin:${PATH}"
  },
  "context": {
    "files": ["AGENTS.md", "analysis_plan.md"]
  }
}

执行前先激活虚拟环境并安装依赖:

python -m venv .venv && source .venv/bin/activate
pip install pandas scipy statsmodels matplotlib seaborn

3. 工作流程

数据清洗

用精确的数据描述触发 OpenCode 生成完整的清洗脚本:

User: "读取 survey_results.csv,数据有 500 行 32 列。
请:
1. 生成缺失值报告(按列统计缺失率)
2. 用 IQR 方法检测异常值
3. 量表变量逻辑一致性检查(反向计分题项)
4. 输出清洗后的数据到 clean_survey.csv"

OpenCode: [生成 data_cleaning.py,包含缺失值报告、IQR 过滤、反向题项验证逻辑]

OpenCode 生成的脚本会自动处理缺失值策略(量表用中位数、分类用众数)、标记异常值行号、验证反向题项的一致性。关键验证点:检查缺失值处理策略是否合理(删除 vs 插补),确认 IQR 阈值是否符合领域惯例。

统计分析

用多轮对话驱动 OpenCode 逐步完成分析,确保每步都经过假设验证:

User: "对 clean_survey.csv 做以下分析:
- 按 department 分组做描述统计
- 比较 remote vs on-site 的 productivity 差异(先检验正态性)
- 多元回归:productivity ~ experience + satisfaction + flexibility
- 调节效应:flexibility 在 satisfaction→productivity 中的调节作用"

OpenCode: [生成 analysis.py,包含 Shapiro-Wilk 正态性检验、t 检验、OLS 回归、
分层回归 + 交互项,每步输出假设验证结果]

User: "回归结果 VIF > 5 的变量需要处理"

OpenCode: [添加 VIF 检查,自动移除高共线性变量并重新拟合]
分析任务OpenCode 生成的代码人工验证点
描述统计df.groupby('department').describe() + 频率表确认分组变量正确
正态性检验scipy.stats.shapiro()确认样本量适用性(n > 50 时 Shapiro-Wilk 可能过于敏感)
组间差异独立样本 t 检验 / Mann-Whitney U确认方差齐性假设(Levene 检验)
回归分析statsmodels OLM + variance_inflation_factor()确认共线性处理
调节效应分层回归 + 中心化交互项确认变量已中心化

关键提示:OpenCode 默认不检查样本量对 Shapiro-Wilk 的影响。当 n > 50 时,建议改用 Kolmogorov-Smirnov 检验或观察 Q-Q 图。多轮对话让 AI 补充这些验证,比一次性生成更可靠。

多种统计方法的 Prompt(提示词) 示例

实际项目中,不同统计方法需要不同的 Prompt 策略。以下是几种常用方法的具体 Prompt 示例。

独立样本 t 检验

User: "比较远程办公组(remote=1)和现场办公组(remote=0)的 productivity 差异。
要求:
1. 先做 Levene 方差齐性检验
2. 根据 Levene 结果选择 Student t 或 Welch t
3. 计算 Cohen's d 效应量
4. 输出 APA 格式的结果报告
5. 生成两组的箱线图,标注均值和显著性星号"

OpenCode: [生成独立的 t 检验脚本,包含 Levene 检验、条件分支、效应量计算、
APA 格式输出和 matplotlib 箱线图]

人工验证点:检查 p 值是否合理(不要直接信任 AI 输出的 p 值,用 scipy.stats 重新计算验证),确认效应量报告的是 Cohen’s d 而非 Hedge’s g。

单因素 ANOVA

User: "比较不同部门(department)的 productivity 差异。
要求:
1. 先做 Shapiro-Wilk 正态性检验(按组)
2. 做 Levene 方差齐性检验
3. 如果满足假设,用单因素 ANOVA;不满足用 Kruskal-Wallis
4. ANOVA 显著后做 Tukey HSD 事后比较
5. 输出 F 值、p 值、偏 eta 方(效应量)
6. 生成分组柱状图,标注事后比较结果"

OpenCode: [生成 ANOVA 脚本,包含假设验证、条件分支、Tukey HSD、
效应量计算和分组柱状图]

人工验证点:确认 Tukey HSD 的配对比较结果是否正确,检查偏 eta 方的计算公式(η²p = SS_between / (SS_between + SS_within))。

多元回归分析

User: "做多元线性回归:productivity ~ experience + satisfaction + flexibility + autonomy。
要求:
1. 检查多重共线性(VIF),VIF > 5 的变量标记并讨论
2. 检查残差正态性(Shapiro-Wilk)和 homoscedasticity(Breusch-Pagan)
3. 输出标准化和非标准化回归系数
4. 计算调整后 R² 和 AIC
5. 生成残差诊断图(4 合 1:残差 vs 拟合值、Q-Q 图、尺度-位置图、残差 vs 杠杆图)
6. 用 APA 格式输出回归结果表"

OpenCode: [生成回归分析脚本,包含 VIF 检查、残差诊断、标准化系数、
4 合 1 诊断图和 APA 格式输出]

人工验证点:检查残差图是否显示异方差或非线性模式,确认标准化系数的方向是否符合理论预期,VIF 值是否合理。

调节效应分析

User: "分析 flexibility 在 satisfaction→productivity 关系中的调节效应。
要求:
1. 对 satisfaction 和 flexibility 做中心化处理(减去均值)
2. 计算交互项:satisfaction_centered × flexibility_centered
3. 分层回归:第一步放主效应,第二步加交互项
4. 检查交互项的 ΔR² 和显著性
5. 如果显著,画简单斜率图(flexibility 高/低各一条线)
6. 输出 Johnson-Neyman 技术的显著性区间"

OpenCode: [生成调节效应分析脚本,包含中心化处理、分层回归、简单斜率图、
Johnson-Neyman 区间输出]

人工验证点:确认中心化处理是否正确(只中心化连续变量,分类变量不做中心化),简单斜率图的高低分组是否合理(通常取均值 ± 1SD)。

可视化

用精确的图表规格触发 OpenCode 生成出版级图表代码:

User: "生成论文图表:
- Figure 1: 分组柱状图(各部门满意度对比)
- Figure 2: 回归系数森林图
- Figure 3: 调节效应交互图
使用 viridis 配色,300 DPI,tight bbox"

OpenCode: [生成 figures.py,包含 matplotlib 子图布局、viridis 色板、
论文尺寸(6×4 英寸)、英文轴标签]

OpenCode 生成的图表默认使用 figsize=(6, 4) 的论文标准尺寸。如果目标期刊要求双栏排版(3.5 英寸宽),需要手动调整 figsize=(3.5, 2.5)。AI 默认的轴标签是英文,中文论文需要额外指定 fontproperties 参数。

图表生成的 MCP(模型上下文协议) 工具配置

为了更灵活地生成图表,可以在 opencode.json 中配置数据可视化 MCP 工具:

{
  "provider": "anthropic",
  "model": "claude-sonnet-4-20250514",
  "mcp": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "./src", "./output"]
    }
  },
  "context": {
    "files": ["AGENTS.md", "analysis_plan.md", "style_guide.md"]
  }
}

其中 style_guide.md 定义图表的视觉规范:

# 图表视觉规范

## 配色方案
- 主色:viridis(色盲友好)
- 备选:colorblind 调色板
- 禁止使用:jet、rainbow 等非色盲友好色板

## 字体规范
- 轴标签:10pt,Arial 或 Helvetica
- 刻度标签:8pt
- 标题:12pt,加粗
- 图例:8pt,放在图表内部右上角

## 尺寸规范
- 单栏图表:3.5 × 2.5 英寸
- 双栏图表:7 × 4 英寸
- DPI:300(印刷质量)

## 标注规范
- 显著性标注:*p < .05, **p < .01, ***p < .001
- 误差线:95% 置信区间
- 均值标注:圆点 + 数值

方法论描述

AI 基于分析流程生成论文方法论章节草稿,包含统计方法说明、软件版本信息和分析步骤描述。

以下是具体的方法论写作 Prompt 示例:

User: "基于 analysis.py 的分析流程,生成论文的方法论章节(英文)。
要求:
1. 按分析顺序描述每个统计方法
2. 每个方法标注引用来源(如 t 检验引用 Student, 1908)
3. 报告软件版本(Python 3.11, scipy 1.11.0, statsmodels 0.14.0)
4. 说明数据清洗步骤和排除标准
5. 使用 APA 第 7 版格式

生成到 output/methods_section.md"

OpenCode: [生成方法论章节草稿,包含分析流程描述、统计引用、
软件版本信息和 APA 格式]

生成后需要人工检查的要点:

  • 引用是否指向正确的原始文献(不要信任 AI 生成的引用)
  • 统计符号格式是否符合 APA 规范(斜体 p、斜体 M、斜体 SD)
  • 软件版本号是否与 requirements.txt 一致
  • 分析步骤的描述是否完整,有无遗漏

学术写作辅助工作流

除了方法论章节,AI 还能辅助生成结果报告、讨论框架和参考文献管理。以下是完整的学术写作工作流。

结果报告生成

User: "基于 analysis.py 的输出结果,生成论文的结果章节。
要求:
1. 描述统计用表格呈现(均值、标准差、样本量)
2. t 检验结果报告 t 值、df、p 值、Cohen's d
3. 回归结果用标准表格(β、SE、t、p、95% CI)
4. 每个结果配一段文字描述,解读统计意义
5. 所有 p 值用 APA 格式(p = .003 而非 p = 0.003)

生成到 output/results_section.md"

讨论框架生成

User: "基于结果章节,生成讨论章节的框架。
要求:
1. 第一段:总结主要发现
2. 第二段:与现有文献对比(引用 3-5 篇相关研究)
3. 第三段:理论贡献和实践意义
4. 第四段:局限性(至少 3 点)
5. 第五段:未来研究方向

注意:引用的文献必须是真实存在的,不要虚构。
生成到 output/discussion_framework.md"

人工验证点:AI 生成的文献引用经常不准确,需要逐条在 Google Scholar 或 PubMed 上验证。建议让 AI 先列出引用清单,验证后再生成正文。

参考文献管理

User: "整理方法论和讨论章节中引用的所有文献。
要求:
1. 生成 APA 第 7 版格式的参考文献列表
2. 按字母顺序排列
3. 标注哪些引用需要人工验证(AI 不确定的)
4. 输出到 output/references.md"

学术诚信检查

在 AGENTS.md 中添加学术诚信约束,防止 AI 生成虚假引用或伪造数据:

## 学术诚信约束

1. **引用验证**:生成任何统计方法描述时,必须标注原始文献来源(作者、年份、期刊)
2. **禁止虚构**:不得生成不存在的文献引用、虚假的 p 值、或伪造的统计量
3. **数据溯源**:每步分析必须记录输入文件名、行数、使用的随机种子
4. **版本锁定**:统计软件版本号必须与实际环境一致(如 scipy==1.11.0)
5. **可复现声明**:输出文件开头添加 `# 复现方法:pip install -r requirements.txt && python analysis.py`

用以下 prompt 触发 OpenCode 检查引用完整性:

User: "检查方法论描述中的所有统计引用:
1. t 检验的引用是否指向 Student (1908) 或 Welch (1947)
2. APA 格式的 p 值写法是否规范(p < .05 而非 p < 0.05)
3. 软件版本号是否与 requirements.txt 一致
4. 输出修正后的 methods_section.md"

OpenCode: [扫描方法论文本,标记不规范引用,生成修正版本]

4. 效果数据

指标手动完成AI 辅助变化
数据分析总耗时5 天2 天-60%
代码编写量800 行250 行(手动修改)-69%
图表生成时间1.5 天0.5 天-67%
方法论撰写时间1 天0.3 天-70%
代码可复现性手动维护自动生成提升

5. 经验教训

  1. 统计代码必须验证假设条件。AI 生成的 t 检验代码默认不检查正态性和方差齐性,需要在调用检验前添加 shapiro() 和 levene() 检验。

  2. 引用格式需要手动检查。AI 生成的方法论描述中,APA 格式的引用和统计符号格式(如 p < .05)经常不规范,需要按目标期刊要求逐项核对。

  3. 图表配色要符合学术规范。AI 默认使用彩虹色系,学术论文通常要求色盲友好的配色方案(如 viridis 或 colorblind 调色板)。

  4. 代码版本控制很重要。AI 生成的代码应纳入 Git 管理,确保分析流程可追溯、可复现。

  5. 将分析流程模板化可以显著降低重复工作的成本。当同一个研究团队反复执行类似的数据分析流程时,把 AGENTS.md 约束、假设检验封装、预注册审计和 p-hacking 检测沉淀为项目脚手架(如 ai-ra-stat-template),比每次从零配置更高效。模板化的核心价值不是代码复用,而是分析规范的复用——确保每次分析都遵循相同的假设验证流程和学术诚信约束。

常见反模式

先分析再验证假设条件。许多研究者急于看到分析结果,跳过数据探索和假设检验环节,直接将原始数据交给 AI 要求“做所有分析“。AI 默认选择最容易实现的方法——对非正态数据用 Pearson 相关而非 Spearman,对分类变量用线性回归而非逻辑回归。正确的做法是先要求 AI 生成数据诊断报告(分布形态、缺失模式、变量类型),确认数据特征后再选择统计方法。

把 AI 生成的方法论直接粘贴到论文中。AI 的方法论描述在语言上很流畅,引用格式看起来规范,但引用内容可能指向错误的文献,统计符号的格式也不一定符合目标期刊要求。研究者负责签名的论文,方法论部分每一句都应能独立验证。更常见的反模式是研究者认为“AI 都写好了,我不需要再读一遍“——这不是节省时间,而是学术风险。

每次分析都从新的对话开始。将这次分析的历史上下文完全丢弃,下一次 OpenCode 从头理解数据。这不仅浪费上下文,还导致分析策略前后不一致——前一轮用 Welch t 检验,后一轮变成了 Student t 检验。合理做法是为同一个研究项目维护一个共享的工作目录和 AGENTS.md,让 AI 记住数据特征、变量命名规则和首选统计方法,从而逐步收敛到稳定的分析流程。

过度依赖 AI 解释统计结果。AI 很擅长用流畅的文字描述回归系数和 p 值,但它不具备领域知识来判断一个效应量在实际研究中是否有意义。例如 AI 会报告“工作年限对满意度的预测效应显著(β = 0.03, p = .032)“,但研究者需要判断 β = 0.03 在实际中是否值得讨论。将统计显著性和实际显著性混为一谈,是数据分析中最常见的反模式之一。

常见错误与陷阱

AI 误用统计检验方法。OpenCode 默认选择的标准方法并不总是适合你的数据。例如对有序分类变量(如 Likert 量表题项)做 t 检验而非 Mann-Whitney U 检验,对重复测量数据忽略个体内的相关性而使用独立样本检验。这些错误在代码层面不会报错——p 值和统计量都会正常输出——但结论是错的。关键防范措施:在 AGENTS.md 中明确变量的测量层级(名义、有序、连续)和相应的分析方法选择规则。

迭代式 prompt 导致的 p-hacking。研究者反复要求 AI“换一种方法试试“直到发现显著结果:先试 t 检验不显著,再试回归分析发现某个系数接近显著,然后加控制变量后 p 值降到了 .05 以下。每轮迭代都是合理的统计操作,但多次尝试后汇报最有利的结果而没有报告完整的分析路径,本质上就是 p-hacking。OpenCode 不会提醒你这种风险,研究者自己必须有预注册的分析计划和报告透明度意识。

AI 生成虚构的文献引用。即使 AGENTS.md 中明确写了“禁止虚构引用“,AI 在生成方法论描述和讨论框架时仍然会编造看起来合理的参考文献。这些虚构引用通常指向真实存在的期刊和作者,但文章标题、年份或卷号是错误的。更隐蔽的情况是 AI 把正确的作者名和错误的文章标题组合在一起。任何用于支撑方法论选择的引用都必须逐条在 Google Scholar 或 PubMed 上验证后才能放入论文中。

代码能运行但科学产出错误。这是最危险的陷阱:AI 生成的 Python 代码没有语法错误,运行后输出了漂亮的图表和整齐的统计表格,但分析逻辑是错误的。例如在分层回归中把控制变量和预测变量的加入顺序搞反了,调节效应分析中漏掉了中心化步骤但代码继续运行并输出了交互项结果。统计代码的“可运行“和“正确“之间,存在一个需要领域知识才能跨越的鸿沟。

适用场景与限制

不适合需要监管合规的数据分析场景。临床试验数据、药物安全性研究、医疗设备评估等受 FDA 或药监局监管的数据分析流程,要求每一步都有签名的审计追踪和 SOP。OpenCode 生成代码的过程本身无法作为审计证据——你不知道 AI 在“思考“过程中尝试了多少种方法、是否选择性地报告了最优结果。在这类场景中,AI 只能在方案设计阶段作为辅助参考,不能参与最终分析决策链。

数据无法安全离开本地环境的场景。部分高校和研究机构的数据使用协议明确规定,原始数据不得上传到第三方 API。如果研究项目涉及人类被试的个人身份信息、机构敏感数据或商业合作方的专有数据,使用云端 AI 模型处理这些数据可能违反数据保护协议。在这种约束下,只能使用本地运行的模型(如通过 Ollama 部署的开源统计代码生成模型),但其分析质量与云端模型存在差距。

全新方法论和前沿统计技术不适合 AI 辅助。AI 的训练数据截止于某个时间点,对于训练数据覆盖范围之外的统计方法(例如最近两年发表的新效应量指标或新检验方法),AI 要么不知道,要么生成错误的使用方式。例如如果你试图使用某个 2025 年才发表的修正偏差的自举方法,AI 很可能回退到传统的自举法而没有附加偏差修正步骤。在研究中使用前沿方法时,必须由研究者本人直接编写和验证核心代码。

需要深度领域知识解释分析结果的场景。AI 可以计算任何你指定的统计量,但它不理解这些数字对特定研究领域的含义。例如在心理学研究中,Cohen’s d 为 0.2 可能是一个值得讨论的小效应;在工程领域,同样的效应量可能被认为是可忽略的随机波动。AI 无法根据领域惯例判断一个发现是否“值得报告“,也无法识别数据中隐含的混淆变量——这些需要研究者多年的领域经验来识别和解释。

进阶模板:可复现统计分析脚手架

上述案例展示了 AI 辅助数据分析的基本流程。如果需要将这套方法沉淀为可复用的项目模板,可以进一步构建 ai-ra-stat-template 脚手架。以下是模板的核心设计。

目录结构

ai-ra-stat-template/
├── AGENTS.md              # OpenCode 智能体配置
├── pyproject.toml         # 项目配置和依赖
├── requirements.txt       # 依赖清单
├── Makefile               # 构建自动化
├── prereg.md              # 预注册分析计划
├── config.yaml            # 运行配置(覆盖默认值)
├── style_guide.md         # 图表视觉规范
├── opencode.json          # OpenCode 配置
├── src/
│   ├── __init__.py        # 包初始化
│   ├── config.py          # 配置管理(yaml.safe_load + dataclass 字段过滤)
│   ├── hypothesis_tester.py  # 假设检验封装(自动选方法 + 完整记录)
│   ├── data_cleaner.py    # 数据清洗(缺失值、异常值、量表验证)
│   ├── power_analysis.py  # 功效分析(Cohen's d、偏 η²、事后功效)
│   ├── analyze.py         # 主分析入口
│   ├── prereg_audit.py    # 预注册审计
│   └── analysis_graph.py  # 分析流程图谱(STUB,骨架实现)
├── tests/                 # 单元测试(7 文件,覆盖率 60%+)
│   ├── test_config.py
│   ├── test_hypothesis_tester.py
│   ├── test_data_cleaner.py
│   ├── test_power_analysis.py
│   ├── test_prereg_audit.py
│   ├── test_analyze.py
│   └── test_scripts.py
├── scripts/
│   ├── run.py             # 跨平台任务运行器(Windows 友好)
│   ├── generate_sample_data.py  # 合成数据生成器
│   ├── download_data.py   # 互联网数据下载
│   ├── explore.py         # 探索性分析
│   └── audit_smart.py     # 智能审计
├── data/                  # 数据目录(不提交)
│   └── survey_results.csv # 样例数据(合成)
└── output/                # 分析输出(不提交)

关键设计决策

决策选择原因
正态性检验(n≥50)D’Agostino-PearsonKS 不适用于离散 Likert 数据
配置加载(load_configYAML safe_load + dataclass 字段过滤文件缺失返回默认值,未知字段自动忽略,避免执行任意代码
配置键提取(extract_config_keysast 解析 Python 配置文件仅提取变量名不执行代码(与 load_config 流程独立)
调节效应分析(H3)分层回归 + 交互项中心化后分两步:主效应 → 加交互项,检查 ΔR²
预注册审计YAML front matter + audit() 做 set diff比手工解析 Markdown 更可靠
分析日志JSONL 格式追加写入,流式解析
prompt_hash 追踪SHA-256 哈希每步 prompt检测迭代式 p-hacking
依赖管理pyproject.toml + requirements.txt兼容性和可复现性
数据生成合成数据(joint normal)避免真实数据隐私问题,可控的效应量

AGENTS.md 新增约束

模板的 AGENTS.md 在基础版本上大幅扩展,涵盖统计严谨性、学术诚信和 OpenCode 机制对齐三大类约束:

## 统计方法选择指南

根据数据特征自动选择检验方法:
- 比较两组:正态+方差齐 → 独立样本 t,方差不齐 → Welch t,非正态 → Mann-Whitney U
- 比较多组:正态 → 单因素 ANOVA,非正态 → Kruskal-Wallis
- 关联分析:正态 → Pearson,非正态 → Spearman

## 正态性检验方法选择

- n < 50: Shapiro-Wilk
- n ≥ 50: D'Agostino-Pearson
- n ≥ 200: Q-Q 图辅助判断
- 禁止使用 Kolmogorov-Smirnov 检验

## 假设检验前置验证

执行任何参数检验前,必须完成 4 步:正态性检验 → 方差齐性检验(Levene)→ 根据结果选择检验方法 → 记录到 analysis_log.jsonl

## p-hacking 防护

1. **预注册**:分析计划写入 prereg.md,实际执行必须与预注册一致
2. **完整记录**:每步分析写入 analysis_log.jsonl,包含方法、参数、p 值、prompt_hash
3. **禁止迭代直到显著**:不得因 p > .05 而更换统计方法重新分析
4. **事后分析标记**:未预注册的额外分析必须标记为"探索性分析"

## 学术诚信约束

- 引用验证:DOI 通过 requests.head 访问 doi.org 验证
- 禁止虚构样本量、p 值或效应量
- 数据溯源:所有数据必须有明确来源
- 版本锁定 + 可复现声明(random_state=42)

此外,AGENTS.md 还包含 OpenCode 机制对齐(角色分层、任务委派、失败处理、质量门禁、语言规定)和 Skill 系统推荐章节。

预注册模板(prereg.md)

---
title: "远程办公效率研究 — 预注册分析计划"
authors: ["研究团队"]
registration_date: "2025-01-15"
hypotheses:
  - id: H1
    description: "远程办公组的 productivity 显著高于现场办公组"
    method: "独立样本 t 检验(或 Welch t / Mann-Whitney U)"
    iv: "remote"
    dv: "productivity"
  - id: H2
    description: "工作满意度对生产力有显著正向预测作用"
    method: "多元线性回归"
    iv: "satisfaction, experience, flexibility"
    dv: "productivity"
  - id: H3
    description: "flexibility 调节 satisfaction 对 productivity 的影响"
    method: "分层回归 + 交互项"
    iv: "satisfaction × flexibility"
    dv: "productivity"
exclusions:
  - "缺失值 > 30% 的样本排除"
  - "IQR 方法检测到的异常值排除"
variables:
  continuous: ["productivity", "satisfaction", "experience", "flexibility", "autonomy"]
  categorical: ["department", "remote"]
analysis_plan:
  h1:
    type: "t-test"
    variables: ["productivity", "remote"]
    assumptions: ["normality", "homoscedasticity"]
  h2:
    type: "regression"
    dependent: "productivity"
    independents: ["experience", "satisfaction", "flexibility"]
  h3:
    type: "moderation"
    dependent: "productivity"
    moderator: "autonomy"
    independents: ["satisfaction"]
analysis_log: "analysis_log.jsonl"
---

prereg_audit.pyaudit() 函数读取 YAML front matter,与 analysis_log.jsonl 做 set diff,输出三类结果:预注册但未执行、执行但未预注册、匹配项。

使用方式

# 安装依赖
pip install -r requirements.txt

# 运行测试(跨平台)
make test                                    # Linux/macOS
python scripts/run.py test                   # Windows
python -m pytest tests/ -v --tb=short        # 跨平台通用

# 生成样例数据(首次运行必须)
python scripts/generate_sample_data.py

# 执行分析(数据路径从 config.yaml 读取)
python -m src.analyze

# 审计预注册一致性
python -m src.prereg_audit --prereg prereg.md --log analysis_log.jsonl

# 检测 p-hacking 模式(位置参数,非 --log)
python scripts/audit_smart.py analysis_log.jsonl

完整模板代码见 examples/ai-ra-stat-template/

关联章节