21.2 项目骨架与规则基座

面向经管学生、研究者与从业者的 AI 智能体设计教材

作者

李学恒、林建浩、严翊歆

发布于

2026-05-11

配图:规则基座与脚本协作

四件套与八阶段的对应表勾出了全貌,本节先把第一件——CLAUDE.md——在实证项目里的特殊条款落到字面上。CLAUDE.md 的工作覆盖八阶段流水线的全程:在阶段 1 写入,为后续所有脚本提供路径、版本、随机种子约束;在阶段 8 的复现包整理时,这份规则又反向输出为 AEA DCAS 兼容的目录结构和披露条款。中间六个阶段都在这份规则文件的约束下运行。本节的任务是给出一份可直接复制到自己研究的规则模板,连同 .claude/rules/ 下的分类规则和 references/ 下的方法论卡片。

实证项目比一般工程项目更需要规则基座。原因有三。第一,复现要求高——AEA 数据编辑政策要求任何人在拿到代码和数据后都能重跑出论文里的每一张表。第二,学术诚信红线多——随机种子、样本边界、聚类层级的任何改动都可能改变结论,必须留痕。第三,协作传承难——一篇论文的生命周期常常跨越多个合作者、多台电脑、多轮审稿人修改,规则必须写成文件,不能存在头脑里。

CLAUDE.md 和 .claude/rules/ 就是这份书面规则。它们告诉 Claude Code:这个项目哪些路径只读、哪些变量必须固定命名、哪些软件版本不能变、哪些产出需要人工确认。

项目初始化对话

一个实证项目的初始化对话通常很短,但输出很结构化。下面是给最低工资 DID 项目做初始化的一段实录:

▶ Claude Code
帮我按 AEA Data and Code Availability Policy v1.0 规范创建一个最低工资 DID 研究项目。

- 项目名:min-wage-did
- 主数据:QCEW(2000-2019,州-年-工资箱面板。工资箱即把岗位按时薪分桶后的就业计数)
- 外部数据:Dube et al. 整理的各州最低工资历史
- 主语言:Stata 18,次语言:R(对照)
- 核心估计量:csdid,对照 reghdfe,稳健性 sdid(三者的通俗含义见下方说明)
- 包含 .claude/rules/ 下的 data-processing / regression-spec / output-format 三类规则
- 包含 references/ 下的 did-checklist / iv-checklist / rdd-bandwidth 三张方法论卡片

生成目录结构,写 CLAUDE.md 和三份规则文件,最后完成首次 git 提交。

