主要内容

海关

自定义联合先验分布的贝叶斯线性回归模型

描述

贝叶斯线性回归模型目的海关载有联合预先分发(βσ.2).日志PDF是您声明的自定义函数。

数据的可能性是 T. = 1 T. φ. y T. X T. β σ. 2 在哪里φ.yT.XT.βσ.2)是高斯概率密度评估在yT.意思XT.β和方差σ.2.MATLAB®将先验分布函数当作未知来处理。因此,得到的后验分布在分析上是不可处理的。为了从后验分布估计或模拟,MATLAB实现了切片采样器。

一般情况下,当您创建贝叶斯线性回归模型对象时,它仅指定仅线性回归模型的联合分发和特性。也就是说,模型对象是用于进一步使用的模板。具体地,要将数据纳入模型进行后部分发分析,将模型对象和数据传递给适当的目标函数

创建

描述

例子

Priormdl.= customblm (NumPredictors,'logpdf.”,LogPDF)创建一个贝叶斯线性回归模型对象(Priormdl.) 由...组成的NumPredictors预测器和拦截,并设置NumPredictors财产。logpdf.的联合先验分布的对数函数βσ.2).Priormdl.是一个定义先前分布和维度的模板β

例子

Priormdl.= customblm (NumPredictors,'logpdf.“LogPDF,名称,值属性(除了NumPredictors),使用名称-值对参数。将每个属性名用引号括起来。例如,customblm (2 ' LogPDF @logprior“拦截”,假)指定表示(的联合先验密度的对数的函数βσ.2),并指定一个具有2个回归系数但没有截距的回归模型。

属性

全部展开

您可以使用名称值对参数语法创建模型对象时设置可写属性值,或者使用点表示法创建模型对象后。例如,要从模型中排除截距,输入

PriorMdl。拦截=错误的;

贝叶斯多元线性回归模型中预测变量的个数,指定为非负整数。

NumPredictors必须与您的预测器数据中的列数相同,在模型估计或模拟期间指定。

当指定NumPredictors,排除来自该值的任何拦截术语。

在创建模型之后,如果您更改NumPredictors那么,使用点符号VarNames恢复为默认值。

数据类型:

包括回归模型拦截的标志,指定为此表中的值。

价值 描述
错误的 从回归模型中排除截距。因此,β是一个P.- vimensional vetorm,在哪里P.是值的价值NumPredictors
真正的 在回归模型中包含一个截距。因此,β是(P.+ 1)维向量。该规范导致T.在估计和模拟期间,预估器数据的1 × 1向量。

如果在预测器数据中包含一列1,则设置拦截错误的

例子:'拦截',假

数据类型:逻辑

用于显示的预测器变量名,指定为字符向量的字符串向量或单元向量。VarNames必须包含NumPredictors元素。varnames(j变量的名称是否在列中j在估计,模拟或预测期间指定的预测器数据集。

默认值是β{β(1),(2),…,β(P.)},在那里P.是值的价值NumPredictors

例子:'varnames',[“失业者”;“CPI”]

数据类型:字符串|细胞|字符

的联合概率密度函数的对数βσ.2),指定为表单中的函数句柄@fcnName,在那里fcnname.是函数名。

假设logprior是MATLAB函数的名称,该函数定义了(βσ.2).然后,logprior必须有这张表格。

函数(logpdfGLPDF.]=logprior参数个数)…结尾
在哪里:

  • logpdf是一个数值标量,表示(βσ.2).

  • GLPDF.是一个(拦截+NumPredictors+ 1)-乘1的数字向量表示的梯度logpdf.元素对应于的元素参数个数

    GLPDF.是一个可选的输出参数,只有汉密尔顿蒙特卡罗采样器(见hmcSampler)适用它。如果您知道关于某些参数的分析部分导数,但不是其他参数,则设置元素GLPDF.对应于的未知偏导数.MATLAB计算了缺失偏导数的数值梯度,这很方便,但降低了采样速度。

  • 参数个数是一个(拦截+NumPredictors+ 1)-乘1的数字向量。第一个拦截+NumPredictors元素必须对应于值β,最后一个元素必须对应的值σ.2.第一个元素β是拦截,如果存在。所有其他元素对应于预测器数据中的预测变量,在估计,模拟或预测期间指定。

