经济学因果推断

因果推断极简讲解,经济学常用。

相关 ≠ 因果:相关有 4 种可能——$X!\to!Y$(要的因果)、$Y!\to!X$(反向因果)、$U!\to!X$ 且 $U!\to!Y$(第三者混淆)、纯巧合。回归只证明一起变动,不证明谁影响谁。

每人同一时刻只能观测到一个结果($Y_i(1)$ 或 $Y_i(0)$),另一个是看不见的反事实;因果就是估计没发生过的结果,只能平均成两类: - ATE(平均处理效应):$E[Y(1)-Y(0)]$,对全体平均——处理在一般人身上值多少。 - ATT(处理组平均处理效应):$E[Y(1)-Y(0) X=1]$,只对实际被处理者平均——处理在真正受益的那批人身上值多少。政策评估更常看 ATT。

最理想状况下随机分配使 $X$ 与所有混淆变量独立,处理组减控制组的均值差即因果效应 $\hat{\tau}=\bar Y_T-\bar Y_C$,是黄金标准,但政策、制度、伦理问题大多做不了实验。

常用因果方法

控制变量法

  • 公式:$Y=\beta X+\gamma Controls+\varepsilon$
  • 逻辑:把能观测到的混淆变量全部放进回归里,固定这些条件后比较。
  • 缺陷:只能控制你观测到的变量。看不见的遗漏变量依旧会造成偏误,回归结果只能叫”条件相关”,不一定是因果。

工具变量 IV

  • 找一个外生变量 $Z$,$Z$ 只影响 $X$,不直接影响 $Y$。
  • 只用由 $Z$ 驱动的那部分 $X$ 的变动,去识别 $X \rightarrow Y$ 因果。
  • 两个前提:相关性、排他性约束。
  • 二元处理下 IV 估计出来是 LATE,依从者的平均因果效应。

双重差分 DID(Difference-in-Differences)

  • 用未收到政策冲击的个体/时间做对比,减去随时间的变化
  • 模型:$Y_{it}=\beta\,Treat_i\times Post_t +\dots$
  • $\beta$ 就是政策的因果效应。
  • 关键假设 平行趋势假设——不发生政策,两组变化趋势本来一样。

断点回归 RDD(Regression Discontinuity Design)

  • 适用:政策有一个清晰的分数线、门槛。
  • 例:高考 500 分以上上本科,500 以下不上。
  • 刚好分数线上下一小撮人,能力禀赋近似,仅仅因为一点点分数差别,决定是否接受处理。
  • 比较断点左右两边 $Y$ 的跳跃,就是局部因果效应。
  • RDD 识别的是断点附近的局部因果效应。

匹配法 PSM(倾向得分匹配)

  • 从控制组里,找和处理组各项特征非常像的样本做对照。
  • 先logit算倾向得分(每个样本被选入处理组的概率),再按照得分相近一对一匹配。
  • PSM 只能平衡可观测变量,不能解决不可观测遗漏变量问题。

最新因果推断方法

TODO

总结

所有非实验方法都有假设。论文因果结论,不是回归算出来的,是假设 + 故事 + 制度背景支撑出来的。假设不成立,结果依然只是相关。

论文写作一句话版

由于直接 OLS 估计存在遗漏变量、双向因果等内生性问题,系数仅反映相关关系。本文采用 XX 因果识别策略,利用 XX 外生冲击,在 XX 识别假设成立前提下,识别 X 对 Y 的因果效应。

分析

稳健性分析

验证主结果在条件变化下是否依然成立。常用做法:

  1. 替换核心变量度量方式(换权重、换口径)
  2. 更换样本区间/剔除异常样本
  3. 更换聚类层级、加入更多控制变量
  4. 补做安慰剂检验(placebo test)——如随机打乱处理时点或地区,系数应接近 0
  5. 换用替代的识别方法交叉验证(如 IV 换 DID、RDD 换局部多项式)

核心逻辑:主结论不能只依赖某一种设定,换一个角度依然显著才算稳健。

机制分析

回答”X 为什么影响 Y”,把 $X \rightarrow Y$ 的黑箱拆出可解释的传导路径,中间靠一个中介变量 M

  • 找 M:理论上想清楚 X 通过哪条路径影响 Y(靠理论,不是靠回归现找)
  • 理论支撑:用逻辑链条讲圆”为什么 X 推 M、M 又推 Y”
    步骤
    1. 检验 $X \rightarrow M$:把 M 当被解释变量回归,看 X 是否推得动 M
    2. 检验 $X \rightarrow Y$ 被削弱:把 M 加回原回归,若 X 的系数明显变小、M 显著,说明 X 部分经 M 传导
    3. Bootstrap 重抽样 B 次、取置信区间判显著性(区间不含 0 即显著)。

中介效应 = 两步系数乘积

常见被解释变量、解释变量、机制变量有:TODO

注意:M 需先于 Y、相对外生;机制检验是辅助证据,主因果仍靠 DID/IV/RDD。

异质性分析

探究效应是否在不同子群体间存在差异。

  1. 按群体分组:如性别、地区、企业规模、受教育程度
  2. 分组分别回归或加交互项 $Y=\beta X+\delta(X\times characteristic)+\dots$
  3. 若不同组系数差异明显,说明效应是”有条件的”,不是均匀的

