Stata:如何理解回归中的控制
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
作者:张铭鑫 (复旦大学)
邮箱:746548383@qq.com
编者按:以下作者的智慧就像盛开的花朵,而我只是一只沾染了花粉的小小蜜蜂。
What does 'Controlling for' mean in regression? J.M.伍德里奇. 计量经济学导论:现代观点[M]. 中国人民大学出版社, 2003. Judd C M, McClelland G H, Ryan C S. Data analysis: A model comparison approach to regression, ANOVA, and beyond[M]. Routledge, 2017.
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
目录
1. 问题简介
2. 理解控制
2.1 控制的含义
2.2 控制的实现
3. Stata 实例
3.1 多变量直接回归
3.2 逐步回归
4. 总结
5. 相关推文
1. 问题简介
在经历数据收集、清洗、回归分析之后,我们终于拿到了朝思暮想的回归结果,但是马上会遇到一个新的问题:如何解读回归结果中的系数?
如果足够幸运 (当然通常都没有这么幸运),我们能够用一个简单回归模型分析感兴趣的问题。例如,在模型 (1) 的回归结果中,回归系数估计值 的含义是相当明显的: 变化一个单位对 造成的影响。
但是在更普遍的情形下,单变量回归模型的解释力往往是不足的,因此我们需要在回归模型中加入一系列控制变量。为了保持讨论的简洁性,我们主要考虑模型两个解释变量的情况。在回归模型 (2) 中, 的含义就更加复杂:在控制 不变的条件下, 变化一个单位对 造成的影响。
上述两个模型中 系数含义的主要区别是:模型 (2) 强调对回归方程中另一个解释变量 的控制,但是模型 (1) 没有控制其他因素。在文章中写下“在控制了其他因素之后,本文发现……”是没有什么难度的,真正的问题是:当我们宣称自己控制了其他因素的时候,我们在表达什么?
2. 理解控制
2.1 控制的含义
控制意味着约束由所有解释变量共享的对被解释变量的解释力。为了参悟这一句禅语,不妨考虑如下例子:我们想要探究一个小学生的身高 (height) 和年龄 (age) 对体重 (weight) 的影响,根据生活常识我们可以很容易做出两个假设:
身高更高的小学生体重更大; 年龄更大的小学生体重更大。
为了验证上述两个假设,我们可能会自然地期望通过回归方程 (3) 与 (4) 对我们已经收集到的数据进行回归分析,并根据回归系数的符号和显著性得出结论。
但是这种做法并不能保证我们得到的结论是正确的,相反,在绝大多数情况下这样得到的结论都是错误的:只有当我们相信一个小学生的年龄和他的身高无关时 (这显然无稽之谈),我们才能通过上述两个模型得到正确的结论。显然,当小学生的年龄和身高相关时,模型 (3) 与模型 (4) 都存在严重的内生性问题,因此回归系数 与 一定是有偏的。
如果年龄与身高之间并非完全线性相关,那么虽然我们能够猜到年龄更大的学生可能身高更高,但是这两者之间不存在完全的线形关系,即知道一个学生的年龄我们就能准确地知道他的身高 (或者相反),那么一个更合理的模型应当如模型 (5) 所示。
在确定年龄 (age) 与身高 (height) 相关的条件下,我们可以画出如下图所示的三变量因果图。年龄 (age) 与身高 (height) 之间的关系由 Effect 3 与 Effect 4 所描述。
在该图中,我们真正感兴趣的 Effect 1 () 与 Effect 2 () 的大小,但是由于 Effect 3 和 Effect 4 的存在,我们难以直接获得对 Effect 1 和 Effect 2 的度量:当身高 () 变动一单位时,体重 () 的变动由两部分组成,一部分为来自于 Effect 1,另一部分则来自于由于身高变动所导致的年龄 () 变动最终带来的体重的变动,即 Effect 3 * Effect 2。
至此我们能够清晰地发现:由于年龄与身高之间共享一部分用以解释体重的信息 (该信息由 Effect 3 和 Effect 4 传递),我们难以在不对两个变量中的某一方 (例如身高) 进行约束的条件下得到另一方的直接影响 (例如年龄)。因此,为了得到直接效应,我们必须约束年龄与身高之间所共享的对体重的解释力。
在方程 (5) 的回归结果中: 代表着在控制年龄和常数项的条件下,身高增加一单位对体重造成的影响; 代表着在控制身高和常数项的条件下年龄增加一单位对体重造成的影响。
2.2 控制的实现
2.2.1 实验室条件下的实现
在实验室条件下,如果我们感兴趣的是身高对体重的直接影响,就能够在保持控制年龄不变的条件下,通过改变一单位身高的值来直接观测所对应的体重变化,从而直接获得 Effect 1 的大小。注意此时由于年龄是一个固定的值,因此 Effect 2、Effect 3 与 Effect 4 三条机制均被截断,所以此时体重的所有变化都归为身高的效应 Effect 1。
2.2.2 非实验室条件下的实现
对于经济学家而言,情况往往比实验室条件下更复杂:我们既不能随意控制学生的身高,也不能控制学生的年龄,我们拥有的只是一个观察样本数据库。因此上一小节中那种趋于理想条件下的控制方法也就失去了用场。
不过经济学有经济学的办法。既然我们的目的是要约束解释变量之间所共享的,对被解释变量的解释力所造成的影响,那么一个更“计量经济学”的办法是:从我们感兴趣的被解释变量和解释变量中,直接剔除我们希望加以控制的变量所包含的信息,由此得到不能由控制变量所解释的解释变量与不能由控制变量所解释的被解释变量之间的关系。
假设感兴趣的是学生身高对体重的影响,那么根据我们对于“控制”的理解,我们需要分别从学生的身高和体重中剔除由学生的年龄所决定的部分从而达到约束效果。具体步骤如下:
首先,我们对方程 (4) 进行回归,从而得到回归系数 与 ,在此基础上我们就能得到体重的拟合值:
不难看出, 代表着由常数项和年龄完全决定的那部分体重,那么要从真实的体重 (weight) 中剔除年龄的影响只需要将两项相减,即:
就是不能由解释变量 age 以及常数项解释的那一部分体重。
其次,我们对方程 (6) 进行回归,从而得到回归系数 与 ,进而通过相同的思路得到身高的拟合值:
进一步,从真实的身高中剔除由年龄决定的那一部分,即:
就是不能由解释变量 以及常数项解释的那一部分身高。
最后,我们只需要估计方程 (7),就能得到回归系数 ,即在控制年龄变量和常数项的条件下,身高的一单位变化对体重造成的影响。对比模型 (5) 的回归系数 解读,我们能够发现他们的定义是完全相同的。因此,如果对于控制的理解是正确的,那么在相同的数据集中,我们一定能够预期 。
3. Stata 实例
我们所使用的数据来自 McClelland 等 (2008),该数据集包含 19 名中学生的身高 (height)、年龄 (age)、性别 (sex) 和体重 (weight) 信息。
3.1 多变量直接回归
首先,我们使用模型 (5) 直接进行回归,并观察回归系数。在回归结果中,我们得到了系数 以及 。在控制常数项以及年龄的条件下,身高每增加一单位将会使得体重增加 3.151 个单位;在控制常数项以及身高的条件下,年龄每增加一单位将会使得体重增加 2.746 个单位。
. cnssc install lxhuse, replace // 安装命令
. lxhuse student_weight_height_age.dta, clear
. * 多变量直接回归
. reg weight height age, cformat(%9.3f)
Source | SS df MS Number of obs = 19
-------------+---------------------------------- F(2, 16) = 19.33
Model | 6602.91288 2 3301.45644 Prob > F = 0.0001
Residual | 2732.82396 16 170.801497 R-squared = 0.7073
-------------+---------------------------------- Adj R-squared = 0.6707
Total | 9335.73684 18 518.652047 Root MSE = 13.069
------------------------------------------------------------------------------
weight | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
height | 3.151 1.071 2.94 0.010 0.880 5.421
age | 2.746 3.567 0.77 0.453 -4.815 10.307
_cons | -134.430 39.725 -3.38 0.004 -218.643 -50.216
------------------------------------------------------------------------------
3.2 逐步回归
为了检验我们对于控制的理解是否正确,我们进行逐步回归。在最终的回归结果中,回归系数为 。通过比较直接从多元回归中得到的系数 与从分步回归中得到的系数 ,我们能够发现 。这说明我们对控制的理解是正确的*。
. * 首先从体重剔除年龄的影响
. reg weight age, cformat(%9.3f)
Source | SS df MS Number of obs = 19
-------------+---------------------------------- F(1, 17) = 20.69
Model | 5124.49111 1 5124.49111 Prob > F = 0.0003
Residual | 4211.24573 17 247.720337 R-squared = 0.5489
-------------+---------------------------------- Adj R-squared = 0.5224
Total | 9335.73684 18 518.652047 Root MSE = 15.739
------------------------------------------------------------------------------
weight | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
age | 11.304 2.485 4.55 0.000 6.060 16.547
_cons | -50.493 33.290 -1.52 0.148 -120.729 19.743
------------------------------------------------------------------------------
. predict weight_hat
. gen weight_tilde = weight - weight_hat
. * 其次从身高中剔出年龄的影响
. reg height age, cformat(%9.3f)
Source | SS df MS Number of obs = 19
-------------+---------------------------------- F(1, 17) = 33.78
Model | 295.902207 1 295.902207 Prob > F = 0.0000
Residual | 148.935765 17 8.76092736 R-squared = 0.6652
-------------+---------------------------------- Adj R-squared = 0.6455
Total | 444.837972 18 24.7132206 Root MSE = 2.9599
------------------------------------------------------------------------------
height | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
age | 2.716 0.467 5.81 0.000 1.730 3.702
_cons | 26.641 6.261 4.26 0.001 13.433 39.850
------------------------------------------------------------------------------
. predict height_hat
. gen height_tilde = height - height_hat
. * 最后执行简单回归
. reg weight_tilde height_tilde, nocon cformat(%9.3f)
Source | SS df MS Number of obs = 19
-------------+---------------------------------- F(1, 18) = 9.74
Model | 1478.42127 1 1478.42127 Prob > F = 0.0059
Residual | 2732.82509 18 151.823616 R-squared = 0.3511
-------------+---------------------------------- Adj R-squared = 0.3150
Total | 4211.24636 19 221.644545 Root MSE = 12.322
------------------------------------------------------------------------------
weight_tilde | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
height_tilde | 3.151 1.010 3.12 0.006 1.029 5.272
------------------------------------------------------------------------------
4. 总结
控制意味着约束由所有解释变量所共享的对被解释变量的解释力。在实验室条件下,我们能够通过固定控制变量的值来实现控制;在非实验室条件下,我们能够通过分别从被解释变量与解释变量中剔除由控制变量决定的信息来实现控制。在经济学的语境下,直接使用多元回归模型得到的系数与通过分步回归放的得到的回归系数是相同的。
5. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 控制变量, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:论文写作 控制变量如何选?大牛们的10条建议 专题:Stata命令 Stata:控制变量组合的筛选-tuples Stata新命令-pdslasso:众多控制变量和工具变量如何挑选? 专题:回归分析 控制变量越多越好吗? Stata:控制变量与核心解释变量地位对等吗? 调节效应是否需要考虑对控制变量交乘? 控制变量!控制变量! 不用太关心控制变量,真的! 加入控制变量后结果悲催了! 专题:IV-GMM Lasso一下:再多的控制变量和工具变量我也不怕-T217 专题:断点回归RDD RDD:断点回归可以加入控制变量吗? Stata:RDD-中可以加入控制变量 专题:内生性-因果推断 Stata模拟:控制变量!控制变量!Good-Controls-Bad-Controls 控制变量!控制变量!Good-Controls-Bad-Controls 敏感性分析B-Stata实操:控制变量内生时的系数敏感性分析-regsensitivity 敏感性分析A-理论基础:控制变量内生时的系数敏感性分析-regsensitivity 专题:其它 锚定情境法(一):有效控制变量自评偏差
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。