例子:'logpdf',@ logprior

对象功能

估计 估计贝叶斯线性回归模型参数的后验分布
模拟 模拟贝叶斯线性回归模型的回归系数和干扰方差
预测 预测贝叶斯线性回归模型的响应
阴谋 可视化贝叶斯线性回归模型参数的先验和后验密度
总结 标准贝叶斯线性回归模型的分布汇总统计量

例子

全部折叠

考虑预测美国实际国民生产总值的多元线性回归模型(GNPR),采用工业生产指数(IPI.),总就业人数(E.)及实际工资(或者说是).

$$ \ texttt {gnpr} _t = \ beta_0 + \ beta_1 \ texttt {ipi} _t + \ beta_2 \ texttt {e} _t + \ beta_3 \ texttt {wr} _t + \ varepsilon_t。$$

对所有元新台币时间点,\ varepsilon_t美元是一系列独立的高斯紊乱,平均值为0和方差\σ^ 2美元.假设这些先验分布:

  • $ \ beta_j \ vert \ sigma ^ 2 $是四维T.每个分量有50个自由度的分布,单位矩阵为相关矩阵。而且,分布集中在左${\[{\开始{数组}{* {20}{c}}{- 25} & # 38; 4 & # 38; 0 & # 38; 3结束\{数组}}\右]^ \ '}$每个分量都是由向量的相应元素缩放的左${\[{\开始{数组}{* {20}{c}}{1} & # 38; 1 & # 38; 1 & # 38;结束1 \{数组}}\右]^ \ '}$

  • 美元\σ^ 2 \ sim搞笑(3,1)美元

bayeslm对待这些假设和数据可能性,就好像相应的后验在分析上是棘手的。

声明一个MATLAB®函数:

  • 接受的价值观$ \ beta $\σ^ 2美元在列向量中一起,并接受超参数的值

  • 返回联合先验分布的值,$ \π\离开(\β\σ^ 2 \右)美元的值$ \ beta $\σ^ 2美元

函数logPDF = priorMVTIG (params, ct,圣,景深,C, a, b)%priorMVTIG多元t乘以逆γ的对数密度%primvtig通过参数(1:end-1)到多变量t密度每个组件的DOF自由度的%函数和正%确定相关矩阵C. priorMVTIG返回的乘积的对数%两种评估的密度。% params:密度评估的参数值% m乘1的数字向量。%CT:多变量T分配组件中心,(m-1) - 由-1%数字矢量。元素对应于第一M-1元素%的参数。% st:多元t分布分量尺度,(m-1) × 1%数字(m-1)-乘1数字向量。元素对应于Params的Parture M-1元素。%DOF:多变量T分配的自由度,a%数字标量或(m-1)-1数字矢量。priormvtig扩大%标量,使DOF = DOF * on(M-1,1)。DOF的元素%对应于参数的元素(1:结束-1)。% C:多元t分布的相关矩阵% (m-1)-by-(m-1)对称正定矩阵。行和%列对应params(1:end-1)中的元素。% a:逆伽马形状参数,一个正数值标量。% b: gamma标度参数的倒数,一个正标量。β= params (1: (end-1));sigma2 = params(结束);tVal = (beta - ct)./st;mvtDensity = mvtpdf (tVal C景深);igDensity = sigma2 ^ (1) * exp (1 / (sigma2 * b)) /(γ(a) * b ^);logPDF =日志(mvtDensity * igDensity);结尾

创建一个匿名函数priorMVTIG,但只接受参数值,并保持超参数值固定。

景深= 50;C =眼(4);ct = [-25;4;0;3);圣= 1 (4,1);= 3;b = 1;logpdf = @(params)priormvtig(params,ct,st,Dof,c,a,b);

为线性回归参数创建自定义联合先验模型。指定预测器的数量P..另外,指定的函数句柄priorMVTIG以及变量名。

p = 3;priormdl = bayeslm(p,'modeltype'“自定义”“LogPDF”logPDF,...'varnames',[“他们”“e”“福”])
PriorMdl = customblm with properties: NumPredictors: 3 Intercept: 1 VarNames: {4x1 cell} LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b) priorMVTIG(params,ct,st,dof,C,a,b)

Priormdl.是一个海关贝叶斯线性回归模型对象表示回归系数的先验分布和扰动方差。在这种情况下,bayeslm不显示命令行上的先前分布的摘要。

考虑线性回归模型为系数创建自定义多元先验模型

创建一个匿名函数priorMVTIG,但只接受参数值,并将超参数值固定在其值上。

景深= 50;C =眼(4);ct = [-25;4;0;3);圣= 1 (4,1);= 3;b = 1;logpdf = @(params)priormvtig(params,ct,st,Dof,c,a,b);

为线性回归参数创建自定义联合先验模型。指定预测器的数量P..另外,指定的函数句柄priorMVTIG以及变量名。

p = 3;priormdl = bayeslm(p,'modeltype'“自定义”“LogPDF”logPDF,...'varnames',[“他们”“e”“福”])
PriorMdl = customblm with properties: NumPredictors: 3 Intercept: 1 VarNames: {4x1 cell} LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b) priorMVTIG(params,ct,st,dof,C,a,b)

加载Nelson-Plosser数据集。为响应和预测器系列创建变量。

加载Data_NelsonPlosserX = DataTable {: PriorMdl.VarNames(2:结束)};y = DataTable {:,“GNPR”};

估计边缘后的分布 β σ. 2 .为切片采样器指定一个宽度,该宽度接近假设扩散先验模型的参数的后验标准偏差。通过指定稀释因子为10,减少串联关联,并将有效的默认次数减少为10倍。

宽度= (20,0.5,0.01,1,20);瘦= 10;numDraws = 1 e5 /薄;RNG(1)重复性的%PosteriorMdl =估计(PriorMdl, X, y,“宽度”、宽度、'薄的'薄的,...“NumDraws”, numDraws);
方法:MCMC采样带10000次观察次数:62预测器数量:4 |平均std ci95积极分布-----------------------------------------------------------------------拦截|-25.0069 0.9919 [-26.990,-23.065] 0.000实证IPI |4.3544 0.1083 [4.143,4.562] 1.000经验e |0.0011 0.0002 [0.001,0.001] 1.000经验WR |2.5613 0.3293 [1.939,3.222] 1.000经验Sigma2 |47.0593 8.7570 [32.690,67.115] 1.000经验

PosteriorMdl是一个empiricalblm模型对象存储从的后验分布中提取 β σ. 2 考虑到数据。估计在命令窗口显示后缘分布的摘要。摘要的行对应回归系数和干扰方差,列对应后验分布特征。特点包括:

  • CI95,包含参数的95%贝叶斯等尾可信区间。例如,后验概率的回归系数或者说是在[1.939,3.222]是0.95。

  • 积极的,其中包含参数大于0的后验概率。例如,截距大于0的概率是0。

估计从后验分布中提取后验特性,MATLAB®将后验分布存储为矩阵Betadraws.sigma2draws.

为了监测MCMC样品的混合和收敛,构建示踪图。在Betadraws.属性,绘图对应列,参数对应行。

图;为了j = 1:4 subplot(2,2,j) plot(posteriormdd . betadraws (j,:))) title(sprintf('追溯剧情%s', PosteriorMdl.VarNames {j}));结尾

