实证方法教程 / oaxaca

Oaxaca-Blinder 分解

把作用路径、调节项和异质性拆开看

这节课解决什么用于解释主效应为什么成立、在哪些群体更强、是否通过某条路径传导。
先准备哪些变量因变量 / 核心解释变量
会看到哪张表oaxaca_results.csv
论文里怎么克制解释写成补充解释:它支持某种机制,但不自动证明完整因果链。

Oaxaca-Blinder 分解是什么?

Oaxaca-Blinder 分解回答的是两个群体平均结果差距中,有多少来自特征差异,有多少来自同样特征下的回报差异。它常用于工资差距、城乡差距、性别差距或地区绩效差距。

先用一句话理解

把 Oaxaca 分解想成比较两队工资。第一部分问两队教育、经验、行业构成是否不同;第二部分问即使教育经验相同,不同群体得到的回报是否仍不同。

什么时候用

判断项教科书式判断
适合用在研究两个群体的平均结果差距,并希望区分特征构成和系数回报。
先不要用在群体划分没有清楚含义,或结果差距不是主要研究对象。
最关键的前提变量组和参考系数选择要透明。
读表顺序先看总差距,再看 explained 和 unexplained 两部分。
论文表述边界unexplained 不能简单等同于歧视,它也可能包含遗漏变量和模型设定差异。

把它和相近方法分清楚

容易混淆的对象怎么区分初学者记法
均值比较只报告两个群体差多少。不解释来源。
回归控制估计群体虚拟变量。不直接分解差距来源。
Oaxaca 分解把差距拆成特征和回报两块。适合差距研究。

核心直觉和模型公式

均值差距分解

两组 A 和 B 的差距可分解为:

\[\bar{Y}_A-\bar{Y}_B=(\bar{X}_A-\bar{X}_B)\hat{\beta}_B+\bar{X}_A(\hat{\beta}_A-\hat{\beta}_B)\]

第一项是 explained 部分,第二项是 unexplained 部分;具体形式会随参考组选择变化。

公式里的符号怎么读

符号含义在本页怎么理解
Y_bar_A - Y_bar_B总差距两个群体平均结果的差。
X_bar_A - X_bar_B特征差异教育、经验、行业等变量均值差异。
β_A, β_B回报系数不同群体中同一特征对应的回报。
explained可解释部分由特征构成差异解释的差距。
unexplained未解释部分由系数差异和未观测因素共同构成。

专业使用口径

专业 Oaxaca 分解要控制解释力度,尤其不能把未解释部分直接贴标签。

口径专业写法
群体定义说明 A/B 如何划分。
变量组展示哪些特征进入 explained 部分。
参考系数说明用哪组系数或 pooled 系数做基准。
谨慎解释unexplained 是剩余差距,不自动等于歧视。

一步一步做:从问题到结果的五步

步骤这一页具体做什么做到什么程度才算读懂
1. 计算总差距先看两个群体平均 Y 差多少。没有差距就无需分解。
2. 选择解释变量教育、经验、行业等特征。变量选择影响 explained。
3. 分别估计组内模型得到各组回报系数。系数差异是分解来源。
4. 做差距分解拆成 explained/unexplained。注意参考组选择。
5. 写清边界未解释部分不是单一机制。避免过度政治化或道德化解释。

结果怎么读:先读口径,再读数字

本页案例读表时,先记住这个口径:SOE 与民营企业的 ln Patent 组间差距是 -0.1100,其中 DFI 可解释部分是 0.0000。

读表顺序本页怎么读不要这样读
先看总差距两个群体到底差多少。分解从总差距开始。
再看 explained特征构成解释多少。这部分对应可观察差异。
然后看 unexplained剩余差距大小。它不是纯歧视指标。
最后看变量贡献哪些特征贡献最大。贡献方向比星号更重要。

初学者最容易错在哪里

误读为什么错
把 unexplained 等同歧视错。它还包含遗漏变量和模型误差。
不说明参考组错。分解结果依赖基准选择。
变量组随意风险高。解释部分会被变量选择左右。
忽略样本可比性不严谨。两组支持集差异过大时分解不稳。

先看这个案例的结论

  • SOE 与民营企业的 ln Patent 组间差距是 -0.1100,其中 DFI 可解释部分是 0.0000。
  • 未解释部分是 -0.1100;Oaxaca 页要把 endowment 和 coefficient/structure 两类差异分开说。
  • 这页是企业创新案例的分解演示,不应该被写成工资歧视式模板结论。

变量要求和案例口径

字段口径
数据CSMAR 风格 A 股企业创新面板
原始样本196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准
因变量patent_count;回归页通常使用 ln(1 + patent_count)
核心解释变量dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index
控制变量roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age
输出文件oaxaca_results.csv
角色要求因变量、核心解释变量
依赖包oaxaca

实际代码

下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。

import delimited "$DATA_PATH", clear varnames(1) encoding(UTF-8)
gen ln_patent1 = ln(1 + patent_count)
egen firm_id = group(stkcd)
xtset firm_id year

global y ln_patent1
global count_y patent_count
global x dfi_index
global controls roa lev size growth cashflow tobinq top1 dual board indep soe age
gen post = year >= 2018
bysort firm_id: egen pre_dfi = mean(cond(year < 2018, dfi_index, .))
quietly summarize pre_dfi, detail
gen treat = pre_dfi >= r(p50)
gen did = treat * post
gen high_patent = patent_count > 2
gen running_dfi = dfi_index - 260
gen rdd_treat = running_dfi >= 0

oaxaca $y $x roa lev size growth cashflow, by(soe)
export delimited using "$JOB_DIR/oaxaca_results.csv", replace

实际输出表

这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。

指标数值解释
样本1200 obs / 196 firms / 2015-2020来自共用案例 CSV
因变量ln(1 + patent_count)企业创新产出
核心解释变量dfi_index数字普惠金融指数
输出文件oaxaca_results.csvempirical-wizard 对应方法产物
组间创新差距-0.1100SOE 与民营企业 ln Patent 均值差
DFI 均值差0.0014两组数字金融暴露差异
DFI 可解释部分0.0000用全样本 DFI 系数近似分解
未解释部分-0.1100Oaxaca 页需要说明结构差异而不只是组均值

案例图

这是一张由同一份案例数据生成的页面内诊断图。

Oaxaca-Blinder 分解 的共用案例输出图。
Oaxaca-Blinder 分解 的共用案例输出图。

论文里怎么写

本文在共用企业面板样本上报告Oaxaca-Blinder 分解,核心输出见 oaxaca_results.csv。结果解释时同时关注样本口径、变量构造、系数方向、标准误和适用前提,避免只凭单个 p 值完成方法选择。

检查清单

  • 先定义两个组和分解变量,组别不能事后为了差异显著而选择。
  • 把 endowment、coefficient 和 interaction 部分分开读。
  • 未解释部分不能直接写成歧视或机制,除非有额外理论和证据。

返回教程库 · 查看共用案例