温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh
作者:杨继超 (中山大学)
E-Mail: yangjch7@mail2.sysu.edu.cn
Source: Stata Blogs: Using the lasso for inference in high-dimensional models
目录
高维数据模型在应用研究当中越来越普遍。上一篇推文 Stata:拉索开心读懂-Lasso 入门 中讨论的 Lasso 方法便可用于高维数据模型中估计变量的系数。但是,上一篇推文始终没有解决一个问题就是统计推断
。这其实也是 Lasso 方法面临的大难题,本篇推文则是延续上一篇推文,讨论 Stata16 中关于 Lasso 方法在高维数据模型中做统计推断的相关命令。
为了讨论这一问题,本文采用的例子是来自于 Sunyer et al. (2017) 这篇文章。具体而言,这篇文章是想估计空气污染对小学学生反应时间的影响,所采用的的模型为:
变量的具体含义如下表所示:
变量 | 含义 |
---|---|
react | 测度学生 |
no2_class | 测度学生 |
可能需要包含在模型中的控制变量 |
我们想要估计 no2_class 对于 htime 的影响系数及相应的置信区间。问题是向量
实际上,除了我们关心的变量 no2_class 以外,其余变量的统计推断问题甚至系数估计都是次要的。只要我们能找到控制变量
但问题是我们并不知道
对于变量筛选,可参考上篇推文 Stata:拉索开心读懂-Lasso 入门 中提到的一种方法 postselection 法。具体步骤分两步,第一,采用 Lasso 方法进行估计,筛选出核心的控制变量;第二,用被解释变量对自变量和筛选出来的控制变量进行回归。
可是,直接采用 postselection 法是无法进行可靠的统计推断的。Leeb and Pötscher (2008) 指出,postselection 法产生的估计量是不具备大样本情形下正态分布性质的,并且在有限样本的情形下采用一般的大样本理论也是无法进行可靠的统计推断的。
鉴于以上分析的问题,Belloni et al. (2012)、 Belloni, Chernozhukov, and Hansen (2014)、 Belloni, Chernozhukov, and Wei (2016) 以及 Chernozhukov et al. (2018) 推导了三种能够提供对于
模型 | PO 法命令 | DS 法命令 | XPO 法命令 |
---|---|---|---|
linear | poregress |
dsregress |
xporegress |
logit | pologit |
dslogit |
xpologit |
Poisson | popoisson |
dspoisson |
xpopoisson |
linear IV | poivregress |
/ | xpoivregress |
关于命令的实操参见下一小节的分析。
本小节将延续上一节所讨论的空气污染对小学生反应时间的例子,截取 Sunyer et al. (2017) 所用数据的部分变量,采用 PO、DS 和 XPO 三种方法进行估计和统计推断,并给出方法背后的一些直觉。
Step 1: 调用数据并将连续变量和因子变量及其交互项存入暂元
webuse breathe, clear //调用数据
***********将连续控制变量存入暂元`ccontrols'中********************
local ccontrols "sev_home sev_school age precip age0 siblings_old "
local ccontrols "`ccontrols' siblings_young no2_home green_home noise_school "
***********将因子控制变量存入暂元`fcontrols'中********************
local fcontrols "grade sex lbweight breastfeed msmoke "
local fcontrols "`fcontrols' feducation meducation overweight "
********将连续型、因子型控制变量及其交乘项存入暂元`ctrls'中*********
local ctrls "i.(`fcontrols') c.(`ccontrols') "
local ctrls "`ctrls' i.(`fcontrols')#c.(`ccontrols') "
接着对变量进行一下简单的描述性分析,代码为
. describe react no2_class `fcontrols' `ccontrols'
variable name type format label variable label
--------------------------------------------------------------------
react double %10.0g * Reaction time (ms)
no2_class float %9.0g Classroom NO2 levels
(ug/m3)
grade byte %9.0g grade Grade in school
sex byte %9.0g sex Sex
lbweight byte %18.0g lowbw * Low birthweight
breastfeed byte %19.0f bfeed Duration of
breastfeeding
msmoke byte %10.0f smoke * Mother smoked during
pregnancy
feducation byte %17.0g edu Father's education
level
meducation byte %17.0g edu Mother's education
level
overweight byte %32.0g overwt * Overweight by WHO/CDC
definition
sev_home float %9.0g Home socio-economic
vulnerability index
sev_school float %9.0g School socio-economic
vulnerability index
age float %9.0g Age (years)
precip double %10.0g Daily total
precipitation
age0 double %4.1f Age started school
siblings_old byte %1.0f Number of older
siblings in house
siblings_young byte %1.0f Number of younger
siblings in house
no2_home float %9.0g Home NO2 levels
(ug/m3)
green_home double %10.0g Home greenness (NDVI),
300m buffer
noise_school float %9.0g School noise levels
(dB)
Step 2: 进行 PO 回归
采用 poregress
命令进行回归,controls()
设定潜在的控制变量,本例中加入了 Step1 当中设定的连续型、因子型变量及其交乘项作为控制变量。
poregress react no2_class, controls(`ctrls') //PO 法
结果如下:
Partialing-out linear model Number of obs = 1,084
Number of controls = 0
Number of selected controls = 0
Wald chi2(1) = 11.39
Prob > chi2 = 0.0007
------------------------------------------------------------------------------
| Robust
react | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
no2_class | 1.472821 .4363526 3.38 0.001 .617586 2.328057
------------------------------------------------------------------------------
Note: Chi-squared test is a Wald test of the coefficients of the variables
of interest jointly equal to zero. Lassos select controls for model
estimation. Type lassoinfo to see number of selected variables in each
lasso.
将结果存储为 poplug
estimates store poplug
以上结果表明,每立方米再增加一微克 NO2 ,平均反应时间增加 1.47 毫秒。可以注意到,结果中只有核心解释变量 no2_class 的估计结果,其余控制变量并没有结果,这也是采用此类模型的特点。
PO 法采用的是多次 Lasso 方法来筛选控制变量。为说明 PO 方法的机理,我们考虑一个简单的线性模型:
其中
关于以上 5 步若想进一步了解,可参考 Chernozhukov, Hansen, and Spindler (2015a, b) 更为详细的分析及推导。
注: poregress
命令默认采用的是基于 plugin 方法的 Lasso 回归,也可以通过在选项中添加 selection()
来使用其他检验方法,这部分也可以可参考上篇推文 Stata:拉索开心读懂-Lasso 入门。
Step 3: 进一步分析
我们可以采用 lassocoef
命令看下每个 Lasso 回归哪些变量被选择。
lassocoef ( ., for(react)) ( ., for(no2_class))//变量筛选结果对比
结果为:
-------------------------------------------
| react no2_class
---------------------+---------------------
age | x
|
grade#c.green_home |
4th | x
|
grade#c.noise_school |
2nd | x
|
sex#c.age |
0 | x
|
feducation#c.age |
4 | x
|
sev_school | x
precip | x
no2_home | x
green_home | x
noise_school | x
|
grade#c.sev_school |
2nd | x
|
_cons | x x
-------------------------------------------
Legend:
b - base level
e - empty cell
o - omitted
x - estimated
从上面的结果可以看出,对于 react 的回归中, age 和四个交乘项被选择。对于对于 no2_class 的回归中, sev_school、precip、no2_home、green_home、noise_school 和一个交乘项被选择。可见,两次 Lasso 回归中除了交乘项中的部分变量是相同的,其余被选择的控制变量差别是很大的。
当然,以上变量筛选的结果也可以用 lassoknots
命令,具体代码为:
lassoknots , for(react)//变量 react 的变量筛选
lassoknots , for(no2_class)//变量 no2_class 的变量筛选
结果为:
lassoknots , for(react) //变量 react 的变量筛选
----------------------------------------------------------------------------------------------------
| No. of |
| nonzero In-sample | Variables (A)dded, (R)emoved,
ID | lambda coef. R-squared | or left (U)nchanged
-------+-------------------------------+------------------------------------------------------------
(*) 1 | .1375306 5 0.1619 | A age 0.sex#c.age 3.grade#c.green_home
| | 1.grade#c.noise_school
| | 4.feducation#c.age
----------------------------------------------------------------------------------------------------
* lambda selected by plugin assuming heteroskedastic.
. lassoknots , for(no2_class) //变量 no2_class 的变量筛选
----------------------------------------------------------------------------------------------------
| No. of |
| nonzero In-sample | Variables (A)dded, (R)emoved,
ID | lambda coef. R-squared | or left (U)nchanged
-------+-------------------------------+------------------------------------------------------------
(*) 1 | .1375306 6 0.3411 | A precip no2_home sev_school
| | green_home noise_school 1.grade#c.sev_school
----------------------------------------------------------------------------------------------------
* lambda selected by plugin assuming heteroskedastic.
DS 法是 PO 法的拓展。简单来讲, DS 法是通过引入额外的控制变量使得估计结果更稳健。和 PO 法的语法结构类似,采用命令 dsregress
即可实现,最后将估计结构存储为 dsplug。
. dsregress react no2_class, controls(`ctrls') //DS 法
. estimates store dsplug
Double-selection linear model Number of obs = 1,084
Number of controls = 0
Number of selected controls = 0
Wald chi2(1) = 11.39
Prob > chi2 = 0.0007
-------------------------------------------------------------------
| Robust
react | Coef. Std. Err. z P>|z| [95% Conf. Interval]
----------+--------------------------------------------------------
no2_class | 1.472821 .4363526 3.38 0.001 .617586 2.328057
-------------------------------------------------------------------
Note: Chi-squared test is a Wald test of the coefficients of the variables
of interest jointly equal to zero. Lassos select controls for model
estimation. Type lassoinfo to see number of selected variables in each
lasso.
DS 法估计的结果和 PO 法相似,结果的解读也是相似的,不再此处赘述。
对于 DS 法的机理,一共有 4 步,具体为:
Belloni, Chernozhukov, and Wei (2016) 指出,尽管在大样本情况下 DS 法和 PO 法拥有同样的性质,但在他们的模拟中,前者表现更好。在有限样本情形下,DS 法表现更好可能是因为这种方法引入的控制变量是在一次回归当中而非两次单独的回归。
同理, DS 法也可以采用 lassocoef
和 lassoknots
命令进一步分析,因这部分分析和 PO 方法类似,故不再赘述。
XPO 法也被称为双重机器学习法 (DML), Chernozhukov et al. (2018) 经过推导发现,这种方法相比于 PO 法而言在理论上具有更好的性质,并且在有限样本情形下也表现更好。其中,二者最为重要的差别是 XPO 法要求的稀疏条件更弱。在实际操作中,这意味着 XPO 法可以提供更可靠的统计推断,因为这种方法采用了样本拆分技术(split-sample techniques),从而可以引入更多的控制变量。
具体实操和 PO 法也是类似的。采用命令 xporegress
即可实现,最后将估计结果存储为 xpoplug。
xporegress react no2_class, controls(`ctrls') //XPO 法
estimates store xpoplug
结果为:
Cross-fit partialing-out Number of obs = 1,084
linear model Number of controls = 0
Number of selected controls = 0
Number of folds in cross-fit = 10
Number of resamples = 1
Wald chi2(1) = 11.39
Prob > chi2 = 0.0007
------------------------------------------------------------------
| Robust
react | Coef. Std. Err. z P>|z| [95% Conf. Interval]
----------+-------------------------------------------------------
no2_class | 1.472821 .4363526 3.38 0.001 .617586 2.328057
------------------------------------------------------------------
Note: Chi-squared test is a Wald test of the coefficients of the variables
of interest jointly equal to zero. Lassos select controls for model
estimation. Type lassoinfo to see number of selected variables in each
lasso.
估计和结果及相应的解释与 PO 法也是类似的,故也不再赘述。
关于 XPO 法的机理,首先是将样本进行拆分,拆分的子样份数叫做折(folds),以 2 折为例,一共包含 6 步:
以上是将样本拆分为 2 折的算法,10 折甚至 k 折的算法其实都是类似的。
综上,对比三种方法,最为推荐使用的是 XPO 法,因为这种方法在大样本和有限样本情形下都具有更好的性质,其缺点是计算会比较耗时。
Note:产生如下推文列表的命令为:
lianxh lasso 高维 随机推断
安装最新版lianxh
命令:
ssc install lianxh, replace
连享会-直播课 上线了!
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