贝叶斯套索回归

这个例子展示了如何使用贝叶斯套索回归进行变量选择。

套索回归是一种线性回归技术,它结合了正则化和变量选择。正则化通过降低回归系数的大小有助于防止过度拟合。套索回归的频率论观点不同于其他正则化技术,如岭回归,因为套索属性s值正好等于0,回归系数对应于不重要或冗余的预测值。

考虑这个多元线性回归模型:

$$y=\beta\u 0 1\u n+X\beta+\varepsilon$$

  • $ Y $是一个向量N响应。

  • $ X $是矩阵P相应的观察到预测变量。

  • $\beta$是一个向量P回归系数。

  • $\beta\u 0$是截距。

  • 一美元$是一段长度N者的列向量。

  • $ \ $ varepsilon是独立同分布的高斯干扰用0和方差的平均的随机矢量$\sigma^2$.

套索回归的频率观的目标函数是

$$f\left({\beta\u 0,beta;y,X}\right)=0.5\left\{y-\beta\u 0 1\u n+X\beta}\right\\124; u 2^2+\lambda\left\\124;\ beta\right\\u 1^2$$

$\lambda$是惩罚(或收缩)项,与其他参数不同,它不适合数据。必须为指定值$\lambda$在估计之前,最好的做法是调整它。在指定值之后,$f$相对于回归系数,最小。得到的系数是lasso估计。有关套索回归的频繁者视图的更多详细信息,请参阅[182].

对于这个例子,考虑建立一个预测线性模型的美国失业率。你需要一个能很好概括的模型。换句话说,您希望通过删除所有冗余预测值和所有与失业率不相关的预测值来最小化模型复杂性。

加载和预处理数据

加载美国宏观经济数据集数据_USEconModel.mat.

负载数据模型

数据集包括MATLAB®时间表数据表,其中包含从1947年第一季度到2009年第一季度测量的14个变量;解开是美国失业率。有关详细信息,请输入描述在命令行。

在同一图形中绘制所有系列,但在单独的子地块中绘制。

图形对于j=1:size(DataTable,2)子图(4,4,j)plot(DataTable.Time,DataTable{:,j});title(DataTable.Properties.VariableNames(j));终止

所有系列,除联邦基金,GS10,TB3MS解开似乎有指数趋势。

将对数变换应用于具有指数趋势的变量。

