主要内容

为HMC采样器指定梯度

这个例子展示了如何建立一个贝叶斯线性回归模型,使用哈密顿蒙特卡罗(HMC)采样器进行有效的后验抽样。系数的先验分布是多元的t,扰动方差具有逆γ先验。

考虑一下预测美国实际国民生产总值(gdp)的多元线性回归模型(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每个分量用30个自由度分布,相关矩阵C、位置ct,和比例

  • $\sigma^2 \sim IG(10r_1,10r_2)$,有形状r_1 $ 10美元和规模r_2 $ 10美元

bayeslm将这些假设和数据似然视为对应的后验是难以分析的。

声明一个MATLAB®函数:

  • 接受值为β\美元而且\σ^ 2美元在一个列向量中,并接受超参数的值。

  • 返回联合先验分布的对数,$ \π\离开(\β\σ^ 2 \右)美元的值β\美元而且\σ^ 2美元,并返回对数先验密度相对于的梯度β\美元而且\伽马美元

函数[logPDF,gradient] = priorMVTIGHMC(params,ct,st,dof,C,a,b)多元对数密度t乘以逆gamma和%梯度% priorMVTIGHMC将参数(1:end-1)传递给多元t密度%函数,每个分量的自由度为正%定相关矩阵C,并将参数(end)传递给逆矩阵% gamma分布,形状a和比例b两个评估密度及其梯度的乘积的% log。应用日志后,只删除包含常量的项% logPDF。params:用于计算密度的参数值% m × 1数值向量。% ct:多元分布分量中心,以(m-1) × 1为单位%数值向量。元素对应于第一个m-1个元素%的参数。% st:多元t分布分量,以(m-1) × 1为单位%数值向量。元素对应于第一个m-1个元素%的参数。% dof:多元t分布的自由度,a%数值标量或(m-1)乘1数值向量。priorMVTIG扩展%使dof = dof*ones(m-1,1)的标量。自由度元素%对应于参数(1:end-1)中的元素。% C:多元t分布的相关矩阵% (m-1)-by-(m-1)对称,正定矩阵。行和%列对应于params(1:end-1)中的元素。% a:逆gamma形状参数,一个正数值标量。% b:逆gamma比例参数,一个正标量。Beta = params(1:(end-1));numCoeffs = numel(beta);Sigma2 = params(end);tVal = (beta - ct)./st;expo = -(dof + numCoeffs)/2;logmvtDensity日志=世博会*(1 +(1 /景深)* ((tVal / C) * tVal));logigDensity = (-a - 1)*log(sigma2) - 1/(sigma2*b);logPDF = logmvtDensity + logigDensity;grad_beta =(世博会/(1 +(1 /景深)* (tVal / C * tVal))) *((2 /景深)* ((tVal / C)。/ st));Grad_sigma = (-a - 1)/sigma2 + 1/(sigma2^2*b); gradient = [grad_beta; grad_sigma];结束

创建一个匿名函数,操作如下priorMVTIGHMC,但只接受参数值,并将超参数值固定为任意选择的值。

rng (1);%用于再现性Dof = 30;V = rand(4,4);Sigma = V'*V;st =√(diag(Sigma));C = Sigma./(st*st');Ct = -10*rand(4,1);A = 10*兰特;B = 10*兰特;logPDF = @(params)priorMVTIGHMC(params,ct,st,dof,C,a,b);

为线性回归参数创建自定义联合先验模型。指定预测器的数量,p.另外,指定for的函数句柄priorMVTIGHMC还有变量名。

P = 3;PriorMdl = bayeslm(p,“ModelType”“自定义”“LogPDF”logPDF,...“VarNames”, (“他们”“E”“福”]);

PriorMdl是一个customblm贝叶斯线性回归模型对象表示回归系数和扰动方差的先验分布。

加载Nelson-Plosser数据集。为响应和预测器系列创建变量。为了数值的稳定性,将级数转换为返回值。

负载Data_NelsonPlosserX = price2ret(DataTable{:, priormll . varnames (2:end)});y = price2ret(数据表{:,“GNPR”});

估计的边际后验分布β\美元而且\σ^ 2美元使用HMC采样器。若要监视采样器的进度,请指定的详细级别2.为了数值稳定性,指定扰动方差的重新参数化。

