Agent Systems / Empirical Research
StatsPAI 助力实证研究:从数据与问题到经过审计的因果估计
把“跑个回归”变成 agent-native 工作流:识别设计 → 推荐估计量 → 拟合(handle) → 审计稳健性 → 敏感性 → 可核验引用。
先看这里
学完这一页你应该会什么
理解 agent-native 因果工作流:识别 → 推荐 → 拟合 → 审计 → 敏感性 → 引用。
会用 result handle(result_id)把估计串进下游工具,不用反复传 beta / sigma。
知道 audit 会枚举仍缺的稳健性检查,把识别从事后辩护变成清单。
会做至少一项敏感性分析(如 E-value),量化对未观测混淆的稳健程度。
坚持引用纪律:文献只来自可核验 bib,绝不让模型杜撰。
学习路径
学习路径:识别 → 推荐 → 拟合 → 审计 → 引用
按这条路径理解 StatsPAI:先识别设计,再推荐估计量,拟合拿到 handle,审计稳健性并做敏感性,最后用可核验引用收尾。
Step 1
Detect
数据形态 → 设计。
Step 2
Recommend
设计 → 稳健估计量。
Step 3
Fit
拟合返回 result handle。
Step 4
Audit
枚举缺失检查与覆盖率。
Step 5
Cite
只引可核验 bib。
01 / 直觉
核心直觉
大多数人把统计软件当“命令集合”:记住一堆命令。StatsPAI 把它变成“工作流”:先问这是什么设计,再问该用什么估计量。
识别永远先于估计:同一份面板,错把交错 DiD 当普通 TWFE 会有偏;先判定设计,才谈估计量。
result handle 是关键抽象:拟合一次得到 result_id,后续审计、敏感性、出表都引用它,证据链不断。
可信不是“跑出一个星号”,而是“审计覆盖 + 敏感性 + 可核验引用”——这与整门课的因果精神一致。
02 / 数学
agent-native 因果工作流的形式化
01 / 识别设计
把数据形态映射到设计:面板+交错处理→DiD,断点→RD,工具→IV,否则可观测选择。
02 / 推荐估计量
每种设计对应稳健估计量,避免误用(如交错处理下 TWFE 有偏)。
03 / 估计量(ATT)
多数政策评估的目标是处理组的平均处理效应。
04 / 结果 handle
拟合返回一个句柄,封装系数、方差与诊断,供下游工具引用。
05 / 审计覆盖
审计把识别变成清单:已完成检查占推荐检查的比例。
06 / 敏感性(E-value)
E-value 衡量未观测混淆需多强才能解释掉效应;越大越稳健。
03 / 代码
代码案例:从识别到审计的工作流
下面用纯 Python 模拟 StatsPAI 工作流的逻辑:识别设计、推荐估计量、用 handle 串联、审计覆盖、E-value 敏感性、引用纪律。真实项目用 StatsPAI MCP 工具。
案例 1:按设计推荐稳健估计量
识别出设计后,让 StatsPAI 推荐匹配的估计量,避免方法误用。
RECOMMEND = {
"staggered_did": "callaway_santanna",
"regression_discontinuity": "rdrobust",
"instrumental_variables": "ivreg",
"selection_on_observables": "dml",
}
design = "staggered_did"
print(f"design={design} -> recommended estimator: {RECOMMEND[design]}")
print("reason: TWFE is biased under heterogeneous treatment timing")预期输出
design=staggered_did -> recommended estimator: callaway_santanna
reason: TWFE is biased under heterogeneous treatment timing怎么读这段代码
- 交错处理下 TWFE 有偏,推荐 callaway_santanna。
- 设计驱动估计,是“用对方法”的第一步。
案例 2:用 result handle 串联估计与审计
拟合返回一个 result_id,下游审计直接引用它,不必反复传 beta / sigma。
results = {}
def fit(estimator, as_handle=True):
rid = f"res_{len(results)+1}"
results[rid] = {"estimator": estimator, "att": 0.073, "se": 0.021}
return rid
def audit_result(result_id):
r = results[result_id]
return {"id": result_id, "t_stat": round(r["att"] / r["se"], 2),
"missing": ["pretrends_test", "honest_did", "sensitivity"]}
rid = fit("callaway_santanna", as_handle=True)
print("handle:", rid)
print("audit:", audit_result(rid))预期输出
handle: res_1
audit: {'id': 'res_1', 't_stat': 3.48, 'missing': ['pretrends_test', 'honest_did', 'sensitivity']}怎么读这段代码
- handle 让证据链不断,多步分析不易出错。
- audit 直接基于 handle 给出 t 值与仍缺的检查。
案例 3:审计覆盖率把识别变成清单
把推荐的稳健性检查列成清单,已完成 / 仍缺一目了然。
recommended = {"pretrends_test", "honest_did", "sensitivity", "placebo", "cluster_se"}
done = {"pretrends_test", "cluster_se"}
coverage = len(done) / len(recommended)
print(f"robustness coverage = {coverage:.0%}")
print("still missing:", sorted(recommended - done))预期输出
robustness coverage = 40%
still missing: ['honest_did', 'placebo', 'sensitivity']怎么读这段代码
- 覆盖率 = 已做 / 推荐,识别从事后辩护变成飞行前清单。
- 缺口明确,就知道下一步补什么。
案例 4:E-value 敏感性分析
E-value 衡量未观测混淆需多强才能解释掉效应,越大越稳健。
import math
def e_value(rr):
if rr < 1:
rr = 1 / rr
return round(rr + math.sqrt(rr * (rr - 1)), 2)
for rr in (1.2, 1.5, 2.0):
print(f"RR={rr} -> E-value = {e_value(rr)}")预期输出
RR=1.2 -> E-value = 1.69
RR=1.5 -> E-value = 2.37
RR=2.0 -> E-value = 3.41怎么读这段代码
- E-value 随效应量增大而增大。
- 它把“会不会有遗漏变量”变成一个可报告的数字。
案例 5:引用纪律——拒绝杜撰文献
所有引用只能来自可核验 bib;不在库里的 key 一律拒绝。
VERIFIED_BIB = {
"callaway2021": "Callaway & Sant'Anna (2021), J. Econometrics",
"goodmanbacon2021": "Goodman-Bacon (2021), J. Econometrics",
}
def cite(keys):
out, bad = [], []
for k in keys:
(out if k in VERIFIED_BIB else bad).append(k)
return {"cited": [VERIFIED_BIB[k] for k in out], "rejected_invented": bad}
print(cite(["callaway2021", "smith2099"]))预期输出
{'cited': ["Callaway & Sant'Anna (2021), J. Econometrics"], 'rejected_invented': ['smith2099']}怎么读这段代码
- 模型最危险的不是“像机器”,而是杜撰看似真实的引用。
- bibtex(paper.bib 单一来源)是唯一可信来源。
04 / 案例
案例:用 StatsPAI 工作流评估一个交错推行的政策
- 问题:某政策在不同地区交错推行,想估计它对企业投资的平均处理效应,数据是地区-年面板。
- detect_design 判定为 staggered DiD;recommend 建议 callaway_santanna,因为交错处理下 TWFE 会因负权重而有偏。
- 拟合得到 result handle;audit_result 指出仍缺 pretrends、honest DiD、安慰剂等检查,并给出覆盖率。
- 补做敏感性(E-value / honest DiD)后,报告估计 + 区间 + 审计覆盖 + 敏感性 + limitations;所有引用走 bibtex,杜绝杜撰。
05 / 因果
通向因果:把整门课收束成一条可审计的流水线
StatsPAI 把前三周学的设计(DiD / IV / RD / 合成控制 / DML)统一成一条 agent-native 流水线:识别在前、估计在中、审计与敏感性在后、引用收尾。它是“用 AI 做因果”的落地形态。
01 / 设计驱动估计(design → estimator)
先判定设计,再让 StatsPAI 推荐匹配的估计量,避免方法误用。
02 / 证据链不断(handle → downstream)
用 result_id 把估计、审计、敏感性、出表、引用串成可复跑的证据链。
03 / 审计即识别(audit → checklist)
把识别假设变成审计清单,覆盖率可量化,缺口可补。
04 / 可核验引用(claim → citation)
每个结论都对应可核验的文献与代码,杜绝杜撰。
三条红线:(1) 识别来自设计,工具只换函数形式,不替你辩护假设;(2) 估计未经审计与敏感性不得当作结论;(3) 引用只走可核验 bib,模型不得杜撰文献。
06 / 风险
常见误区
配套资源
下载实操资料
参考资料
- StatsPAIhttps://www.statspai.com
- Callaway & Sant'Anna (2021), Difference-in-Differences with Multiple Time Periods, J. Econometricshttps://doi.org/10.1016/j.jeconom.2020.12.001
- VanderWeele & Ding (2017), Sensitivity Analysis in Observational Research: Introducing the E-Value, Annals of Internal Medicinehttps://doi.org/10.7326/M16-2607
- Athey & Imbens (2017), The State of Applied Econometrics: Causality and Policy Evaluation, JEPhttps://doi.org/10.1257/jep.31.2.3
- Model Context Protocolhttps://modelcontextprotocol.io