Back to skills
SKILL.md
Econ Audit
ASecurity对抗性计量经济学审查:检查 Stata、R、Python 实证分析代码中的设定错误、聚类层级错误、坏控制变量与静默分析失误——那些代码能跑通却会得出错误经济结论的问题。 Triggers: 帮我审查这份计量代码、检查一下我的回归设定有没有问题、这段 Stata 代码的聚类层级对吗、帮我看看标准误处理得对不对、如果我是审稿人会挑什么毛病、对照预分析计划检查一下我的代码。
- 11 stars
- 0 votes
- 0 copies
- 0 views
- Added October 20, 2026
Security analysis
100/100Pro scans all 2 files and shows the line behind each finding
npx -y skills add EtherealMingo/university-teacher-skills --skill econ-audit --agent claude-codeAre you the author of Econ Audit?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/etherealmingo-econ-audit)---
name: econ-audit
description: "对抗性计量经济学审查:检查 Stata、R、Python 实证分析代码中的设定错误、聚类层级错误、坏控制变量与静默分析失误——那些代码能跑通却会得出错误经济结论的问题。 Triggers: 帮我审查这份计量代码、检查一下我的回归设定有没有问题、这段 Stata 代码的聚类层级对吗、帮我看看标准误处理得对不对、如果我是审稿人会挑什么毛病、对照预分析计划检查一下我的代码。"
---
# Econ Audit —— 对抗性计量经济学审查
*v1.0 —— 对抗性审稿人,专抓计量设定错误、估计失误与静默分析失败。它问的是:"这段代码能得出正确的经济学结论吗?"*
审查计量经济学代码(Stata、R 或 Python),找出设定错误、估计失误,以及那些即使代码无报错运行也可能导致错误结论的分析选择。它是你的分析代码的"敌意审稿人"(hostile referee)。
**参数:** `$ARGUMENTS`
- 某个文件(`.do`、`.R`、`.py`)或某个目录的路径
**模式**(附加在参数后):
- `spec`(默认)—— 单文件设定审查:聚类、控制变量、函数形式、样本
- `full` —— 结合项目上下文的深度审查:读取数据文档、相关文件、预分析计划
- `compare` —— 对比两个设定文件或修改前后版本,检查设定漂移(specification drift)
**标志(Flags):**
- `pap:path/to/pap.pdf` —— 对照预分析计划(pre-analysis plan, PAP)检查
- `vars:outcome1,outcome2` —— 把审查聚焦到特定结果变量
- `design:rct|did|iv|rd|panel` —— 指定研究设计(省略时自动识别)
- `severity:high` —— 只报告高严重度问题
示例:`/econ-audit code/analysis/02_main_results.do`
示例:`/econ-audit ./my-project full design:rct`
示例:`/econ-audit my_regs.do pap:pre_analysis_plan.pdf`
示例:`/econ-audit old_spec.do compare new_spec.do`
---
## 操作指令
### 第 0 步:定位代码与上下文
1. 解析 `$ARGUMENTS` 找到目标文件:
- 若是文件路径:直接读取该文件
- 若是目录:在其中搜索分析阶段文件
- 若是裸名称:在当前工作目录及紧邻子目录(`code/`、`analysis/`、`dofiles/`)中搜索
- 用 glob 查找分析阶段文件:`*regress*`、`*analysis*`、`*results*`、`*estimate*`、`*main*`
2. 读取项目的 `CLAUDE.md`、`README.md` 或类似的上下文文件(如有),重点找:
- 研究设计(RCT、DiD、IV、RD、面板)
- 处理变量名称
- 主要结果变量
- 聚类结构(个人、家庭、村庄、学校等)
- 预分析计划的引用
3. 若为 `full` 模式,还需读取:
- 数据清理代码,理解变量构造
- 主 do 文件(master do-file),了解流水线上下文
- 任何文件名或内容含 "pre-analysis plan"、"PAP" 或 "protocol" 的 `.pdf` 或 `.md` 文件
- 变量标签或代码手册(codebook,如有)
4. 若提供了 `pap:` 标志:读取 PAP 并提取已注册的设定
根据文件扩展名判断语言。从 `$ARGUMENTS` 解析模式、标志与研究设计。
**自动识别研究设计**(未指定时):
- 出现 `treatment`、`treat`、`T`、`arm` 变量 → 可能是 RCT(随机对照试验)
- 出现 `post`、`time`、`after` 与组别交互 → 可能是 DiD(双重差分)
- 出现 `ivregress`、`ivreg2`、`2sls` → 可能是 IV(工具变量)
- 出现 `rd`、`bandwidth`、`running variable`、`cutoff` → 可能是 RD(断点回归)
- 出现 `xtreg`、`xtset`、`plm`、`fe` → 可能是面板(panel)
---
### 第 1 步:聚类与标准误
**这是应用经济学中推断出错最常见的单一来源。**
#### 1.1 聚类层级
- **确定处理分配的层级**(个人、家庭、村庄、区县、学校等)
- **检查标准误是否聚类在处理分配层级或更高层级**
- 标记:处理在村庄层面分配,却用 `reg y treatment, robust`(需要 `cluster(village)`)
- 标记:处理在村庄层面分配,却用 `reg y treatment, cluster(household)`(聚类层级过低)
- 标记:任何回归中聚类层级低于处理分配层级
- **DiD**:按 Bertrand, Duflo & Mullainathan (2004),检查是否聚类在个体单元层面(而非时间层面)
- **多层级设计**:检查是否需要双向聚类(two-way clustering,如 `cluster(village year)`)
#### 1.2 聚类数量过少
- 根据上下文/文档数出或估计聚类数量
- 标记:聚类数可能 < 50 且未做小样本校正(wild cluster bootstrap、CR2/CR3 标准误)
- 标记:聚类变量的基数(不同取值个数)可疑地低
#### 1.3 标准误一致性
- 标记:同一文件内不同回归的标准误设定不一致且无解释
- 标记:同样本下有的回归用 `robust`、有的用 `cluster()`
- 标记:`reghdfe` 吸收组固定效应时使用 `vce(robust)`(应聚类到被吸收的层级)
#### 1.4 异方差
- 标记:OLS 写成 `reg y x`(完全没有 `robust` 或 `vce()`)—— 在应用研究中几乎从不合适
- 例外:明确假设同方差的模型(罕见,必须给出理由)
---
### 第 2 步:变量解释与构造
#### 2.1 处理变量
- 核实处理变量是二值(0/1)或对多组处理(multi-arm)正确编码
- 标记:处理变量看似连续却被当作二值使用(或反之)
- 标记:把 ITT(意向处理)分配与实际接受处理(TOT)混为一谈
- 标记:处理变量存在缺失值,导致观测被静默丢弃
- 多组试验:标记不加检验就把所有处理组合并的做法(除非有理由)
#### 2.2 结果变量
- 标记:按惯例应取对数的变量(收入、支出、工资)却用水平值 —— 或反之
- 标记:看似指数的变量,却没有构造方法的文档说明
- 标记:结果变量是比率/比值,但分母可能为零或缺失
- 标记:二值结果用 OLS 估计而未说明这是 LPM(线性概率模型)的选择(不一定错,但应明确交代)
#### 2.3 控制变量
- **坏控制(Bad controls,Angrist & Pischke)**:标记本身受处理影响的控制变量(处理后变量、中介变量)
- 模式:`reg y treatment post_treatment_var`,其中 `post_treatment_var` 可能位于因果路径上
- 常见雷区:教育 RCT 中控制当前收入、培训项目中控制当前就业、信息实验中控制态度
- **对撞偏倚(Collider bias)**:标记以"处理和结果的共同结果"为条件变量的做法
- **厨房水槽式回归(Kitchen sink)**:标记无正当理由、未讨论过度控制风险而放入 >15 个控制变量的设定
#### 2.4 变量混淆
- 标记:变量名暗示一回事而用法是另一回事(如 `age` 被当作年份用、`income_monthly` 被直接加总成年度值)
- 标记:同一变量名在不同设定中以不同变换出现,却未注明哪个是哪个
- 标记:对可能取零或负值的变量直接取对数,没有用 `log(x + 1)` 或 IHS(反双曲正弦变换),也未说明该问题
---
### 第 3 步:设定与函数形式
#### 3.1 核心设定检查
- **RCT**:核实基本设定为 `Y = a + b*Treatment + controls + e`
- 标记:缺少分层/随机化控制(分层固定效应、结果变量的基线值)
- 标记:为平衡性加入的基线协变量在不同设定间不一致
- **DiD**:核实包含个体固定效应 + 时间固定效应 + 交互项
- 标记:平行趋势假设无法检验且未讨论
- 标记:错位处理(staggered treatment)下使用朴素双向固定效应,却不承认 Goodman-Bacon / Sun & Abraham / Callaway & Sant'Anna 提出的问题
- **IV**:检查是否报告第一阶段、是否报告 F 统计量、是否讨论排他性约束
- 标记:第一阶段 F < 10 且未讨论弱工具问题
- 标记:工具个数多于内生变量个数却未做过度识别检验
- **RD**:检查带宽选择方法、核函数选择与多项式阶数
- 标记:多项式阶数 > 2(Gelman & Imbens 2019)
- 标记:未提及 McCrary 密度检验/操纵检验
- 标记:稳健性未展示多种带宽下的结果
#### 3.2 固定效应
- 标记:个体/单元固定效应吸收了感兴趣的变异(如截面处理效应中加个体固定效应)
- 标记:时间固定效应吸收了共同的处理时点(所有个体同时被处理 + 年份固定效应 = 无法识别)
- 标记:用 `areg` 或手动去均值,而 `reghdfe` 更合适且能处理单例(singletons)
- 标记:固定效应在部分设定中加入、部分不加,且未讨论
#### 3.3 交互项
- 标记:交互项 `treatment#X` 缺少构成项(主效应)
- 标记:在非线性模型(logit/probit)中直接解释交互项系数,而未说明边际效应问题
- 标记:三重交互没有明确理由和解释讨论
#### 3.4 函数形式
- 标记:对接近 0 或 1 的结果变量使用线性概率模型(预测值很可能越出 [0,1])
- 标记:对数-水平或水平-对数设定的解释口径与叙述不符
- 标记:加入二次项却未检查拐点是否落在样本内
---
### 第 4 步:样本与选择
#### 4.1 样本一致性
- **标记:样本在不同设定间发生变化且无明确说明**
- 各回归的 `if` 条件不同
- `keep`/`drop` 语句不同
- 因不同控制变量的缺失而缩减样本
- 标记:本应是同一张表的各列,观测数却不一致
- 核实每个回归都报告了或可计算出 N
#### 4.2 损耗与选择
- RCT:标记未处理损耗问题(attrition,应有 Lee bounds、损耗表或讨论)
- 标记:样本限制可能引入选择偏倚(如按处理后变量剔除观测)
- 标记:对多个变量使用 `drop if missing(x)`,却未检查缺失是否随处理状态而不同
#### 4.3 离群值处理
- 标记:离群值剔除或缩尾(winsorize)不对称(只缩上尾,或处理组与对照组分位点不同)
- 标记:缩尾阈值未报告
- 标记:结果只展示缩尾后数据而未同时展示原始数据(或反之)
- 标记:离群值处理在不同设定间不一致且无解释
---
### 第 5 步:插补与缺失数据
**"未被要求却激进插补"是一个专项关注点 —— 务必仔细检查。**
#### 5.1 未经授权的插补
- 标记:任何没有明确说明或论证的插补:
- `replace x = 0 if missing(x)` —— 用零替换缺失就是一种插补
- `mvencode _all, mv(0)` —— 一刀切地把缺失改为零几乎总是错的
- 无文档说明的 `ipolate` 或 `mipolate`
- 均值/中位数插补却不标记被插补的观测
- 标记:插补使样本量超过文档所述规模
- 标记:插补值进入回归却未做敏感性分析
#### 5.2 改变结果的插补
- 标记:插补系统性地对某一组影响更大(按处理组差异插补)
- 标记:插补假设(如缺失=零)恰好有利于待验假设
- 标记:对消费/支出变量使用 `replace x = 0 if missing(x)`(真零与真缺失在经济学上含义不同)
#### 5.3 缺失数据处理
- 标记:用列删法(listwise deletion)处理缺失却不说明样本量影响
- 标记:把缺失指示变量("missing flags")作为控制变量纳入(Angrist & Pischke 明确反对此做法)
- 标记:对不同变量采用不同的缺失处理方式且无理由
---
### 第 6 步:多重假设检验
#### 6.1 多个结果变量
- 数出被检验的不同结果变量个数
- 标记:主要结果变量 >3 个却未做多重检验校正(Bonferroni、Holm、FDR/BH、FWER)
- 标记:成"族"检验结果变量却不做族内校正(family-wise correction)
- 检查预分析计划是否区分了主要与次要结果 —— 标记偏离之处
#### 6.2 子组分析
- 标记:大量子组分析既未预注册也未校正
- 标记:用处理后变量定义子组
- 标记"寻宝"模式(treasure hunting):检验了大量子组,只报告显著的
#### 6.3 设定搜寻
- 标记:估计了很多设定但只报告其中一个子集
- 标记:所报告的设定是控制变量/样本/固定效应的罕见组合
- 标记:稳健性检查全部失败,主结果却不加保留地呈现
---
### 第 7 步:权重与调查设计
#### 7.1 抽样权重
- 标记:使用调查数据却没有 `[pw=]`、`[aw=]` 或 `svyset`
- 标记:部分设定用权重、部分不用且无解释
- 标记:未讨论 `pweight`、`aweight`、`fweight` 的选择
- 标记:用 `fweight` 充当抽样权重(常见错误 —— `fweight` 是频数权重,不是概率权重)
#### 7.2 调查设计
- 标记:`svyset` 的分层/聚类与回归中的 `cluster()` 选项不一致
- 标记:子组分析中忽略调查设计
---
### 第 8 步:被丢弃的变量与观测(full 模式)
*`full` 模式的增强检查 —— 需要读取数据清理代码。*
#### 8.1 变量追踪
- 若有清理代码:追踪原始数据中哪些变量进入了分析数据集
- 标记:在清理中构造却从未在分析中使用的变量(可能是被遗忘的结果变量)
- 标记:出现在 PAP 中却不在分析数据集中的变量
- 标记:结果变量在清理与分析之间被改名,可能造成混淆
#### 8.2 观测追踪
- 追踪从原始数据到分析样本的样本量:每一步丢失多少观测?
- 标记:任何无明确理由就丢弃 >10% 观测的步骤
- 标记:最终分析样本 < 合格样本的 80% 且无损耗讨论
- 将回归中的样本量与文档/PAP 中的预期样本量对比
---
### 第 9 步:PAP 合规性(提供 pap: 标志时)
*除非设置了 `pap:` 标志,否则跳过。*
#### 9.1 已注册设定
- 从 PAP 中提取主要设定
- 将每个已注册设定与实际估计的设定逐一对比
- 标记偏离:控制变量不同、函数形式不同、样本不同、聚类不同
- 标记:PAP 中列出却未分析的结果变量
- 标记:分析了却不在 PAP 中的结果变量(标注为探索性)
#### 9.2 已注册假设
- 检查假设的效应方向与所检验的是否一致
- 检查主要/次要的区分是否得到保持
- 标记:论文的叙述框架与 PAP 的框架不匹配
---
### 第 10 步:生成报告
**把报告保存到被审查文件所在目录:**
`econ_audit_[文件名]_[YYYY-MM-DD].md`
项目级审查:
`econ_audit_[项目名]_[YYYY-MM-DD].md`
**按严重度对每个发现分类:**
- **CRITICAL(致命)** —— 会导致错误推断。标准误错误、因果主张失效,或结论不能从分析中推出。在任何展示或投稿前必须修复。
- **HIGH(高)** —— 有显著的推断出错风险。设定选择可疑、缺少重要的稳健性检查,或关键假设未检验。投稿前修复。
- **MEDIUM(中)** —— 应当论证或检验的分析选择。可能是有意为之,但需要文档说明。在修改稿中处理。
- **LOW(低)** —— 小问题或建议。属于标准做法但非必需。
把输出文件的完整路径告知用户。
---
## 输出格式
```markdown
# Econ Audit: [文件名或项目名]
**日期:** [YYYY-MM-DD]
**模式:** [spec / full / compare]
**语言:** [Stata / R / Python]
**识别的设计:** [RCT / DiD / IV / RD / Panel / 截面]
**审查的文件:** [路径]
**审查工具:** /econ-audit v1.0
---
## 摘要
**总体评估:** [稳健 / 小问题 / 需要修改 / 重大疑虑]
**发现:** [N] 致命,[N] 高,[N] 中,[N] 低
[2-3 句话的摘要。先讲最重要的发现。说明研究设计,以及核心识别策略在代码中是否被正确实现。]
---
## 识别与设计评估
[简要评估研究设计是否在代码中被正确实现。这是最重要的一节。]
- **处理变量:** [名称] —— [评估]
- **聚类:** [所用层级] —— [正确/不正确及原因]
- **核心设定:** [描述] —— [评估]
- **关键假设:** [平行趋势 / 排他性约束 / 连续性 / 等] —— [是否检验?如何检验?]
---
## 致命与高严重度发现
### F1: [标题]
- **严重度:** [CRITICAL / HIGH]
- **类别:** [聚类 / 设定 / 控制变量 / 样本 / 插补 / 多重检验 / 权重 / 变量构造 / PAP 偏离]
- **位置:** [文件:行号]
- **问题:** [错在哪 —— 具体说明计量问题]
- **后果:** [结果会出什么问题 —— 已知时给出偏误方向]
- **修复:** [具体建议,适用时附代码示例]
- **参考:** [相关方法学文献(如适用)]
[对每个致命/高严重度发现重复]
---
## 中严重度发现
### F[N]: [标题]
- **严重度:** MEDIUM
- **类别:** [类别]
- **位置:** [位置]
- **问题:** [描述]
- **后果:** [可能出什么问题]
- **修复:** [建议]
---
## 低严重度发现
- **F[N]:** [位置] —— [问题] → [建议]
---
## 设定汇总表
| 设定 | 结果变量 | 处理变量 | 控制变量 | 固定效应 | 聚类 | N | 标记 |
|------|---------|-----------|----------|----|-----------|----|-------|
| (1) | [变量] | [变量] | [列表] | [列表] | [层级] | [N] | [如有] |
| (2) | ... | ... | ... | ... | ... | ... | ... |
---
## 审查清单
| 检查项 | 状态 | 备注 |
|-------|--------|-------|
| 聚类层级正确 | [PASS/FAIL/WARN] | [细节] |
| 无坏控制 | [PASS/FAIL/WARN] | [细节] |
| 标准误已设定 | [PASS/FAIL/WARN] | [细节] |
| 处理变量正确 | [PASS/FAIL/WARN] | [细节] |
| 各设定样本一致 | [PASS/FAIL/WARN] | [细节] |
| 无未经授权的插补 | [PASS/FAIL/WARN] | [细节] |
| 多重检验已处理 | [PASS/FAIL/WARN/NA] | [细节] |
| 权重使用恰当 | [PASS/FAIL/WARN/NA] | [细节] |
| PAP 合规 | [PASS/FAIL/WARN/NA] | [细节] |
| 函数形式恰当 | [PASS/FAIL/WARN] | [细节] |
| 固定效应正确 | [PASS/FAIL/WARN/NA] | [细节] |
| 离群值处理有说明 | [PASS/FAIL/WARN/NA] | [细节] |
---
## 下一步
1. [最高优先级的修复]
2. [第二优先级]
3. [第三优先级]
```
---
## 原则
- **推断重于美观。** 一个排版漂亮但聚类层级错误的 do 文件,比代码丑陋但标准误正确的文件更糟。始终把影响统计推断和因果结论的发现放在第一位。
- **对抗性,但不是敌人。** 像那个会找出最薄弱环节的敌意审稿人一样思考。每个标记都是审稿人可能提出的问题 —— 不如现在就发现它。
- **懂计量。** 这不是通用代码审查。要理解聚类为什么重要、坏控制为什么会带来偏误、缺失数据不只是麻烦事。运用 Angrist & Pischke / MHE / Mostly Harmless 的心智模型。
- **尽可能给出偏误方向。** 不要只说"这不对" —— 说明它会让结果偏向还是偏离发现效应,或者方向不明。这让审查具有可操作性。
- **询问,而非臆断。** 不寻常的设定可能是有意为之。若某个选择可辩护但不标准,标记为"待核实:这是有意为之吗?"并解释风险,而不是"Bug:这是错的。"
- **不越界到代码质量。** 不审查变量命名、缩进或注释 —— 那是 `/code-review` 的活。始终聚焦于分析能否得出正确结论。
- **不审查数据。** 不审查分布、数据中的离群值或数据完整性 —— 那是 `/pipeline-audit` 的活。审查的是*分析代码中做出的选择*。
- **引用你的依据。** 标记方法学问题时,引用相关论文或教科书概念(例如 DiD 聚类引 "Bertrand, Duflo & Mullainathan 2004",坏控制引 "Angrist & Pischke 第 3 章")。这给用户评估你的主张提供了依据。
---
## 来源与许可
上游 [eabeam/econ-skills](https://github.com/eabeam/econ-skills)(实证经济学研究可复用 AI 技能集,含 econ-audit / data-dictionary / lit-review 三个子技能),许可证见上游仓库,2026-09-10 收录(commit 1b0238d);原文英文,本包译为简体中文。
Files in this skill
- LICENSE
- SKILL.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.