选项= sampleroptions(的取样器hmc的“VerbosityLevel”,2) PosteriorMdl =估计(PriorMdl,X,y,“选项”选项,“Reparameterize”,真正的);
options = struct with fields: Sampler: 'HMC' StepSizeTuningMethod: 'dual-averaging' MassVectorTuningMethod: ' iteration -sampling' NumStepSizeTuningIterations: 100 TargetAcceptanceRatio: 0.6500 NumStepsLimit: 2000 VerbosityLevel: 2 NumPrint: 100 o调优质量矢量使用方法:iterative-sampling o初始步长dual-averaging = 0.0625  |==================================================================================| | ITER日志PDF | |步长| NUM | | ACC比例不同的步骤  | |==================================================================================| | 100 | 4.330090 e + 01 | 1.002 e-01 | 50 | 6.200 e-01 | 4 |完成质量向量优化迭代1 5。o初始步长dual-averaging = 0.5  |==================================================================================| | ITER日志PDF | |步长| NUM | | ACC比例不同的步骤  | |==================================================================================| | 100 | 4.339523 e + 01 | 5.450 e-01 | 9 | 6.200 e-01 | 0  | |==================================================================================| | ITER日志PDF | |步长| | | ACC比率发散| NUM步骤|==================================================================================| | 100 | 4.063802 e + 01 | 3.939 e-02 | 5 | 7.900 e-01 | 0 |完成质量向量优化迭代2的5。o初始步长dual-averaging = 2  |==================================================================================| | ITER日志PDF | |步长| NUM | | ACC比例不同的步骤  | |==================================================================================| | 100 | 4.292747 e + 01 | 3.450 e-01 | 14 | 6.400 e-01 | 0  | |==================================================================================| | ITER日志PDF | |步长| | | ACC比率发散| NUM步骤|==================================================================================| | 100 | 3.813236 e + 01 | 3.105 e-01 | 3 | 7.850 e-01 | 0 | | 200 | 4.037504 e + 01 | 1.274 e-01 | 13 | 8.367 e-01 | 0 |完成质量向量优化迭代3的5。o初始步长dual-averaging = 0.25  |==================================================================================| | ITER日志PDF | |步长| NUM | | ACC比例不同的步骤  | |==================================================================================| | 100 | 4.240617 e + 01 | 3.225 e-01 | 16 | 6.300 e-01 | 0  | |==================================================================================| | ITER日志PDF | |步长| | | ACC比率发散| NUM步骤|==================================================================================| | 100 | 4.327304 e + 01 | 1.625 e-02 | 2 | 7.950 e-01 | 0 | | 200 | 3.934077 e + 01 | 2.902 e-01 | 16 | 8.500 e-01 | 0 |完成质量向量优化迭代4的5。o初始步长dual-averaging = 0.25  |==================================================================================| | ITER日志PDF | |步长| NUM | | ACC比例不同的步骤  | |==================================================================================| | 100 | 4.135980 e + 01 | 3.065 e-01 | 16 | 6.600 e-01 | 0  | |==================================================================================| | ITER日志PDF | |步长| | | ACC比率发散| NUM步骤|==================================================================================| | 100 | 4.027229 e + 01 | 8.846 e-02 | 4 | 8.000 e-01 | 0 | | 200 | 4.300922 e + 01 | 2.759 e-01 | 5 | 8.567 e-01 | 0 |完成质量向量优化迭代5的5。 o Tuning step size using method: dual-averaging. Target acceptance ratio = 0.65 o Initial step size for dual-averaging = 0.5 |==================================================================================| | ITER | LOG PDF | STEP SIZE | NUM STEPS | ACC RATIO | DIVERGENT | |==================================================================================| | 100 | 4.225585e+01 | 3.700e-01 | 14 | 6.300e-01 | 0 | Method: MCMC sampling with 10000 draws Number of observations: 61 Number of predictors: 4 | Mean Std CI95 Positive Distribution ----------------------------------------------------------------------- Intercept | 0.0076 0.0087 [-0.010, 0.025] 0.809 Empirical IPI | -0.1643 0.1470 [-0.474, 0.097] 0.123 Empirical E | 2.3722 0.5507 [ 1.397, 3.541] 1.000 Empirical WR | -0.2303 0.3052 [-0.846, 0.344] 0.223 Empirical Sigma2 | 0.0036 0.0007 [ 0.002, 0.005] 1.000 Empirical

PosteriorMdl是一个empiricalblm存储从后验分布绘制的模型对象。

查看从后方绘制的轨迹图和自相关函数图。

J = 1:4的数字;次要情节(2,1,1)情节(PosteriorMdl.BetaDraws (j,:));标题(sprintf ('跟踪图- Beta %d', j));包含(“获得画”) ylabel (“模拟指数”) subplot(2,1,2) autocorr(posteriormll . betadraws (j,:))结束图;次要情节(2,1,1)情节(PosteriorMdl.Sigma2Draws);标题(“轨迹图-扰动方差”);包含(“获得画”) ylabel (“模拟指数”subplot(2,1,2) autocorr(posteriormll . sigma2draws)

迹图显示充分的混合和无瞬态行为。自相关图显示后续样本之间相关性较低。

另请参阅

对象

功能

相关的话题