Py学习  »  机器学习算法

Stata:工具变量与控制变量再多也不怕,Lasso机器学习模型

数量经济学 • 6 月前 • 416 次点击  

一、Lasso方法的核心原理

Lasso(Least Absolute Shrinkage and Selection Operator)由Tibshirani于1996年提出,是一种融合特征选择与正则化的回归方法。其核心在于通过在最小二乘法目标函数中加入L1范数惩罚项,实现变量筛选与系数压缩的双重目标

其中λ为惩罚参数,控制惩罚力度。当λ足够大时,部分系数会被压缩至零,从而实现变量选择。

这种特性使其特别适用于高维数据场景。

二、变量选择的双重应用

(一)控制变量选择:pdslasso命令

当模型包含大量控制变量时,传统方法易产生过拟合或遗漏变量偏误。后双选Lasso(Post-Double-Selection)通过以下步骤实现稳健选择:

  1. 第一阶段回归:以因变量y和核心解释变量d分别对控制变量集进行Lasso回归
  2. 变量并集筛选:取两次回归中非零系数的控制变量合集
  3. 最终回归:使用筛选后的变量进行OLS估计

该方法有效避免了主观选择偏差,保证估计量的一致性。

(二)工具变量选择:ivlasso命令

在工具变量法(IV)中,当存在大量潜在工具变量时,Lasso可通过以下步骤筛选有效工具:

  1. 第一阶段筛选:用Lasso回归从候选工具变量中选择与内生变量相关性强的IV
  2. 正交化处理:对筛选后的IV进行正交化处理
  3. 两阶段估计:使用正交化IV进行2SLS估计

此方法尤其适用于弱工具变量场景,提高了估计效率。

三、Stata实现步骤

pdslasso 和 ivlasso 是用于高维线性模型的后选择(post-selection)和后正则化(post-regularization)OLS/IV估计与推断的工具。核心方法基于 PDS (Post-Double-Selection) 和 CHS (Chernozhukov-Hansen-Spindler) 方法论,结合 Lasso 或 Square-Root Lasso 进行变量选择。

(一)命令安装

ssc install pdslasso, replace  // 安装主程序
ssc install ftools             // 安装依赖包
ssc install rlasso             // 安装正则化回归模块

(二)语法结构

pdslasso

pdslasso depvar regressors (hd_controls) [weight] [if exp] [in range] [, 
    partial(varlist) pnotpen(varlist) aset(varlist) post(method) robust 
    cluster(var) fe noftools rlasso[(name)] sqrt noisily 
    loptions(options) olsoptions(options) noconstant ]

ivlasso

ivlasso depvar regressors [(hd_controls)] (endog=instruments) [if exp] [in range] [, 
    partial(varlist) pnotpen(varlist) aset(varlist) post(method) robust 
    cluster(var) fe noftools rlasso[(name)] sqrt noisily 
    loptions(options) ivoptions(options) first idstats sscset 
    ssgamma(real) ssgridmin(real) ssgridmax(real) ssgridpoints(integer 100) 
    ssgridmat(name) noconstant ]

通用选项

选项
描述
partial(varlist)
在 Lasso 前剔除的变量 (Frisch-Waugh-Lovell 定理应用)
pnotpen(varlist)
不进行惩罚的变量 (直接加入模型)
aset(varlist)
改善集变量 (始终包含在后 Lasso 估计中)
post(method)
结果展示方法:pds (默认), lassoplasso
robust
异方差稳健标准误
cluster(var)
聚类稳健标准误
fe
固定效应模型 (需先 xtset)
rlasso[(name)]
存储中间 Lasso 结果 (默认前缀为命令名)
sqrt
使用 Square-Root Lasso
loptions(options)
传递给 rlasso 的选项 (如 prestdcenter)

ivlasso 特有选项