图包含4个轴。带有标题跟踪截取的轴1包含类型线的对象。具有IPI的标题跟踪图的轴2包含类型线的对象。带有标题迹线图的轴3包含类型线的对象。轴4带有标题迹线图,WR包含类型线的对象。

图;情节(PosteriorMdl.Sigma2Draws)标题(' Sigma2的轨迹图');

图中包含一个坐标轴。Sigma2的标题为Trace Plot的轴包含一个类型为line的对象。

痕迹表明充分的混合和收敛,并且没有瞬态效应来删除。

考虑线性回归模型为系数创建自定义多元先验模型

创建一个匿名函数priorMVTIG,但只接受参数值并保持超参数值固定。

景深= 50;C =眼(4);ct = [-25;4;0;3);圣= 1 (4,1);= 3;b = 1;logpdf = @(params)priormvtig(params,ct,st,Dof,c,a,b);

为线性回归参数创建自定义联合先验模型。指定预测器的数量P..另外,指定的函数句柄priorMVTIG以及变量名。

p = 3;priormdl = bayeslm(p,'modeltype'“自定义”“LogPDF”logPDF,...'varnames',[“他们”“e”“福”])
PriorMdl = customblm with properties: NumPredictors: 3 Intercept: 1 VarNames: {4x1 cell} LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b) priorMVTIG(params,ct,st,dof,C,a,b)

