1. 从“选择性偏差”说起:为什么你的回归结果可能不靠谱
在实证研究的路上,我们常常会遇到一个令人头疼的问题:你辛辛苦苦收集了数据,跑了一个漂亮的回归模型,结果显著,系数也符合预期,正准备写进论文,却总感觉心里不踏实。比如,你想研究“参加职业培训对个人收入的影响”。最直接的想法是,收集一批人的数据,看他们是否参加了培训(自变量),然后看他们的收入(因变量),做个回归。但这里有个致命问题:参加培训的人,可能本身就和没参加的人不一样。他们可能更上进、更有远见,或者公司更愿意送有潜力的员工去培训。这种“不一样”,在计量经济学里,就叫选择性偏差。
简单来说,你观测到的样本,并不是从总体中随机抽取的。样本的“入选”过程本身,就与你要研究的核心变量(在这里是收入)相关。用这样的样本去做普通的OLS回归,得到的“培训效应”估计,实际上混杂了个人特质(如上进心)的影响。你可能会高估培训的效果,因为你看似显著的系数里,有一部分是那些“本来就优秀”的人带来的。
这就是“样本选择模型”和“处理效应模型”要解决的核心问题。它们不是两个孤立的模型,而是处理非随机样本或非随机处理问题的一整套方法论工具箱。前者(如经典的Heckman模型)关注的是“我们能否观测到结果变量”,后者(如处理效应模型)关注的是“个体是否接受了某项处理(如培训、政策)”。很多新手,甚至一些有经验的研究者,常常混淆这两个概念,或者只知道生搬硬套Stata命令,却不理解背后的逻辑。今天,我们就抛开教科书式的定义,从实际问题出发,把这两个模型掰开揉碎了讲清楚,并附上完整的Stata实操代码和避坑指南。
2. 样本选择模型:当“看不见”的数据会说话
样本选择模型,最经典的莫过于Heckman两步法。它的核心思想是:我们观测到的结果(比如工资),是有条件的——只有在个体处于“被选择”的状态下(比如有工作),我们才能看到。那些没工作的人,他们的工资是“缺失”的,但这种缺失不是随机的,而是系统性的(可能因为能力、年龄、家庭等因素)。如果我们忽略这些“看不见”的样本,直接用有工作的人的工资做回归,就会产生偏差。
2.1 Heckman模型的两阶段逻辑拆解
我们用一个更生活的例子:研究教育年限对个人收入的影响。理想情况是,随机从全社会抽人,问他们的教育年限和收入。但现实中,我们的数据往往来自“劳动力市场调查”,这意味着我们只观测到了那些正在工作的人的工资。那些没工作的人(可能因为要照顾家庭、继续深造、或找不到工作),他们的工资数据是缺失的。问题在于,一个人是否工作(选择进入样本),很可能与其教育水平相关(高学历者更可能工作),同时也与影响工资的其他不可观测因素(如“进取心”)相关。
Heckman模型聪明地将这个过程分为两个关联的方程:
选择方程:决定个体是否进入我们可观测的样本。
选择变量 = f(影响选择的变量) + 误差1- 例如:是否就业 = f(教育年限、年龄、婚姻状况、孩子数量...)
- 这个方程通常用Probit模型估计。
结果方程:在个体进入样本后,我们观测到的结果。
结果变量 = f(核心解释变量) + 误差2- 例如:工资 = f(教育年限、工作经验...)
关键来了:如果误差1和误差2相关,就意味着影响“是否工作”的不可观测因素(如个人动力),也影响着“工资”。此时,如果直接用OLS回归工资对教育年限,估计就是有偏的。
Heckman第二步的核心是计算一个叫逆米尔斯比的变量。这个变量可以理解为,根据选择方程估计出的、个体“被选择”的概率所衍生出的一个修正项。将它加入结果方程进行OLS回归,就能纠正因样本非随机选择而产生的偏差。
2.2 Stata实操:Heckman两步法命令详解与结果解读
假设我们有一个数据集wage.dta,变量包括:
wage:工资(对数),只有就业者才有值。educ:教育年限。exper:工作经验。age:年龄。married:是否已婚(虚拟变量)。children:孩子数量。employed:是否就业(虚拟变量,1=就业,0=未就业)。
步骤一:手动两步法(理解原理)
* 第一步:用全部样本(包括未就业者)估计选择方程(Probit) probit employed educ age married children predict p, p // 计算预测概率 gen imr = normalden(invnormal(p)) / p if employed==1 // 计算逆米尔斯比(IMR),仅对就业样本 * 第二步:在就业样本中,将IMR加入结果方程进行OLS回归 regress wage educ exper i.married imr if employed==1运行后,重点关注imr的系数是否显著。如果显著,说明确实存在样本选择偏差,Heckman纠正是必要的。
步骤二:一键式heckman命令(更稳健,推荐)
Stata提供了更强大的heckman命令,能一次性完成两阶段估计,并提供更准确的标准误。
heckman wage educ exper i.married, select(employed = educ age married children)wage educ exper i.married:这是结果方程。select():指定选择方程。等号左边是选择变量employed,右边是影响选择的变量。注意:选择方程中至少应包含一个排他性约束变量——即影响“是否就业”,但理论上不影响“工资”的变量。这里children(孩子数量)常被用作排他性约束,因为更多孩子可能增加家庭责任影响就业决策,但通常不直接影响工资率。这是模型识别的重要条件。
结果解读要点:
- 看主表最下方的
Wald test of indep. eqns. (rho = 0)。这个检验的原假设是“选择方程与结果方程的误差项不相关”(即rho=0)。如果p值很小(如<0.05),则拒绝原假设,认为存在样本选择偏差,Heckman模型是必要的。 - 对比
heckman估计出的educ系数与直接regress wage educ ... if employed==1的系数。如果差异很大,说明选择偏差确实严重扭曲了你的结论。 athrho和lnsigma是模型估计过程中的参数,一般不需要直接解释。
注意:
heckman命令默认使用全信息最大似然估计,比两步法更有效。但有时模型可能不收敛,此时可以尝试使用twostep选项指定两步法:heckman wage educ exper, select(employed=...) twostep。
3. 处理效应模型:评估“干预”的真实效果
处理效应模型要解决的问题略有不同。它关注的是评估一项“处理”的因果效应,比如一项新政策、一种新药、一个培训项目。核心难点在于,个体是否接受处理,往往不是随机的。这就是内生性处理变量问题。
处理效应模型的一个典型应用是倾向得分匹配,但这里我们介绍Stata中更直接的内生处理效应模型命令etregress。它假设存在一个不可观测的潜变量,同时影响个体是否接受处理以及处理后的结果。
3.1 模型设定与内生性来源
假设我们想评估“使用新型肥料(处理)”对“农作物产量(结果)”的影响。农民是否选择使用新型肥料,可能取决于其种植知识、风险偏好、资金状况等。而这些因素同样可能影响产量(比如更有知识的农民产量本来就高)。如果我们直接比较使用和未使用新型肥料农民的产量,差异可能部分来源于农民自身特质的差异,而非肥料本身。
处理效应模型同样用两个方程来描述:
- 处理方程:决定个体是否接受处理。
处理变量 = f(影响处理的变量) + 误差1
- 结果方程:在给定处理状态下的结果。
结果变量 = f(核心变量, 处理变量) + 误差2
同样,如果误差1和误差2相关,那么处理变量就是内生的,OLS估计有偏。
3.2 Stata实操:etregress命令与teffects框架
我们沿用之前的例子,但换一个场景:研究“参加职业培训(training)”对“工资(wage)”的影响。training是内生变量。
方法一:使用etregress命令
* 假设我们有变量:wage, training, educ, exper, motivation(求职动机分数,可观测) * 但可能存在不可观测的能力同时影响training和wage etregress wage educ exper, treat(training = educ exper motivation)treat()中指定处理方程。这里motivation可以作为排他性约束变量(影响是否参加培训,但不直接影响工资?这里需要理论论证,仅示例)。- 输出结果中,会给出处理变量(
training)的平均处理效应。同时,也会报告类似Heckman的独立性检验,检验处理是否内生。
方法二:更现代的teffects命令族
Stata后来引入了更广义的teffects框架,用于估计各种情况下的平均处理效应,其背后的假设和模型更加灵活。
* 使用逆概率加权法 teffects ipw (wage educ exper) (training educ exper motication) * 使用回归调整法 teffects ra (wage educ exper) (training educ exper motication) * 使用双重稳健估计(结合IPW和RA,更稳健) teffects aipw (wage educ exper) (training educ exper motication)teffects的优势:
- 更清晰地聚焦于估计“平均处理效应”,概念直观。
- 提供了多种估计方法,双重稳健估计即使在模型部分设定错误时也能保持一致性。
- 输出结果直接报告ATE(平均处理效应)、ATET(处理组的平均处理效应)等。
选择建议:如果你的核心就是评估一个二元处理变量的因果效应,且担心内生性,优先尝试teffects aipw。如果你明确想用基于正态分布假设的联立方程模型,则用etregress。
4. 核心区别、联系与模型选择指南
到这一步,你可能有点晕:Heckman样本选择模型和内生处理效应模型,看起来都是两个方程,都解决内生性问题,到底有什么区别?
本质区别在于“第二个方程”的设定:
| 特征 | Heckman样本选择模型 | 处理效应模型 |
|---|---|---|
| 核心问题 | 结果变量是否被观测到存在系统性偏差。 | 个体是否接受处理存在系统性偏差。 |
| 结果方程 | 只适用于被选择的样本。方程形式在选定样本和未选定样本中假设相同。 | 适用于所有样本,无论是否接受处理。处理变量作为解释变量之一出现在方程中。 |
| 例子 | 研究工资,但只观测到就业者的工资。未就业者的工资方程与就业者相同,只是我们看不到。 | 研究培训效果。无论是否参加培训,每个人都有一个“如果参加培训的潜在工资”和“如果不参加培训的潜在工资”。 |
| Stata命令 | heckman | etregress,teffects |
| 关注参数 | 结果方程中核心变量的系数(如教育回报率)。 | 处理变量本身的系数,即平均处理效应。 |
联系:两者在数理结构上非常相似,都是类型2的Tobit模型。可以粗略地理解,处理效应模型是样本选择模型的一个特例或变体,其中“选择”就是“接受处理”。因此,早期的研究有时会用Heckman模型来估计处理效应。
模型选择的心智决策图:
你的因变量(Y)有大量缺失值吗?并且这些缺失是因为个体未能进入某个状态(如就业、上市、发表论文)?
- 是-> 你面临的是样本选择问题。优先考虑Heckman模型。思考:是什么因素决定了Y被观测到?找一个好的排他性约束变量。
- 否-> 进入下一步。
你有一个核心的自变量(D,通常是二元的),你怀疑它是不是“内生”的?即,个体是否接受D,与其自身不可观测的、影响Y的特质相关?
- 是-> 你面临的是内生处理效应问题。你的目标是干净地估计D对Y的因果效应。
- 如果你有合适的工具变量,可以考虑IV/2SLS。
- 如果没有强工具变量,但相信模型设定(如误差项服从联合正态分布),可以考虑
etregress。 - 更稳健、现代的做法是使用
teffects系列命令(如aipw),它对模型误设更不敏感。
- 否-> 恭喜你,也许OLS就是最好的选择。
- 是-> 你面临的是内生处理效应问题。你的目标是干净地估计D对Y的因果效应。
5. 实战避坑:从数据准备到结果报告的完整链条
理论懂了,命令会敲了,但一做就错。以下是几个最常见的坑:
坑一:排他性约束变量找不好这是模型能否被识别的生命线。以Heckman模型为例,你需要在选择方程中加入一个变量,它影响选择,但不直接影响结果。
- 反面教材:在“工资-就业”模型中,用“当地失业率”作为排他性约束。失业率可能既影响就业选择,也通过影响劳动力市场整体供需而直接影响工资水平。这就不满足“排他性”要求。
- 可行思路:在“工资-就业”模型中,“家庭中6岁以下子女的数量”可能是一个选择。它可能显著影响一个人(尤其是女性)是否进入劳动力市场,但很多理论认为,在控制了个体教育、经验后,它不直接影响其工资率(即雇主不会因为你有几个孩子而付你不同工资)。这需要强有力的理论或文献支持,不能想当然。
坑二:忽略模型假设检验不要跑出结果就直接用。必须进行检验。
- 对于Heckman/
etregress:务必关注“误差项独立性检验”(如rho=0的检验)。如果检验不显著(p>0.1),说明可能不存在严重的内生性选择问题,此时使用这些复杂模型反而可能因误设而增加估计误差。这时,报告普通OLS结果并说明检验情况,可能更诚实。 - 对于
teffects:使用teffects overlap检查倾向得分的共同支持域,确保处理组和对照组有足够的可比性。使用tebalance summarize检查加权后的协变量平衡性。
坑三:对“选择”的定义模糊你的“选择方程”究竟在模拟什么决策过程?必须清晰定义。例如,在研究企业创新投入时,将“是否有研发支出”作为选择变量。那么选择方程模拟的是企业“决定是否进行研发”的决策。你需要寻找影响这个“是否”决策,但不影响“研发投入强度”的变量。
坑四:样本量不足Heckman、etregress这类模型需要更大的样本量才能得到稳定的估计,尤其是当选择比例或处理比例非常极端时(如只有5%的样本被处理)。小样本下,逆米尔斯比或处理效应估计可能极不稳定。
一份简单的Stata实操检查清单:
- 数据清洗:确认关键变量无异常值、缺失值处理得当。
- 描述性统计:
summarize你的所有变量,特别是核心变量和处理/选择变量。看分布,看比例。 - 初步OLS:先跑一个“有偏”的OLS回归作为参照基准。记下核心系数。
- 理论构建:画出你的因果路径图。明确哪个是内生变量(选择或处理),并书面论证你选择的排他性约束变量的合理性。
- 运行模型:运行
heckman或teffects命令。 - 假设检验:记录并解读独立性检验、重叠性检验、平衡性检验的结果。
- 结果对比:将纠正后的估计值与初步OLS结果对比,解释差异的方向和含义。
- 稳健性检验:尝试不同的排他性约束变量、不同的模型设定(如
twostepvs MLE),看核心结论是否稳定。
6. 进阶思考:当模型假设不满足时怎么办?
我们上面讨论的Heckman和标准处理效应模型,都依赖于一个很强的假设:两个方程的误差项服从联合正态分布。如果这个假设不成立,估计可能仍然是有偏的。
应对策略:
- 半参数与非参数方法:这正是
teffects系列命令(如ipw,aipw)的优势所在。它们对误差项的分布假设要求更弱。尤其是双重稳健估计,只要倾向得分模型或结果回归模型有一个是正确设定的,就能得到一致估计。 - 工具变量法:如果能为你的内生选择变量或处理变量找到一个真正外生的、强相关的工具变量,那么2SLS或GMM是更优的选择。这在当前实证研究中是更受推崇的因果识别策略。
- 断点回归设计:如果选择或处理是基于一个连续变量的某个断点(如分数线),那么断点回归能提供非常干净的因果估计。
- 匹配方法:倾向得分匹配、协变量匹配等,通过构建可比样本来模拟随机实验。但需要注意,匹配方法通常只能控制可观测的混杂因素,对于不可观测的混杂依然无力。
在实际研究中的建议:不要死守一个模型。将Heckman或处理效应模型作为你稳健性检验的一部分。你的主模型可能是更干净的IV或RDD,然后在附录中展示:“即使考虑到样本选择偏差(使用Heckman模型),我们的核心结论依然成立”。这能极大地增强你论文结论的可信度。
7. 不止于Stata:思想的应用
最后,我想强调的是,“样本选择”和“处理效应”首先是一种思想,其次才是具体的模型和Stata命令。这种思想提醒我们,在任何实证分析开始前,都要像侦探一样审视自己的数据:
- 我的样本是怎么来的?是随机抽样,还是自我选择、平台筛选、调查无应答后的结果?
- 我要比较的两组人(处理组 vs 对照组)真的可比吗?除了处理本身,他们还有什么系统性差异?
- 如果存在不可比性,它会导致我的估计偏向哪个方向?
养成这种思维习惯,比学会十个Stata命令更重要。当你设计问卷时,会想着如何加入可能的排他性约束变量;当你阅读别人的论文时,能一眼看出其结论是否可能受到选择偏差的威胁;当你自己的结果不显著或符号不对时,能首先从“内生性”角度去排查问题。
说到底,计量工具是我们逼近真相的脚手架,而不是真相本身。理解数据生成过程,讲好一个逻辑自洽的因果故事,才是研究的根本。样本选择模型和处理效应模型,就是帮助我们在这个充满噪声和非随机的世界里,搭建更稳固脚手架的重要工具。