Stata:交叉验证简介

发布时间:2020-10-09 阅读 32

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

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

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

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

作者:贺旭 (中央财经大学)


目录


本文介绍交叉验证方法,然后以 kfoldclass 命令和 crossfold 为范例使读者更深入的了解该方法。

该方法在 RDD 分析中确定最优带宽时非常有用。

1. 简介

1.1 交叉验证的含义是什么?

交叉验证,顾名思义,就是重复的使用数据。具体来说,就是把样本数据切成 K 份,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。

1.2 交叉验证有什么作用?

第一,交叉验证可以多次的使用数据,有助于解决数据补充足的问题;

第二,交叉验证有助于防止过度拟合(模型样本内拟合的很好,样本外却很糟糕);

第三,用交叉验证来来进行模型的评价与选择。

1.3 常用的交叉验证有哪些方法?

K 折叠交叉验证 (K-fold Cross Validation)

将所有样本分割为大小相等的 K 组,每次取其中的一份为测试集,其他的为训练集,最后根据测试结果来评价模型。

例如:将数据集粗略地分为比较均等不相交的 10 份,然后取其中的 1 份进行测试,另外的 9 份进行训练,然后求得预测误差的平均值作为最终的评价。如图:

K折叠交叉验证法
K折叠交叉验证法

留一法 (Leave One Out)

如果 K 的值为样本的个数,也就是每次取 1 个样本作为测试集,剩下的为训练集来训练模型,最后根据测试结果来评价模型。

留 P 法 (Leave P Out)

它从完整的样本集中每次取 P 个样本作为测试集,剩下的作为训练集来训练模型,最后根据测试结果来评价模型。

2. 范例:线性回归模型的 K 折叠交叉验证

命令 crossfold 可以对线性回归模型、分位数回归模型等多种模型进行交叉验证,,并且报告交叉验证的 MAERMSEpsuedo-R-squared(因变量预测值与实测值的相关系数的平方)等指标,用以评价模型。

2.1 crossfold 命令的语法格式

其语法格式为:

crossfold model [model_if] [model_in] [model_weight], 
        [eif()] [ein()] [eweight(varname)] 
        [stub(string)] [k(value)] [loud]
        [mae] [r2]
        [model_options]

其中:

  • model 为要估计的模型;
  • eweight 在计算模型的预测指标时,赋予各预测误差值得的权重;
  • stub() 将估计的结果保存并起一个名称,放入括号中;
  • k() 设置交叉验证的次数;
  • loud 将分为K组的每组估计结果显示在窗口中;
  • mae 显示交叉验证的 MAE,如果不选,默认显示RMSE;
  • r2 显示交叉验证的 psuedo-R-squared,如果不选,默认显示RMSE;

2.2 实例演示

导入数据后,做一个线性回归,并报告 MAE

. sysuse nlsw88
. crossfold reg wage union, mae

报告的结果显示为

             |       MAE 
-------------+-----------
        est1 |  3.173351 
        est2 |  3.098101 
        est3 |  3.112503 
        est4 |  2.997055 
        est5 |  2.968615 

该结果同时会以矩阵储存在 r(stub) 中,stub为命令stub中所起的名字,如果没有,默认储存在 r(est) 中。

3. 范例:二元选择模型的交叉验证

命令 kfoldclass 可以在 Stata 中对模型进行K折叠交叉验证 (K-fold Cross Validation),但是其使用有两个限制:其一,是该命令只适用于用于二结果模型(比如 Logit 模型等);其二,是在该命令中添加的模型选项前,需要确认该 Stata 已经安装有关模型模块。

3.1 kfoldclass 命令的语法格式

其语法格式为:

