关于 causal-inference-mixtape
基于 Scott Cunningham 的 *Causal Inference: The Mixtape* 构建的因果推断技能,面向实践者。提供 Python、R 和 Stata 的十种识别策略代码模板,并涵盖方法选择与稳健性检验。
主要功能
- 01十种识别策略的代码模板
- 02Python、R 和 Stata 示例
- 03跨语言方法对照
- 04方法选择指引
- 05按方法整理的稳健性检验
- 06可复用的实现与检验提示词
适用场景
- 01用首选语言实现因果设计
- 02比较不同语言中的等效估计方法
- 03为 DiD、IV 或 RDD 分析选择检验
- 04根据研究数据调整代码模板
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ brycewang-stanford/ auto-empirical-research-skills --skill causal-inference-mixtape安装后在 Claude Code 中输入/causal-inference-mixtape确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README-original.mdprompts/01-implement-method.md02-robustness-checks.mdreferences/method-patterns.mdr-stata-comparison.md详细介绍
因果推断:Mixtape — 代码技能
面向实践者的因果推断技能,基于 Scott Cunningham 的 Causal Inference: The Mixtape 仓库构建。涵盖 10 种识别策略,并提供可直接运行的 Python、R 和 Stata 代码模板。
涵盖的方法
| 方法 | Python | R | Stata | 参考 |
|---|---|---|---|---|
| OLS / 回归 | statsmodels | estimatr | reg/reghdfe | references/method-patterns.md §1 |
| 双重差分 | statsmodels + C() | lfe/fixest | xtreg/reghdfe | references/method-patterns.md §2 |
| 事件研究(动态 DiD) | 手动设置 lead/lag | estimatr | reghdfe | references/method-patterns.md §3 |
| 错位实施的 DiD / TWFE | statsmodels | bacondecomp | bacondecomp | references/method-patterns.md §4 |
| 回归不连续设计 | statsmodels 多项式 | rdrobust | rdplot/rdrobust | references/method-patterns.md §5 |
| 工具变量 | linearmodels IV2SLS | AER/ivreg | ivregress 2sls | references/method-patterns.md §6 |
| 合成控制 | rpy2 → R Synth | Synth + SCtools | synth | references/method-patterns.md §7 |
| 匹配 / PSM / IPW | 手动 logit + 权重 | MatchIt + Zelig | teffects/cem | references/method-patterns.md §8 |
| DAG / 碰撞变量偏差 | dagitty(概念性) | dagitty/ggdag | — | references/method-patterns.md §9 |
| 随机化推断 | 置换循环 | ri2 | ritest | references/method-patterns.md §10 |
核心工作流
实施因果推断方法
- 从上表中确定所用方法
- 从
references/method-patterns.md加载相应模板 - 根据用户数据调整变量名称、固定效应和聚类设置
- 添加稳健性检验(DiD 检验平行趋势,RDD 检验 McCrary,IV 检验第一阶段 F 值)
选择合适的语言
| 场景 | 建议 |
|---|---|
| 集成 ML 流水线 | Python(statsmodels + linearmodels) |
| 合成控制 | R(Synth 包)或 Stata(synth)——Python 缺少成熟实现 |
| Bacon 分解 | R(bacondecomp)或 Stata——没有对应的 Python 实现 |
| 可用于发表的表格 | Stata(outreg2/esttab)或 R(stargazer/modelsummary) |
| 粗化精确匹配 | Stata(cem)或 R(MatchIt)——没有对应的 Python 实现 |
| 快速原型开发 | 使用 statsmodels 的 Python |
跨语言等效实现
| 任务 | Python | R | Stata |
|---|---|---|---|
| 使用稳健标准误的 OLS | smf.ols().fit(cov_type='HC1') | lm_robust() | reg y x, robust |
| 聚类标准误 | fit(cov_type='cluster', cov_kwds={'groups': g}) | `felm(y ~ x | 0 |
| 双向固定效应 | 公式中的 C(id) + C(time) | `felm(y ~ x | id + time)` |
| IV / 2SLS | IV2SLS.from_formula('y ~ 1 + exog + [endog ~ inst]') | `ivreg(y ~ exog | inst)` |
| DiD | C(treat)*C(post) | 公式中的 treat:post | did_multiplegt 或交互项 |
关键 Python 模式
使用聚类稳健标准误的 DiD
import statsmodels.formula.api as smf
model = smf.ols('y ~ C(treated)*C(post) + controls', data=df)
results = model.fit(cov_type='cluster', cov_kwds={'groups': df['firm_id']})
事件研究(Lead/Lag)
# Create relative time dummies
for k in range(-4, 5):
col = f'rel_{k}' if k >= 0 else f'rel_m{abs(k)}'
df[col] = (df['relative_time'] == k).astype(int)
# Drop t=-1 as reference
formula = 'y ~ ' + ' + '.join([c for c in rel_cols if c != 'rel_m1']) + ' + C(id) + C(year)'
IV / 2SLS
from linearmodels.iv import IV2SLS
model = IV2SLS.from_formula('y ~ 1 + exog + [endog ~ instrument]', data=df)
results = model.fit(cov_type='clustered', clusters=df['cluster_var'])
稳健性检验模式
| 方法 | 必要的检验 |
|---|---|
| DiD | 平行趋势(事件研究图),安慰剂处理日期 |
| RDD | McCrary 密度检验,带宽稳健性(IK 最优带宽的一半/两倍),多项式稳健性 |
| IV | 第一阶段 F > 10,排除限制论证,过度识别检验 |
| 合成控制 | 处理前 RMSPE,安慰剂分布,逐一剔除检验 |
| 匹配 | 协变量平衡表,卡钳敏感性 |
常见误区
- 采用错开的处理时点时使用 TWFE — 当处理时点不同时,标准双向固定效应估计会产生偏差。请使用 Bacon 分解或 Sun & Abraham / Callaway & Sant'Anna 估计量。
- 有许多处理组单位时使用合成控制法 — Synth 软件包仅支持一个处理组单位。若有多个处理组单位,请使用增强型合成控制法或堆叠方法。
- 未进行 McCrary 检验就使用 RDD — 估计前务必检验临界值处是否存在操纵。
- IV 弱工具变量 — 报告第一阶段 F 统计量。低于 10 表明存在弱工具变量偏差。
- Python Synth 缺失 — 目前没有成熟的 Python Synth 软件包。可使用
rpy2在 Python 中调用 R 的Synth。
补充资源
参考文件
references/method-patterns.md— 10 种方法的详细代码模板及完整示例references/r-stata-comparison.md— 跨语言软件包比较及方法覆盖缺口
提示词文件
prompts/01-implement-method.md— 可复制粘贴的提示词,用于实现任意因果推断方法prompts/02-robustness-checks.md— 可复制粘贴的提示词,用于生成稳健性检验代码
评论
支持 Markdown