贝叶斯随机搜索变量选择gydF4y2Ba
这个例子展示了如何实现随机搜索变量选择(SSVS),一种用于线性回归模型的贝叶斯变量选择技术。gydF4y2Ba
简介gydF4y2Ba
考虑这个贝叶斯线性回归模型。gydF4y2Ba
回归系数gydF4y2Ba .gydF4y2Ba
.gydF4y2Ba
的干扰gydF4y2Ba .gydF4y2Ba
扰动方差gydF4y2Ba ,在那里gydF4y2Ba 逆分布是否具有形状gydF4y2Ba一个gydF4y2Ba和规模gydF4y2BaBgydF4y2Ba.gydF4y2Ba
变量选择的目标是在最终回归模型中只包括那些得到数据支持的预测因子。金宝app一种方法是分析gydF4y2Ba 模型的排列,称为gydF4y2Ba政权gydF4y2Ba,其中模型因所包含的系数而不同。如果gydF4y2Ba 则可以将模型的所有排列拟合到数据中,然后通过使用性能度量来比较模型,例如拟合优度(例如赤池信息准则)或预测均方误差(MSE)。然而,即使是中等的值gydF4y2Ba ,估计所有模型的排列是低效的。gydF4y2Ba
变量选择的贝叶斯观点是一个系数,被排除在模型之外,具有退化后验分布。也就是说,排除系数具有狄拉克δ分布,其概率质量集中于零。为了避免退化变量引起的复杂性,例如,被排除的系数的先验是一个均值为0且方差较小的高斯分布gydF4y2Ba .因为先验集中在0附近,所以后验也必须集中在0附近。gydF4y2Ba
所包含系数的先验可以为gydF4y2Ba ,在那里gydF4y2Ba 是否足够远离零和gydF4y2Ba 通常为零。这个框架意味着每个系数的先验是一个高斯混合模型。gydF4y2Ba
考虑潜在的二进制随机变量gydF4y2Ba ,gydF4y2Ba ,使:gydF4y2Ba
表明gydF4y2Ba 这gydF4y2Ba 包含在模型中。gydF4y2Ba
表明gydF4y2Ba 这gydF4y2Ba 从模型中排除。gydF4y2Ba
.gydF4y2Ba
的样本空间gydF4y2Ba 基数是gydF4y2Ba ,每个元素为agydF4y2Ba -D 0或1的向量。gydF4y2Ba
是一个小的正数和gydF4y2Ba .gydF4y2Ba
系数gydF4y2Ba 而且gydF4y2Ba ,gydF4y2Ba 都是独立的,先验的。gydF4y2Ba
SSVS的一个目标是估计后验状态概率gydF4y2Ba ,即决定是否应将相应系数纳入模型的估计值。鉴于gydF4y2Ba ,gydF4y2Ba 条件独立于数据。因此,对于gydF4y2Ba ,此方程表示该变量概率的全条件后验分布gydF4y2BakgydF4y2Ba包含在模型中:gydF4y2Ba
在哪里gydF4y2Ba 带标量均值的高斯分布的pdf是多少gydF4y2Ba 和方差gydF4y2Ba .gydF4y2Ba
计量经济学工具箱™有两个贝叶斯线性回归模型,指定SSVS的先验分布:gydF4y2BamixconjugateblmgydF4y2Ba
而且gydF4y2BamixsemiconjugateblmgydF4y2Ba
.前面介绍的框架描述了gydF4y2BamixconjugateblmgydF4y2Ba
模型。模型之间的区别在于gydF4y2Ba
而且gydF4y2Ba
是独立的,先验的,为什么gydF4y2BamixsemiconjugateblmgydF4y2Ba
模型。的先验方差gydF4y2Ba
是gydF4y2Ba
(gydF4y2Ba
)或gydF4y2Ba
(gydF4y2Ba
).gydF4y2Ba
决定使用哪个先验模型后,调用gydF4y2BabayeslmgydF4y2Ba
创建模型并指定超参数值。金宝app支持的超参数包括:gydF4y2Ba
拦截gydF4y2Ba
,一个逻辑标量,指定是否在模型中包含一个截距。gydF4y2BaμgydF4y2Ba
, a (gydF4y2BapgydF4y2Ba+ 1)-by-2矩阵,指定的先验高斯混合均值gydF4y2Ba .第一列包含对应于的组件的方法gydF4y2Ba ,第二列为对应的均值gydF4y2Ba .缺省情况下,所有means为0,表示实现SSVS。gydF4y2BaVgydF4y2Ba
, a (gydF4y2BapgydF4y2Ba+ 1)-by-2矩阵,指定的先验高斯混合方差因子(或方差)gydF4y2Ba .列对应于的列gydF4y2BaμgydF4y2Ba
.默认情况下,第一个分量的方差为gydF4y2Ba10gydF4y2Ba
第二个分量的方差是gydF4y2Ba0.1gydF4y2Ba
.gydF4y2Ba相关gydF4y2Ba
, a (gydF4y2BapgydF4y2Ba+ 1)————(gydF4y2BapgydF4y2Ba+ 1)正定矩阵,指定的先验相关矩阵gydF4y2Ba 对于两个组件。默认是单位矩阵,这意味着回归系数是不相关的,先验的。gydF4y2Ba概率gydF4y2Ba
, a (gydF4y2BapgydF4y2Ba+ 1)-D变量包含先验概率向量(gydF4y2Ba , k = 0,…,_p_)或自定义函数的函数句柄。gydF4y2Ba 而且gydF4y2Ba ,gydF4y2Ba ,是独立的,先验的。然而,使用函数句柄(gydF4y2Ba@functionnamegydF4y2Ba
),您可以提供一个自定义的先验分布,指定之间的依赖关系gydF4y2Ba 而且gydF4y2Ba .例如,您可以指定强制gydF4y2Ba 跳出模型,如果gydF4y2Ba 包括在内。gydF4y2Ba
创建模型后,将模型和数据传递给gydF4y2Ba估计gydF4y2Ba
.的gydF4y2Ba估计gydF4y2Ba
函数使用吉布斯采样器从完整的条件中采样,并估计的后验分布的特征gydF4y2Ba
而且gydF4y2Ba
.同时,gydF4y2Ba估计gydF4y2Ba
返回的后验估计gydF4y2Ba
.gydF4y2Ba
对于这个例子,考虑为美国失业率创建一个预测线性模型。你需要一个能很好概括的模型。换句话说,您希望通过删除所有冗余预测因子和所有与失业率不相关的预测因子来最小化模型的复杂性。gydF4y2Ba
加载和预处理数据gydF4y2Ba
加载美国宏观经济数据集gydF4y2BaData_USEconModel.matgydF4y2Ba
.gydF4y2Ba
负载gydF4y2BaData_USEconModelgydF4y2Ba
数据集包括MATLAB®时间表gydF4y2BaDataTimeTablegydF4y2Ba
,其中包含从1947年第一季度到2009年第一季度测量的14个变量;gydF4y2BaUNRATEgydF4y2Ba
是美国的失业率。请输入gydF4y2Ba描述gydF4y2Ba
在命令行。gydF4y2Ba
将所有系列画在同一个图中,但在不同的子图中。gydF4y2Ba
图tiledlayout (4, 4)gydF4y2Ba为gydF4y2Baj = 1:size(DataTimeTable,2) nexttile plot(DataTimeTable. time,DataTimeTable{:,j});标题(DataTimeTable.Properties.VariableNames (j));gydF4y2Ba结束gydF4y2Ba
所有系列除外gydF4y2BaFEDFUNDSgydF4y2Ba
,gydF4y2BaGS10gydF4y2Ba
,gydF4y2BaTB3MSgydF4y2Ba
,gydF4y2BaUNRATEgydF4y2Ba
似乎呈指数增长趋势。gydF4y2Ba
对那些具有指数趋势的变量应用对数变换。gydF4y2Ba
hasexpotrend = ~ismember(datatitable . properties . variablenames,gydF4y2Ba...gydF4y2Ba[gydF4y2Ba“FEDFUNDS”gydF4y2Ba“GD10”gydF4y2Ba“TB3MS”gydF4y2Ba“UNRATE”gydF4y2Ba]);DataTimeTableLog = varfun(@日志,DataTimeTable,gydF4y2Ba“数据源”gydF4y2Ba,gydF4y2Ba...gydF4y2BaDataTimeTable.Properties.VariableNames (hasexpotrend));DataTimeTableLog = [DataTimeTableLog .gydF4y2Ba...gydF4y2BaDataTimeTable (:, DataTimeTable.Properties.VariableNames (~ hasexpotrend)];gydF4y2Ba
DataTimeTableLoggydF4y2Ba
时间表就像gydF4y2BaDataTimeTablegydF4y2Ba
,但那些具有指数趋势的变量是对数尺度。gydF4y2Ba
在套索回归目标函数中,具有较大幅度的系数往往占惩罚的主导地位。因此,在实现套索回归时,变量具有相似的规模是很重要的。比较DataTimeTable中变量的规模gydF4y2Ba日志gydF4y2Ba
通过在同一轴上绘制它们的箱形图。gydF4y2Ba
图;箱线图(DataTimeTableLog。变量,gydF4y2Ba“标签”gydF4y2Ba, DataTimeTableLog.Properties.VariableNames);H = gcf;h.位置(3)= h.位置(3)*2.5;标题(gydF4y2Ba“可变箱形图”gydF4y2Ba);gydF4y2Ba
这些变量有相当相似的尺度。gydF4y2Ba
要调整先验高斯混合方差因子,请遵循以下步骤:gydF4y2Ba
将数据划分为估计样本和预测样本。gydF4y2Ba
将模型与估计样本相匹配并指定gydF4y2Ba ,gydF4y2Ba 而且gydF4y2Ba .gydF4y2Ba
使用拟合模型来预测预测范围内的响应。gydF4y2Ba
估计每个模型的预测MSE。gydF4y2Ba
选择预测MSE最低的模型。gydF4y2Ba
George和McCulloch提出了另一种调整先验方差的方法gydF4y2Ba 在gydF4y2Ba[1]gydF4y2Ba.gydF4y2Ba
为响应和预测数据创建估计和预测样本变量。指定4年(16个季度)的预测期限。gydF4y2Ba
Fh = 16;y = DataTimeTableLog。UNRATE(1:(end - fh)); yF = DataTimeTableLog.UNRATE((end - fh + 1):end); isresponse = DataTimeTable.Properties.VariableNames ==“UNRATE”gydF4y2Ba;X = DataTimeTableLog{1:(end - fh),~isresponse};XF = DataTimeTableLog{(end - fh + 1):end,~isresponse};p = size(X,2);gydF4y2Ba%预测因子的数量gydF4y2Bapredictornames = DataTimeTableLog.Properties.VariableNames(~isresponse);gydF4y2Ba
创建先验贝叶斯线性回归模型gydF4y2Ba
为SSVS创建先验贝叶斯线性回归模型gydF4y2BabayeslmgydF4y2Ba
并指定预测因子的数量、模型类型、预测因子名称和组件方差因子。假设gydF4y2Ba
而且gydF4y2Ba
都是相关的,先验的(gydF4y2BamixconjugateblmgydF4y2Ba
模型)。gydF4y2Ba
V1 = [10 50 100];V2 = [0.05 0.1 0.5];numv1 = nummel (V1);numv2 = numel(V2);PriorMdl = cell(numv1,numv2);gydF4y2Ba% PreallocategydF4y2Ba为gydF4y2BaK = 1:numv2gydF4y2Ba为gydF4y2Baj = 1: numv1 V = (V1 (j) * (p + 1, - 1)的V2 (k) * 1 (p + 1, - 1)];PriorMdl{j,k} = bayeslm(p,gydF4y2Ba“ModelType”gydF4y2Ba,gydF4y2Ba“mixconjugateblm”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“VarNames”gydF4y2Bapredictornames,gydF4y2Ba“V”gydF4y2Ba, V);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba
PriorMdlgydF4y2Ba
是一个3 × 3单元格数组,每个单元格包含一个gydF4y2BamixconjugateblmgydF4y2Ba
模型对象。gydF4y2Ba
的先验分布gydF4y2Balog_GDPgydF4y2Ba
对于其中的模型gydF4y2BaV2gydF4y2Ba
是0.5。gydF4y2Ba
为gydF4y2Baj = 1:numv1 [~,~,~,h] = plot(PriorMdl{j,3},gydF4y2Ba“VarNames”gydF4y2Ba,gydF4y2Ba“log_GDP”gydF4y2Ba);标题(sprintf (gydF4y2BaLog GDP, V1 = %g, V2 = %ggydF4y2BaV1 (j), V2 (3)));h.Tag = strcat(gydF4y2Ba“图”gydF4y2Banum2str (V1 (j)), num2str (V2 (3)));gydF4y2Ba结束gydF4y2Ba
的先验分布gydF4y2Ba
有gydF4y2Baspike-and-slabgydF4y2Ba形状。当gydF4y2BaV1gydF4y2Ba
值较低时,更多的分布集中在0附近,这使得算法更难为beta属性一个高值。然而,算法识别为重要的变量是正则化的,因为算法不会将高量级归因于相应的系数。gydF4y2Ba
当gydF4y2BaV1gydF4y2Ba
是高的,更多的密度发生在远离零的地方,这使得算法更容易将非零系数归因于重要的预测因子。然而,如果gydF4y2BaV1gydF4y2Ba
过高,那么重要的预测因子会有膨胀的系数。gydF4y2Ba
执行SSVS变量选择gydF4y2Ba
为了进行SSVS,估计后验分布使用gydF4y2Ba估计gydF4y2Ba
.使用吉布斯采样器的默认选项。gydF4y2Ba
PosteriorMdl = cell(numv1,numv2);PosteriorSummary = cell(numv1,numv2);rng (1);gydF4y2Ba%用于再现性gydF4y2Ba为gydF4y2BaK = 1:numv2gydF4y2Ba为gydF4y2Baj = 1:numv1 [PosteriorMdl{j,k},PosteriorSummary{j,k}] =估计(PriorMdl{j,k},X,y,gydF4y2Ba...gydF4y2Ba“显示”gydF4y2Ba、假);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba
中的每个单元格gydF4y2BaPosteriorMdlgydF4y2Ba
包含一个gydF4y2BaempiricalblmgydF4y2Ba
模型对象存储从吉布斯采样器提取的完整条件后验。中的每个单元格gydF4y2BaPosteriorSummarygydF4y2Ba
包含一个后验估计表。的gydF4y2Ba政权gydF4y2Ba
表变量表示变量包含的后验概率(gydF4y2Ba
).gydF4y2Ba
显示的后验估计表gydF4y2Ba .gydF4y2Ba
RegimeTbl = table(0 (p + 2,1),gydF4y2Ba“RowNames”gydF4y2Ba, PosteriorSummary {1} .Properties.RowNames);gydF4y2Ba为gydF4y2BaK = 1:numv2gydF4y2Ba为gydF4y2BaJ = 1:numv1 vname = strcat(gydF4y2Ba“V1_”gydF4y2Banum2str (V1 (j)),gydF4y2Ba“_”gydF4y2Ba,gydF4y2Ba“V2_”gydF4y2Banum2str (V2 (k)));Vname = replace(Vname,gydF4y2Ba“。”gydF4y2Ba,gydF4y2Ba“p”gydF4y2Ba);tmp = table(PosteriorSummary{j,k}。政权,gydF4y2Ba“VariableNames”gydF4y2Ba, vname);RegimeTbl = [RegimeTbl tmp];gydF4y2Ba结束gydF4y2Ba结束gydF4y2BaRegimeTbl。Var1 = []; RegimeTbl
RegimeTbl =gydF4y2Ba15×9表gydF4y2BaV1_10__V2_0p05 V1_50__V2_0p05 V1_100__V2_0p05 V1_10__V2_0p1 V1_50__V2_0p1 V1_100__V2_0p1 V1_10__V2_0p5 V1_50__V2_0p5 V1_100__V2_0p5 ______________ ______________ _______________ _____________ _____________ ______________ _____________ _____________ ______________ 截距0.9692 - 1 1 1 1 0.9487 0.9999 0.9501 1 log_COE 0.4686 0.4586 0.5102 0.4487 0.3919 0.4785 0.4575 0.4147 0.4284 log_CPIAUCSL 0.9713 0.3713 0.4088 0.971 0.3698 0.3856 0.962 0.3714 0.3456 0.9999 log_GCE 1 1 0.9959 0.9978 1 1 1 1log_GDP 1 0.7895 0.9921 0.9982 0.7859 0.9959 0.7908 0.9975 0.9999 log_GDPDEF 0.9977 0.9996 1 1 1 1 1 1 1 log_GPDI 1 1 1 1 1 1 1 1 1 log_GS10 1 1 1 1 0.9992 0.9991 0.9887 0.9992 0.994 log_HOANBS 0.9996 1 1 1 1 0.9763 - 1 1 log_M1SL 1 1 1 1 1 1 1 1 1 log_M2SL 0.9989 0.9993 0.9913 0.9996 0.9998 0.9754 0.9951 0.9983 0.9856 0.4457 log_PCEC FEDFUNDS 0.6366 0.8421 0.4435 0.6226 0.8342 0.4614 0.624 0.85 0.0762 0.0386 0.0237 0.0951 0.0465 0.0343 0.1856 0.0953 0.068 0.2473 0.1788 0.1467 0.2014 TB3MS0.1338 0.1095 0.2234 0.1185 0.0909 Sigma2楠楠楠楠楠楠楠楠楠gydF4y2Ba
使用0.10的任意阈值,所有模型都同意这一点gydF4y2BaFEDFUNDSgydF4y2Ba
是一个无关紧要或多余的预测器。当gydF4y2BaV1gydF4y2Ba
高,gydF4y2BaTB3MSgydF4y2Ba
近乎微不足道。gydF4y2Ba
使用估计的模型预测响应并计算预测的mse。gydF4y2Ba
Yhat = 0 (fh,numv1*numv2);Fmse = 0 (numv1,numv2);gydF4y2Ba为gydF4y2BaK = 1:numv2gydF4y2Ba为gydF4y2BaJ = 1:numv1 idx = ((k - 1)*numv1 + J);yhat(:,idx) = forecast(PosteriorMdl{j,k},XF);fmse(j,k) =√(mean(yF - yhat(:,idx)).^2));gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba
确定产生最小预测MSE的方差因子设置。gydF4y2Ba
Minfmse = min(fmse,[],gydF4y2Ba“所有”gydF4y2Ba);[idxminr,idxminc] = find(abs(minfmse - fmse) < eps);bestv1 = V1(idxminr)gydF4y2Ba
Bestv1 = 100gydF4y2Ba
bestv2 = V2(idxminc)gydF4y2Ba
Bestv2 = 0.0500gydF4y2Ba
使用整个数据集和产生最小预测MSE的方差因子设置来估计SSVS模型。gydF4y2Ba
XFull = [X;XF);yFull = [y;yF];EstMdl =估计(PriorMdl{idxminr,idxminc},XFull,yFull);gydF4y2Ba
方法:MCMC抽样10000张,观测数:20114 |意味着性病CI95积极的分配制度 ------------------------------------------------------------------------------------- 拦截| 29.4598 - 4.2723[21.105,37.839]1.000经验1 log_COE | 3.5380 - 3.0180[-0.216, 9.426] 0.862经验0.7418 log_CPIAUCSL | -0.6333 - 1.7689[-5.468, 2.144] 0.405经验0.3711 log_GCE | -9.3924 - 1.4699[-12.191, -6.494] 0.000经验1 log_GDP | 16.5111 - 3.7131[9.326, 23.707] 1.000经验1 log_GDPDEF | 13.0146 - 2.3992 (9.171,19.131] 1.000 Empirical 1 log_GPDI | -5.9537 0.6083 [-7.140, -4.756] 0.000 Empirical 1 log_GS10 | 1.4485 0.3852 [0.680, 2.169] 0.999 Empirical 0.9868 log_HOANBS | -16.0240 1.5361 [-19.026, -13.048] 0.000 Empirical 1 log_M1SL | -4.6509 0.6815 [-5.996, -3.313] 0.000 Empirical 1 log_M2SL | 5.3320 1.3003 [2.738, 7.770] 0.999 Empirical 0.9971 log_PCEC | -9.9025 3.3904 [-16.315, -2.648] 0.006 Empirical 0.9858 FEDFUNDS | -0.0176 0.0567 [-0.125,0.098] 0.378 Empirical 0.0269 TB3MS | -0.1436 0.0762 [-0.299, 0.002] 0.026 Empirical 0.0745 Sigma2 | 0.2891 0.0289 [0.238, 0.352] 1.000 Empirical NaNgydF4y2Ba
EstMdlgydF4y2Ba
是一个gydF4y2BaempiricalblmgydF4y2Ba
表示执行SSVS结果的模型。你可以使用gydF4y2BaEstMdlgydF4y2Ba
例如,用未来预测数据来预测失业率。gydF4y2Ba
参考文献gydF4y2Ba
[1]gydF4y2Ba乔治,e。I。和r。e。麦卡洛克。"通过吉布斯抽样的变量选择"gydF4y2Ba美国统计协会杂志gydF4y2Ba.第88卷,第423号,1993年,第881-889页。gydF4y2Ba
另请参阅gydF4y2Ba
估计gydF4y2Ba
|gydF4y2BasampleroptionsgydF4y2Ba