加载Nelson-Plosser数据集。为响应和预测器系列创建变量。

加载Data_NelsonPlosserX = DataTable {: PriorMdl.VarNames(2:结束)};y = DataTable {:,“GNPR”};

估计的条件后验分布 β 有了这些数据 σ. 2 = 2 ,并返回估计摘要表以访问估计值。为切片采样器指定一个宽度,该宽度接近假设扩散先验模型的参数的后验标准偏差。通过指定稀释因子为10,减少串联关联,并将有效的默认次数减少为10倍。

宽度= (20,0.5,0.01,1);瘦= 10;numDraws = 1 e5 /薄;RNG(1)重复性的%[Mdl,总结]=估计(PriorMdl, X, y,“Sigma2”2,...“宽度”、宽度、'薄的'薄的,“NumDraws”, numDraws);
方法:MCMC采样使用10000绘制条件变量:Sigma2固定在2个观察次数:62个预测器数量:4 |平均std ci95积极分布-----------------------------------------------------------------------拦截|-24.7820 0.8767 [-26.483,-23.054] 0.000实证IPI |4.3825 0.0254 [4.332,431] 1.000经验e |0.0011 0.0000 [0.001,0.001] 1.000经验WR |2.4752 0.0724 [2.337,2.618] 1.000经验Sigma2 |2 0 [2.000,20] 1.000经验

估计显示条件后部分布的摘要 β .因为 σ. 2 在估计期间固定在2时,它的推论是微不足道的。

提取条件后验的均值向量和协方差矩阵 β 从估计摘要表。

condPostMeanBeta =总结。结束意味着(1:(- 1))
condPostMeanBeta =4×1-24.7820 4.3825 0.0011 2.4752
CondPostCovBeta =总结。协方差(1:(end - 1),1:(end - 1))
CondPostCovBeta =4×40.7686 0.0084 -0.0000 0.0019 0.0084 0.0006 0.0000 -0.0015 -0.0000 0.0000 -0.0000 0.0019 -0.0015 -0.0000 0.0052

显示Mdl

Mdl
Mdl = customblm with properties: NumPredictors: 3 Intercept: 1 VarNames: {4x1 cell} LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b)

因为估计计算条件后验分布,它返回原始的先验模型,而不是后验模型,在输出参数列表的第一个位置。同时,估计不返回MCMC样本。因此,要监控MCMC样本的收敛,请使用模拟而是指定相同的随机数种子。

考虑线性回归模型估计边缘后验分布

建立回归系数和干扰方差的先验模型,然后估计边缘后验分布。关闭估计显示。

景深= 50;C =眼(4);ct = [-25;4;0;3);圣= 1 (4,1);= 3;b = 1;logpdf = @(params)priormvtig(params,ct,st,Dof,c,a,b); p = 3; PriorMdl = bayeslm(p,'modeltype'“自定义”“LogPDF”logPDF,...'varnames',[“他们”“e”“福”]);加载Data_NelsonPlosserX = DataTable {: PriorMdl.VarNames(2:结束)};y = DataTable {:,“GNPR”};宽度= (20,0.5,0.01,1,20);瘦= 10;numDraws = 1 e5 /薄;RNG(1)重复性的%PosteriorMdl =估计(PriorMdl, X, y,“宽度”、宽度、'薄的'薄的,...“NumDraws”numDraws,'展示'、假);

