Stata:拉索开心读懂-Lasso入门
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
作者:杨继超 (中山大学)
E-Mail: yangjch7@mail2.sysu.edu.cn
目录
1. 引言
2. Lasso 究竟为何方神圣
2.1 从 OLS 到 Lasso
2.2 从 Lasso 到弹性网回归
3. Stata 范例
4. 参考文献和资料
相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. 引言
你是否总是为摸不准你女神或男神喜好只能感叹恋爱不易?
你是否觉得自己已经用尽全力,可换来的却仍是一句“你是个好人”?
好消息!好消息!好消息!
今日我们请来一位大师将手把手帮你解决你的烦恼。
在传授大师的秘籍之前,先设想一个例子:
假设有小 A 、小 B 和小 C 三人,各方面基本条件都差不多,也都谈过一些恋爱,而且此前谈过的对象类型和数量几乎无差别。
但这三人在失恋后重新找到新对象的速度和难易程度却完全不同,具体为小 B 最快,小 A 次之,小 C 最差。
小 A 和小 C 就如同正在看推文的你,百思不得其解。
原来,小 A 属于“钢铁直男”,虽然也交往过不少女友,但是从头到尾就学会了一招——送花加多喝热水。
而小 B 却不同,他细心且善总结,思维方式不单一,总结出女生大多都不仅喜欢玫瑰花,还都喜欢会使用 Stata 的男生等其它关键点(假设别当真^_^)。
小 C 属于“蠢直男”,小 C 和小 B 不同,思维方式比小 B 还丰富,小 C 摸清了每一位女友的偏好。例如,有的喜欢头发茂密的男生,有的喜欢学过连享会课程的男生,甚至有的只喜欢发过 AER 的男生等等,但是没有总结让女生喜欢的共通点。就好像某些搞题海战术的同学,做过的每道题都会了,但遇到新题又不会了。
这三位的情况就如下图所示的三种情况一般,左边的图和小 A 类似,不管什么数据直接上如玫瑰花和多喝热水一般的 OLS,结果通常为“欠拟合”。中间的图和小 B 类似,如小 B 一样改变了思维方式,即变换了回归函数的形式,结果通常为“好的拟合”。右边的图和小 C 类似,如小 C 一样摸清了每一个女友的偏好,数据拟合得很好,但是没有总结出任何规律,这便为我们所熟知的高维数据(自变量相对于数据量而言过大)模型,结果通常为“过拟合”。
图片来源:Overfitting and Underfitting.pdf
对小 A 而言,解决办法较为简单,就是稍微把这位“钢铁直男”的思维“掰弯”一点,转变一下思维方式,即调整设定的回归函数。
而对于小 C 而言,其思维方式已经够丰富了,解决办法有两个,第一种办法就是加大数据量的训练。毕竟小 C 极其细心,只要给他足够多的机会交女朋友,极限情况就是让他摸清全世界所有类型的女生偏好,他必将成为恋爱场上的王者(希望他不要成为渣男)。
显然,第一种方法在现实世界里很不现实,想得倒是很美!
于是就有了第二种办法,就是寻求恋爱大师的帮助。其实小 C 最致命的缺点并非过分细心,而是缺乏总结的能力,让大师教他如何总结,便可将缺点转为优点。
下面有请大师登场!
不好意思搞错了。。。
今天要跟大家隆重介绍的恋爱大师是 Lasso,全称为 Least absolute shrinkage and selection operator,他将教你抓住主要矛盾,即如何在纷繁复杂的男神和女神偏好中找到最为关键的偏好。
回到正题,Lasso 当然主要还是为了解决在高维数据下的过拟合问题。下面将具体讲解 Lasso 回归的理论和实操。
2. Lasso 究竟为何方神圣
2.1 从 OLS 到 Lasso
在介绍 Lasso (Tibshirani, 1996) 方法之前,仍然还是从大家最为熟悉的 OLS 方法说起。通过简单的推导,OLS 回归的参数可以由如下最优化问题求解:
一般而言,通过(1)解出的系数都不为 0。如果自变量个数 相对于样本量 而言过大,即 ,则 OLS 估计的参数没有唯一解,出现前文提到的过拟合问题。
因此,上述估计过程需要一定的约束(或称为正则化)作为惩罚,剔除部分自变量,以解决自变量相对于样本量过大而产生的过拟合问题。
具体而言,相对于 OLS 方法, Lasso 方法添加了 作为惩罚项(也称正则化函数),即
其中, 为 的 范数( 范数则为 )。 为惩罚项, 为调节参数 (tuning parameter),控制惩罚的力度,其取值的确定通常采用交叉验证 (cross-validation)、 adaptive 和 plugin 三种方法来确定,即找寻使得样本外均方误差 MSE 最小的 。
其实,OLS 和 Lasso 都可以划归为一类问题,具体为:
其中, 为目标函数, 称作损失函数,衡量单个样本和拟合值之间的误差, 为代价函数,衡量整个样本集的平均误差, 为正则化函数或惩罚项,当 时,上述目标函数则从 OLS 回归转向惩罚回归。
另外,很多教材,包括 Stata16 的手册中,在代价函数前面都会乘以 ,原因有二:
乘以 是为了针对不同的样本容量, 的可比性; 乘以 纯属是为了求解最优化问题的方便,因为损失函数的指数为 2。
公式(2)亦可以等价为:
可能有人想问,为何是 范数而不是 范数或者 范数呢?原因主要是 范数有如下特殊性:
如果 足够小, 范数可以产生稀疏解(某些自变量系数为 0 的解),而且仅仅只有部分自变量系数为 0,这一点在 的 范数中是无法保证的; 在 的 范数中,虽然能够得到稀疏解,但是上述最优化问题将不再是一个凸规划的最优化求解问题,这会在计算上造成非常大的困难。
如下图所示,在只有两个待估参数的模型中,不同范数惩罚项的约束区域可用如下图形表示:
图片来源:Statistical Learning with Sparsity: The Lasso and Generalizations.pdf
下面以 范数和 范数为例,以图形的方式直观地分析 Lasso 方法为何更容易得到稀疏解,其中 范数作为惩罚项的方法被称作岭回归 (Ridge Regession) 方法 (Hoerl and Kennard, 1970)。
如下图所示, 为无惩罚项的参数估计值,即 OLS 估计值。在有约束的情况下,最优化问题会类似于微观经济学里的餍足偏好
。其中,岭回归的约束集为圆形,最优解通常不在坐标轴上,得不到稀疏解,即无法通过约束使得某些变量系数为 0 来简化模型。而 Lasso 约束集为菱形,恰好可以弥补这一缺点。
图片来源:Statistical Learning with Sparsity: The Lasso and Generalizations.pdf
综上,综合了解的稀疏性和计算的便捷性两个主要优点,Lasso 方法的惩罚项选择了 范数。
另外,Lasso 还有另外一种用法,称为 postselection。简单来讲,先采用 Lasso 回归筛选模型自变量,再采用无惩罚项的模型进行回归,这种方法的结果会作为各种模型结果对比的参照,且此方法也可简单用于变量的筛选。
2.2 从 Lasso 到弹性网回归
Lasso 回归与岭回归回归相比虽然达到了变量选择的目的,但是也有一定的局限性。通俗来讲,Lasso 丢变量太狠,而岭回归又太温柔,为了综合二者,于是 Zou and Hastie (2005) 提出了弹性网回归,具体为
其中, 为弹性网惩罚系数,设定 则为岭回归,设定 则为 Lasso 回归。
3. Stata 范例
本节将采用 Stata16 软件中的系统数据auto.dta
进行演示,虽然这个数据不是采用 Lasso 回归的最优数据,但本节仅仅只是用此数据做演示之用,以期让大家能对 Lasso 回归的基本操作有一个入门的了解。
Step1: 将数据分为训练集与验证集
sysuse "auto.dta", clear//调用系统数据
splitsample , generate(sample) split(.75 .25) rseed(12345)//将数据随机按照75%和25%分成两部分,前者为训练集用于回归,后者为验证集用于验证,rseed(12345)是为了让结果可重复
label define slabel 1 "Training" 2 "Validation"
label values sample slabel//给训练集添加标签为Training,给验证集添加标签为Validation
拆分数据后用tabulate
看下样本结构,
tabulate sample
结果如下:
sample | Freq. Percent Cum.
------------+-----------------------------------
Training | 56 75.68 75.68
Validation | 18 24.32 100.00
------------+-----------------------------------
Total | 74 100.00
Step2: 用 OLS 做基准回归
quietly regress mpg i.foreign i.rep78 headroom weight turn gear_ratio price trunk length displacement if sample==1//先采用OLS回归
estimates store ols
跑完 OLS,用lassogof
计算均方误差,
lassogof ols, over(sample)//计算均方误差,over(sample)表示同时计算训练集和验证集的MSE
结果为:
Penalized coefficients
-------------------------------------------------------------
Name sample | MSE R-squared Obs
------------------------+------------------------------------
ols |
Training | 4.490814 0.8710 56
Validation | 33.2273 -0.5475 18
-------------------------------------------------------------
不出所料,训练集的均方误差比验证集的要小很多,毕竟这些都是谈过的女朋友,脾气还是摸得比较准的。^_^
Step3: 基于交叉检验的 Lasso 回归
lasso linear mpg i.foreign i.rep78 headroom weight turn gear_ratio price trunk length displacement if sample==1, nolog rseed(12345)//调节参数默认采用cv交叉检验
estimates store cv
结果为:
Lasso linear model No. of obs = 51
No. of covariates = 14
Selection: Cross-validation No. of CV folds = 10
--------------------------------------------------------------------------
| No. of Out-of- CV mean
| nonzero sample prediction
ID | Description lambda coef. R-squared error
---------+----------------------------------------------------------------
1 | first lambda 4.898601 0 0.0282 37.17473
32 | lambda before .2738715 8 0.7521 8.962883
* 33 | selected lambda .2495415 8 0.7525 8.948511
34 | lambda after .2273729 9 0.7517 8.977777
36 | last lambda .188769 8 0.7502 9.031694
--------------------------------------------------------------------------
* lambda selected by cross-validation.
根据回归结果,交叉检验选择 ID=33 的调节参数,模型最终选择了 8 个自变量。
也可以用cvplot
这个命令直观地看 取值不同对样本外均方误差的影响,
cvplot
结果如图所示:
可以看出,CV 交叉检验选择最优的 为 0.25.
不仅如此,我们可以运行coefpath
命令直观地观察自变量系数随着不同 取值的系数路径图。
coefpath, lineopts(lwidth(thick)) legend(on position(3) cols(1))
结果如图所示:
此外,还可以进一步用lassoknots
看看不同 取值的不同选择过程,
lassoknots
结果为:
-------------------------------------------------------------------------------------------------------------------
| No. of CV mean |
| nonzero pred. | Variables (A)dded, (R)emoved,
ID | lambda coef. error | or left (U)nchanged
-------+-------------------------------+---------------------------------------------------------------------------
2 | 4.463423 1 34.71904 | A weight
3 | 4.066905 2 31.20129 | A length
4 | 3.705612 3 28.30943 | A 5.rep78
12 | 1.760466 4 13.16168 | A turn
15 | 1.331728 5 11.10733 | A displacement
25 | .525261 6 9.177736 | A price
27 | .4360809 7 9.096081 | A gear_ratio
28 | .3973407 8 9.08659 | A headroom
* 33 | .2495415 8 8.948511 | U
34 | .2273729 9 8.977777 | A 2.rep78
35 | .2071737 8 9.007081 | R weight
36 | .188769 8 9.031694 | U
-------------------------------------------------------------------------------------------------------------------
* lambda selected by cross-validation.
最后,可以根据上述结果进一步做敏感性分析,敏感性分析的目的是考察 一个微小的变化是否会引起结果产生巨大的差异。
先采用lassoselect
手动选择一个最优 值附近的调节参数,
lassoselect id = 34
estimates store hand
然后采用lassogf
命令比较手动选择的结果与交叉检验的结果差异,
lassogof hand cv if sample==2
结果如下:
Penalized coefficients
-------------------------------------------------
Name | MSE R-squared Obs
------------+------------------------------------
hand | 35.06322 -0.6330 18
cv | 34.89029 -0.6249 18
-------------------------------------------------
-Step3: 选择调节参数
上一步中提到,lasso linear
默认的是用 CV 交叉检验方法选择调节参数,下面将采用 adaptive 和 plugin 两种方法重新选择,最后对比三种方法所对应的样本外均方误差,再确定最优的调节参数。
lasso linear mpg i.foreign i.rep78 headroom weight turn gear_ratio price trunk length displacement if sample==1, nolog rseed(12345) selection(adaptive)//采用adaptive方法
estimates store adaptive
lasso linear mpg i.foreign i.rep78 headroom weight turn gear_ratio price trunk length displacement if sample==1, nolog rseed(12345) selection(plugin)//采用plugin方法
estimates store plugin
为节省篇幅,省去了上述命令的结果,此处只给出不同方法的对比结果,仍然采用lassogof
命令,
lassogof ols cv adaptive plugin if sample==2
结果为:
Penalized coefficients
-------------------------------------------------
Name | MSE R-squared Obs
------------+------------------------------------
ols | 33.2273 -0.5475 18
cv | 34.89029 -0.6249 18
adaptive | 35.85554 -0.6699 18
plugin | 18.06601 0.1586 18
-------------------------------------------------
从对比结果可见,采用 plugin 方法的均方误差最小。
Step4: 弹性网回归
这步将采用elasticnet
做弹性网回归,弹性网回归里面内嵌了 Lasso 和岭回归,所以本步骤中也会给出岭回归代码,具体如下:
elasticnet linear mpg i.foreign i.rep78 headroom weight turn gear_ratio price trunk length displacement if sample==1, alpha(.25 .5 .75) nolog rseed(12345)//alpha分别取0.25、0.5和0.75的弹性网回归
estimates store enet
elasticnet linear mpg i.foreign i.rep78 headroom weight turn gear_ratio price trunk length displacement if sample==1, alpha(0) nolog rseed(12345)//岭回归
estimates store ridge
其中选项alpha()
设定 的取值,取值为 0 则为岭回归,取值为 1 为 Lasso,其他取值为弹性网回归,为节约篇幅,大家可以自行运行上述命令。
Note: 调节参数的选取默认为 CV 交叉检验。
Step5: 模型对比
根据本文所介绍的内容,调节参数有 3 种选择方法,除去 ols,模型有 lasso、岭回归和弹性网回归 3 种,模型做法又可以分为 postselection 和非 postselection 两种做法,因此组合起来一共是 18 种组合,大家可以自行探索,其核心还是比较各种模型的均方误差大小,从而选择最优的模型结果,本文只演示部分对比结果。
首先仍然是采用lassogof
进行对比,
lassogof cv adaptive enet ridge plugin if sample==2
结果为:
Penalized coefficients
-------------------------------------------------
Name | MSE R-squared Obs
------------+------------------------------------
cv | 34.89029 -0.6249 18
adaptive | 35.85554 -0.6699 18
enet | 31.30704 -0.4580 18
ridge | 29.47994 -0.3729 18
plugin | 18.06601 0.1586 18
-------------------------------------------------
上述结果表明应该选择 plugin 方法的结果。
接下来,采用 postselection 模型进行对比,
lassogof cv adaptive enet plugin if sample==2, postselection
结果为:
Penalized coefficients
-------------------------------------------------
Name | MSE R-squared Obs
------------+------------------------------------
cv | 36.9961 -0.7230 18
adaptive | 36.90559 -0.7188 18
enet | 38.19441 -0.7788 18
plugin | 39.96924 -0.8614 18
-------------------------------------------------
上述结果表明应该选择 adaptive 方法的结果。
学到这里,有了 Lasso 这位爱情大师坐镇,有数据的朋友可以丢进 Stata 跑一跑了,都说女人心海底针,在 Lasso 大师面前都能准确拿捏了。当然,女生也可以借力 Lasso 大师成功 pick 你心中的欧巴。
那么问题来了,正在看推文的你有“数据”吗?
【预告】 下篇推文将讲解如何 Lasso 做因果推断,敬请期待!
4. 参考文献和资料
Tibshirani, R. Regression shrinkage and selection via the lasso. Journal of the Royal Statistical Society, Series B, 1996, 58(1): 267–288. -PDF- Zou, H., and T. Hastie. Regularization and variable selection via the elastic net[J]. Journal of the Royal Statistical Society, Series B, 2005, 67(2): 301–320.-PDF- Hoerl, A., and Kennard, R. Ridge Regression: Biased Estimation for Nonorthogonal Problems[J]. Technometrics, 42(1), 80-86. -PDF- David Drukker, The Stata Blog, An introduction to the lasso in Stata Hastie, T. et al. Statistical Learning with Sparsity: The Lasso and Generalizations[M]. CRC Press, 2015. -PDF- 陈强, 计量经济学及 Stata 应用推文,Stata 16 新功能之 Lasso 系列(一):Lasso Basics
相关推文
专题:Stata 命令 Stata 新命令-pdslasso:众多控制变量和工具变量如何挑选? 专题:回归分析 Stata:拉索回归和岭回归-(Ridge,-Lasso)-简介 Stata Blogs - An introduction to the lasso in Stata (拉索回归简介)
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下:连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。