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

发布时间:2021-02-22 阅读 3017

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

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

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

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

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

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


目录


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]

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

模型的特征:

  • 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] 选项约束,则会缺失。

4. Stata 实操

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

sysuse auto.dta, clear
combinatorics 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,clear
set seed 100
gen 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,clear
set seed 200
gen double oos=(runiform()>0.9)
combinatorics price mpg i.rep78 headroom-foreign if !oos
twoway (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

相关课程

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

免费公开课:


课程一览

支持回看

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

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


关于我们

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

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

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

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

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

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