haseExpoTrend=~ismember(DataTable.Properties.VariableNames,......[“联邦基金”“GD10”“TB3MS”“取消分级”]); DataTableLog=varfun(@log,DataTable,“输入变量”,......VariableNames(haseExpoTrend));DataTableLog=[DataTableLog DataTable(:,DataTable.Properties.VariableNames(~hasexpotrend));

数据表日志时间表是什么样的数据表,但具有指数趋势的变量在对数尺度上。

在lasso回归目标函数中,具有相对较大量级的系数往往主导惩罚。因此,在实施lasso回归时,变量具有相似的尺度非常重要。比较中变量的尺度数据表日志通过在同一轴上绘制方框图。

图:箱线图(DataTableLog.Variables,“标签”,DataTableLog.Properties.VariableNames);h=gca;h.XTickLabelRotation=45;title(“可变方框图”);

这些变量具有相当相似的尺度。

要确定时间序列模型的泛化程度,请遵循以下步骤:

  1. 将数据划分为估计和预测样本。

  2. 将模型与估计样本相匹配。

  3. 使用拟合模型预测预测范围内的响应。

  4. 估计每个模型的预测均方误差(FMSE)。

  5. 选择FMSE最低的型号。

创建估计,为响应和预测数据的预测样本变量。指定的4年(16个季度)预测地平线。

fh=16;y=DataTableLog.UNRATE(1:(end-fh));yF=DataTableLog.UNRATE((end-fh+1):end);isresponse=DataTable.Properties.VariableNames==“取消分级”; X=DataTableLog{1:(end-fh),~isresponse};XF=DataTableLog{(end-fh+1):end,~isresponse};p=尺寸(X,2);%预测数predictornames=DataTableLog.Properties.VariableNames(~isresponse);

拟合简单线性回归模型

将简单线性回归模型拟合到估计样本。指定变量名称(响应变量的名称必须是最后一个元素)。提取P-值。使用5%的显著性水平确定不显著系数。

SLRMdlFull=fitlm(X,y,“VarNames”,DataTableLog.Properties.VariableNames)slrPValue=SLRMdlFull.coefficientname;isInSig=SLRMdlFull.coefficientname(slrPValue>0.05)
SLRMdlFull =线性回归模型:UNRATE〜[线性公式在13个预测14项]估计系数:估计SE TSTAT p值________ _______ __________(截距)88.014 5.3229 16.535 2.6568e-37 log_COE 7.1111 2.3426 3.0356 0.0027764 log_CPIAUCSL -3.4032 2.4611 -1.38280.16853 log_GCE -5.63 1.1581 -4.8615 2.6245e-06 log_GDP 14.522 3.9406 3.6851 0.00030659 log_GDPDEF 11.926 2.9298 4.0704 7.1598e-05 log_GPDI -2.5939 0.54603 -4.7504 4.2792e-06 log_GS10 0.57467 0.29313 1.9605 0.051565 log_HOANBS -32.861 1.4507 -22.652 2.3116e-53 log_M1SL-3.3023 0.53185 -6.209 3.914e-09 log_M2SL -1.3845 1.0438 -1.3264 0.18647 log_PCEC -7.143 3.4302 -2.0824 0.038799 FEDFUNDS 0.044542 0.047747 0.93287 0.3522 TB3MS -0.1577 0.064421 -2.448 0.015375观察数:185,错误自由度:171均方根错误:0.312 R平方:0.957,调整R平方:0.954 F统计与常数模型:292,p值= 2.26e-109 isInSig = 1×4单元阵列{ 'log_CPIAUCSL'} {'升og_GS10 '} {' log_M2SL '} {' FEDFUNDS'}

SLRMdlFull是A.线性模型模型对象P-数值表明,在5%的显著性水平下,CPIAUCSL,GS10,M2SL联邦基金这些都是无关紧要的变量。

在预测数据中不含不显著变量的情况下,重新构建线性模型。使用完整模型和简化模型,将失业率预测到预测范围内,然后估计FMSE。

idxreduced=~ismember(预测名称,isInSig);XReduced=X(:,idxreduced);SLRMdlReduced=fitlm(XReduced,y,“VarNames”,[Predictor名称(idxreduced){“取消等级”}]); yFSLRF=预测(SLRMdlFull,XF);yFSLRR=预测(SLRMdlReduced,XF(:,idxreduced));fmseSLRF=sqrt(平均值((yF-yFSLRF)。^2))fmseSLRF=sqrt(平均值((yF-yFSLRF)。^2))
fmseSLRF=0.6674 fmseSLRR=0.6105

简化模型的FMSE小于全模型的FMSE,表明简化模型具有更好的泛化能力。

适合频率论套索回归模型

将套索回归模型拟合到数据。使用默认正则化路径。套索默认情况下,标准化数据。因为变量的比例相似,所以不要标准化它们。返回有关沿规则化路径拟合的信息。

[套索估计值,FitInfo]=套索(X,y,“标准化”错误的......“预测器名称”,predictornames);

默认情况下,套索通过使用一系列值来拟合100次lasso回归模型$\lambda$因此拉索贝塔估计值是回归系数估计的13×100矩阵。行对应于中的预测变量X,列与的值相对应$\lambda$.FitInfo是一个包含$\lambda$(FitInfo.Lambda)时,均方误差为各装配(FitInfo.MSE),以及所估计的截距(截取).

计算由返回的每个模型的FMSE套索.

yFLasso=FitInfo.Intercept+XF*LassObetae估计值;Fmelasso=sqrt(平均值((yF-yFLasso)。^2,1));

绘制回归系数的幅度相对于所述收缩值。

hax=lassoPlot(LassoBetaEstimates,FitInfo);L1Vals=hax.Children.XData;yyaxis正当h=绘图(L1VAL,Fmso,“线宽”2.“线条样式”,'--'); 图例(h,“FMSE”,'地点',“西南”);ylabel(“FMSE”);头衔(“常客套索”)

具有7个预测因子(df=7)的模型似乎能很好地平衡最小FMSE和模型复杂性。获得对应于包含7个预测器且产生最小FMSE的模型的系数。

fmsebestlasso=min(fmseLasso(FitInfo.DF==7));idx=fmseLasso==fmsebestlasso;bestLasso=[FitInfo.Intercept(idx);LassoBetaEstimates(:,idx)];表格(bestLasso,'RowNames',[“拦截”(名称])
ANS = 14x1表bestLasso _________截取61.154 log_COE 0.042061 log_CPIAUCSL 0 log_GCE 0 log_GDP 0 log_GDPDEF 8.524 log_GPDI 0 log_GS10 1.6957 log_HOANBS -18.937 log_M1SL -1.3365 log_M2SL 0.17948 log_PCEC 0 FEDFUNDS 0 TB3MS -0.14459

频繁套索分析表明,变量CPIAUCSL,普通中等教育,国内生产总值,GPDI,PCEC联邦基金要么微不足道,要么多余。

拟合贝叶斯套索回归模型

在套索回归的贝叶斯观点中,回归系数的先验分布是拉普拉斯(双指数),平均值为0,尺度为1$\sigma/\lambda$哪里$\lambda$是固定收缩参数,并且$ \西格马^ 2 \ SIM IG(A,B)$.有关更多详细信息,请参阅拉索膜.

就像套索回归的常客观点一样,如果你增加$\lambda$,则所得模型的稀疏性单调增加。然而,与频率套索不同,贝叶斯套索具有不显著或冗余的系数模式,这些模式不完全为0。相反,估计值具有后验分布,并且如果0周围的区域具有高密度,则估计值不显著或冗余。

在MATLAB®中实现贝叶斯套索回归时,请注意统计和机器学习工具箱之间的一些差异™ 作用套索以及计量经济学工具箱™ 对象拉索膜和其相关的功能。

  • 拉索膜是一个对象的框架的一部分,而套索是一个函数。对象框架简化了计量经济学工作流程。

  • 不像套索,拉索膜不标准化预测数据。但是,可以为每个系数提供不同的收缩值。此功能有助于保持系数估计值的可解释性。

  • 拉索膜将一个收缩值应用于每个系数;它不接受类似的正则化路径套索.

因为拉索膜框架适用于对每个系数的一个收缩值执行贝叶斯套索回归,您可以使用for循环在正则化路径上执行套索。

使用创建贝叶斯套索回归先验模型贝斯姆. 指定预测变量的数量和变量名称。显示存储在中的每个系数的默认收缩值兰姆达模型的属性。

PriorMdl = bayeslm(P,“模型类型”,“套索”,“VarNames”,预测器名称);表(PriorMdl.Lambda,'RowNames',PriorMdl.VarNames)
ANS = 14x1表VAR1 ____截取0.01 log_COE 1 log_CPIAUCSL 1 log_GCE 1 log_GDP 1 log_GDPDEF 1 log_GPDI 1 log_GS10 1 log_HOANBS 1 log_M1SL 1 log_M2SL 1 log_PCEC 1 FEDFUNDS 1 TB3MS 1

PriorMdl是A.拉索膜模型对象。拉索膜属性的收缩1.对于每个系数,截距除外,截距的收缩率为0.01。这些默认值在大多数应用程序中可能没有用处;最佳做法是使用许多值进行试验。

考虑返回的正则化路径套索.的因数膨胀收缩值$n/\sqrt(毫秒)$哪里$ MSE_j $套索的最小均方误差是多少$j$,$j$通过收缩值的数量=1。

ismissing=any(isnan(X),2);n=sum(~ismissing);%有效样本量lambda=FitInfo.lambda*n./sqrt(FitInfo.MSE);

考虑返回的正则化路径套索.在每次迭代时循环收缩值:

  1. 估计回归系数和干扰方差的给定的收缩率和数据的后验分布。因为预测值的尺度接近,属性相同的收缩每个预测,和属性的收缩0.01到截距。存储后验平均值和95%可信区间。

  2. 对于套索图,如果95%可信区间包括0,则将相应的后验平均值设置为0。

  3. 预测进入预测范围。

  4. 估计FMSE。

numlambda=numel(λ);%预先分配Bayeslasscoefficients=zeros(p+1,numlambda);Bayeslasscoci95=zeros(p+1,2,numlambda);fmseBayesLasso=zeros(numlambda,1);BLCPlot=zeros(p+1,numlambda);%估计和预测rng(10);%为了再现性对于j=1:numlambda PriorMdl.Lambda=Lambda(j);[EstMdl,Summary]=估计值(PriorMdl,X,y,“显示”,false);Bayeslasscoefficients(:,j)=Summary.Mean(1:,end-1));BLCPlot(:,j)=Summary.Mean(1:,end-1));Bayeslasscocients(:,j)=Summary.CI95(1:,end-1),;idx=Bayeslasscoci95(:,end-1,j)<=0;BLCPlot(idx,j)=0;yFBayesLasso=forecast(EstMdl,XF);Fmsebayeslassaso(j)=sqrt(Mean)(Mean)(yF-yF));Bayeso;终止

