ocmt:高维固定效应模型的变量筛选问题
2021-01-27
黄涵麟
7348

连享会   主页 || 推文 || 知乎 || B 站 || 在线课堂

New! 搜推文,找资料,用 lianxh 命令:
安装: ssc install lianxh, replace
使用: lianxh 合成控制
       lianxh DID + 多期, w


作者:黄涵麟 (中山大学)
邮箱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-


目录
[[TOC]]


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 变量的筛选

考虑以下模型:

yt=azt+t=1kβixit+uty_t=a'z_t+\sum_{t=1}^k\beta_i x_{it}+u_t

其中:

  • ztz_t 为预选变量的向量,xitx_{it}kk 个未知的真实变量或信号变量,utu_t 为误差项;
  • ztz_txitx_{it}utu_t 不相关;
  • ztz_t 可以包括确定项 (如常数、虚拟变量和线性趋势) 和/或随机变量 (包括公共因素和 yty_t 的滞后值)。

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

Sn={xiti=1,2,n}S_n=\{x_{it},i=1,2\cdots,n\}

OCMT 将用 yty_tztz_t 和活动集中的 xitx_{it} 一次一个的进行回归,并分别求出 xitx_{it}tttit_i

ti=T1/2xiMzyσ^iT1xiMzxi=T1/2xiMzμσ^iT1xiMzxi+T1/2xiMzuσ^iT1xiMzxi=ti,μ+ti,u\begin{aligned} t_i &=\frac{T^{-1/2}x'_iM_zy}{\hat\sigma_i\sqrt{T^{-1}x'_iM_zx_i}} =\frac{T^{-1/2}x'_iM_z\mu}{\hat\sigma_i\sqrt{T^{-1}x'_iM_zx_i}}+\frac{T^{-1/2}x'_iM_zu}{\hat\sigma_i\sqrt{T^{-1}x'_iM_zx_i}} \\ &=t_{i,\mu}+t_{i,u} \end{aligned}

其中:

  • xi=(xi1,xi2,,xiT)x_i=(x_{i1},x_{i2},\cdots,x_{iT})'y=(y1,y2,,yT)y=(y_{1},y_{2},\cdots,y_{T})'
  • μ=(μ1,μ2,,μT)\mu=(\mu_{1},\mu_{2},\cdots,\mu_{T})'μt=i=1kβixit\mu_t=\sum_{i=1}^k\beta_ix_{it}u=(u1,u2,,uT)u=(u_{1},u_{2},\cdots,u_{T})'
  • Mz=ItZ(ZZ)1ZM_z=I_t-Z(Z'Z)^{-1}Z'Z=(z1,z2,,zT)Z=(z_1,z_2,\cdots,z_T)'
  • σ^i\hat\sigma_i 是该回归的标准误。

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

  • ti,μt_{i,\mu} 概率有界时,如果 xitx_{it} 不包含在 μt\mu_t 中,则其为噪声变量;若包含在 μt\mu_t 中,则为隐藏变量;
  • ti,μt_{i,\mu} 概率无界时,如果 xitx_{it} 不包含在 μt\mu_t 中,则其为伪信号变量;若包含在 μt\mu_t 中,则为信号变量。

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

θi,T(z)=j=1kβjσij,T(z)\theta_{i,T}(z)=\sum_{j=1}^k\beta_j\sigma_{ij,T}(z)

其中,σit,T=E(T1xiMzxj)\sigma_{it,T}=E(T^{-1}x'_iM_zx_j)

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

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

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

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

2.2 OCMT 的过程

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

yt=ci+ϕixit+uity_t=c_i+\phi_ix_{it}+u_{it}

其中,ϕi=θi/σii\phi_i=\theta_i/\sigma_{ii},条件净影响系数 θi=j=1kβjσij\theta_i=\sum_{j=1}^k\beta_j\sigma_{ij}σij=E(T1xiMτ)xj\sigma_{ij}=E(T^{-1}x'_iM_\tau)x_j

矩阵表示为:

y=a×τT+Xkβk+uy=a\times\tau_T+X_k\beta_k + u

其中:

  • τT\tau_TT×1T×1 向量;
  • Xk=(x1,x2,,xk)X_k=(x_1,x_2,\cdots,x_k) 是信号变量的 T×kT×k 观测矩阵;
  • βk=(β1,β2,,βk)\beta_k=(\beta_1,\beta_2,\cdots,\beta_k)'k×1k×1 相关斜率系数向量。

得到最小二乘回归估计量 ϕ^i\hat\phi_itt 值为:

tϕ^i,(1)=ϕ^is.e.(ϕ^i)=xiMτyσ^ixiMτxit_{\hat\phi_{i,(1)}}=\frac{\hat\phi_i}{s.e.(\hat\phi_i)}=\frac{x'_iM_\tau y }{\hat\sigma_i \sqrt{x'_iM_\tau x_i}}

其中,ϕ^i=(xiMτxi)1xiMτy\hat\phi_i=(x'_iM_\tau x_i)_{-1}x'_iM_\tau y

设置关键值函数为:

cp(n,δ)=ϕ1(1p2f(n,δ))c_p(n,\delta)=\phi^{-1}(1-\frac{p}{2f(n,\delta)})

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

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

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

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

Γ^i,(1)=I[tϕ^i,(1)>cp(n,δ)]i=1,2,,n\hat\Gamma_{i,(1)}=I[|t_{\hat\phi_{i,(1)}}|>c_p(n,\delta)]\quad i=1,2,\cdots,n

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

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

tϕ^i,(j)=ϕ^i,(j)s.e.ϕ^i,(j)=xiM(j1)yσ^i,(j)xiM(j1)xit_{\hat\phi_{i,(j)}}=\frac{\hat\phi_{i,(j)}}{s.e.(\hat\phi_{i,(j)})}=\frac{x'_iM_{(j-1)}y}{\hat\sigma_{i,(j)}\sqrt{x'_iM_{(j-1)} x_i}}

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

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

Γ^i,(j)=I[tϕ^i,(j)>cp(n,δ)]\hat\Gamma_{i,(j)}=I[|t_{\hat\phi_{i,(j)}}|>c_p(n,\delta^*)]

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

3. Stata 实操

3.1 ocmt 命令

命令安装

ssc install ocmt, replace

命令语法

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

其中:

  • depvar:因变量;
  • indepvars:解释变量;
  • [, options]:可以选择预选变量 ztz_t、设定关键值函数的 pp 值、δ\deltaδ\delta^*
  • 默认参数:δ\delta 的默认值为 1,δ\delta^* 的默认值为 2, pp 的默认值为 5%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:置信水平用整数表示,若想设置 pp 值为 5%,则输入 sig(5),而非 sig(5%)

由于 δ\delta 默认值为 1,δ\delta^* 默认值为 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 为选项中设定的 pp 值;
  • delta_1 和 delta_2 是第一阶段和后续阶段的关键值指数 δ\deltaδ\delta^*
  • Pvalue_1 和 Pvalue_2 的计算公式为:p1=p/nδ1p_1=p/n^{\delta-1}p1=p/nδ1p_1=p/n^{\delta^*-1}
  • t_threshold_1 和 t_threshold_2 分别是第一阶段和后续阶段的关键值函数的值;
  • 预选变量将会出现在 Preselected Variables 后,此次没有选择预选变量,固显示为 Constant。

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

加入预选变量 z1z_1

如果要加入预选变量 z1z_1,则需在选项中输入 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

资源共享


尊敬的老师 / 亲爱的同学们:
连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。
请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。
我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。more……
  • 扫码加入连享会微信群,提问交流更方便