乐趣区

关于算法:R语言贝叶斯MCMC用rstan建立线性回归模型分析汽车数据和可视化诊断

原文链接 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 增长

退出移动版