机器学习专题--Lasso、岭回归、弹性网模型Stata操作专题
机器学习--Lasso扩展模型--用于预测和模型选择的平方根Lasso
1、xpoivregress -- Cross-fit partialing-out lassoinstrumental-variables regression--Lasso筛选工具变量
我们将复制一个众所周知的模型,该模型用于说明处理内生协变量的两阶段最小二乘估计器;参见Wooldridge(2010, ex.5.3)。
伍尔德里奇将已婚妇女的工资对数(lwage)建模为她们的经验(exper)、经验的平方和她们的教育年数(educ)的函数。总的来说,这些被称为外生协变量。
教育通常被视为内生变量。原因是我们无法测量天生的能力,而能力很可能同时影响教育水平和收入。一些学科将此称为未观测到的混杂因素,而不是内生性。无论如何,你不能仅仅对工资进行回归分析,就了解教育对工资的真实影响。
你需要从你认为不受女性未测量能力影响的变量中获取更多信息——让我们称它们为工具变量。它们也必须是外生的,但我们只会称它们为工具变量。
伍尔德里奇使用了她们母亲的教育水平(motheduc)、她们父亲的教育水平(fatheduc)和她们丈夫的教育水平(huseduc)作为女性教育的工具变量。工具变量还需要是外生的,但我们只会称它们为工具变量。
数据来自Mroz(1987)。
xpoivregress和poivregress使用lasso选择潜在外生协变量列表中的外生协变量。它们使用lasso从一组潜在工具变量中选择工具变量。这意味着我们不必担心通过可能包括不相关的外生协变量或工具变量引入噪声或弱工具变量。Lasso将确保足够数量的不相关协变量被忽略。我们可以随意添加。
让我们添加一些伍尔德里奇排除的变量。他需要考虑引入不相关协变量的问题。我们不需要。在潜在外生协变量列表中,我们添加了6岁以下儿童的数量(kidslt6)、6岁或以上儿童的数量(kidsge6)、女性的年龄段(age)、她们丈夫的年龄(husage)以及居住在城市地区的指标(citt)。我们不需要向工具变量中添加任何内容。好的工具变量很难找到。
为了确保水槽装满,让我们取所有外生变量,而不是只以线性形式输入它们,而是以线性项、二次项和所有可能的交互项输入它们。对我们的三个工具变量列表也做同样的处理。这通常被称为级数展开,或泰勒级数展开。它允许外生协变量以非线性方式影响结果,以及工具变量控制内生性。我们刚刚做了二阶展开;你可以走得更远。
我们将继续使用变量管理工具vl来管理我们的外生协变量列表和工具变量列表。
首先,我们使用Mroz数据集,然后创建我们的外生协变量基础列表和工具变量基础列表。
. use https://www.stata-press.com/data/r18/mroz, clear
. vl create exogbase = (exper age husage kidslt6 kidsge6 city)
. vl create instbase = (motheduc fatheduc huseduc)
外生协变量列表现在在全局宏instbase中。
有了这些基础列表,我们可以进行展开,创建灵活的非线性形式:
. vl substitute exog= c.exogbase c.exogbase#c.exogbase
. vl substitute inst= c.instbase c.instbase#c.instbase
#是因子变量运算符,用于交互。它可以交互分类变量、连续变量或两者。我们可以直接在估计命令行上使用它,但那些行已经够长了。我们还必须通过键入$exogbase等来处理宏扩展。v1已经知道exogbase和instbase,并且知道将它们作为列表处理。c前缀告诉#运算符将列表视为连续变量。#假设分类变量,除非另有说明。
把所有的内容放在一起,c.exogbase意味着以它们自己(线性地)输入所有潜在的外生协变量。c.exogbase#c.exogbase意味着输入变量的所有可能的交互。因为一个变量与自身的交互是二次项,所以二次(平方)项作为展开的一部分被创建。
让我们看看这两个列表中较小的一个,以便我们可以看到我们创建了什么:
. macro list inst
inst:
motheduc fatheduc huseduc c.motheduc#c.motheduc
c.motheduc#c.fatheduc c.motheduc#c.huseduc
c.fatheduc#c.fatheduc c.fatheduc#c.huseduc c.huseduc#c.huseduc
这还不错。我们数了九项——三项线性项和六项交互(包括二次项)。
宏exog有27项。
想象一下三阶展开会是什么样子。你很快就会有成千上万的项。
现在我们可以使用xpoivregress估计内生变量educ的系数。我们从plugin方法开始选择协变量。我们不需要指定plugin,因为它是默认的。由于我们创建的宏,指定模型的其余部分很容易:
. xpoivregress lwage(educ=$inst), controls($exog) rseed(12345)
注意:卡方检验是Wald检验,检验变量的系数是否联合等于零。Lasso选择模型估计的控制变量。键入lassoinfo查看每个lasso中选定变量的数量。
结果为:
*结果为:
*-----------------------------------result.begin--------------------------------
. xpoivregress lwage (educ=$inst), controls($exog) rseed(12345) selection(plugin)
Cross-fit fold 1 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 2 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 3 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 4 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 5 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 6 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 7 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 8 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 9 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 10 of 10 ...
Estimating lasso for lwage using plugin
Estimating lasso for educ using plugin
Cross-fit fold 1 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 2 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 3 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 4 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 5 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 6 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 7 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 8 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 9 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit fold 10 of 10 ...
Estimating lasso for pred(educ) using plugin
Cross-fit partialing-out Number of obs = 428
IV linear model Number of controls = 27
Number of instruments = 9
Number of selected controls = 4
Number of selected instruments = 3
Number of folds in cross-fit = 10
Number of resamples = 1
Wald chi2(1) = 10.84
Prob > chi2 = 0.0010
------------------------------------------------------------------------------
| Robust
lwage | Coefficient std. err. z P>|z| [95% conf. interval]
-------------+----------------------------------------------------------------
educ | .0727853 .0221045 3.29 0.001 .0294612 .1161094
------------------------------------------------------------------------------
Endogenous: educ
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.
.
end of do-file
.
在标题中,我们看到27个控制变量中有4个被选中,9个可能的工具变量中有3个被选中。这是模型的稀疏表示。
我们估计每增加一年的教育,工资的对数就增加0.073。因为工资是对数化的,我们将其解释为变化率,所以每增加一年的教育,工资就增加7.3%。这接近伍尔德里奇估计的8%,他的估计在我们的95% CI 2.8%到11.6%之内。
让我们看看如果我们使用交叉验证进行选择,结果会如何比较:
. xpoivregress lwage(educ=$inst), controls($exog) selection(cv) rseed(12345)
结果为:
xpoivregress lwage (educ=$inst), controls($exog) selection(cv) rseed(12345)
*结果为:
*-----------------------------------result.begin--------------------------------
xpoivregress lwage (educ=$inst), controls($exog) selection(cv) rseed(12345)
Cross-fit partialing-out Number of obs = 428
IV linear model Number of controls = 27
Number of instruments = 9
Number of selected controls = 20
Number of selected instruments = 7
Number of folds in cross-fit = 10
Number of resamples = 1
Wald chi2(1) = 7.68
Prob > chi2 = 0.0056
------------------------------------------------------------------------------
| Robust
lwage | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
educ | .0645424 .0232832 2.77 0.006 .0189082 .1101765
------------------------------------------------------------------------------
Endogenous: educ
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.
.
end of do-file
.
*-----------------------------------result.over--------------------------------
与plugin选择的4个控制变量相比,交叉验证选择了20个控制变量。与plugin选择的3个工具变量相比,它选择了7个工具变量。我们对每增加一年的教育对工资变化的点估计为6.5%,置信区间为1.9%至11.0%。交叉验证和plugin的系数估计在5%的水平上都是显著的。尽管系数估计略有不同,plugin和交叉验证得出了相同的推断。
推荐阅读:Stata: 内生性与工具变量法 (IV) 讲义--含 Acemoglu 等4大经典案例应用指南
已婚妇女的教育回报
本文以伍德里奇第十五章数据mroz.dta为例,研究已婚妇女的教育回报,相关数据介绍如下:
use morz.dta
edit
desc
*被解释变量
label var lwage 已婚妇女工资的对数值
*解释变量
label var educ 受教育年数
label var exper 工作年限
label var expersq 工作年限平方
*工具变量
label var fatheduc 已婚妇女的父亲的受教育年数
label var motheduc 已婚妇女的母亲的受教育年限
其中研究问题为:
建立lnwage与educ、exper 、expersq的方程,但是包括了影响已婚妇女工资的遗漏变量,可能存在内生性问题,其中 能力 会对工资产生影响,但是却与解释变量X中的educ相关,内生性存在。
因此需要寻找与 能力 相关,但是与误差项不相关的工具变量,认为已婚妇女的父亲和母亲的受教育年数跟已婚妇女的 educ相关的,而这两个变量与已婚妇女的 能力 相关,可以替代原来内生变量的信息。因此,可以作为 educ的工具变量。
相关操作代码为:
*OLS回归与2SLS对比
reg lwage educ exper expersq
est store OLS
ivregress 2sls lwage exper expersq (educ = motheduc fatheduc)
est store _2SLS
结果为:
同时展现并对其进行对比,代码为:
esttab OLS _2SLS , ///
title("已婚妇女教育投入回报影响研究") replace ///
mtitles("OLS回归" "2SLS回归结果" ) ///
b(%6.3f) se ///
star( * 0.10 ** 0.05 *** 0.01 ) ///
addnotes("*** 1% ** 5% * 10%") staraux r2 nogap compress
结果为:
结果解释: