ocmt:高维固定效应模型的变量筛选问题

发布时间:2021-01-28 阅读 1043

Stata连享会   主页 || 视频 || 推文 || 知乎

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:黄涵麟 (中山大学)
邮箱huanghlin5@mail2.sysu.edu.cn

编者按:本文摘译自下文,特此致谢!

Source: Chudik A, Kapetanios G, Pesaran M H. A One Covariate at a Time, Multiple Testing Approach to Variable Selection in High‐Dimensional Linear Regression Models[J]. Econometrica, 2018, 86(4): 1479-1512. -PDF-


目录


1. 背景

OCMT (A One Covariate at A Time, Multiple Testing Approach to Variable Selection in High-Dimensional Linear Regression Models) 是在高维回归模型中,通过多重检验,选出最接近真实模型的协变量的方法。为此,本文将简要介绍 OCMT 方法的理论和 Stata 实现。

其中,Stata 实现的命令是 ocmt。该命令可以在高维模型中替代惩罚回归进行模型筛选,并具有速度快、有效性强等特点。在一些实验当中,其性能优于 Lasso 和 Adaptive Lasso 等方法。

2. 理论基础

2.1 变量的筛选

考虑以下模型:

其中:

  • zt 为预选变量的向量,xit 为 k 个未知的真实变量或信号变量,ut 为误差项;
  • ztxit 与 ut 不相关;
  • zt 可以包括确定项 (如常数、虚拟变量和线性趋势) 和/或随机变量 (包括公共因素和 yt 的滞后值)。

将 n 个可用的潜在协变量称为一个活动集,该活动集包含了真实模型的 k 个信号变量,还有噪声变量和剩余变量。其中,噪声变量是与信号的相关性为 0 的变量,剩余变量为除去 zt 后与信号相关的变量,也称为伪信号或代理变量,并且可能被错误地视为信号变量。

OCMT 将用 yt 对 zt 和活动集中的 xit 一次一个的进行回归,并分别求出 xit 的 t 值 ti

其中:

  • xi=(xi1,xi2,,xiT)y=(y1,y2,,yT)
  • μ=(μ1,μ2,,μT)μt=i=1kβixitu=(u1,u2,,uT)
  • Mz=ItZ(ZZ)1ZZ=(z1,z2,,zT)
  • σ^i 是该回归的标准误。

当 n,T 时,我们依赖 ti,u 保持足够的概率有界来使我们能够在 n 很大时进行多次测试。依据当 n,T 时,我们来判断ti,μ 在概率上是否保持足够的概率有界来区分信号变量。

  • 当 ti,μ 概率有界时,如果 xit 不包含在 μt 中,则其为噪声变量;若包含在 μt 中,则为隐藏变量;
  • 当 ti,μ 概率无界时,如果 xit 不包含在 μt 中,则其为伪信号变量;若包含在 μt 中,则为信号变量。

OCMT 的变量选择方法侧重于以预选变量 zt 为条件的 xit 对 yt 的净影响,而不是由 βi 定义的边际效应。因此,考虑 Pesaran 和 Smith (2014) 提出的平均净影响系数 (Mean Net Impact Coefficient),则 xit 对 yt 的净影响可以表示为:

其中,σit,T=E(T1xiMzxj)

为了简化表达,去掉下标 T 并用 θi(z) 和 σij(z) 来表示。θi(z) 决定了 ti,μ 在 n,T 时是否足够概率有界,我们依靠 θi(z) 来选择变量,但 θi(z)0 不一定意味着 β0 。同样,我们拥有以下四种可能的情况:

θi(z)0 θi(z)=0
βi0 (I) 信号变量,拥有非零的净影响 (II) 隐藏变量
βi=0 (III) 伪信号变量 (IV) 噪声变量

情况 (II) 比较少见,但是伪信号情况 (III) 出现可能性较高,伪信号是模型选择策略中一个重要的考虑因素。

我们将只包含信号的模型叫做真实模型,把包含了伪信号变量,但不包含噪声变量的模型称为近似模型。

2.2 OCMT 的过程

考虑 n 个二元模型 (这里使用预选变量 zt=1 的简化模型):

其中,ϕi=θi/σii,条件净影响系数 θi=j=1kβjσijσij=E(T1xiMτ)xj

矩阵表示为:

其中:

  • τT 是 T×1 向量;
  • Xk=(x1,x2,,xk) 是信号变量的 T×k 观测矩阵;
  • βk=(β1,β2,,βk) 是 k×1 相关斜率系数向量。

得到最小二乘回归估计量 ϕ^i 的 t 值为:

其中,ϕ^i=(xiMτxi)1xiMτy

设置关键值函数为:

其中,ϕ1(·) 是标准正态分布的反函数;f(n,δ)=cnδn 为活动集中的变量个数,Stata 程序中 c=1

研究者需要根据情况设置关键值指数 δ 和 p-value,其中 δ 需要设置 2 个 (δ 和 δ,且 δ2 必须大于 δ1)。δ 和 p 值的设定对于 OCMT 过程十分重要,因为它们被用于设定第一阶段 (δ) 和后续阶段 (δ) 中一次一个的对活动集中变量进行最小二乘回归中 t 值的阈值。

在第一阶段中设置 δ 的值为 1,相当于对多重测试问题使用 Bonferroni 校正。

第一阶段 (j=1),依靠选择指标:

若 Γ^1,(1)=1,则在第一阶段将 xi 选择为信号变量和伪信号变量,从活动集中取出,放入索引集。

后续阶段 (j=2,3,),我们使用 yt 对上一阶段筛选后活动集中剩余的变量再次一次一个的进行最小二乘回归,计算出 t 值:

其中,i 为上一阶段筛选后活动集中剩余的变量的下标,j=2,3,

后续阶段的选择指标为 (关键值函数采用 δ):

当在给定阶段没有选出信号变量和伪信号变量时,OCMT 过程终止。否则,j=j+1,程序继续。

3. Stata 实操

3.1 ocmt 命令

命令安装

ssc install ocmt, replace

命令语法

ocmt depvar [indepvars] [if] [in] [, options]

其中:

  • depvar:因变量;
  • indepvars:解释变量;
  • [, options]:可以选择预选变量 zt、设定关键值函数的 p 值、δ 和 δ
  • 默认参数:δ 的默认值为 1,δ 的默认值为 2, p 的默认值为 5%

3.2 实际操作

数据生成和基本设定

clear
set obs 50
set seed 123
gen t = _n
gen x1 = rnormal()
gen x2 = rnormal()
gen x3 = rnormal()
gen x4 = rnormal()
gen x5 = rnormal()
gen x6 = rnormal()
gen x7 = rnormal()
gen x8 = rnormal()
gen x9 = rnormal()
gen x10 = rnormal()
gen z1 = rnormal()
gen w1 = rnormal()
gen y = 2 + 0.8*x1 + x2 - 3*x5 + x8 - 2*z1 + rnormal() 
tsset t    // 设定为时序数据

使用 ocmt 筛选变量

ocmt y x* w1 z1, sig(10) delta1(1) delta2(2)

Note:置信水平用整数表示,若想设置 p 值为 5%,则输入 sig(5),而非 sig(5%)

由于 δ 默认值为 1,δ 默认值为 2,所以上面的命令也等效于:

ocmt y x* w1 z1, sig(10)
delta_1 and delta_2 not specified. Using default values
Dependent variable: y
Active set: x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 w1 z1
Number of variables in active set = 12
Pvalue =         .1
delta_1 =       1
delta_2 =       2
Pvalue_1 =       .1
Pvalue_2 =       .00833333
t_threshold_1 = 2.6382573
t_threshold_2 = 3.3917631
Preselected variables: Constant
Variables chosen in stage 1
x5 z1
Variables chosen in stage 2
x5 z1 x1 x2 x8
Variables chosen in stage 3
x5 z1 x1 x2 x8

------------------------------------------------------------------------------
------------------------------------------------------------------------------
One Covariate at a Time Multiple Testing (OCMT)
Chosen model after 2 stages
------------------------------------------------------------------------------

      Source |       SS           df       MS      Number of obs   =        50
-------------+----------------------------------   F(5, 44)        =    260.09
       Model |  723.688421         5  144.737684   Prob > F        =    0.0000
    Residual |  24.4858298        44  .556496132   R-squared       =    0.9673
-------------+----------------------------------   Adj R-squared   =    0.9636
       Total |  748.174251        49  15.2688623   Root MSE        =    .74599

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
          x5 |     -2.821      0.121   -23.31   0.000       -3.065      -2.577
          z1 |     -2.100      0.099   -21.17   0.000       -2.300      -1.900
          x1 |      0.867      0.117     7.41   0.000        0.631       1.103
          x2 |      0.888      0.099     8.94   0.000        0.688       1.089
          x8 |      0.827      0.099     8.39   0.000        0.628       1.026
       _cons |      2.309      0.108    21.42   0.000        2.091       2.526
------------------------------------------------------------------------------

其中:

  • Pvalue 为选项中设定的 p 值;
  • delta_1 和 delta_2 是第一阶段和后续阶段的关键值指数 δδ
  • Pvalue_1 和 Pvalue_2 的计算公式为:p1=p/nδ1p1=p/nδ1
  • t_threshold_1 和 t_threshold_2 分别是第一阶段和后续阶段的关键值函数的值;
  • 预选变量将会出现在 Preselected Variables 后,此次没有选择预选变量,固显示为 Constant。

在第一阶段的筛选中,选出了变量 x5 和变量 z1,第二阶段又将 x1x2x8 放入了索引集。第三阶段索引集中不再有新增的信号变量和伪信号变量,因此程序在第三阶段终止。我们经过两个阶段筛,选出了索引集中的变量,ocmt 命令会将 y 对索引集中的所有变量进行回归,并将结果附在最后。

加入预选变量 z1

如果要加入预选变量 z1,则需在选项中输入 z(z1)

ocmt y x* w1, z(z1) sig(5) delta1(1) delta2(2)

上述命令等价于:

