21.4 因果识别设计与估计

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

作者

李学恒、林建浩、严翊歆

发布于

2026-05-11

配图:因果识别方法选择决策树

本节进入八阶段流水线的阶段 5——主回归与因果识别执行。因果识别是研究者不能外包的判断:选择 IV 还是 DID、选 Callaway-Sant’Anna 还是传统 TWFE,是对研究问题、数据结构和识别假设的综合权衡。AI 在这件事上的定位很明确:在研究者选定方法后高效执行具体估计代码、生成对照结果、绘制事件研究图、维护多份规范的一致性。本节讲如何让 agent 协助方法选择而不越权、为什么渐进采纳情景要用 csdid 而不是 reghdfe、主回归 Skill 的标准模板长什么样,以及 LLM 在估计环节独有的训练数据泄漏风险。

方法选择决策树

研究者在设计阶段最常问自己的问题可以整理成一棵决策树。树的每个分叉都对应一组识别假设,选错了就意味着后续所有估计的可信度归零。

flowchart TD
    A[研究问题确立] --> B{有无明确的<br/>外生冲击变量?}
    B -->|是| C[工具变量 IV<br/>ivreg2 / ivreghdfe]
    B -->|否| D{有无阈值或<br/>断点规则?}
    D -->|是| E[断点回归 RDD<br/>rdrobust]
    D -->|否| F{有无处理时点<br/>变化的面板?}
    F -->|否| G[横截面或<br/>匹配方法]
    F -->|是| H{处理时点是否<br/>渐进采纳?}
    H -->|否, 单时点| I[传统 DID / TWFE<br/>reghdfe]
    H -->|是, 多时点| J{控制组数量?}
    J -->|充足| K[Callaway-Sant'Anna<br/>csdid]
    J -->|少于 5 个| L[合成控制 / SDID<br/>synth / sdid]

flowchart TD
    A[研究问题确立] --> B{有无明确的<br/>外生冲击变量?}
    B -->|是| C[工具变量 IV<br/>ivreg2 / ivreghdfe]
    B -->|否| D{有无阈值或<br/>断点规则?}
    D -->|是| E[断点回归 RDD<br/>rdrobust]
    D -->|否| F{有无处理时点<br/>变化的面板?}
    F -->|否| G[横截面或<br/>匹配方法]
    F -->|是| H{处理时点是否<br/>渐进采纳?}
    H -->|否, 单时点| I[传统 DID / TWFE<br/>reghdfe]
    H -->|是, 多时点| J{控制组数量?}
    J -->|充足| K[Callaway-Sant'Anna<br/>csdid]
    J -->|少于 5 个| L[合成控制 / SDID<br/>synth / sdid]

树只给出粗线条。真实研究里,每个节点还要追加细节:IV 的相关性和排他性是否站得住、RDD 的带宽如何选、DID 的平行趋势能否用事件研究可视化。这些判断不写在树上,而是写在 references/ 下的方法论卡片里——例如 did-checklist.mdiv-validity.mdrdd-bandwidth.md。每张卡片 50-100 字,列举该方法的关键假设和诊断命令,作为 Skill 执行前的参考材料。

让 agent 辅助方法选择

研究者不应当把”该用哪种方法”抛给 AI,但可以让 AI 在研究者的方法候选集上做辅助判断。做法是让方法选择 Skill 读取 references/ 下的方法论卡片,把研究问题映射到假设检查单,输出”推荐 X 方法的理由 + 需要研究者亲自确认的假设”。

▶ Claude Code
[用户]
我要研究美国各州最低工资调整对低薪就业的影响。数据是 QCEW 2000-2019
州-年面板,各州在不同年份提高最低工资。帮我判断用什么方法。
/method-advisor

[Claude Code]
读取 references/did-checklist.md 和 references/iv-validity.md。
根据你描述的设计,我的推荐如下:

推荐方法:Callaway-Sant'Anna (csdid)
三个支持理由:
1. 你有处理时点变化的州-年面板,符合多期 DID 结构
2. 各州提高最低工资的时点不同(渐进采纳),TWFE 会产生负权重
   问题(Goodman-Bacon 2021, de Chaisemartin-D'Haultfoeuille 2020)
3. 控制组充足(从未调整或延后调整的州)

需要你亲自确认的两个假设:
A. 平行趋势:处理前各州低薪就业趋势是否与从未调整组相似?
   建议用 event study 的 pre-period 系数目视检验。
B. 处理时点外生性:州决定提高最低工资是否与当期就业冲击相关?
   如果相关(例如州经济繁荣时涨工资),csdid 结果仍会偏。
   建议补一个排除经济衰退期的稳健性检验。

我不做最终决定,这两项请你判断后再进入主回归。

这段互动体现了几个原则。AI 给出的是有结构的建议,不是结论——三个支持理由来自文献、两个假设检查点对应 DID 的核心识别假设。AI 明确声明 “我不做最终决定”,把拍板权交回研究者。研究者即便采纳建议,也要自己在 event study 图上看 pre-period 平行、自己判断处理时点的外生性。这才是 HITL 的正确形态:AI 承担整理、对照、提醒的工作,研究者承担判断。

词条:渐进采纳设计(Staggered Adoption)

定义:多期 DID 中处理单元在不同时间点陆续接受处理的设计结构。

作用:区别于所有处理单元同时接受处理的经典双期 DID。美国各州最低工资调整、各省房产税试点、各国加入 WTO 都属于此类。

关键风险:传统 TWFE 估计量在这类设计下会产生负权重,即某些处理单元的处理效应会被”减去”而非”加上”,导致系数方向甚至可能反向。Callaway-Sant’Anna、de Chaisemartin-D’Haultfoeuille、Sun-Abraham 三套方法均针对此问题提出修正。

Callaway-Sant’Anna vs TWFE

词条:本节涉及的三个本科计量术语

TWFE(双向固定效应):Two-Way Fixed Effects,回归同时吸收个体(如州)和时间(如年)两个维度的固定效应,模型形如 y_it = α_i + δ_t + β·D_it + ε_it。是 DID 估计最常用的实现形式之一。当处理时点不一致(不同州在不同年份接受政策)时,传统 TWFE 在 staggered DID 文献中已被证明可能给出有偏估计,需要换用 Callaway-Sant’Anna 等专门估计量。

平行趋势假设:DID 设计的核心识别假设。若没有政策干预,处理组和控制组的结果变量在时间维度上应沿相同的趋势演化。该假设本身无法直接检验,事件研究图(event study)只是间接诊断:处理前各期系数接近零是间接支持,前期系数显著偏离零则是明确的否定证据。

聚类标准误:当样本中存在组内相关(如同一州不同年份的观测互相关联)时,传统标准误会低估实际不确定性。聚类标准误(cluster-robust SE)按某一层级(如州)重新计算方差,把组内相关纳入。聚类层级须与处理变量变异的层级匹配——最低工资 DID 中处理在州层面变化,标准误也聚类于州。

渐进采纳设计下,传统 TWFE(reghdfe y treat, absorb(i t))和 Callaway-Sant’Anna(csdid)会给出不同结果。差异来自权重处理方式。

维度 TWFE(reghdfe) Callaway-Sant’Anna(csdid)
核心估计量 单一系数 β 分组分期 ATT(g,t)
权重处理 隐式加权,可能产生负权重 显式按处理组-时期聚合,非负权重
控制组选择 所有未处理观测(含已处理组的前期) 可选”从未处理”或”尚未处理”
事件研究 需手动生成 leads/lags 系数 estat event 一行输出
适用场景 单时点处理、同步处理 渐进采纳、处理时点异质
速度 慢(需估计多个 ATT(g,t))

ATT(g,t) 的直觉是:把所有接受处理的单元按首次处理年份 g 分组,再对每组单独估计各期 t 的处理效应,最后用研究者指定的聚合权重合并成汇总估计量。这样做的好处是每个处理组只和它自己的合适对照组比较,不会把已经处理过的单元错误地拿来做对照。

两者不是相互替代,而是在报告里并列呈现。主回归用 csdid,作为方法论升级;reghdfe 结果放对照栏,展示 “如果用传统方法,结果长这样”。两者若差异很大,要在正文说明为什么选 csdid——这是典型的稳健性讨论。

csdid 与 TWFE 的差异一句话

TWFE 在渐进采纳下会把已处理组当作新处理组的控制组,而新处理组的处理效应被用负权重减掉;csdid 只用”尚未处理”或”从未处理”的单元作对照,权重非负,结果更稳健。

主回归 Skill 的完整范例

把因果估计封装成 Skill 的好处是规范固化。每次跑主回归都走同一套步骤:读面板、跑 csdid、跑 reghdfe 对照、画事件研究图、落盘暂存。AI 按 Skill 执行,研究者在关键节点审阅。下面是 did-estimate.skill 的完整内容。

▶ Skill
---
name: did-estimate
description: 对已清洗面板执行 Callaway-Sant'Anna DID 主回归,并生成 TWFE 对照、事件研究图和估计存档。触发关键词:主回归、DID、csdid、event study、平行趋势。
---

# DID 主回归执行步骤

## 前置检查

在执行估计前,向用户输出主回归规范摘要,等待确认:

- 面板文件路径(默认 data/processed/panel_balanced.dta)
- 结果变量(默认 log_emp)
- 处理变量(gvar,首次处理年份;控制组编码为 0)
- 个体维度(ivar,默认 state_id)
- 时间维度(tvar,默认 year)
- 聚类层级(默认 vce(cluster state_id))
- 控制变量集(默认无控制,作为基准规范)

用户回复"确认"后再进入执行。

## 执行步骤

1. 读取清洗面板,isid 守卫主键,assert 样本量符合预期
2. 运行 csdid,以 notyet 选项指定"尚未处理"为对照组
3. 依次运行 estat simple / estat group / estat calendar / estat event
4. 调用 csdid_plot 生成事件研究图,保存至 output/figures/fig_event_study.pdf
5. 运行 reghdfe 作对照,absorb(state_id year),同一聚类规范
6. estimates store cs_main 和 twfe_main,供 esttab 后续调用
7. 将所有输出追加到 output/logs/main_reg_log.txt

## HITL 输出

执行结束后向用户呈现:
- 主回归规范摘要(ATT 点估计、聚类后 SE、N、状态数)
- 事件研究图路径
- csdid 与 reghdfe 的系数差异百分比
- 平行趋势目视检验建议:查看 pre-period 系数是否接近 0

用户确认前不推进到稳健性检验。

Skill 的结构有三点值得留意。第一,前置检查把所有规范性决策(变量、聚类、控制变量)在执行前集中呈现给研究者,避免 AI 用默认值偷偷改变规范。第二,执行步骤是可重复的,每次主回归走同一套流程,不同研究项目只改输入变量名。第三,HITL 输出不是执行完就交差,而是强制研究者在进入稳健性之前审阅主回归——这个检查点最贵,错了以后所有稳健性都要重跑。

核心 Stata 命令

Skill 背后是一段具体的 Stata 代码。落到 04_main_reg.do 里是这样:

* 04_main_reg.do : 主回归
version 18.0
set seed 20260417
use "data/processed/panel_balanced.dta", clear

* Callaway-Sant'Anna 主规范
csdid log_emp, ivar(state_id) tvar(year) gvar(g_first_treated) notyet wboot reps(999)
estat simple
estat group
estat calendar
estat event
csdid_plot, title("事件研究:最低工资调整对低薪就业") ///
    xlabel(-5(1)5) yline(0, lpattern(dash))
graph export "output/figures/fig_event_study.pdf", replace
estimates store cs_main

* 传统 TWFE 对照
reghdfe log_emp treat_indicator, ///
    absorb(state_id year) vce(cluster state_id)
estimates store twfe_main

* 并列输出
esttab cs_main twfe_main using "output/tables/tab_main.tex", replace ///
    b(3) se(3) star(* 0.1 ** 0.05 *** 0.01) ///
    booktabs label nonotes ///
    mtitles("CS-DID" "TWFE") ///
    title("主回归:最低工资对低薪就业的影响") ///
    addnotes("括号内为聚类在州层级的标准误。")

csdidnotyet 选项指定 “尚未处理”为对照组,这是渐进采纳情景里更干净的对照设定。estat event 输出处理前后各期的 ATT 动态路径,直接进入事件研究图。reghdfe 的聚类层级和 csdid 保持一致(都在州层级),两者系数可比。esttabbooktabs + nonotes 让输出直接进 LaTeX 论文,不再手工调格式。

训练数据泄漏与验证样本

方法选择与 Skill 封装都假设 AI 是一个听话的执行者。但 LLM 在估计环节有一个独有的风险:它可能在预训练时已经见过经典数据集或经典论文。当你让它”分析”Card-Krueger 1994 新泽西快餐业数据时,它给出的系数可能是它记住的原文系数,而不是从你数据里重新估出来的。

Ludwig, Mullainathan & Rambachan (2025) 把这称为 LLM 在预测(prediction)和估计(estimation)之间的角色混淆。LLM 可以是好的预测工具——给它一段文本,它能给出情感、主题、实体。但它不是好的因果估计工具——给它一张回归表,它可能在复述记忆。两者的混淆会让研究结论建立在虚假的”独立验证”上。

训练数据泄漏的识别与防范

风险场景:让 LLM 直接”分析”Card-Krueger 1994、Angrist 1990、Autor-Dorn-Hanson 2013 等经典文献的公开数据集,并报告系数或显著性结论。模型可能从记忆里调取原文结果,而不是真正从数据中估计。

识别方法(Ludwig-Mullainathan-Rambachan 2025 验证样本流程): 1. 在 LLM 几乎肯定未见过的数据上重跑同一分析——例如把时间窗口推到预训练截止日之后的新数据 2. 或者对数据做不可逆的扰动(如随机抽样、变量重命名、单位变换)后再让 LLM 分析 3. 对比两次结果:若显著发散,说明原结果含记忆成分

Claude Code 中的防范: - 让 AI 只执行代码(csdidreghdfe),不要让 AI 替你 “解读数字” - 主回归结果的经济显著性判断由研究者亲自做 - 稳健性检验里加入 “推后样本”(例如 2020-2023)作为一列——LLM 未见过的时段,如果系数仍稳定,说明结果不是记忆复述 - 在 CLAUDE.md 中明确:AI 只生成代码和表格,系数解读、假设判断、稳健性结论由研究者撰写

这条防范措施不只是原则性规定,也是审稿人和期刊日益重视的议题。AEA 2025 政策和部分期刊已经要求作者在披露中说明 “哪些结果由 AI 解读、哪些由作者独立核验”。把这条界线画在 “AI 跑代码、人读数字”的位置,既能让 AI 承担执行工作,又能把判断保留给研究者,是当前最稳妥的协作范式。