拓端tecdat|视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

发布时间:2024-01-24 17:00

原文链接:http://tecdat.cn/?p=11161

原文出处:拓端数据部落公众号

概率编程使我们能够实现统计模型,而不必担心技术细节。这对于基于MCMC采样的贝叶斯模型特别有用。 

拓端tecdat|视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型_第1张图片

R语言中RStan贝叶斯层次模型分析示例

stan简介

Stan是用于贝叶斯推理的C ++库。它基于No-U-Turn采样器(NUTS),该采样器用于根据用户指定的模型和数据估计后验分布。使用Stan执行分析涉及以下步骤:

  1. 使用Stan建模语言指定统计模型。通过专用的_.stan_  文件完成此操作  。

  2. 准备要提供给模型的数据。

  3. 使用该stan 函数从后验分布中采样  。

  4. 分析结果。

在本文中,我将通过两个层次模型展示Stan的用法。我将使用第一个模型讨论Stan的基本功能,并使用第二个示例演示更高级的应用。

 学校数据集

我们要使用的第一个数据集是  学校的数据集  。该数据集衡量了教练计划对大学入学考试(在美国使用的学业能力测验(SAT))的影响。 数据集如下所示:

拓端tecdat|视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型_第2张图片

正如我们所看到的:对于八所学校中的大多数,短期教练计划的确提高了SAT分数 。对于此数据集,我们有兴趣估算与每所学校相关的真实教练计划效果大小。我们考虑两种替代方法。首先,我们可以假设所有学校彼此独立。但是,这将难以解释,因为学校的后验区间由于高标准差而在很大程度上重叠。第二,假设所有学校的真实效果都相同,则可以汇总所有学校的数据。但是,这也是不合理的,因为该计划有针对学校的不同效果(例如,不同的老师和学生应该有不同的计划)。

因此,需要另一个模型。分层模型的优点是可以合并来自所有八所学校的信息,而无需假定它们具有共同的真实效果。我们可以通过以下方式指定层次贝叶斯模型:

拓端tecdat|视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型_第3张图片

根据该模型,教练的效果遵循正态分布,其均值是真实效果θj,其标准偏差为σj(从数据中得知)。真正的影响θj遵循参数μ和τ的正态分布。

定义Stan模型文件

在指定了要使用的模型之后,我们现在可以讨论如何在Stan中指定此模型。在为上述模型定义Stan程序之前,让我们看一下Stan建模语言的结构。

变量

在Stan中,可以通过以下方式定义变量:

int n; # 下界是0

int n; # 上限是5

int n; # n 的范围是 \[0,5\]

注意,如果先验已知变量,则应指定变量的上下边界。

多维数据可以通过方括号指定:

vector\[n\] numbers; // 长度为n的向量

real\[n\] numbers;  // 长度为n的浮点数组

matrix\[n,n\] matrix; // n乘n矩阵

程序 

Stan中使用以下程序 :

  • _data_:用于指定以贝叶斯规则为条件的数据

  • _转换后的数据_:用于预处理数据

  • 参数  (必填):用于指定模型的参数

  • _转换后的参数_:用于计算后验之前的参数处理

  • 模型  (必填):用于指定模型

  • _生成数量_:用于对结果进行后处理

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号