ocmt y x* w1, z(z1)
Significance level not specified. Using default value
delta_1 and delta_2 not specified. Using default values
Dependent variable: y
Active set: x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 w1
Number of variables in active set = 11
Pvalue =         .05
delta_1 =       1
delta_2 =       2
Pvalue_1 =       .05
Pvalue_2 =       .00454545
t_threshold_1 = 2.8375969
t_threshold_2 = 3.5314915
Preselected variables (apart from constant): z1
Variables chosen in stage 1
x5
Variables chosen in stage 2
x5 x1 x2 x8
Variables chosen in stage 3
x5 x1 x2 x8

------------------------------------------------------------------------------
------------------------------------------------------------------------------
One Covariate at a Time Multiple Testing (OCMT)
Chosen model after 2 stages
------------------------------------------------------------------------------

      Source |       SS           df       MS      Number of obs   =        50
-------------+----------------------------------   F(5, 44)        =    260.09
       Model |  723.688421         5  144.737684   Prob > F        =    0.0000
    Residual |  24.4858298        44  .556496132   R-squared       =    0.9673
-------------+----------------------------------   Adj R-squared   =    0.9636
       Total |  748.174251        49  15.2688623   Root MSE        =    .74599

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
          x5 |     -2.821      0.121   -23.31   0.000       -3.065      -2.577
          x1 |      0.867      0.117     7.41   0.000        0.631       1.103
          x2 |      0.888      0.099     8.94   0.000        0.688       1.089
          x8 |      0.827      0.099     8.39   0.000        0.628       1.026
          z1 |     -2.100      0.099   -21.17   0.000       -2.300      -1.900
       _cons |      2.309      0.108    21.42   0.000        2.091       2.526
------------------------------------------------------------------------------

加入滞后项

当然,也可以在命令中加入 x 的滞后项。

ocmt y x* L.x* w1, z(z1) delta1(1) delta2(2)
Significance level not specified. Using default value
Dependent variable: y
Active set: x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 L.x1 L.x2 L.x3 L.x4 L.x5 L.x6 L.x7 L.x8 L.x9 L.x10 w1
Number of variables in active set = 21
Pvalue =         .05
delta_1 =       1
delta_2 =       2
Pvalue_1 =       .05
Pvalue_2 =       .00238095
t_threshold_1 = 3.0380743
t_threshold_2 = 3.860018
Preselected variables (apart from constant): z1
Variables chosen in stage 1
x5
Variables chosen in stage 2
x5 x1 x2 x8
Variables chosen in stage 3
x5 x1 x2 x8

------------------------------------------------------------------------------
------------------------------------------------------------------------------
One Covariate at a Time Multiple Testing (OCMT)
Chosen model after 2 stages
------------------------------------------------------------------------------

      Source |       SS           df       MS      Number of obs   =        49
-------------+----------------------------------   F(5, 43)        =    254.83
       Model |  712.075442         5  142.415088   Prob > F        =    0.0000
    Residual |  24.0308031        43  .558855885   R-squared       =    0.9674
-------------+----------------------------------   Adj R-squared   =    0.9636
       Total |  736.106246        48  15.3355468   Root MSE        =    .74757

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
          x5 |     -2.812      0.122   -23.10   0.000       -3.058      -2.567
          x1 |      0.866      0.117     7.39   0.000        0.629       1.102
          x2 |      0.885      0.100     8.88   0.000        0.684       1.086
          x8 |      0.835      0.099     8.41   0.000        0.635       1.035
          z1 |     -2.130      0.105   -20.35   0.000       -2.341      -1.919
       _cons |      2.297      0.109    21.12   0.000        2.078       2.516
------------------------------------------------------------------------------

存储的结果

除了通过 saving() 选项储存的结果之外,ocmt 还额外储存了过程的阶段数、关键值函数值和选出的回归元 (包含预选变量) 。

可以通过 display 命令将 ocmt 命令运行后储存的结果列出,例如:

ocmt y x* L.x* w1, z(z1) delta1(1) delta2(2)
return list    // 列出所有返回值
scalars:
         r(threshold2) =  3.860017974701531
         r(threshold1) =  3.038074304924211
             r(stages) =  2

macros:
         r(regressors) : "x5 x1 x2 x8 z1"

4. 结语

本文主要从理论基础和 Stata 的实际操作两个方面介绍了 Stata 命令 ocmt,它为我们提供了一种基于多重测试的、且计算简单、快速、有效的稀疏回归函数的替代方法。ocmt 的程序较为简单,但是其能力却十分强大,可谓短小精悍。

5. 参考文献

  • Chudik A, Kapetanios G, Pesaran M H. A One Covariate at a Time, Multiple Testing Approach to Variable Selection in High‐Dimensional Linear Regression Models[J]. Econometrica, 2018, 86(4): 1479-1512. -PDF-
  • Pesaran M H, Smith R P. Signs of impact effects in time series regression models[J]. Economics Letters, 2014, 122(2): 150-153. -PDF-

6. 相关推文

Note:产生如下推文列表的命令为:
lianxh 机器学习 lasso, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看

专题 嘉宾 直播/回看视频
最新专题 因果推断, 空间计量,寒暑假班等
数据清洗系列 游万海 直播, 88 元,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh