ocmt:高维固定效应模型的变量筛选问题
🍎 连享会主页:lianxh.cn
New!
lianxh
命令发布了: GIF 动图介绍
随时搜索 Stata 推文、教程、手册、论坛,安装命令如下:
. ssc install lianxh
🍏 Stata论文班
⌚ 2021 年 2 月 2-5 日
🌲 主讲:江艇 (中国人民大学)
👉 课程主页:https://gitee.com/arlionn/PX
作者:黄涵麟 (中山大学)
邮箱: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-
目录
🍏 Stata论文班
1. 背景
2. 理论基础
2.1 变量的筛选
2.2 OCMT 的过程
3. Stata 实操
3.1 ocmt 命令
3.2 实际操作
4. 结语
5. 参考文献
6. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。
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 变量的筛选
考虑以下模型:
其中:
为预选变量的向量, 为 个未知的真实变量或信号变量, 为误差项; 、 与 不相关; 可以包括确定项 (如常数、虚拟变量和线性趋势) 和/或随机变量 (包括公共因素和 的滞后值)。
将 个可用的潜在协变量称为一个活动集,该活动集包含了真实模型的 个信号变量,还有噪声变量和剩余变量。其中,噪声变量是与信号的相关性为 0 的变量,剩余变量为除去 后与信号相关的变量,也称为伪信号或代理变量,并且可能被错误地视为信号变量。
OCMT 将用 对 和活动集中的 一次一个的进行回归,并分别求出 的 值 。
其中:
,; ,,; ,; 是该回归的标准误。
当 时,我们依赖 保持足够的概率有界来使我们能够在 很大时进行多次测试。依据当 时,我们来判断 在概率上是否保持足够的概率有界来区分信号变量。
当 概率有界时,如果 不包含在 中,则其为噪声变量;若包含在 中,则为隐藏变量; 当 概率无界时,如果 不包含在 中,则其为伪信号变量;若包含在 中,则为信号变量。
OCMT 的变量选择方法侧重于以预选变量 为条件的 对 的净影响,而不是由 定义的边际效应。因此,考虑 Pesaran 和 Smith (2014) 提出的平均净影响系数 (Mean Net Impact Coefficient),则 对 的净影响可以表示为:
其中,。
为了简化表达,去掉下标 并用 和 来表示。 决定了 在 时是否足够概率有界,我们依靠 来选择变量,但 不一定意味着 。同样,我们拥有以下四种可能的情况:
(I) 信号变量,拥有非零的净影响 | (II) 隐藏变量 | |
(III) 伪信号变量 | (IV) 噪声变量 |
情况 (II) 比较少见,但是伪信号情况 (III) 出现可能性较高,伪信号是模型选择策略中一个重要的考虑因素。
我们将只包含信号的模型叫做真实模型,把包含了伪信号变量,但不包含噪声变量的模型称为近似模型。
2.2 OCMT 的过程
考虑 个二元模型 (这里使用预选变量 的简化模型):
其中,,条件净影响系数 ,。
矩阵表示为:
其中:
是 向量; 是信号变量的 观测矩阵; 是 相关斜率系数向量。
得到最小二乘回归估计量 的 值为:
其中,。
设置关键值函数为:
其中, 是标准正态分布的反函数;, 为活动集中的变量个数,Stata 程序中 。
研究者需要根据情况设置关键值指数 和 -,其中 需要设置 2 个 ( 和 ,且 必须大于 )。 和 值的设定对于 OCMT 过程十分重要,因为它们被用于设定第一阶段 () 和后续阶段 () 中一次一个的对活动集中变量进行最小二乘回归中 值的阈值。
在第一阶段中设置 的值为 1,相当于对多重测试问题使用 Bonferroni 校正。
第一阶段 (),依靠选择指标:
若 ,则在第一阶段将 选择为信号变量和伪信号变量,从活动集中取出,放入索引集。
后续阶段 (),我们使用 对上一阶段筛选后活动集中剩余的变量再次一次一个的进行最小二乘回归,计算出 值:
其中, 为上一阶段筛选后活动集中剩余的变量的下标,。
后续阶段的选择指标为 (关键值函数采用 ):
当在给定阶段没有选出信号变量和伪信号变量时,OCMT 过程终止。否则,,程序继续。
3. Stata 实操
3.1 ocmt 命令
命令安装
ssc install ocmt, replace
命令语法
ocmt depvar [indepvars] [if] [in] [, options]
其中:
depvar
:因变量;indepvars
:解释变量;[, options]
:可以选择预选变量 、设定关键值函数的 值、 和 ;默认参数: 的默认值为 1, 的默认值为 2, 的默认值为 。
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:置信水平用整数表示,若想设置 值为 5%,则输入 sig(5)
,而非 sig(5%)
。
由于 默认值为 1, 默认值为 2,所以上面的命令也等效于:
ocmt y x* w1 z1, sig(10)
delta_1 and delta_2 not specified. Using default valuesDependent variable: yActive set: x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 w1 z1Number of variables in active set = 12Pvalue = .1delta_1 = 1delta_2 = 2Pvalue_1 = .1Pvalue_2 = .00833333t_threshold_1 = 2.6382573t_threshold_2 = 3.3917631Preselected variables: ConstantVariables chosen in stage 1x5 z1Variables chosen in stage 2x5 z1 x1 x2 x8Variables chosen in stage 3x5 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 为选项中设定的 值; delta_1 和 delta_2 是第一阶段和后续阶段的关键值指数 、; Pvalue_1 和 Pvalue_2 的计算公式为: 、; t_threshold_1 和 t_threshold_2 分别是第一阶段和后续阶段的关键值函数的值; 预选变量将会出现在 Preselected Variables 后,此次没有选择预选变量,固显示为 Constant。
在第一阶段的筛选中,选出了变量 x5 和变量 z1,第二阶段又将 x1、x2 和 x8 放入了索引集。第三阶段索引集中不再有新增的信号变量和伪信号变量,因此程序在第三阶段终止。我们经过两个阶段筛,选出了索引集中的变量,ocmt
命令会将 y 对索引集中的所有变量进行回归,并将结果附在最后。
加入预选变量
如果要加入预选变量 ,则需在选项中输入 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
的程序较为简单,但是其能力却十分强大,可谓短小精悍。