在每次迭代中,估计运行吉布斯采样从全样本条件表达式(见解析可处理后验概率)并返回empiricalblm模型estmdl.,其中包含绘图和估算汇总表总结。您可以指定Gibbs采样器的参数,例如绘制数或细化方案。

一个好的做法是通过检查跟踪地块诊断后的样品。然而,由于100个分布绘制,本实施例情况下,不执行该步骤。

积系数的后部手段相对于归一化的L1处罚(系数的除截距幅度的总和)。在同样的情节,但在右边的Y轴,绘制FMSEs。

L1VAL=sum(abs(BLCPlot(2:end,:)),1)/max(sum(abs(BLCPlot(2:end,:)),1));图;绘图(L1VAL,BLCPlot(2:end,:))xlabel(“L1”);ylabel(“系数估计”);YY轴正当h=绘图(L1VAL、FmSebayeslaso、,“线宽”2.“线条样式”,'--'); 图例(h,“FMSE”,'地点',“西南”);ylabel(“FMSE”);头衔(“贝叶斯套索”)

该模型趋向于更好地概括为标准化L1罚过去增加0.1。为了平衡最小FMSE和模型的复杂性,应选择FMSE最接近0.68最简单的模型。

idx=find(FmSebayesSlasso>0.68,1);fmseBayesLasso=FmSebayesSlasso(idx);bestBayesLasso=BayesLasso效率(:,idx);bestCI95=BayesLassoCI95(:,:,idx);table(bestBayesLasso,bestCI95,'RowNames',[“拦截”(名称])
ANS = 14x2表bestBayesLasso bestCI95 ______________ ______________________截取90.587 79.819 101.62 log_COE 6.5591 1.8093 11.239 log_CPIAUCSL -2.2971 -6.9019 1.7057 -5.1707 log_GCE -7.4902 -2.8583 log_GDP 9.8839 2.3848 17.672 log_GDPDEF 10.281 5.1677 15.936 log_GPDI -2.0973 -3.2168 -0.96728 log_GS10 0.82485 0.22748 1.4237 log_HOANBS  -32.538 -35.589 -29.526 log_M1SL -3.0656 -4.1499 -2.0066 -1.1007 log_M2SL -3.1243 0.75844 log_PCEC -3.3342 -9.6496 1.8482 FEDFUNDS 0.043672 -0.056192 0.14254 TB3MS -0.15682 -0.29385 -0.022145

确定变量是否不重要或冗余的一种方法是检查0是否在其相应的系数95%可信区间内。用这个标准,,CPIAUCSL,M2SL,PCEC联邦基金是微不足道的。

在表中显示所有的估计进行比较。

SLRR=0(p+1,1);SLRR([true idxreduced])=SLRMdlReduced.coverties.Estimate;table([SLRMdlFull.coverties.Estimate;fmseslr],......[SLRR;fmseSLRR],......[最佳套索;最佳套索],......[bestBayesLasso;fmsebestbayeslasso],'variablenames',......{“SLRFull”'SLRReduced'“套索”“贝斯拉索”},......'RowNames',[PriorMdl.VarNames;“MSE”])
4.表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,全部,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表,表_GDPDEF 11.926 9.1106 8.524 10.281 log_GPDI-2.5939-2.6963 0-2.0973 log_GS10 0。57467 0 1.6957 0.82485对数霍恩-32.861-33.782-18.937-32.538对数M1SL-3.3023-2.8099-1.3365-3.0656对数M2SL-1.3845 0.17948-1.1007对数PCEC-7.143-14.2070-3.3342 FEDFUNDS 0.044542 0 0.043672 TB3MS-0.1577-0.078449-0.14459-0.156809

选择模型后,使用整个数据集对其进行重新估计。例如,要创建预测性贝叶斯套索回归模型,请创建一个先验模型,并指定产生最小FMSE的最简单模型的收缩率,然后使用整个数据集对其进行估计。

bestLambda=lambda(idx);PriorMdl=bayeslm(p,“模型类型”,“套索”,“拉姆达”,bestLambda,......“VarNames”,predictor name);后验概率mdl=估计值(PriorMdl[X;XF],[y;yF]);
方法:lasso MCMC抽样10000次,观察次数:201个预测数:14 |平均Std CI95正分布----------------------------------------------------------------------截距| 85.9643 5.2710[75.544,96.407]1.000经验对数| 12.3574 2.1817[8.001,16.651]1.000经验对数| 0.14981.9150[-3.733,4.005]0.525经验对数|-7.1850 1.0556[-9.208,-5.101]0.000经验对数| 11.8648 3.9955[4.111,19.640]0.999经验对数| GDPDEF 8.8777 2.4221[4.033,13.745]1.000经验对数1240GPDI-2.84-10.690][0.194,1.197]0.997经验对数|-32.3356 1.4941[-35.276,-29.433]0.000经验对数|-2.2279 0.5043[-3.202,-1.238]0.000经验对数| 0.3617 0.9123[-1.438,2.179]0.652经验对数|-11.3018 3.0353[-17.318,-1.252 0.000经验对数1240.040]0.392经验TB3MS |-0.1128 0.0660[-0.244,0.016]0.042经验Sigma2 | 0.1186 0.0122[0.097,0.145]1.000经验

另见

||

相关话题