全文链接 http://tecdat.cn/?p=23255
最近咱们被客户要求撰写对于 rstan 的钻研报告,包含一些图形和统计输入。
本文将议论 Stan 以及如何在 R 中应用 rstan 创立 Stan 模型
只管 Stan 提供了应用其编程语言的文档和带有例子的用户指南,但对于初学者来说,这可能是很难了解的。
Stan
Stan 是一种用于指定统计模型的编程语言。它最常被用作贝叶斯剖析的 MCMC 采样器。马尔科夫链蒙特卡洛(MCMC)是一种抽样办法,容许你在不晓得散布的所有数学属性的状况下预计一个概率分布。它在贝叶斯推断中特地有用,因为后验散布往往不能写成表达式。要应用 Stan,用户要写一个 Stan 程序,代表他们的统计模型。这个程序指定了模型中的参数和指标后验密度。Stan 代码被编译并与数据一起运行,输入一组参数的后验模仿。Stan 与最风行的数据分析语言,如 R、Python、shell、MATLAB、Julia 和 Stata 的接口。咱们将专一于在 R 中应用 Stan。
rstan
rstan 容许 R 用户实现贝叶斯模型。你能够应用相熟的公式和 data.frame 语法(如 lm())来拟合模型。通过为罕用的模型类型提供预编译的 stan 代码来实现这种更简略的语法。它应用起来很不便,但只限于特定的 "罕用" 模型类型。如果你须要拟合不同的模型类型,那么你须要本人用 rstan 编码。
模型拟合函数以前缀 stan_开始,以模型类型完结。建模函数有两个必要的参数。
- 公式。一个指定因变量和自变量的公式(y ~ x1 + x2)。
- data。一个蕴含公式中变量的数据框。
此外,还有一个可选的先验参数,它容许你扭转默认的先验散布。
stan() 函数读取和编译你的 stan 代码,并在你的数据集上拟合模型。
stan() 函数有两个必要参数。
- 文件。蕴含你的 Stan 程序的.stan 文件的门路。
- data。一个命名的列表,提供模型的数据。
例子
作为一个简略的例子来演示如何在这些包中指定一个模型,咱们将应用汽车数据来拟合一个线性回归模型。咱们的因变量是 mpg,所有其余变量是自变量。
mtcars %>%
head()
首先,咱们将拟合模型。对于线性回归,咱们应用 stan 函数。
点击题目查阅往期内容
R 语言 RStan 贝叶斯示例:反复试验模型和种群竞争模型 Lotka Volterra
左右滑动查看更多
01
02
03
04
summary(fit)
输入显示参数摘要,包含平均值、标准差和量值。此外,它还显示了 MCMC 的诊断统计 Rhat 和无效样本量。这些统计数据对于评估 MCMC 算法是否收敛十分重要。
接下来,咱们将用 rstan 来拟合同一个模型。上面是咱们模型的 stan 代码,保留在一个名为 stan 的文件中(你能够在 RStudio 中创立一个.stan 文件,或者应用任何文本编辑器,并保留扩大名为.stan 的文件)。
数据
int<lower=0> N; // 观测值的数量
int<lower=0> K; // 预测的数量
matrix[N, K] X; // 预测矩阵
...
参数
real alpha; // 截距
...
模型
y ~ normal(alpha + X * beta, sigma); // 指标密度
Stan 代码在 “ 程序块 “ 中结构化。每个 Stan 模型都须要三个程序块,即数据、参数和模型。
数据块是用来申明作为数据读入的变量的。在咱们的例子中,咱们有后果向量(y)和预测矩阵(X)。当把矩阵或向量申明为一个变量时,你须要同时指定对象的维度。因而,咱们还将读出观测值的数量(N)和预测器的数量(K)。
在参数块中申明的变量是将被 Stan 采样的变量。在线性回归的状况下,感兴趣的参数是截距项(alpha)和预测因子的系数(beta)。此外,还有误差项,sigma。
模型区块是定义变量概率申明的中央。在这里,咱们指定指标变量具备正态分布,其平均值为 α +X*β,标准差为 sigma。在这个块中,你还能够指定参数的先验散布。默认状况下,参数被赋予平坦的(非信息性)先验。
此外,还有一些可选的程序块:函数、转换的数据、转换的参数和生成的数量。
接下来,咱们须要以 Stan 程序所冀望的形式来格式化咱们的数据。stan() 函数要求将数据作为一个命名的列表传入,其中的元素是你在数据块中定义的变量。对于这个程序,咱们创立一个元素为 N、K、X 和 Y 的列表。
list(
N = 32,
K = 10,
X = predictors,
y = mpg
)
当初咱们曾经筹备好了咱们的代码和数据,咱们把它们传给函数来拟合模型。
fit_rstan
输入相似的汇总统计数据,包含每个参数的平均值、标准偏差和量值。这些后果可能类似但不完全相同。它们之所以不同,是因为统计数据是依据后验的随机抽样来计算的。
评估收敛性
当应用 MCMC 拟合一个模型时,查看链是否收敛是很重要的。咱们举荐可视化来直观地查看 MCMC 的诊断后果。咱们将创立轨迹图,Rhat 值图。
首先,让咱们创立轨迹图。轨迹图显示了 MCMC 迭代过程中参数的采样值。如果模型曾经收敛,那么轨迹图应该看起来像一个围绕平均值的随机散点。如果链在参数空间中笔直,或者链收敛到不同的值,那就证实有问题了。咱们来演示。
mcmctrace()
这些轨迹图表明,两个模型都曾经收敛了。对于所有的参数,四条链都是混合的,没有显著的趋势。
接下来,咱们将查看 Rhat 值。Rhat 是一种收敛诊断办法,它比拟了各条链的参数估计值。如果链曾经收敛并且混合良好,那么 Rhat 值应该靠近 1。如果链没有收敛到雷同的值,那么 Rhat 值将大于 1。Rhat 值为 1.05 或更高,表明存在收敛问题。rhat() 函数须要一个 Rhat 值的向量作为输出,所以咱们首先提取 Rhat 值。
rhat() +
yaxis_text()
所有的 Rhat 值都低于 1.05,阐明没有收敛问题。
Stan 是一个建设贝叶斯模型的弱小工具,这些包使 R 用户能够很容易地应用 Stan。
点击文末 “浏览原文”
获取全文残缺材料。
本文选自《R 语言贝叶斯 MCMC:用 rstan 建设线性回归模型剖析汽车数据和可视化诊断》。
点击题目查阅往期内容
【视频】马尔可夫链蒙特卡罗办法 MCMC 原理与 R 语言实现 | 数据分享
R 语言实现 MCMC 中的 Metropolis–Hastings 算法与吉布斯采样
R 语言贝叶斯 METROPOLIS-HASTINGS GIBBS 吉布斯采样器预计变点指数分布剖析泊松过程车站等待时间
R 语言马尔可夫 MCMC 中的 METROPOLIS HASTINGS,MH 算法抽样(采样)法可视化实例
python 贝叶斯随机过程:马尔可夫链 Markov-Chain,MC 和 Metropolis-Hastings,MH 采样算法可视化
Python 贝叶斯推断 Metropolis-Hastings(M-H)MCMC 采样算法的实现
Metropolis Hastings 采样和贝叶斯泊松回归 Poisson 模型
Matlab 用 BUGS 马尔可夫区制转换 Markov switching 随机稳定率模型、序列蒙特卡罗 SMC、M H 采样剖析工夫序列 R 语言 RSTAN MCMC:NUTS 采样算法用 LASSO 构建贝叶斯线性回归模型剖析职业声望数据
R 语言 BUGS 序列蒙特卡罗 SMC、马尔可夫转换随机稳定率 SV 模型、粒子滤波、Metropolis Hasting 采样工夫序列剖析
R 语言 Metropolis Hastings 采样和贝叶斯泊松回归 Poisson 模型
R 语言贝叶斯 MCMC:用 rstan 建设线性回归模型剖析汽车数据和可视化诊断
R 语言贝叶斯 MCMC:GLM 逻辑回归、Rstan 线性回归、Metropolis Hastings 与 Gibbs 采样算法实例
R 语言贝叶斯 Poisson 泊松 - 正态分布模型剖析职业足球比赛进球数
R 语言用 Rcpp 减速 Metropolis-Hastings 抽样预计贝叶斯逻辑回归模型的参数
R 语言逻辑回归、Naive Bayes 贝叶斯、决策树、随机森林算法预测心脏病
R 语言中贝叶斯网络(BN)、动静贝叶斯网络、线性模型剖析错颌畸形数据
R 语言中的 block Gibbs 吉布斯采样贝叶斯多元线性回归
Python 贝叶斯回归剖析住房累赘能力数据集
R 语言实现贝叶斯分位数回归、lasso 和自适应 lasso 贝叶斯分位数回归剖析
Python 用 PyMC3 实现贝叶斯线性回归模型
R 语言用 WinBUGS 软件对学术能力测验建设档次(分层)贝叶斯模型
R 语言 Gibbs 抽样的贝叶斯简略线性回归仿真剖析
R 语言和 STAN,JAGS:用 RSTAN,RJAG 建设贝叶斯多元线性回归预测选举数据
R 语言基于 copula 的贝叶斯分层混合模型的诊断准确性钻研
R 语言贝叶斯线性回归和多元线性回归构建工资预测模型
R 语言贝叶斯推断与 MCMC:实现 Metropolis-Hastings 采样算法示例
R 语言 stan 进行基于贝叶斯推断的回归模型
R 语言中 RStan 贝叶斯层次模型剖析示例
R 语言应用 Metropolis-Hastings 采样算法自适应贝叶斯预计与可视化
R 语言随机搜寻变量抉择 SSVS 预计贝叶斯向量自回归(BVAR)模型
WinBUGS 对多元随机稳定率模型:贝叶斯预计与模型比拟
R 语言实现 MCMC 中的 Metropolis–Hastings 算法与吉布斯采样
R 语言贝叶斯推断与 MCMC:实现 Metropolis-Hastings 采样算法示例
R 语言应用 Metropolis-Hastings 采样算法自适应贝叶斯预计与可视化
视频:R 语言中的 Stan 概率编程 MCMC 采样的贝叶斯模型
R 语言 MCMC:Metropolis-Hastings 采样用于回归的贝叶斯预计