Claude Code 拿到这段请求后会依次执行:创建 AEA 兼容目录、生成 .gitignore(把 data/raw/*.dta 排除)、写入 CLAUDE.md、生成三份 rules 文件、初始化 Git 仓库并提交。对研究者来说,只要在对话里确认每份文件的内容即可。整段初始化用时约 3-5 分钟,替代了过去手动敲目录、写 README、复制模板的半小时。

三个核心 Stata 命令的通俗说明

请求里出现的 csdidreghdfesdid 是三个 Stata 社区包,本章会反复用到。读者不必现在就掌握它们的全部细节,记住”是什么、做什么、什么时候选”即可。

  • csdid(Callaway-Sant’Anna 估计量):处理”不同地区在不同年份接受同一项政策”的渐进 DID。它的核心改进是把每个处理时点的处理组单独拿来和”还没接受政策”的对照组比较,再加权汇总成总效应,避免传统做法把已经处理过的组拿来当对照而引入的偏误。本章把它当主估计量。
  • reghdfe(高维固定效应回归):可以快速估计同时含多个固定效应(例如州 + 年 + 行业)的线性模型,本质是 OLS 加一套高效的固定效应吸收算法。本章把它当 TWFE(双向固定效应)对照。
  • sdid(合成 DID):把”合成控制”思想搬到 DID 框架里——用对照组的加权平均构造一个”合成对照”,让对照组与处理组在政策前的趋势贴近。当平行趋势假设较弱时用它做稳健性检验。

第一次接触这些方法时,推荐两份友好的入门材料:Scott Cunningham 的开源教材 Causal Inference: The Mixtapemixtape.scunning.com)第 9 章覆盖经典 DID 与渐进 DID;Roth 等人 (2023, Journal of Econometrics) 是渐进 DID 文献的综述,把 Callaway-Sant’Anna、Sun-Abraham、de Chaisemartin-d’Haultfoeuille 等修正方法放在统一框架下比较,有助于建立全景图。

CLAUDE.md 的实证特殊条款

CLAUDE.md 是这套规则的主文件。对实证项目来说,它至少要覆盖六类条款:路径规范、随机种子、软件版本锁定、变量命名、AI 使用披露、数据许可声明。下面给出一份完整可用的范例。

# CLAUDE.md — 最低工资 DID 研究项目规则

## 项目信息
- 项目名:min-wage-did
- 负责人:[研究者姓名]
- 创建日期:2026-04-17
- 主语言:Stata 18.0;次语言:R 4.4.0
- 合规基线:AEA DCAS v1.0 + QJE 2025 AI 披露政策

## 一、路径规范

- `data/raw/`:原始数据存储路径。**只读,禁止写入**。Claude Code 不得通过任何脚本向该目录写入文件
- `data/processed/`:清洗脚本生成路径。**由 02_clean.do 独占写入**,其他脚本只读
- `data/external/`:外部整理数据(如 Dube 最低工资历史),版本控制但不随意修改
- `output/tables/`、`output/figures/`:产出目录,由对应脚本写入
- 禁止在 `code/` 以外的目录存放脚本

## 二、随机种子

- 全项目统一种子:`set seed 20260417`
- 所有涉及 bootstrap(自助抽样估计标准误的方法)、随机抽样、模拟的命令必须在使用前显式设置种子
- 不同步骤如需独立种子,以基准种子 + 序号约定:20260417、20260418、20260419

## 三、软件版本锁定

- 每个 `.do` 文件首行必须写 `version 18.0`
- R 脚本首部必须写 `stopifnot(getRversion() >= "4.4.0")`
- 依赖的 Stata 社区包版本锁定在 README.md 的 "Software Environment" 段
- 不允许使用 `ssc install, replace` 升级已安装包,除非全员同步

## 四、变量命名约定

- 一律小写下划线
- 时间变量统一 `year`(整数)或 `yq`(季度序号)
- 个体 ID 统一 `state_id`(州)或 `cty_id`(县)
- 处理变量(标记是否接受政策的 0/1 变量)`treat_*`,结果变量 `y_*` 或语义变量(`log_emp`、`wage_level`)
- 固定效应通过 `absorb()` 选项让 Stata 内部吸收,不在数据里展开成大量 0/1 哑变量

## 五、AI 使用披露

本项目使用 Claude Code 辅助完成以下任务:数据清洗脚本生成、回归代码模板生成、表格与图形格式化、稳健性矩阵批量执行。所有分析结果已由研究者独立核验。论文正式版本须在致谢或方法附录按 AEA 2025 披露政策注明 AI 工具使用范围。

披露段模板(中英双语)保存在 `references/ai-disclosure-template.md`。

## 六、数据许可声明

- QCEW:美国 BLS 公开数据,无版权限制,可随复现包分发
- 各州最低工资历史:Dube et al. 整理版本,引用 Vaghul & Zipperer (2016) WP
- 本项目不涉及 WRDS、Compustat、CRSP、Wind、CSMAR 等受许可数据
- 若未来扩展至受限数据,须另建分支项目并在本文件明确声明

## 七、人在回路(HITL)节点

以下节点必须由研究者确认,Claude Code 执行到此处应暂停并请求人工审阅:

1. 识别假设与研究设计(因果逻辑和方法选择由研究者在项目启动时确定,AI 不代为决定)
2. 样本筛选规则确定(`02_clean.do` 的 `keep if` 语句)
3. 主回归规范确认(固定效应结构、聚类层级)
4. 稳健性矩阵边界确定(跑哪些列)
5. 最终表格的结论措辞

## 八、Git 提交约定

- commit message 格式:`[阶段]{中文描述}` 如 `[clean]构建州-年-工资箱面板`
- 每次主回归系数发生显著变化(>10%)必须单独一次提交,并在 message 中说明原因
- 不允许 force push,不允许修改历史 commit

这份文件里有几条特别值得关注。版本锁定那条(version 18.0)表面上是小事,实际上是复现研究的底线——Stata 不同版本里同一条命令的内部算法可能微调,不锁版本,半年后换台电脑跑可能跑出不一样的系数。披露条款参照 AEA 2025 年更新的政策写成,明确了 AI 的使用范围和研究者的核验责任,这是目前 QJE、ReStat、JFE 等顶刊都在要求的。

常见坑:忘记锁 Stata 版本

新建项目时如果 CLAUDE.md 没明确 version 18.0,Claude Code 生成的 do 文件首行可能直接写成业务命令。半年后换一台装了 Stata 17 的电脑再跑,同一条回归命令可能因为底层算法微调给出略有不同的标准误。审稿人要求复现时你无法准确再现原始结果。

解决办法只有一条:在 CLAUDE.md 强制规定首行 version 18.0,并在规则里要求 Claude Code 生成新 do 文件时必须包含该行。

.claude/rules/ 分类规则

CLAUDE.md 承担项目级约束,但具体到”怎么清洗数据”、“主回归默认选项是什么”、“表格要 booktabs 还是 longtable”这类细节,放进主文件会让它臃肿。分类规则文件的作用就在这里。三类规则分别对应实证流程的三段:

文件 适用对象 典型内容
data-processing.md 清洗脚本(02_clean.do 缺失值、异常值、面板平衡、频率对齐
regression-spec.md 主回归与稳健性(0405 固定效应、聚类层级、标准误格式
output-format.md 表格图形(06_tables_figs.do booktabs、星号标准、图形分辨率

下面给出 regression-spec.md 的完整内容,展示一份规则文件应有的粒度。

# regression-spec.md — 回归规范默认值

## 主回归命令

- 面板 DID:默认使用 `csdid`(Callaway-Sant'Anna),配合 `reghdfe` 作为 TWFE 对照
- 非面板 OLS:使用 `reghdfe` 或 `regress`,按研究场景选择

## 固定效应

- 双向 FE(同时吸收个体和时间两个维度)默认形式:`absorb(state_id year)`
- 若涉及行业层级,扩展为 `absorb(state_id year industry_id)`
- 固定效应不写成哑变量,一律用 `absorb()` 吸收

## 聚类层级

- 面板 DID 默认聚类于处理层级(通常是州):`vce(cluster state_id)`
- 若研究设计为"州-年对"结构,使用 `vce(cluster state_id year)` 双向聚类
- 不使用默认的 robust 标准误,必须显式声明聚类

## 标准误与显著性

- 系数 `b(3)` 保留 3 位小数
- 标准误 `se(3)` 保留 3 位小数
- 显著性星号:`star(* 0.1 ** 0.05 *** 0.01)`
- 括号内一律为聚类标准误,不使用默认 robust

## estimates store 规范

- 所有主回归结果必须 `estimates store`,命名格式:`[method]_[sample]`
- 例:`csdid_full`、`twfe_full`、`sdid_full`、`csdid_excl_large`
- 存好的 estimates 供 `esttab` 批量输出,避免重复运行

## 禁止事项

- 禁止在回归前对样本做未在 `02_clean.do` 声明的筛选
- 禁止在稳健性矩阵中悄悄改变聚类层级(会导致同一张表里不同列的标准误口径不一,无法横向比较)
- 禁止隐藏 `if` 条件,所有样本筛选必须留痕

这份规则文件的价值不在于内容有多深,而在于它把原本散落在研究者经验里的”默认做法”落成文字。Claude Code 在生成 04_main_reg.do 时会读取这份规则,自动把聚类标准误、固定效应吸收方式、estimates store 命名都按约定写进脚本。研究者只需审阅结果,不必反复提醒 AI 这些细节。

披露条款最小模板

如果你只想要一段可以直接贴到致谢里的文字,下面这版足够满足 AEA、QJE、ReStat 的当前政策。

The authors used Claude Code for data cleaning scripts, regression
code generation, and table formatting. All analyses were independently
verified by the authors. The AI tool was not used to generate research
design or interpret results.

中文版本(用于国内期刊):

本文使用 Claude Code 辅助完成数据清洗脚本、回归代码模板与表格图形
格式化工作。所有分析结果由作者独立核验。研究设计与结果解读未借助
AI 工具。

两段都不超过 60 词/80 字,满足最低披露要求。若 AI 承担了更多任务(如文献初筛、假设生成),需在方法脚注中补充说明。

references/ 方法论卡片

references/ 目录的作用是把研究者对某个方法的”诊断清单”沉淀为可查阅的文档。Claude Code 在执行 DID 估计 Skill 时会自动读取这些卡片,提醒研究者确认关键假设。最低工资项目里默认放三张卡片:DID 假设清单、IV 有效性清单、RDD 带宽选择。

这种卡片不是学术综述,每张控制在 50-100 字,格式统一:假设条款、检验方法、常见陷阱。下面是 did-checklist.md 的完整范例。卡片里出现的”SUTVA”、“Wild Bootstrap”、“渐进采纳负权重”等术语属于 DID 进阶专题,读者无需逐条理解——卡片的主要使用者是 Claude Code,它会在执行 DID 估计前读取这些条款,并在生成脚本前把对应的检查项以提示形式呈现给研究者。如果你想系统了解这些假设的统计含义,Cunningham 的开源教材 Causal Inference: The Mixtape 第 9 章和 Roth 等人 (2023, Journal of Econometrics) 的渐进 DID 综述是友好的入门材料。

# did-checklist.md — DID 设计关键假设清单

## 1. 平行趋势假设
- 条款:若无政策干预,处理组与控制组的结果变量应沿相同趋势演化
- 检验:事件研究图观察处理前各期系数是否显著偏离零
- 陷阱:处理前样本期过短(<3 期)无法有效检验

## 2. 无预期效应(No Anticipation)
- 条款:政策宣布到实施之间,处理组行为未提前调整
- 检验:事件研究图中 -1 期(政策前一期)系数是否显著
- 陷阱:渐进 DID 中不同处理组宣布期差异可能掩盖预期效应

## 3. SUTVA(无溢出效应)
- 条款:一个单位的处理不影响其他单位的结果
- 检验:地理相邻州之间的就业流动、溢出回归
- 陷阱:劳动力在州界自由流动时溢出不可忽视

## 4. 渐进采纳的负权重问题
- 条款:TWFE 在处理时点异质时可能赋予某些处理组负权重
- 检验:使用 Callaway-Sant'Anna 或 de Chaisemartin-d'Haultfoeuille 估计量对照
- 陷阱:传统 TWFE 系数可能与真实 ATT 符号相反

## 5. 聚类层级
- 条款:标准误聚类需与处理变量的变异层级匹配
- 检验:`vce(cluster state_id)` 是否与处理层级一致
- 陷阱:聚类单元过少(<30)时 Wild Bootstrap 更稳健

这张卡片的用法是:当研究者对 Claude Code 说”跑 DID 主回归”时,did-estimate Skill 会先加载这份卡片,在生成脚本前输出五条假设检查提示,请研究者逐条确认。哪一条假设当前研究无法满足,研究者可以当场指定补救方案——用 sdid 替代、缩短样本期、加入空间溢出控制。

词条:AEA DCAS v1.0

定义:AEA Data and Code Availability Policy 第一版(2024 年正式启用),规定投稿至 AEA 旗下期刊的论文必须提交完整复现包,包括原始数据(或获取说明)、清洗脚本、分析脚本、输出目录、README 和软件版本清单。

作用:为实证研究的项目组织提供了行业标准目录结构和元数据要求。Claude Code 的实证项目模板直接按这一规范构建,使得研究过程结束时的复现包整理工作从”事后补齐”变为”自然产出”。

这三类规则文件合起来构成项目的规则基座。CLAUDE.md 定约束大方向,.claude/rules/ 管具体写法,references/ 给研究者随时查阅的方法论诊断卡。三者协作,Claude Code 才能在实证项目中既高效又合规。