意义:识别政策/因果效应落在谁身上,为针对性建议提供依据。

具体数字的例子

极其简单的例子。

因果推断

TODO

代码实现

套路:因果结论来自假设,代码只负责把识别策略翻译成回归命令。核心三步——① 构造变量(处理时点/地区/交互项)、② 跑主回归拿系数、③ 做稳健性、机制、异质性检验。

Stata(经济学实证主流,命令最简洁)

主回归(对应第 2 节各识别策略):

* 面板固定效应 → 先声明面板,absorb(id year) = 个体+时间双固定
xtset id year
reghdfe y x controls, absorb(id year) cluster(id)

* DID 双重差分 → did = treat*post,双向固定效应+聚类稳健标准误
use policy.dta, clear
gen did = treat * post
reghdfe y did, absorb(id year) cluster(id)

* IV 工具变量,z 为外生工具变量
ivreg2 y (x = z) controls, cluster(id)
estat firststage              // 看第一阶段显著性

* RDD 断点回归,500 为断点
rdrobust y x, c(500)

* PSM 倾向得分匹配
psmatch2 treat controls, out(y) logit neighbor(1) common

稳健性(换权重/换样本/换带宽/安慰剂):

rdrobust y x, c(500) bw(50)          // 换断点附近带宽
reghdfe y did, absorb(id year) cluster(province)   // 换聚类层级
* 安慰剂检验:随机打乱处理时点,系数应回归 0

机制、异质性:

* 异质性:加交互项 x*group,看分组系数差异
reghdfe y c.did#c.Size, absorb(id year) cluster(id)
* 机制:被解释变量换成中间变量 M,再看控制 M 后 x 对 y 是否减弱

Python因果推断(尽量用库,别自己实现)

import statsmodels.formula.api as smf
from linearmodels.iv import IV2SLS
from linearmodels.panel import PanelOLS

# --- 面板固定效应(实体+时间双固定) ---
df = df.set_index(["id", "year"])
mod = PanelOLS(df.y, df[["x", "controls"]],
               entity_effects=True, time_effects=True)
res = mod.fit(cov_type="clustered", cluster_entity=True)

# --- DID 双向固定效应 ---
df["did"] = df["treat"] * df["post"]
mod = smf.ols("y ~ did + C(id) + C(year)", data=df).fit(
    cov_type="cluster", cov_kwds={"groups": df["id"]})

# --- IV:z 为工具变量 ---
iv = IV2SLS.from_formula("y ~ controls + [x ~ z]", df)
res = iv.fit(cov_type="clustered", clusters=df.id)

# --- RDD 断点回归(c 为断点) ---
from rdrobust import rdrobust
r = rdrobust(y=df.y, x=df.x, c=500)

# --- PSM 倾向得分匹配 ---
from causalinference import CausalModel
cm = CausalModel(df.y, df.treat, df.controls)
cm.est_via_ps(method="logit")

固定效应模型

面板数据(panel data)= 同一批个体(企业/地区/国家)跨多个时期追踪。

固定效应模型能同时控制个体固定效应 + 时间固定效应,消掉「每个企业特有的、不随时间变的不可观测特征」(这是截面数据无法做到的)。

模型:$Y_{it}=\beta X_{it}+\alpha_i+\lambda_t+\varepsilon_{it}$

  • $\alpha_i$:个体固定效应,吸收每个企业自己的恒定异质性(如管理水平、行业赛道)
  • $\lambda_t$:时间固定效应,吸收共同的时间冲击(如宏观周期、整体通胀)
  • $\beta$:X 对 Y 的因果效应(在剥离上述两类因素后)

关键判断:

  • FE 还是 RE? 除非 Hausman 检验显示两者系数无差异,否则直接用 FE——企业不可观测异质性几乎总与 X 相关,RE 假设太强。
  • 没控制时间效应? 普通 xtreg y x, fe 只吸个体效应,会漏掉共同时间冲击,论文必须两个都吸。
  • 内生性仍在? FE 只能消不随时间变的混淆,时变的遗漏变量照样偏误 → 升级为面板 IV(xtivreg / IV2SLS+entity_effects)或 DID。
  • 双向固定效应 = DID 的现代形式:同时含 Treat×Post,识别近似的处理效应,故 DID 直接落到双向 FE 的代码框架里。

全要素生产率(TFP)

TFP(Total Factor Productivity):投入不变的前提下,产出提升的部分,即扣除劳动、资本等要素贡献后剩下的”增长来源”,常被理解为技术、效率、管理水平。TFP 常作为企业/行业层面的实证被解释变量,故附于此。

常用测算方法:

  1. 索洛余值法:$Y=AK^\alpha L^\beta$,取对数后 TFP 增长率 = 产出增长率 − 要素贡献增长率($\alpha$、$\beta$ 为要素产出弹性)
  2. 数据包络分析 DEA:用线性规划构造生产前沿面,测算距离前沿面的效率
  3. 随机前沿分析 SFA:设定生产函数加误差项,把残差中的”低效项”分离出来
  4. LP / OP 方法(Levinsohn-Petrin、Olley-Pakes):解决企业层面数据中的投入—产出同时性问题,用中间品做工具变量估计 TFP

注意:TFP 只是测算结果,不等于因果。