kfoldclass depvar indepvars [if] [in] [weight] , model(str) [k(#) cutoff(#) save figure model_options]

其中:

  • depvar 为被解释变量;
  • indepvars 为解释变量;
  • model 为被用来进行交叉验证的的模型,包括 logit, probit, randomforest, boost, -
  • svmachines(使用前需要确保这些模块都已经安装);
  • k 为将样本分为多少组进行交叉验证,默认值为5;
  • cutoff(#) 为在 classification tables(分类表)判断预测结果为正的概率的阈值,阈值默认值为0.5。比如:模型拟合值为0.7,若阈值设置为0.6,因为0.7 > 0.6则将预测结果为正。
  • save 意思是将模型拟合的值保存在数据表格中,包括两个结果,第一个是结果变量名为 full,其将所有样本数据来计算模型参数,然后再用所有样本数据计算拟合值;第二个结果变量名为 test,将用训练集来计算模型参数,用计算出的模型参数来在测试集中计算拟合值。
  • figure 选择该选项可画出全部数据和测试数据的 ROC 曲线,如果 ROC 曲线越凸向 (0,1) 点,则说明模型的 ACU 值越大,预测效果越好,关于 ROC 曲线和 ACU 值的一个通俗的介绍参考 《 简单梳理对AUC的理解 》《 AUC,ROC我看到的最透彻的讲解 》

3.2 实例演示

首先导入数据然后按照 kfoldclass 的语法格式 输入命令

 . webuse lbw, clear 
 . kfoldclass low age lwt i.race smoke ptl ht ui, model(logit) k(5) save fig

其中,模型选择的是 logit 模型,将数据分为5组,保存拟合值,并画出 ROC 曲线。

首先,呈现 ROC 曲线,如图:

ROC曲线
ROC曲线

如果 ROC 越偏向左上角,这说明模型预测效果越好,同时图片下方还计算了 AUC 的值(也就是横坐标从 0 到 1 曲线下方的面积),全部样本的AUC值为 0.7462,测试样本的 AUC 值为 0.6716。

同时还会显示以下表格:

  • 表格 1
Classification Table for Full Data:
              -------- True --------
Classified |         D            ~D  |      Total
-----------+--------------------------+-----------
     +     |        21            12  |         33
     -     |        38           118  |        156
-----------+--------------------------+-----------
   Total   |        59           130  |        189

这个表格是用全部样本作为训练集,然后用全部样本作为测试集,最后的统计结果。其中:纵坐标 + 表示拟合值等于 1 的数目,- 表示拟合值等于 0 的数目;横坐标 D 代表真实等于 1 的数目 ,~D 代表真实值等于 0 的数目。

  • 表格 2
Classification Table for Test Data:
              -------- True --------
Classified |         D            ~D  |      Total
-----------+--------------------------+-----------
     +     |        19            19  |         38
     -     |        40           111  |        151
-----------+--------------------------+-----------
   Total   |        59           130  |        189

这个表格表示的是:将样本分为 5 组,分别用其中一组为测试集集,然后用剩下的所有组的样本作为训练集,然后根据设置的阈值判断拟合的结果,这样循环 5 次使每一组都做过一次测试集。其中:纵坐标 + 表示拟合值等于 1 的数目,- 表示拟合值等于 0 的数目;横坐标 D 代表真实等于 1 的数目 ,~D 代表真实值等于 0 的数目。

  • 表格 3
Classified + if predicted Pr(D) >= .5
True D defined as  != 0
                                            Full         Test
----------------------------------------------------------------
Sensitivity                     Pr( +| D)   35.59%       32.20%
Specificity                     Pr( -|~D)   90.77%       85.38%
Positive predictive value       Pr( D| +)   63.64%       50.00%
Negative predictive value       Pr(~D| -)   75.64%       73.51%
----------------------------------------------------------------
False + rate for true ~D        Pr( +|~D)    9.23%       14.62%
False - rate for true D         Pr( -| D)   64.41%       67.80%
False + rate for classified +   Pr(~D| +)   36.36%       50.00%
False - rate for classified -   Pr( D| -)   24.36%       26.49%
----------------------------------------------------------------
Correctly classified                        73.54%       68.78%
----------------------------------------------------------------
ROC area                                    0.7462       0.6716
----------------------------------------------------------------
p-value for Full vs Test ROC areas                       0.0000
----------------------------------------------------------------

具体说明如下:

  • 第一列为变量名;
  • 第二列为变量的含义:比如 Pr( +| D) 代表在真实值为 1 的集合中,预测也为 1 的样本数量占真实值为 1 集合的比率,Pr( -|~D) 代表真实值为 0 的集合中,预测为 0 的样本占真实值为 0 集合中样本数目的比率)
  • 第三列为用全部数据训练模型得到的变量值;
  • 第四列为用交叉验证法训练模型得到的变量值。

Correctly classified 表示预测的准确率,也就是预测对的样本数占所有样本的数量。

ROC area 表示 AUC 值,也就是 ROC 曲线下方的面积。

对各种评价指标的计算及定义具体参考 《 机器学习:准确率 (Precision)、召回率 (Recall)、F值(F-Measure)、ROC 曲线、PR 曲线 》

4. 扩展阅读

  1. Efron B , Gong G . A Leisurely Look at the Bootstrap, the Jackknife, and Cross-Validation[J]. The American Statistician, 1983, 37(1):36-48. -PDF-
  2. Arlot S , Celisse A . A survey of cross-validation procedures for model selection[J]. Statistics Surveys, 2009, 4(2010):40-79. -PDF-
  3. Zhang Y , Yang Y . Cross-validation for selecting a model selection procedure[J]. Journal of Econometrics, 2015, 187(1):95-112. -PDF-

5. 参考资料

相关课程

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

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

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

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


关于我们

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

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

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

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

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