原文链接 http://tecdat.cn/?p=23255
本文将议论 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 函数。
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。
最受欢迎的见解
1.应用 R 语言进行 METROPLIS-IN-GIBBS 采样和 MCMC 运行
2. R 语言中的 Stan 概率编程 MCMC 采样的贝叶斯模型
3. R 语言实现 MCMC 中的 Metropolis–Hastings 算法与吉布斯采样
4. R 语言 BUGS JAGS 贝叶斯剖析 马尔科夫链蒙特卡洛办法(MCMC)采样
5. R 语言中的 block Gibbs 吉布斯采样贝叶斯多元线性回归
6. R 语言 Gibbs 抽样的贝叶斯简略线性回归仿真剖析
7. R 语言用 Rcpp 减速 Metropolis-Hastings 抽样预计贝叶斯逻辑回归模型的参数
8. R 语言应用 Metropolis- Hasting 抽样算法进行逻辑回归
9. R 语言中基于混合数据抽样 (MIDAS) 回归的 HAR-RV 模型预测 GDP 增长