Stata 16 新功能之Lasso系列(一):Lasso Basics
Stata 16 系列介绍之开篇
谨以此文献给山东大学
“我的山大,我的家”
Stata 16于2019年6月26日隆重推出,开启了在大数据时代的华丽转身。本公众号将陆续介绍Stata 16的一系列强大功能。
其中,Stata 16最引人注目的新功能为Lasso系列的命令。为此,Stata 16专门提供了一个全新的Lasso模块,相应的Lasso Manual达到355页。新增的Lasso模块包括与Lasso相关的丰富命令与最新方法:lasso,square-root lasso,adaptive lasso,ridge,elastic net;非线性lasso(logit lasso, probit lasso, Poisson lasso);以及lasso模型的统计推断方法(double selection,partialing-out, cross-fit partialing out)。本公众号计划分三次推送介绍。
惩罚回归的基本原理
本质上,lasso 系列的方法均为针对“高维数据”(high-dimensional data)的“惩罚回归”(penalized regression),只是具体的“惩罚函数”(penalty function)有所不同。所谓高维数据,就是解释变量个数 p 超过样本容量 n 的数据。此时,由于存在严格多重共线性,故 OLS 不存在唯一解,虽然样本内可以完美地拟合数据,但模型的样本外预测能力可能很差,存在“过拟合”(overfit)。
为了解决过拟合问题,并降低估计量的方差(若存在严格多重共线性,则 OLS 方差无穷大),常使用“惩罚回归”(penalized regression),即在 OLS 的目标函数(残差平方和)之外,再加上一个惩罚项,惩罚太大的回归系数。
岭回归(Ridge Regression)
对于岭回归(ridge regression),使用 L2范数(即欧氏距离)作为惩罚函数:
其中,
求解此最小化问题,从其一阶条件,即可得到上述岭回归估计量的解析表达式。显然,
为了解释岭回归,可将其目标函数等价地写为一个有约束的极值问题:
其中,
在上图中,
从上图还可看出,由于约束集为圆球,故等高线与约束集相切的位置一般不会碰巧在坐标轴上,故通常只是将所有的回归系数都收缩,而不会让某些回归系数严格等于0。因此,岭回归一般得不到稀疏解,不便于解释回归系数。
套索估计量(Lasso)
为此,套索估计量(Least Absolute Shrinkage and Selection Operator,简记 LASSO)应运而生。自 Tibshirani (1996) 提出 lasso 之后,很快成为大数据时代炙手可热的新宠。
事实上,套索估计量只是将岭回归的惩罚项(也称为“正则项”,regularization)作了“小小”的技术调整,即将2-范数改为1-范数:
其中,
其中,
从上图可直观看出,由于 lasso 的约束集为菱形(而菱形的顶点恰好在坐标轴上),故椭圆等高线较容易与此约束集相交于坐标轴的位置,导致 lasso 估计量的某些回归系数严格等于0,从而得到一个稀疏模型(sparse model)。Lasso 的这种独特性质,使得它具备了“变量筛选”(variable selection)的功能,故也称为“筛选算子”(selection operator)。
弹性网估计量(Elastic Net)
Zou and Hastie (2005)将 lasso 与 ridge 相结合,同时使用 L1 与 L2 惩罚函数,得到“弹性网估计量”(Elastic Net):
其中,
平方根套索(Square-root Lasso)
平方根套索(square-root lasso)由Belloni, Chernozhukov and Wang (2011) 所提出,其目标函数为:
虽然平方根套索在理论上有其方便之处(更易从理论上估计最优调节参数,即所谓 plugin estimator),但由于在实践中一般使用交叉验证选择调节参数 ,故平方根套索较少使用。
交叉验证(Cross-validation)
对于以上的 lasso 系列惩罚估计量,在实践中都需要确定最优的调节参数,比如
Stata 16的lasso系列命令默认进行“10折交叉验证”(10-fold cross-validation),如下图所示。
首先,将样本数据随机地10等分,得到大致相等的10个子样本(即所谓的10折,每折对应于一个子样本)。然后使用其中的9折(即9个子样本)估计此模型,并将所得模型预测其余1折的被解释变量,得到相应的均方误差(Mean Squared Error,简记 MSE)。如此依次进行,可得到10个均方误差,其平均值即为整个样本数据的交叉验证MSE,也称“交叉验证误差”(CV Error)。
显然,CV Error 为调节参数
Stata 实例
下面使用 Tibshirani (1996) 所用的前列腺癌数据(prostate cancer data)进行演示。该数据集包含 97 位即将进行前列腺手术男子的数据。被解释变量为前列腺特异性抗原的对数(log of prostate specific antigen,记为lpsa),解释变量共有8个,参见下面的论文截图。虽然此例并非高维数据,但由于为 lasso 创始人 Tibshirani (1996) 所用,故经常作为案例。
首先,从 Stanford 大学网站下载此数据集,并查看数据的统计特征。
insheet using https://web.stanford.edu/~hastie/ElemStatLearn/datasets/prostate.data, clear tab
sum
其次,由于这是低维数据,不妨进行 OLS 回归,作为参照系:
reg lpsa lcavol lweight age lbph svi lcp gleason pgg45,r
从上表可知,样本内的
下面,使用命令 lasso linear 进行 lasso 回归,其基本格式与 reg 类似:
lasso linear lpsa lcavol lweight age lbph svi lcp gleason pgg45, selection(cv, alllambdas) stop(0) rseed(12345) nolog
其中,选择项“selection(cv, alllambdas)”表示使用交叉验证(默认为 10折)选择调节参数
上表显示,根据 10 折交叉验证,调节参数
下面,使用命令 coefpath 来画 lasso 的系数路径(coefficient paths):
coefpath,legend(on position(12) cols(4))
其中,选择项“legend(on position(12) cols(4))”表示将图例(legend)放在 12 点钟的位置(即图像正上方),并以 4 列(columns)来表示。
命令 coefpath 默认将 L1 范数(L1 norm)作为横轴来画系数路径。显然,当 L1 范数为 0 时,所有系数均为 0;而当 L1 范数足够大时,则为 OLS 估计(对于低维数据而言)。
如果想以调节参数
coefpath, legend(on position(12) cols(4)) xunits(lnlambda) xline(.0034851)
从上图可知,当惩罚力度
进一步,可以画交叉验证图,其命令为:
cvplot
上图给出了调节参数
如想显示 lasso 回归的系数,可使用命令
lassocoef, display(coef) sort(coef)
其中,选择项“display(coef)”表示显示回归系数(默认仅显示选中的变量,即系数非零的变量),而选择项“sort(coef)”表示将变量按照系数大小排列。
以上显示的回归系数事实上为“标准化”(standardized)之后的系数。对于惩罚回归而言,变量的单位或取值范围对回归结果有实质影响(因为回归系数为惩罚对象),故一般在进行 lasso 系列的回归之前,须先将所有解释变量进行标准化,即减去其样本均值,再除以其样本标准差,使得每个变量的均值都为0,而标准差均为 1 。
如果想显示标准化之前的回归系数,可使用命令
lassocoef, display(coef,penalized) sort(coef,penalized)
注意到以上两表中,均未显示回归系数的标准误或 p 值。这是因为 lasso 系列的估计量,仍没有公认的标准误。关于 lasso 系列命令的统计推断,我们将在本系列推文中专门介绍。
下面,我们演示平方根套索的操作,其命令也类似:
sqrtlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, selection(cv, alllambdas) stop(0) rseed(12345) nolog
上表显示,最优
接下来看平方根 lasso 的系数路径:
coefpath,legend(on position(12) cols(4)) xunits(lnlambda) xline(.3545764)
从上图看到,平方根 lasso 的系数路径有时并不光滑,这或许是由于其目标函数中的平方根所致。
下面进行弹性网估计,其命令依然类似:
elasticnet linear lpsa lcavol lweight age lbph svi lcp gleason pgg45,alpha(0(0.1)1) selection(cv, alllambdas) stop(0) rseed(12345) nolog
其中,选择项“alpha(0(0.1)1)”表示对于调节参数
上表显示,交叉验证选择了
下期公众号将继续介绍非线性 lasso(logit lasso, probit lasso, Poisson lasso 等),敬请期待。
备注:本公众号不提供 Stata 16。如需正版 Stata 16,请咨询 Stata 软件官方授权经销商及合作伙伴:北京友万信息科技有限公司(www.uone-tech.cn),希望能为 Stata 中国用户提供更多服务与支持,联系人:徐老师,Tel/Wechat:18610597626。
参考文献
陈强,《计量经济学及Stata应用》,高等教育出版社,2015年(配套教学视频,可在网易云课堂学习,详见https://study.163.com/course/introduction/1006076251.htm)
陈强,《高级计量经济学及Stata应用》,第2版,高等教育出版社,2014年(配套高级计量六天现场班,北京,2019年10月1-6日,详见https://bbs.pinggu.org/thread-3156565-1-1.html)
陈强,《机器学习及R应用》,高等教育出版社,2020年(即将出版)
震撼来袭 >> 机器学习及Stata、R三天现场班
上海,2019年8月17日-19日
主办:第三届Stata中国用户大会、友万科技
主讲:陈强教授 (山东大学)
授课方式:思想原理 + 数学精髓 + Stata、R案例
陈强老师将首次推出全新的“机器学习及Stata、R应用”三天现场培训班。结合Stata与R的实操案例,深入浅出地介绍最为流行的机器学习方法,包括KNN,判别分析、朴素贝叶斯、决策树、随机森林、提升法、支持向量机、神经网络等。
跟着陈老师,三天入门机器学习,赶上时代步伐!
更多详情,请点击页底“阅读原文”,或识别下图中二维码:
(c) 2019, 陈强,山东大学经济学院
www.econometrics-stata.com
转载请注明作者与出处
Our mission is to make econometrics easy, and facilitate convincing empirical works.