主要内容

customblm

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

描述

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

数据的可能性是 t 1 T ϕ y t x t β σ 2 在哪里ϕytxtβσ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维向量,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),采用工业生产指数(新闻学会),总就业人数(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,方差为0的独立高斯扰动吗\σ^ 2美元.假设这些先验分布:

  • 美元\ beta_j \绿色\σ^ 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®函数:

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

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

函数logPDF = priorMVTIG (params, ct,圣,景深,C, a, b)%priorMVTIG多元t乘以逆γ的对数密度% priorMVTIG传递参数(1:end-1)到多元t密度函数具有每个分量的自由度和正自由度%确定相关矩阵C. priorMVTIG返回的乘积的对数%两个评估密度。% params:密度评估的参数值% m乘1的数字向量。% ct:多元分布分量中心,(m-1)-by-1%数值向量。元素对应于第一个m-1元素%的参数。% st:多元t分布分量尺度,(m-1) × 1%数字(m-1)-乘1数字向量。元素对应于参数的第一个m-1元素。% dof:多元t分布的自由度,a%数字标量或(m-1)乘1数字向量。priorMVTIG扩展%标量,使dof = dof*ones(m-1,1)。景深的元素%对应params(1:end-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,圣,景深,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是一个customblm贝叶斯线性回归模型对象表示回归系数的先验分布和扰动方差。在这种情况下,bayeslm在命令行中不显示以前发行版的摘要。

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

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

景深= 50;C =眼(4);ct = [-25;4;0;3);圣= 1 (4,1);= 3;b = 1;logPDF = @ (params) priorMVTIG (params, ct,圣,景深,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 sampling with 10000 draw观测数:62预测数:4 |意味着性病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经验或者说是| 2.5613 - 0.3293 (1.939,[32.690, 67.115] 1.000 Empirical Sigma2 |

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

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

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

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

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

图;j = 1:4 subplot(2,2,j) plot(posteriormdd . betadraws (j,:))) title(sprintf(“%s的跟踪图”, PosteriorMdl.VarNames {j}));结束

图中包含4个轴对象。带有标题的轴对象1包含一个类型为line的对象。IPI的标题为Trace Plot的坐标轴对象2包含一个类型为line的对象。带有E的Trace Plot标题的坐标轴对象3包含一个类型为line的对象。标题为“WR Trace Plot”的轴对象4包含一个类型为line的对象。

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

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

轨迹图显示了适当的混合和收敛,并且没有需要消除的瞬态效应。

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

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

景深= 50;C =眼(4);ct = [-25;4;0;3);圣= 1 (4,1);= 3;b = 1;logPDF = @ (params) priorMVTIG (params, ct,圣,景深,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 |意味着性病CI95积极的分布  -------------------------------------------------------------------------- 拦截| -24.7820 - 0.8767[-26.483,-23.054]0.000经验IPI | 4.3825 - 0.0254[4.332, 4.431] 1.000经验E | 0.0011 - 0.0000[0.001, 0.001] 1.000经验或者说是| 2.4752 - 0.0724 (2.337,2.618] 1.000 Empirical Sigma2 | 2 0 [2.000, 2.000] 1.000 Empirical

估计的条件后验分布的摘要 β .因为 σ 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,圣,景深,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,则制定政策。虽然后验分布或者说是是已知的,你可以直接计算概率,你可以用蒙特卡罗模拟来估计概率。

1 e6样本的边缘后验分布 β

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

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

分离系数对应的绘图或者说是,然后确定哪些平局小于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{(end - 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,圣,景深,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”);包含(“年”);持有

图中包含一个轴对象。以“实际国民生产总值”为标题的坐标轴对象包含贴片、直线三种类型的对象。这些对象代表预测地平线、真实GNPR、预测GNPR。

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

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

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

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

更多关于

全部展开

选择

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

介绍了R2017a