combinatorics:模型设定之自动筛选变量

🍎 连享会主页:lianxh.cn

🎦 2021 文本分析·爬虫·机器学习
📅 2021 年 3.17-4.11 (三个周末)
🔑 主讲:游万海 (福州大学);司继春 (上海对外经贸大学)
🍓 课程主页https://gitee.com/lianxh/text

New! lianxh 命令发布了:   GIF 动图介绍
随时搜索 Stata 推文、教程、手册、论坛,安装命令如下:
. ssc install lianxh

作者:刘佳鹏 (中山大学)
邮箱:sysuliujiapeng@163.com


目录

  • 1. 背景介绍

  • 2. 原理介绍

    • 2.1 留一交叉验证

    • 2.2 样本外验证

  • 3. combinatorics 命令

  • 4. Stata 实操

  • 5. 总结

  • 6. 参考文献

  • 7. 相关推文


1. 背景介绍

在实证研究中,我们会面对许多可能的解释变量,那么又该如何进行筛选,以达到模型最优?为此,本文将介绍 Stata 命令 combinatorics。该命令是 Stata 处理模型筛选的利器,其不仅可以进行批量 OLS 估计,还能进行留一交叉验证 (LOOCV, Leave-One-Out-Cross-Validation) 和样本外验证 (Out-of-sample validation)。

2. 原理介绍

简单理解,就是通过列出解释变量所有可能的组合,来批量进行 OLS 估计、留一交叉验证 (LOOCV) 和样本外验证,以评估模型的解释和预测能力。当然,我们首先需要了解一下留一交叉验证和样本外验证。

2.1 留一交叉验证

正常训练会将样本划为训练集和验证集,训练集用来训练模型,而验证集用来评估模型的泛化能力。留一交叉验证是上述特例,具体来看,若数据集 D 的大小为 N,那么用 N-1 条数据进行训练,用剩下的一条数据作为验证,重复上述步骤,直到所有样本都作过验证集,即共计算 N 次,最后对验证误差求平均。

LOOCV 的优点是可以充分利用数据,防止模型过拟合,有效评估模型泛化能力。缺点是训练起来耗时,并且由于每次只采一个样本作为验证,导致无法分层抽样,影响验证集上的误差。

Note:上述内容部分摘自「LOOCV - Leave-One-Out-Cross-Validation 留一交叉验证」,特此致谢。

2.2 样本外验证

样本外验证 (out-of-sample validation) 是指事先随机预留部分样本,用于评估模型的预测能力。例如,在预测季度通货膨胀率变动的模型中,可以将样本数据 1962-2010 年划分为两部分,即 1962-2004 和 2005-2010 年。其中,以 1962-2004 年样本构建模型,以 2005-2010 年季度通货膨胀变动数据的预测值和实际值之间的差异来判断模型的可靠性。

在本文中,我们采用 OOS Pseudo-R² 程序,即 OOS 预测值与实际值的相关系数的平方。它可以用与 LOOCV Pseudo-R² 相同的方式作为预测性能的度量。

样本外验证的优点是节省时间和计算成本,缺点是拟合效果较差,会受到样本划分的影响。

3. combinatorics 命令

命令安装:

ssc install combinatorics, replace

语法结构:

combinatorics depvar indepvars [if] [in] [weight] [, options]

执行命令后,结果数据集会包括 行,每个评估模型对应一行。对于每个模型,会显示如下所示的变量:

模型的特征:

  • i:模型识别号;
  • model:以可读形式说明模型包含的变量 (需 Stata 版本在 13 及以上);
  • rank:非共线解释变量的个数 (含常数);
  • timer:从程序开始到评估这个模型的时间 (以秒为单位)。

模型的估计结果:

  • n:该模型 OLS 估计的样本量;
  • r^2:衡量模型的解释性能;
  • [Coefficient's name]:变量的系数,若未估计则记为缺失值;
  • [Coefficient's name_SE]:变量系数的标准误,若未估计则记为缺失值。

模型的样本外预测性能:

  • pseudor2:LOOCV 的 pseudo-R^2,由 hat 矩阵近似估计,在估计子样本中计算;
  • rmse:预测的均方根误差,由 LOOCV 程序计算;
  • oosn:验证子样本的样本量。如果没有 [if] [in] 选项约束,则会缺失;
  • oosr2:通过预测变量与实际因变量 (pseudo-R2) 之间相关系数的平方来衡量模型在验证子样本中的预测性能。如果没有 [if] [in] 选项约束,则会缺失。

2021 生存分析专题 (Survival Aanlysis)
⌚ 2021 年 4.24-25 (周六、周日)
⭐ 主讲:王存同教授 (中央财经大学)
课程主页https://gitee.com/lianxh/ST

4. Stata 实操

以 auto.dta 数据集为例,根据 10 个特征预测汽车价格:

sysuse auto.dta, clearcombinatorics price mpg i.rep78 headroom-foreign

在得到的数据集中,绘制所有模型得到的 512 个 mpg 系数的直方图:

hist mpg

绘制模型解释性能和预测性能 (R2 and LOOCV Pseudo-R2) 与模型复杂性 (Rank) 的关系:

twoway (scatter pseudor2 r2 rank,jitter(5 5))(lpolyci pseudor2 rank)(lpolyci r2 rank),xline(6)

LOOCV Pseudo-R2 不会随着模型复杂性单调增加 (它在 Rank 为 6 时达到局部最大值),在模型选择中存在过拟合和简约的风险。

与上述过程不同,这次只对 90% 的样本进行随机选择:

sysuse auto.dta,clearset seed 100gen double oos=(runiform()>0.9)combinatorics price mpg i.rep78 headroom-foreign if !oos

剩下的 10% 用于 “样本外” (OOS) 预测,OOS Pseudo-R² 是 OOS 预测值与实际值的相关系数的平方。它可以用与 LOOCV Pseudo R² 相同的方式作为预测性能的度量:

twoway (lpolyci r2 rank)(lpolyci pseudor2 rank)(lpolyci oosr2 rank)

用 OOS Pseudo-R² 更容易传达模型的结果,但 LOOCV Pseudo-R² 显然是一个更好的程序,因为它不需要多余的观察,也不依赖于对验证样本和样本大小的任意或随机选择。

例如,如果我们选择另一个验证样本,OOS Pseudo-R² 可能会给出不同的结论,但 LOOCV Pseudo-R² 会继续显示过拟合:

sysuse auto,clearset seed 200gen double oos=(runiform()>0.9)combinatorics price mpg i.rep78 headroom-foreign if !oostwoway (lpolyci r2 rank)(lpolyci pseudor2 rank)(lpolyci oosr2 rank)

5. 总结

本文简要的介绍了 combinatorics 命令、以及应用留一交叉验证和样本外验证来进行模型筛选。值得注意的是,在实际操作中,我们要综合考虑时间和准确性来选择验证方法。

6. 参考文献

  • Lindsey C, Sheather S. Variable selection in linear regression[J]. The Stata Journal, 2010, 10(4): 650-669. -Link-
  • 周志华,机器学习,清华大学出版社,2016
  • 李航,统计学习方法,清华大学出版社,2012
  • LOOCV - Leave-One-Out-Cross-Validation 留一交叉验证 -Link-

7. 相关推文

Note:产生如下推文列表的命令为:
lianxh 交叉验证 留一交叉验证 刀切法 筛选
安装最新版 lianxh 命令:
ssc install lianxh, replace

(0)

相关推荐