选项
描述
first
显示第一阶段 2SLS 结果
idstats
显示弱工具变量检验统计量
sscset
生成基于 sup-score 的稳健置信区间
ssgamma(#)
sup-score 检验的显著性水平 (默认 0.05)
ssgridmin/max
网格搜索范围 (默认以 OLS 估计为中心)
ssgridpoints(#)
网格点数 (默认 100)

方法论要点

PDS 方法

  1. 双重选择:分别对因变量和核心解释变量进行 Lasso 回归,取两次选择的变量并集
  2. 正交化处理:通过剔除高维控制变量的影响,解决遗漏变量偏误问题

CHS 方法

  1. 后正则化推断:使用 Lasso 选择变量后,构建正交化的因变量和解释变量
  2. 改善集优化:允许将未被 Lasso 选中的变量加入后估计 (aset())

Sup-Score 检验

  • 用于弱工具变量场景的稳健推断
  • 类似 Anderson-Rubin 检验的高维扩展
  • 支持三种计算方法:渐近边界 (abound)、模拟 (simulate)、选择 (select)

示例应用

AJR 数据应用

pdslasso logpgp95 avexpr (lat_abst edes1975 avelf temp* humid*), rob

ivlasso logpgp95 (avexpr=logem4 euro1900-cons00a), partial(lat_abst) idstats sscset

以殖民起源对经济发展的影响研究为例:

* 导入数据
use "AJR.dta", clear

* 传统OLS估计
reg logpgp95 avexpr

* Lasso控制变量选择
pdslasso logpgp95 avexpr (lat_abst edes1975 avelf temp* humid*), post(pds)

* Lasso工具变量选择
ivlasso logpgp95 (avexpr=logem4) (lat_abst edes1975), first



1、导入数据

 use https://statalasso.github.io/dta/AJR.dta

2、复刻OLS结果--Panel C, col. 9.

 reg logpgp95 avexpr lat_abst edes1975 avelf temp* humid* steplow-oilres

结果为:

reg logpgp95 avexpr lat_abst edes1975 avelf temp* humid* steplow-oilres

      Source |       SS           df       MS      Number of obs   =        64
-------------+----------------------------------   F(25, 38)       =      8.56
       Model |  58.2413524        25  2.32965409   Prob > F        =    0.0000
    Residual |  10.3403661        38  .272114898   R-squared       =    0.8492
-------------+----------------------------------   Adj R-squared   =    0.7500
       Total |  68.5817185        63  1.08859871   Root MSE        =    .52165

------------------------------------------------------------------------------
    logpgp95 |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      avexpr |   .3720903    .064387     5.78   0.000     .2417456     .502435
    lat_abst |  -1.647298   1.179221    -1.40   0.171    -4.034506      .73991
    edes1975 |   .0073935   .0043338     1.71   0.096    -.0013798    .0161668
       avelf |  -1.277516    .320108    -3.99   0.000     -1.92554   -.6294907
       temp1 |   .2088959   .1075967     1.94   0.060    -.0089221    .4267139
       temp2 |  -.0621873   .0374028    -1.66   0.105    -.1379053    .0135306
       temp3 |  -.0562697    .046481    -1.21   0.234    -.1503655    .0378261
       temp4 |  -.0814298    .045515    -1.79   0.082    -.1735701    .0107105
       temp5 |  -.0138574   .0263971    -0.52   0.603    -.0672955    .0395807
      humid1 |   .0000699   .0171774     0.00   0.997    -.0347039    .0348437
      humid2 |   .0136996    .026547     0.52   0.609    -.0400419    .0674411
      humid3 |   .0178939   .0163351     1.10   0.280    -.0151748    .0509626
      humid4 |  -.0144873   .0188511    -0.77   0.447    -.0526492    .0236747
     steplow |  -.3340291   .1788555    -1.87   0.070    -.6961031     .028045
      deslow |   .4256796   .2544295     1.67   0.103     -.089386    .9407453
     stepmid |   .2600089   .4920797     0.53   0.600    -.7361543    1.256172
      desmid |   .8471518   .6259677     1.35   0.184    -.4200535    2.114357
     drystep |  -.0009126   .2713833    -0.00   0.997    -.5502994    .5484741
     drywint |  -.6415219   4.435143    -0.14   0.886        -9.62    8.336956
    landlock |    .336199   .3189248     1.05   0.298    -.3094304    .9818284
       goldm |   .0554595   .0942704     0.59   0.560    -.1353809    .2462999
        iron |  -.0655436   .0744225    -0.88   0.384    -.2162041    .0851169
        silv |  -.0154063    .057096    -0.27   0.789    -.1309911    .1001785
        zinc |   .0397732   .0976334     0.41   0.686    -.1578753    .2374218
      oilres |   1.49e-07   1.94e-07     0.77   0.447    -2.44e-07    5.43e-07
       _cons |   5.073594   1.326987     3.82   0.000      2.38725    7.759939
------------------------------------------------------------------------------



3、基础用法,选择高维控制变量Basic usage: select from high-dim controls.

 pdslasso logpgp95 avexpr (lat_abst edes1975 avelf temp* humid* steplow-oilres)

结果为:

 . pdslasso logpgp95 avexpr (lat_abst edes1975 avelf temp* humid* steplow-oilres)
1.  (PDS/CHS) Selecting HD controls for dep var logpgp95...
Selected: edes1975 avelf
2.  (PDS/CHS) Selecting HD controls for exog regressor avexpr...
Selected: edes1975 zinc


Estimation results:

Specification:
Regularization method:                 lasso
Penalty loadings:                      homoskedastic
Number of observations:                64
Exogenous (1):                         avexpr
High-dim controls (24):                lat_abst edes1975 avelf temp1 temp2 temp3 temp4
                                       temp5 humid1 humid2 humid3 humid4 steplow deslow
                                       stepmid desmid drystep drywint landlock goldm iron
                                       silv zinc oilres
Selected controls (3):                 edes1975 avelf zinc
Unpenalized controls (1):              _cons

Structural equation:

OLS using CHS lasso-orthogonalized vars
------------------------------------------------------------------------------
    logpgp95 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      avexpr |   .4262511   .0540552     7.89   0.000     .3203049    .5321974
------------------------------------------------------------------------------

OLS using CHS post-lasso-orthogonalized vars
------------------------------------------------------------------------------
    logpgp95 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      avexpr |    .391257   .0574894     6.81   0.000     .2785799     .503934
------------------------------------------------------------------------------

OLS with PDS-selected variables and full regressor set
------------------------------------------------------------------------------
    logpgp95 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      avexpr |   .3913455   .0561862     6.97   0.000     .2812225    .5014684
    edes1975 |   .0091289    .003184     2.87   0.004     .0028883    .0153694
       avelf |  -.9974943   .2474453    -4.03   0.000    -1.482478   -.5125104
        zinc |  -.0079226   .0280604    -0.28   0.778    -.0629201    .0470748
       _cons |   5.764133   .3773706    15.27   0.000     5.024501    6.503766
------------------------------------------------------------------------------
Standard errors and test statistics valid for the following variables only:
    avexpr
------------------------------------------------------------------------------



4、复刻IV结果 Panels A & B, col. 9.

ivreg logpgp95 (avexpr=logem4) lat_abst edes1975 avelf temp* humid* steplow-oilres, first

5、Select controls; specify that logem4 is an unpenalized instrument to be partialled out.

. ivlasso logpgp95 (avexpr=logem4) (lat_abst edes1975 avelf temp* humid* steplow-oilres), partial(logem4)

结果为:

 . ivlasso logpgp95 (avexpr=logem4) (lat_abst edes1975 avelf temp* humid* steplow-oilres), pa
> rtial(logem4)
1.  (PDS/CHS) Selecting HD controls for dep var logpgp95...
Selected: lat_abst edes1975 avelf temp3 humid2 humid3 humid4
3.  (PDS) Selecting HD controls for endog regressor avexpr...
Selected: lat_abst edes1975 temp3 humid2 humid4 zinc
4.  (PDS) Selecting HD controls for IV logem4...
Selected: edes1975 avelf temp2 humid2
5.  (CHS) Selecting HD controls and IVs for endog regressor avexpr...
Selected: 
Also inc: logem4
6a. (CHS) Selecting lasso HD controls and creating optimal IV for endog regressor avexpr...
Selected: lat_abst edes1975 temp3 humid2
6b. (CHS) Selecting post-lasso HD controls and creating optimal IV for endog regressor avexp
> r...
Selected: lat_abst edes1975 temp3 humid2
7.  (CHS) Creating orthogonalized endogenous regressor avexpr...


Estimation results:

Specification:
Regularization method:                 lasso
Penalty loadings:                      homoskedastic
Number of observations:                64
Endogenous (1):                        avexpr
High-dim controls (24):                lat_abst edes1975 avelf temp1 temp2 temp3 temp4
                                       temp5 humid1 humid2 humid3 humid4 steplow deslow
                                       stepmid desmid drystep drywint landlock goldm iron
                                       silv zinc oilres
Selected controls, PDS (9):            lat_abst edes1975 avelf temp2 temp3 humid2 humid3
                                       humid4 zinc
Selected controls, CHS-L (7):          lat_abst edes1975 avelf temp3 humid2 humid3 humid4
Selected controls, CHS-PL (7):         lat_abst edes1975 avelf temp3 humid2 humid3 humid4
Partialled-out instruments (1):        logem4

Structural equation:

IV using CHS lasso-orthogonalized vars
------------------------------------------------------------------------------
    logpgp95 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      avexpr |   .9569281   .1517884     6.30   0.000     .6594284    1.254428
------------------------------------------------------------------------------

IV using CHS post-lasso-orthogonalized vars
------------------------------------------------------------------------------
    logpgp95 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      avexpr |   .8809197   .1921417     4.58   0.000     .5043289    1.257511
------------------------------------------------------------------------------

IV with PDS-selected variables and full regressor set
------------------------------------------------------------------------------
    logpgp95 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      avexpr |   .8518871   .2521345     3.38   0.001     .3577126    1.346062
    lat_abst |  -.7342439   1.427484    -0.51   0.607    -3.532061    2.063573
    edes1975 |   .0028945   .0056097     0.52   0.606    -.0081003    .0138893
       avelf |  -.9375327   .3875679    -2.42   0.016    -1.697152   -.1779136
       temp2 |  -.0040378   .0270368    -0.15   0.881     -.057029    .0489535
       temp3 |   .0110046   .0279139     0.39   0.693    -.0437056    .0657149
      humid2 |   .0100696   .0154822     0.65   0.515     -.020275    .0404142
      humid3 |   .0041323   .0112036     0.37   0.712    -.0178263    .0260908
      humid4 |  -.0123506   .0168476    -0.73   0.464    -.0453714    .0206701
        zinc |  -.0662942   .0569847    -1.16   0.245    -.1779822    .0453937
       _cons |   2.527712   2.259827     1.12   0.263    -1.901468    6.956891
------------------------------------------------------------------------------
Standard errors and test statistics valid for the following variables only:
    avexpr
------------------------------------------------------------------------------



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182316