mixconjugateblm
随机搜索变量选择的共轭先验贝叶斯线性回归模型
描述
一般来说,当您创建贝叶斯线性回归模型对象时,它只指定线性回归模型的联合先验分布和特征。也就是说,模型对象是一个用于进一步使用的模板。具体而言,将数据纳入模型进行后验分布分析和特征选择,将模型对象和数据传递给相应的对象目标函数。
创建
描述
属性
您可以在使用名称-值对参数语法创建模型对象时设置可写属性值,或者在使用点表示法创建模型对象之后设置可写属性值。例如,要从模型中排除一个截距,请输入
PriorMdl。拦截=假;
NumPredictors
- - - - - -预测变量数量
非负整数
贝叶斯多元线性回归模型中的预测变量数,指定为非负整数。
NumPredictors
必须与您在模型估计或模拟期间指定的预测器数据中的列数相同。
当指定NumPredictors
,排除该值的任何截取项。
在创建模型之后,如果您更改的值NumPredictors
使用点表示法,然后这些参数恢复为默认值:
变量名称(
VarNames
)的先验平均值β(
μ
)的先验方差β对于每个政权(
V
)的先验相关矩阵β(
相关
)先前状态概率(
概率
)
数据类型:双
拦截
- - - - - -包含回归模型截距的标志
真正的
(默认)|假
包含回归模型截距的标志,在该表中指定为一个值。
价值 | 描述 |
---|---|
假 |
从回归模型中排除一个截距。因此,β是一个p -维向量,其中p 的值是NumPredictors 。 |
真正的 |
在回归模型中包含一个截距。因此,β是吗?p + 1)维向量。此规范导致T在估计和模拟过程中,预加到预测器数据的1乘1向量。 |
如果在一个截距项的预测数据中包含一列1,则设置拦截
来假
。
例子:“拦截”,假的
数据类型:逻辑
VarNames
- - - - - -预测变量名称
字符串向量|字符向量的细胞向量
显示的预测变量名,指定为字符串向量或字符向量的单元向量。VarNames
必须包含NumPredictors
元素。VarNames (
变量的名称在列中吗j
)j
您在估计、模拟或预测期间指定的预测器数据集的。
默认值为β{β(1),(2),…,β(
,在那里p
)}p
的值是NumPredictors
。
例子:“VarNames”,(“失业率会”;“CPI”)
数据类型:字符串
|细胞
|字符
μ
- - - - - -先验高斯混合的分量平均超参数β
0 (Intercept + NumPredictors,2)
(默认)|数字矩阵
先验高斯混合的分量平均超参数β,指明为一个(截距+ NumPredictors
) × 2数值矩阵。第一列包含成分1的先验均值(变量包含机制,即,γ= 1)。第二列包含分量2的先验均值(变量排除机制,即γ= 0)。
如果
拦截
是假
,然后μ
有NumPredictors
行。mixconjugateblm
的先验均值NumPredictors
与预测器数据集中的列相对应的系数,在估计、模拟或预测期间指定。否则,
μ
有NumPredictors + 1
元素。第一个元素对应于截距的先验均值,所有其他元素对应于预测变量。
提示
如果使用SSVS,请使用缺省值μ
。
例子:在3系数模型中,“亩”,[0.5 0;0.5 0;0.5 0]
设置所有系数的分量1先验均值为0.5
将所有系数的先验均值设为0
。
数据类型:双
V
- - - - - -高斯混合先验分量方差因子超参数β
repmat([100.1],Intercept + NumPredictors,1)
(默认)|正数矩阵
先验高斯混合的分量方差因子超参数β,一个(截距+ NumPredictors
) × 2正数矩阵。第一列包含成分1的先验方差因子(变量包含制度,即,γ= 1)。第二列包含成分2的先验方差因子(变量排除机制,即γ= 0)。无论制度或系数如何,系数的先验方差是方差因子乘以σ2。
如果
拦截
是假
,然后V
有NumPredictors
行。mixconjugateblm
的先验方差因子NumPredictors
与预测器数据集中的列相对应的系数,在估计、模拟或预测期间指定。否则,
V
有NumPredictors + 1
元素。第一个元素对应于截距的先验方差因子,所有其他元素对应于预测变量。
提示
为了执行SSVS,为制度1指定一个比制度2更大的方差因子(对所有人来说)
j
,指定V (
>j
, 1)V (
)。j
,2)有关要指定的值的详细信息
V
,请参阅[1]。
例子:在3系数模型中,“V”,[100 1;100年1;100 (1)
将所有系数的分量1先验方差因子设为One hundred.
并将所有系数的分量2先验方差因子设为1
。
数据类型:双
概率
- - - - - -变量包含和排除机制的先验概率分布
0.5*ones(Intercept + NumPredictors,1)
(默认)|[0,1]中的数值向量|函数处理
变量包含和排除机制的先验概率分布,指定为一个(拦截
+NumPredictors
) × 1的数值向量,包含[0,1]中的值,或形式的函数句柄@fcnName
,在那里fcnName
是函数名。概率
表示的先验概率分布γ= {γ1、……γK},:
K=
拦截
+NumPredictors
,即回归模型中系数的个数。γk∈{0,1}fork=1、……K。因此,样本空间的基数为2K。
γk= 1表示变量
VarNames
(
包含在模型中,并且γk= 0表示该变量被排除在模型之外。k
)
如果概率
是一个数值向量:
中的变量名对应
VarNames
。对于包含截距的模型,截距包含的先验概率为概率(1)
。为
= 1,…,K,为排除变量的先验概率k
是1 -k
概率(
k
)。在所有变量和截距之间,变量包含体系的先验概率是独立的。
如果概率
是一个函数句柄,则它表示变量包含状态概率的自定义先验分布。对应的函数必须有这样的声明语句(参数和函数名可以不同):
Logprob = regimeprior(变)
logprob
是表示先验分布的对数的数字标量。你可以把先验分布写成比例常数。varinc
是一个K-by-1逻辑向量。元素对应的变量名VarNames
并指出相应变量所处的状态。varinc (
=k
)真正的
表明VarName (
包含在模型中,并且k
)varinc (
=k
)假
指示它被排除在模型之外。
您可以包含更多的输入参数,但是在调用时必须知道它们mixconjugateblm
。
有关要指定的值的详细信息概率
,请参阅[1]。
例子:在3系数模型中,“概率”,兰德(3,1)
为每个系数分配随机先验变量包含概率。
数据类型:双
|function_handle
相关
- - - - - -的先验相关矩阵β
eye(Intercept + NumPredictors)
(默认)|数值正定矩阵
的先验相关矩阵β对于混合模型中的两个组件,指定为一个(拦截
+NumPredictors
)——- (拦截
+NumPredictors
)数字的,正定的矩阵。因此,分量的先验协方差矩阵
在混合模型中是j
sigma2 *诊断接头(sqrt (V (:,
,在那里j
))) *相关性*诊断接头(sqrt (V (:,j
)))sigma2
是σ2和V
是系数方差因子的矩阵。
中的行和列对应于变量名VarNames
。
默认情况下,回归系数是不相关的,取决于制度。
请注意
您可以提供任何适当大小的数字矩阵。但是,如果您的说明不是肯定的,mixconjugateblm
发出警告并将您的规范替换为CorrelationPD
,地点:
CorrelationPD = 0.5*(Correlation + Correlation.');
有关要指定的值的详细信息相关
,请参阅[1]。
数据类型:双
一个
- - - - - -逆先验的形状超参数σ2
3.
(默认)|数字标量
先验逆的形状超参数σ2,指定为数字标量。
一个
至少是这样- (Intercept + NumPredictors)/2
。
与B
当保持不变时,逆伽马分布变得更高更集中一个
增加。该特性对先前的模型进行加权σ2比后验估计时的似然更重。
有关反分布的函数形式,请参见分析易于处理的后躯。
例子:“一个”,0.1
数据类型:双
B
- - - - - -反演先验的尺度超参数σ2
1
(默认)|积极的标量|正
反演先验的尺度参数σ2,指定为正标量或正
。
与一个
当保持不变时,逆伽马分布变得更高更集中B
增加。该特性对先前的模型进行加权σ2比后验估计时的似然更重。
例子:“B”,5
数据类型:双
对象的功能
例子
为SSVS创建先验模型
考虑一下预测美国实际国民生产总值(gdp)的线性回归模型(GNPR
),利用工业生产指数(新闻学会
)、总就业人数(E
)和实际工资(或者说是
)。
对所有 , 是一系列均值为0,方差为0的独立高斯扰动 。
假设这些先验分布 = 0,…,3:
,在那里 和 是独立的标准正态随机变量。因此,系数具有高斯混合分布。假设所有系数都是条件独立的,先验的,但它们依赖于干扰方差。
。 和 分别为逆伽玛分布的形状和尺度。
它表示随机变量-包含制度变量的离散均匀分布。
为SSVS创建一个先验模型。指定预测器的数量p
。
P = 3;PriorMdl = mixconjugateblm(p);
PriorMdl
是一个mixconjugateblm
贝叶斯线性回归模型对象表示回归系数和扰动方差的先验分布。mixconjugateblm
在命令行显示先前发行版的摘要。
或者,您可以通过将预测器的数量传递给ssv来创建一个先验模型bayeslm
然后设置ModelType
名称-值对参数“mixconjugate”
。
MdlBayesLM = bayeslm(p,“ModelType”,“mixconjugate”)
MdlBayesLM = mixconjugateblm with properties: NumPredictors: 3 Intercept: 1 VarNames: {4x1 cell} Mu: [4x2 double] V: [4x2 double]概率:[4x1 double]相关性:[4x4 double] A: 3 B:1 |意味着性病CI95积极的分布 ------------------------------------------------------------------------------ 拦截| 0 1.5890[-3.547,3.547]0.500混合分布β(1)| 0 1.5890[-3.547,3.547]0.500混合分布β(2)| 0 1.5890[-3.547,3.547]0.500混合分布β(3)| 0 1.5890[-3.547,3.547]0.500混合分布Sigma2 | 0.5000 - 0.5000[0.138, 1.616] 1.000搞笑(3.00,1)
Mdl
和MdlBayesLM
是等效的模型对象。
您可以使用点表示法设置已创建模型的可写属性值。将回归系数名称设置为对应的变量名称。
PriorMdl。VarNames=[“他们”“E”“福”]
PriorMdl = mixconjugateblm with properties: NumPredictors: 3 Intercept: 1 VarNames: {4x1 cell} Mu: [4x2 double] V: [4x2 double]概率:[4x1 double]相关性:[4x4 double] A: 3 B:1 |意味着性病CI95积极的分布 ------------------------------------------------------------------------------ 拦截| 0 1.5890[-3.547,3.547]0.500混合分布IPI | 0 1.5890[-3.547, 3.547] 0.500混合分布E | 0 1.5890[-3.547, 3.547] 0.500混合分布WR | 0 1.5890[-3.547, 3.547] 0.500混合分布Sigma2 | 0.5000 - 0.5000[0.138, 1.616] 1.000搞笑(3.00,1)
MATLAB®将变量名称与显示器中的回归系数关联起来。
绘制先验分布。
情节(PriorMdl);
每个系数的先验分布是两个高斯分布的混合:两个分量的平均值都为零,但分量1相对于分量2有很大的方差。因此,它们的分布以0为中心,具有spike-and-slab外观。
使用SSVS和默认选项执行变量选择
考虑中的线性回归模型为SSVS创建先验模型。
创建执行SSVS的先验模型。假设
和
是相关的(共轭混合模型)。指定预测器的数量p
还有回归系数的名称。
P = 3;PriorMdl = mixconjugateblm(p,“VarNames”, (“他们”“E”“福”]);
显示先验区域概率和高斯混合方差因子的先验 。
priorprobability = table(PriorMdl.)概率,“RowNames”, PriorMdl。VarNames,…“VariableNames”,“概率”)
priorProbabilities =4×1表概率___________截距0.5 IPI 0.5 E 0.5 WR 0.5
priorV = array2table(PriorMdl;V,“RowNames”, PriorMdl。VarNames,…“VariableNames”, (“gammaIs1”“gammaIs0”])
priorV =4×2表gammaIs1 gammaIs0 ________ ________拦截10 0.1 IPI 10 0.1 E 10 0.1 WR 10 0.1
PriorMdl
将先验区域概率存储在概率
财产和制度变化因素V
财产。变量包含的默认先验概率为0.5。每个系数的默认方差因子在变量包含体系中为10,在变量排除体系中为0.01。
加载Nelson-Plosser数据集。为响应和预测器系列创建变量。
负载Data_NelsonPlosserX = DataTable{:,PriorMdl.VarNames(2:end)};y = DataTable{:,“GNPR”};
通过估计的边际后验分布实现SSVS 和 。由于SSVS使用马尔可夫链蒙特卡罗(MCMC)进行估计,所以设置一个随机数种子来重现结果。
rng (1);PosteriorMdl = estimate(PriorMdl,X,y);
方法:MCMC抽样10000次,观测数:62个预测者数:4 |意味着性病CI95积极的分配制度 ---------------------------------------------------------------------------------- 拦截| -18.8333 - 10.1851[-36.965,0.716]0.037经验0.8806 IPI | 4.4554 - 0.1543 E[4.165, 4.764] 1.000经验0.4545 | 0.0010 - 0.0004[0.000,0.002]0.997经验0.0925 WR | 2.4686 - 0.3615[1.766, 3.197] 1.000经验0.1734 Sigma2 | 47.7557 - 8.6551[33.858, 66.875] 1.000经验NaN
PosteriorMdl
是一个empiricalblm
的后验分布
和
根据数据。估计
在命令行显示边际后验分布的摘要。摘要的行对应回归系数和扰动方差,列对应后验分布的特征。其特点包括:
CI95
,其中包含参数的95%贝叶斯均衡可信区间。的回归系数的后验概率E
(标准化)在[0.000,0.002]是0.95。政权
,其中包含变量包含的边际后验概率( 对于变量)。例如,后验概率E
应该包含在模型中的是0.0925。
假设,变量是政权
< 0.1应从模型中删除,结果表明可以从模型中排除失业率。
默认情况下,估计
绘制并丢弃尺寸为5000的老化样本。然而,一个好的做法是检查绘制的轨迹图是否有足够的混合和缺乏瞬变。绘制每个参数的绘图轨迹图。您可以访问组成分布的图形(属性)BetaDraws
和Sigma2Draws
)使用点表示法。
图;为J = 1:(p + 1) subplot(2,2, J);情节(PosteriorMdl.BetaDraws (j,:));标题(sprintf (' % s ', PosteriorMdl.VarNames {j}));结束
图;情节(PosteriorMdl.Sigma2Draws);标题(“Sigma2”);
轨迹图表明,这些绘图似乎混合得很好。图中没有显示可检测到的瞬态或序列相关性,并且图在状态之间不会跳跃。
为SSVS指定自定义先验状态概率分布
考虑中的线性回归模型为SSVS创建先验模型。
加载Nelson-Plosser数据集。为响应和预测器系列创建变量。将特定于示例的文件添加到MATLAB®路径。
负载Data_NelsonPlosserVarNames = [“他们”“E”“福”];X = DataTable{:,VarNames};y = DataTable{:,“GNPR”};Path = fullfile(matlabroot,“例子”,“经济学”,“主要”);目录路径);
假设如下:
截距在模型中,概率为0.9。
新闻学会
和E
在模型中的概率为0.75。如果
E
包含在模型中,那么或者说是
模型中包含的是0.9。如果
E
被排除在模型之外,那么或者说是
所包含的是0.25。
声明一个名为priorssvsexample.m
:
接受一个逻辑向量,指示截距和变量是否在模型中(
真正的
用于模型包含)。元素1对应于截距,其余元素对应于数据中的变量。返回表示所描述的先验状态概率分布的对数的数字标量。
函数Logprior = priorssvexample(变量)%PRIORSSVSEXAMPLE记录ssv的先验状态概率分布% PRIORSSVSEXAMPLE是一个自定义日志先验状态概率的例子具有相关随机变量的SSVS的%分布。varinc是%一个4 × 1的逻辑向量,表示模型中是否有4个系数%, logPrior是一个数字标量,表示先验的日志%的状态概率分布。%系数按以下规则输入模型:% *变量(1)包含,概率为0.9。% * varinc(2)和varinc(3)在模型中,概率为0.75。% *如果模型中包含变量(3),则模型中包含的%变量(4)为0.9。% *如果从模型中排除变量(3),则概率包含变量(4)的百分比为0.25。logprior =日志(0.9)+ 2 *日志(0.75)+日志(varinc (3) * 0.9 + (1-varinc (3)) * 0.25);结束
priorssvsexample.m
是包含在Econometrics Toolbox™中的特定示例文件。要访问它,请输入编辑priorssvsexample.m
在命令行。
创建执行SSVS的先验模型。假设和是(共轭混合模型)。指定预测器的数量p
回归系数的名称,以及变量包含制度的自定义先验概率分布。
P = 3;PriorMdl = mixconjugateblm(p,“VarNames”, (“他们”“E”“福”],…“概率”, @priorssvsexample);
通过估计的边际后验分布实现SSVS和。因为SSVS使用MCMC进行估计,所以设置一个随机数种子来重现结果。
rng (1);PosteriorMdl = estimate(PriorMdl,X,y);
方法:MCMC抽样10000次,观测数:62个预测者数:4 |意味着性病CI95积极的分配制度 ---------------------------------------------------------------------------------- 拦截| -18.7971 - 10.1644[-37.002,0.765]0.039经验0.8797 IPI | 4.4559 - 0.1530 E[4.166, 4.760] 1.000经验0.4623 | 0.0010 - 0.0004[0.000,0.002]0.997经验0.2665 WR | 2.4684 - 0.3618[1.759, 3.196] 1.000经验0.1727 Sigma2 | 47.7391 - 8.6741[33.823, 67.024] 1.000经验NaN
假设,变量是政权
< 0.1应从模型中删除,结果表明可以将所有变量包括在模型中。
因为这个例子要求路径
要访问特定于示例的文件,请通过删除路径
从MATLAB®路径。
rmpath(路径);
使用后验预测分布预测反应
考虑中的回归模型为SSVS创建先验模型。
执行科学价值:
为SSVS创建一个具有数据似然共轭先验的贝叶斯回归模型。使用默认设置。
拿出最近10期的估算数据。
估计边际后验分布。
P = 3;PriorMdl = bayeslm(p,“ModelType”,“mixconjugate”,“VarNames”, (“他们”“E”“福”]);负载Data_NelsonPlosserFHS = 10;预测地平线大小%X = DataTable{1:(end - fhs),PriorMdl.VarNames(2:end)};y = DataTable{1:(end - fhs),“GNPR”};XF = DataTable{(end - fhs + 1):end,PriorMdl.VarNames(2:end)};%未来预测数据yFT = DataTable{(end - fhs + 1):end,“GNPR”};未来真实回答百分比rng (1);%为了重现性PosteriorMdl = estimate(PriorMdl,X,y,“显示”、假);
使用后验预测分布和未来预测数据预测响应XF
。绘制响应的真实值和预测值。
yF = forecast(PosteriorMdl,XF);图;情节(日期、DataTable.GNPR);持有在plot(dates((end - fhs + 1):end),yF) h = gca;HP = patch([dates(end - FHS + 1) dates(end) dates(end) dates(end) dates(end) dates(end - FHS + 1)],…h.YLim([1,1,2,2]),[0.8 0.8 0.8]);uistack(惠普、“底”);传奇(“预测地平线”,“真正的GNPR”,“预测GNPR”,“位置”,“西北”)标题(“实际国民生产总值:1909 - 1970”);ylabel (“rGNP”);包含(“年”);持有从
yF
是与未来预测器数据相对应的实际国民生产总值未来值的10乘1向量。
估计预测均方根误差(RMSE)。
frmse = sqrt(mean((yF - yFT).^2))
Frmse = 18.8470
预测均方根误差是预测精度的相对度量。具体来说,您使用不同的假设来估计几个模型。预测均方根误差最低的模型是被比较的模型中表现最好的模型。
当使用SSVS执行贝叶斯回归时,最佳实践是调优超参数。这样做的一种方法是在超参数值的网格上估计预测RMSE,并选择使预测RMSE最小的值。
更多关于
贝叶斯线性回归模型
一个贝叶斯线性回归模型处理参数β和σ2多元线性回归(MLR)模型yt=xtβ+εt作为随机变量。
为次t= 1,…,T:
yt是观察到的响应。
xt是1 × ()p+ 1)的观测值的行向量p预测因子。为了适应模型截距,x1t= 1t。
β是吗?p+ 1)乘1列向量的回归系数对应于组成列的变量xt。
εt为均值为0的随机扰动,Cov(ε) =σ2我T×T,而ε是一个T包含所有干扰的-1向量。这些假设意味着数据的似然是
ϕ(yt;xtβ,σ2)为带均值的高斯概率密度xtβ和方差σ2评估在yt;。
在考虑数据之前,您施加一个联合先验分布假设()β,σ2)。在贝叶斯分析中,通过使用从数据的似然性中获得的有关参数的信息来更新参数的分布。结果是关节后分布(β,σ2)或条件后验分布参数的。
随机搜索变量选择
随机搜索变量选择(SSVS)是一种贝叶斯线性回归的预测变量选择方法,它在潜在模型的空间中搜索后验概率高的模型,并在搜索完成后对找到的模型进行平均。
SSVS假设每个回归系数的先验分布是两个高斯分布的混合,先验分布为σ2逆有形状吗一个和规模B。让γ= {γ1、……γK是一个潜在的,随机的政权指示器对于回归系数β,地点:
K为模型中系数的个数(
拦截
+NumPredictors
)。γk= 1表示βk|σ2,γk是均值0方差的高斯分布吗c1。γk= 0表示预测器是高斯分布,均值为0,方差为0c2。
的分布由一个概率质量函数决定γ的样本空间γ是由2组成的K元素。
更具体地说,γk和σ2,βk=γkc1Z+ (1 -)γk)c2Z,地点:
Z是标准正态随机变量。
对于共轭模型(
mixconjugateblm
),cj=σ2Vj,j= 1, 2。对于半共轭模型(
mixsemiconjugateblm
),cj=Vj。
c1相对较大,这意味着相应的预测器更有可能在模型中。c2相对较小,这意味着相应的预测器不太可能出现在模型中,因为分布在0附近很密集。
在这个框架中,如果潜在的存在总共为K一个模型的系数,那么空间有2K用来搜索的模型。因为计算所有2的后验概率K模型在计算上可能很昂贵,SSVS使用MCMC进行采样γ= {γ1、……γK}并估计相应模型的后验概率。算法选择的模型通常具有较高的后验概率。的估计后验分布β和σ2通过计算抽样模型的加权平均值。该算法赋予那些更频繁采样的模型更大的权重。
算法
在SSVS框架中,共轭混合先验存在一个闭后验K系数。然而,因为先验β|σ2,γ被边缘化γ是2K-分量高斯混合,MATLAB®使用MCMC从后验中采样以保证数值稳定性。
选择功能
的bayeslm
函数可以为贝叶斯线性回归创建任何支持的先验模型对万博1manbetx象。
参考文献
[1]乔治,e。I。和r。e。麦卡洛克。"通过吉布斯抽样进行变量选择"美国统计协会杂志。1993年第88卷第423号,第881-889页。
[2]库普,G., D. J.普瓦里尔和J. L.托比亚斯。贝叶斯计量经济学方法。纽约:剑桥大学出版社,2007。
版本历史
在R2018b中引入
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。