估计后验分布汇总统计 β 利用后验模型中存储的后验分布。

estBeta =意味着(PosteriorMdl.BetaDraws, 2);EstBetaCov = x (PosteriorMdl.BetaDraws ');

假设实际工资系数(或者说是)低于2.5,然后颁布一项政策。虽然后部分布或者说是是已知的,你可以直接计算概率,你可以用蒙特卡罗模拟来估计概率。

1E6.来自边缘后部分布的样品 β

NumDraws = 1 e6;BetaSim =模拟(PosteriorMdl,“NumDraws”, NumDraws);

BetaSim是一个4×-1E6.包含绘图的矩阵。行对应回归系数,列对应连续绘制。

分离系数对应的绘图或者说是,然后确定哪些平局小于2.5。

isWR = PosteriorMdl。VarNames = =“福”;wrSim = BetaSim (isWR:);isWRLT2p5 = wrSim < 2.5;

求回归系数的边际后验概率或者说是是小于2.5,通过计算小于2.5的绘制比例。

probWRLT2p5 =意味着(isWRLT2p5)
probWRLT2p5 = 0.4430

后部概率或者说是小于2.5是大约吗0.4430

考虑线性回归模型估计边缘后验分布

建立回归系数和干扰方差的先验模型,然后估计边缘后验分布。从估计中抓住最后10个数据期间,因此您可以使用它们来预测真正的GNP。关闭估计显示。

加载Data_NelsonPlosservarnames = {“他们”“E”“福”};FHS = 10;预测层位大小X = DataTable{1:(end - fhs),VarNames};y = DataTable{1:(end - fhs),“GNPR”};XF = DataTable {(结束 -  FHS + 1):END,VARNAMES};%未来预测数据yFT = DataTable{(end - fhs + 1):结束,“GNPR”};%真实的未来答复景深= 50;C =眼(4);ct = [-25;4;0;3);圣= 1 (4,1);= 3;b = 1;logpdf = @(params)priormvtig(params,ct,st,Dof,c,a,b); p = 3; PriorMdl = bayeslm(p,'modeltype'“自定义”“LogPDF”logPDF,...'varnames', VarNames);宽度= (20,0.5,0.01,1,20);瘦= 10;numDraws = 1 e5 /薄;RNG(1)重复性的%PosteriorMdl =估计(PriorMdl, X, y,“宽度”、宽度、'薄的'薄的,...“NumDraws”numDraws,'展示'、假);

使用后验预测分布和未来预测数据预测反应XF.绘制响应的真实值和预测值。

yF =预测(PosteriorMdl XF);图;情节(日期、DataTable.GNPR);持有if (date (((end - fhs + 1):end),yF) = gca;HP = patch([date (end - FHS + 1) date (end) date (end) date (end - FHS + 1)]),...h.YLim([1, 1、2、2]),[0.8 0.8 0.8]);uistack(惠普、“底”);传奇(“预测地平线”“真正的GNPR”'预测GNPR'“位置”“西北”)标题(“实际国民生产总值”);ylabel ('rgnp');Xlabel('年');持有

图中包含一个坐标轴。具有标题Real Gross National产品的轴包含3个类型的贴片物体,线路。这些对象代表预测地平线,真正的GNPR,预测GNPR。

yF是与未来预测数据相对应的真实GNP未来值的10乘1向量。

估计预测的均方根误差(RMSE)。

frmse =√(mean((yF - yFT).²))
frmse = 12.8148

预测RMSE是预测精度的相对度量。具体来说,您使用不同的假设来估计几个模型。预测RMSE最低的模型是被比较模型中表现最好的。

更多关于

全部展开

备择方案

bayeslm函数可以为贝叶斯线性回归创建任何支持的先验模型对金宝app象。

在R2017A介绍