温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh
作者: 徐云娇 & 甘徐沁 (厦门大学)
邮箱: jilyo@stu.xmu.edu.cn & 1072759894@qq.com
目录
样本选择问题是实证研究中令人头疼的一个问题,大多数修正样本选择偏差的方法都关注于条件均值模型,但是刻画结果变量的整个分布情况也很重要,所以我们还需要借助分位数回归。
本推文将要介绍的新命令 qregsel
便是在分位数回归的框架下去修正样本选择偏差,为了对此命令的应用场景有更清晰的认识,下面对命令涉及的一些背景知识进行介绍:
许多人分不清样本选择偏差 (sample selection bias) 与自选择偏差 (self selection bias),甚至将二者等同起来,这是不太严谨的做法,所以首先有必要对这二者的概念进行区分。
样本选择问题指的是我们所使用的数据无法拿到全样本,比如:失业者的工资数据是缺失的 (不参与劳动力市场有时候并不是失业者的主动选择);自选择问题则指的是模型中的核心解释变量不是随机分配的,而是个体可以自主选择的,比如:比如在研究培训对求职的帮助时,求职者可以自主选择是否参加培训 (慧航, 2020)。
我们以一个经典的例子来帮助大家理解样本选择偏差产生的原因。
当我们研究教育水平对女性工资水平的影响时,就存在样本选择问题。这是因为只有参加了工作的妇女,我们才能观测到其工资水平,而存在某些干扰因素 (比如个体的性格、颜值等),它既会影响妇女是否参加工作,又会影响其工资水平,此时 OLS 的估计系数是有偏的,用因果图可以表示如下:
上图中,干扰因素
Heckman 样本选择模型是修正样本选择偏差的一个模型,详细内容可参见「Heckman 模型:你用对了吗?」。
Heckman 样本选择模型解决的是条件均值回归中出现的样本选择偏差,但劳动经济学家们也关心收入差距和收入不平等问题,所以此时需要借助分位数回归,更多有关分位数回归的介绍可参见「分位数回归及 Stata 实现」。
那么当存在样本选择问题时,进行分位数回归时该如何去修正选择偏差呢?Stata 新命令 qregsel
便应运而生。
我们以经典的样本选择模型为例:
其中,
Arellano & Bonhomme (2017) 提出了分位数回归中解决此样本选择偏差的方法,具体可分为以下三个步骤:
Step1: 估计倾向得分参数
这一步中利用了 Probit 模型进行最大似然估计,可以得到倾向得分参数
Step2: 估计 copula 参数
在基础模型的假设之下 (具体细节可见论文),可以推导得到
其中,
为进一步分析,假设 copula 函数是由参数向量
根据 (5) 式便有矩条件:
其中,
接下去结合第一步中估计得到的
其中,
Step3: 修正的分位数回归
在得到了
其中,
我们可以比较修正的分位数回归的
以上可见,为了修正样本选择偏差,传统分位数回归中的
qregsel
命令是 Siravegna & Munoz (2020) 根据以上估计方法所编写的 Stata 新命令,其语法结构如下:
qregsel depvar varlist [if] [in] , ///
select([depvar_s =] varlist_s) ///
quantile(#) ///
[copula(copula) noconstant finergrid rescale]
depvar
:被解释变量;varlist
:不进入选择模型的解释变量;select
:必需,设定选择模型;[depvar_s]
:如果设定,那么需要设定为 0-1 哑变量。其中 0 表示无法观测,1 表示可被观测;varlist_s
:进入选择模型的变量;quantile
:在特定分位数处进行估计,可设定多个;copula
:设定连接函数,可为gaussian
或frank
,默认为前者;nonconstant
:略去截距项估计;finergrid
:使用 199 的网格搜索连接函数参数,默认值为 100;rescale
:在估计前对解释变量进行标准化。
下面我们用一个调查的女性工资数据来检验此命令。这是一个 Stata 官方在介绍 heckman
命令时所使用的虚拟数据集。
webuse womenwk, clear
/* Notes:
数据中每个个体为一名女性,包括了其工资,以及其他一些人口地理学特征。
其中一部分女性的工资为缺失值,意味着未进入劳动力市场。
county:居住的县
age:年龄
education:受教育年限
married:是否已婚
children: 12 岁以下孩子数量
wage:小时工资
*/
我们假设小时工资是教育年限和年龄的函数,而是否参与靠劳动力市场(工资是否被观测到)是婚姻状态、孩子数量以及潜在工资(通过排除年龄和教育)。我们没有对因变量采取对数化是因为在此虚拟数据集中因变量已经是接近正态分布。我们首先进行简单的 OLS 回归:
. reg wage educ age
Source | SS df MS Number of obs = 1,343
----------+---------------------------------- F(2, 1340) = 227.49
Model | 13524.0337 2 6762.01687 Prob > F = 0.0000
Residual | 39830.8609 1,340 29.7245231 R-squared = 0.2535
----------+---------------------------------- Adj R-squared = 0.2524
Total | 53354.8946 1,342 39.7577456 Root MSE = 5.452
---------------------------------------------------------------------------
wage | Coef. Std. Err. t P>|t| [95% Conf. Interval]
----------+----------------------------------------------------------------
education | .8965829 .0498061 18.00 0.000 .7988765 .9942893
age | .1465739 .0187135 7.83 0.000 .109863 .1832848
_cons | 6.084875 .8896182 6.84 0.000 4.339679 7.830071
---------------------------------------------------------------------------
可以看出,当教育年限每上升一年,小时工资会上升 0.897 美元左右。同样,年龄越高——这衡量了工作经验,则工资越高。二者都在 1% 的水平上显著。下面我们使用分位数回归 sqreg
来看一下这两个因素对于不同工资分布区域女性的影响。
. sqreg wage educ age, quantile(.1 .5 .9)
(fitting base model)
Bootstrap replications (20)
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5
....................
Simultaneous quantile regression Number of obs = 1,343
bootstrap(20) SEs .10 Pseudo R2 = 0.1068
.50 Pseudo R2 = 0.1429
.90 Pseudo R2 = 0.1523
------------------------------------------------------------------------------
| Bootstrap
wage | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
q10 |
education | .8578176 .1010446 8.49 0.000 .6595948 1.05604
age | .1234271 .0252196 4.89 0.000 .073953 .1729012
_cons | .5154006 1.971378 0.26 0.794 -3.351922 4.382723
-------------+----------------------------------------------------------------
q50 |
education | .9064927 .096846 9.36 0.000 .7165064 1.096479
age | .160184 .0285698 5.61 0.000 .1041375 .2162305
_cons | 5.312029 1.283163 4.14 0.000 2.794801 7.829256
-------------+----------------------------------------------------------------
q90 |
education | .930661 .0928315 10.03 0.000 .7485501 1.112772
age | .1579835 .033773 4.68 0.000 .0917298 .2242373
_cons | 12.20975 1.744174 7.00 0.000 8.788146 15.63136
------------------------------------------------------------------------------
观察从上到下,工资三个分位数处的结果,很明显可以观察到,教育的回报率在从 10% 分位数到 50% 分位数,再到 90% 分位数有逐渐升高的过程。但是这一现象的发生并没有考虑样本选择偏差在内。下面我们将女性是否选择进入劳动力市场的自选择视为 婚姻、孩子数量 (与潜在工资) 的结果,使用 qregsel
命令进行估计。
// 注意:qregsel 需要函数 mm_cond。
// 可以使用如下命令进行安装。
/*
ssc install moremata, replace
*/
qregsel wage educ age, select(married children educ age) quantile(.1 .5 .9)
//结果窗口显示:
. qregsel wage educ age, select(married children educ age) quantile(.1 .5 .9) //注意这条命令运行时间比较长
Quantile selection model Number of obs = 1343
| q10 q50 q90
-------------+---------------------------------
education | 1.112866 1.017025 .8888879
age | .204362 .2028979 .2272004
_cons | -8.498507 .5828089 8.914994
. ereturn list
scalars:
e(N) = 1343
e(rank) = 3
e(df_r) = 1340
e(rho) = -.647834836
e(kendall) = -.43389025
e(spearman) = -.63
macros:
e(copula) : "gaussian"
e(depvar) : "wage"
e(indepvars) : "education age _cons"
e(cmdline) : "qregsel wage education age, select(married children educ age)"
e(outcome_eq) : "wage education age"
e(select_eq) : "married children educ age"
e(cmd) : "qregsel"
e(predict) : "qregsel_p"
e(rescale) : "non-rescaled"
e(title) : "Quantile selection model"
matrices:
e(coefs) : 3 x 3
e(grid) : 100 x 4
functions:
e(sample)
从上述结果可以看到,同不考虑选择偏差的 qreg
结果不同。考虑选择偏差后,从较低工资到较高工资分布的女性教育回报率并不是上升,而是有所下降。其中
. svmat e(grid),name(col)
. gen lvalue=log10(value)
(1,900 missing values generated)
输出图如下:
. twoway connected lvalue spearman
在 qregsel
命令之后,我们还可以使用 predict
来估算反事实的结果变量。其语法如下:
predict newvarlist [if] [in]
其中 newvarlist
必须包含两个变量名,第一个为反事实结果变量,第二个为选择哑变量。我们可以使用这个命令来估计修正了样本选择偏差后的反事实的工资分布,并将其和实际观测到的分布进行对比。
set seed 1
/*
注意下面这一行代码可能无法执行,打开安装外部命令的ado文件qregsel_p.ado,在第21行下方加入一行:
if ("`noconstant'"!="") local noconstant ""
如果已经运行过发现无法运行,再修改ado文件的,记得 program drop 噢。
*/
predict wage_hat participation
_pctile wage_hat,nq(20)
mat qs = J(19,3,.)
forvalues i=1/19 {
mat qs[`i',1] = r(r`i')
}
_pctile wage,nq(20)
forvalues i=1/19 {
mat qs[`i',2] = r(r`i')
mat qs[`i',3] = `i'
}
svmat qs, name(quantiles)
twoway connected quantiles1 quantiles2 quantiles3, ///
xtitle("Ventile") ytitle("Wage") legend(order(1 "Corrected" 2 "Uncorrected"))
得到输出图如下:
可以看到,经过修正选择偏差的工资分布处于真实分布之下。最后我们使用 bootstrap
命令来构建 qregsel
中各变量系数在三个不同的分位数处以及连接函数参数
set seed 2
webuse womenwk,clear
global wage_eqn wage educ age
global seleqn married children educ age
capture program drop myqregsel
program myqregsel, eclass
version 16
tempname bb
quietly qregsel $wage_eqn, select($seleqn) quantile(.1 .5 .9)
local colnames : colfullnames e(coefs)
local rownames : rowfullnames e(coefs)
foreach lname1 of local colnames {
foreach lname2 of local rownames {
local names = "`names' `lname1':`lname2'"
}
}
mata: st_matrix("`bb'", vec(st_matrix("e(coefs)")))
matrix `bb' = `bb',e(rho)
mat colnames `bb' = `names' rho:rho
ereturn post `bb'
ereturn local cmd="bootstrap"
end
bootstrap _b, reps(99) nowarn: myqregsel //这行命令的执行时间可能相当长,需要几小时
得到结果如下:
样本选择偏差 (sample selection bias) 是在实证经济学中同内生性问题同样重要的话题。当我们想要研究某种因果关系时,需要关注这种因果关系是否只在某一个群体内成立,以及这种群体具备什么样的特征。例如潜在工资更高的女性更可能去工作,因此直接使用分位数估计可能会产生因为忽略样本选择的而导致的偏差。而我们本次介绍的 qregsel
正是用来解决这一问题。
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟,课程主页 Stata 33 讲 - 连玉君, 每讲 15 分钟. Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 因果推断, 空间计量,寒暑假班等 | |
⭕ 数据清洗系列 | 游万海 | 直播, 88 元,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh