经济学因果推断
经济学因果推断
因果推断极简讲解,经济学常用。
相关 ≠ 因果:相关有 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 的因果效应。
分析
稳健性分析
验证主结果在条件变化下是否依然成立。常用做法:
- 替换核心变量度量方式(换权重、换口径)
- 更换样本区间/剔除异常样本
- 更换聚类层级、加入更多控制变量
- 补做安慰剂检验(placebo test)——如随机打乱处理时点或地区,系数应接近 0
- 换用替代的识别方法交叉验证(如 IV 换 DID、RDD 换局部多项式)
核心逻辑:主结论不能只依赖某一种设定,换一个角度依然显著才算稳健。
机制分析
回答”X 为什么影响 Y”,把 $X \rightarrow Y$ 的黑箱拆出可解释的传导路径,中间靠一个中介变量 M。
- 找 M:理论上想清楚 X 通过哪条路径影响 Y(靠理论,不是靠回归现找)
- 理论支撑:用逻辑链条讲圆”为什么 X 推 M、M 又推 Y”
步骤- 检验 $X \rightarrow M$:把 M 当被解释变量回归,看 X 是否推得动 M
- 检验 $X \rightarrow Y$ 被削弱:把 M 加回原回归,若 X 的系数明显变小、M 显著,说明 X 部分经 M 传导
- 用 Bootstrap 重抽样 B 次、取置信区间判显著性(区间不含 0 即显著)。
中介效应 = 两步系数乘积
常见被解释变量、解释变量、机制变量有:TODO
注意:M 需先于 Y、相对外生;机制检验是辅助证据,主因果仍靠 DID/IV/RDD。
异质性分析
探究效应是否在不同子群体间存在差异。
- 按群体分组:如性别、地区、企业规模、受教育程度
- 分组分别回归或加交互项 $Y=\beta X+\delta(X\times characteristic)+\dots$
- 若不同组系数差异明显,说明效应是”有条件的”,不是均匀的
意义:识别政策/因果效应落在谁身上,为针对性建议提供依据。
具体数字的例子
极其简单的例子。
因果推断
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 常作为企业/行业层面的实证被解释变量,故附于此。
常用测算方法:
- 索洛余值法:$Y=AK^\alpha L^\beta$,取对数后 TFP 增长率 = 产出增长率 − 要素贡献增长率($\alpha$、$\beta$ 为要素产出弹性)
- 数据包络分析 DEA:用线性规划构造生产前沿面,测算距离前沿面的效率
- 随机前沿分析 SFA:设定生产函数加误差项,把残差中的”低效项”分离出来
- LP / OP 方法(Levinsohn-Petrin、Olley-Pakes):解决企业层面数据中的投入—产出同时性问题,用中间品做工具变量估计 TFP
注意:TFP 只是测算结果,不等于因果。