在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
原文链接:http://tecdat.cn/?p=11161
概率编程使我们能够实现统计模型,而不必担心技术细节。这对于基于MCMC采样的贝叶斯模型特别有用。stan简介Stan是用于贝叶斯推理的C ++库。它基于No-U-Turn采样器(NUTS),该采样器用于根据用户指定的模型和数据估计后验分布。使用Stan执行分析涉及以下步骤:
在本文中,我将通过两个层次模型展示Stan的用法。我将使用第一个模型讨论Stan的基本功能,并使用第二个示例演示更高级的应用程序。 学校数据集我们要使用的第一个数据集是 学校的数据集 。该数据集衡量了教练计划对大学入学考试(在美国使用的学业能力测验(SAT))的影响。 数据集如下所示:
正如我们所看到的,SAT并没有兑现其诺言:对于八所学校中的大多数,短期教练的确提高了SAT分数 。对于此数据集,我们有兴趣估算与每所学校相关的真实效果大小。可以使用两种替代方法。首先,我们可以假设所有学校彼此独立。但是,这将导致难以解释的估计,因为学校的95%的后验间隔由于高标准误差而在很大程度上重叠。第二,假设所有学校的真实效果都相同,则可以汇总所有学校的数据。但是,这也是不合理的,因为应该有针对学校的效果(例如,不同的老师和学生)。 因此,需要另一个模型。分层模型的优点是可以合并来自所有八所学校(实验)的信息,而无需假定它们具有共同的真实效果。我们可以通过以下方式指定层次贝叶斯模型:
根据该模型,教练的效果遵循正态分布,其均值是真实效果θjθj,其标准偏差为σjσj(从数据中得知)。真正的影响θjθj遵循参数μμ和ττ的正态分布。 定义Stan模型文件在指定了要使用的模型之后,我们现在可以讨论如何在Stan中指定此模型。在为上述模型定义Stan程序之前,让我们看一下Stan建模语言的结构。 变量在Stan中,可以通过以下方式定义变量: 注意,如果先验已知变量,则应指定变量的上下边界。 多维数据可以通过方括号指定: 程序Stan中使用以下程序 :
对于 模型 程序块,可以两种等效方式指定分布。第一个,使用以下统计符号: 第二种方法使用基于对数概率密度函数(lpdf)的程序化表示法: Stan支持大量的概率分布。通过Stan指定模型时,该 在这里,我们看到 模型现在,我们了解了Stan建模语言的基础知识,我们可以定义模型,并将其存储在一个名为的文件中 注意,θ 永远不会出现在参数中。这是因为我们没有显式地对θθ进行建模,而是对ηη(各个学校的标准化效果)进行了建模。然后, 根据μμ,ττ和ηη在变换后的参数部分构造θθ 。此参数化使采样器更高效。
准备数据进行建模在适合模型之前,我们需要将输入数据编码为一个列表,其参数应与Stan模型的数据部分中的条目相对应。对于学校数据,数据如下: 从后验分布抽样我们可以使用
如果 现在,我们可以从后验中编译模型和样本。唯一需要的两个参数 模型解释我们将首先对模型进行基本解释,然后研究MCMC程序。 基本模型解释要使用拟合模型执行推断,我们可以使用 在此,行名称表示估计的参数:mu是后验分布的平均值,而tau是其标准偏差。eta和theta的条目分别表示矢量ηη和θθ的估计值。该 LP 条目显示日志密度,这通常是不相关的。这些列表示计算值。百分比表示可靠的时间间隔。例如,指导的总体效果的95%可信区间μμ为[-1.27,18.26] [-1.27,18.26]。由于我们不确定平均值,因此θjθj的95%可信区间也很宽。例如,对于第一所学校,95%可信区间为[−2.19,32.33] [− 2.19,32.33]。 我们可以使用以下
黑线表示95%的间隔,而红线表示80%的间隔。圆圈表示平均值的估计。 我们可以使用以下 MCMC诊断 通过绘制采样过程的轨迹图,我们可以确定采样期间是否出了问题。例如,如果链条在一个位置停留的时间过长或在一个方向上走了太多步,就是这种情况。我们可以使用以下
要从各个马尔可夫链中获取样本,我们可以 为了对采样过程进行更高级的分析,我们可以使用该 层次回归现在,我们对Stan有了基本的了解,我们可以深入研究更高级的应用程序:让我们尝试一下层次回归。在常规回归中,我们对以下形式的关系进行建模
此表示假设所有样本都具有相同的分布。如果存在一组样本,那么我们就会遇到问题,因为将忽略组内和组之间的潜在差异。 另一种选择是为每个组建立一个回归模型。但是,在这种情况下,估计单个模型时,小样本量会带来问题。 层次回归是两个极端之间的折衷。该模型假设组是相似的,但存在差异。 假设每个样本都属于KK组之一。然后,层次回归指定如下:
其中YkYk是第kk组的结果,αkαk是截距,XkXk是特征,β(k)β(k)表示权重。层次模型不同于其中YkYk分别适合每个组的模型,因为假定参数αkαk和β(k)β(k)源自共同的分布。 数据集分层回归的经典示例是 鼠数据集。该纵向数据集包含5周内测得的 鼠体重。让我们加载数据: 让我们调查数据:
数据显示线性增长趋势对于不同的大鼠非常相似。但是,我们还看到,大鼠的初始体重不同,需要不同的截距,并且生长速度也需要不同的斜率。因此,分层模型似乎是适当的。 层次回归模型的规范该模型可以指定如下:
第i个大鼠的截距由αiαi表示,斜率由βiβi表示。注意,测量时间的中心是x = 22x = 22,它是时间序列数据的中值测量值(第22天)。 现在,我们可以指定模型并将其存储在名为的文件中 请注意,模型代码估算的是方差( sigmasq 变量)而不是标准偏差。 资料准备为了准备模型数据,我们首先将测量点提取为数值,然后将所有内容编码为列表结构: 拟合回归模型现在,我们可以为老鼠体重数据集拟合贝叶斯层次回归模型: 层次回归模型的预测在确定了每只大鼠的αα和ββ之后,我们现在可以估计任意时间点单个大鼠的体重。在这里,我们有兴趣寻找从第0天到第100天的大鼠体重。
与原始数据相比,该模型的估计是平滑的,因为每条曲线都遵循线性模型。研究最后一个图中所示的置信区间,我们可以看到方差估计是合理的。我们对采样时(第8至36天)的老鼠体重充满信心,但是随着我们远离采样区域,不确定性会增加。
|
请发表评论