R语言stan进行贝叶斯推理分析

作者: 拓端tecdat | 来源:发表于2020-04-10 19:27 被阅读0次

原文连接:http://tecdat.cn/?p=6252

R的Stan

可以从许多统计软件包中运行Stan。到目前为止,我一直在从R运行Stan,首先按照快速入门指南中的说明安装并运行所有内容。

简单线性回归

第一步是为Stan模型编写文件。这包含一个文件linreg.stan:

data { int N; [N] x; vector[N] y; } parameters { real alpha; real beta; real sigma; } model { y ~ normal( + beta * x, sigma); }

该文件的第一部分称为数据,它声明了将作为输入传递给Stan的标量,向量和矩阵。

接下来,我们可以通过运行以下R代码来模拟数据集,并使用Stan和我们的文件linreg.stan来拟合模型:

set.seed(123) n <- 100 x <- rnorm(n) y <- x+ (n) mydata <- list(N = n, y = y, x= ) fit <- stan(file = 'linreg. ', data = mydata, iter = 1000, = 4)

第一次安装Stan模型时,模型编译成C ++时会有几秒钟的延迟。然而,正如Stan的开发人员描述的那样,一旦编译了模型,就可以将其应用于新的数据集而无需重复编译过程(在执行模拟研究的背景下具有很大的优势。

在上面的代码中,我们要求Stan运行4个独立的链,每个链有1000次迭代。运行后,我们可以通过以下方式汇总输出:

fit Inference for Stan model: linreg. 4 chains, each with iter=1000; warmup=500; thin=1; post-warmup draws per chain=500, total post-warmup draws=2000. mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat alpha -0.10 0.00 0.10 -0.29 -0.16 -0.10 -0.04 0.09 1346 1 beta 0.95 0.00 0.11 0.75 0.88 0.95 1.02 1.17 1467 1 sigma 0.98 0.00 0.07 0.85 0.93 0.98 1.03 1.12 1265 1 lp__ -47.54 0.06 1.24 -50.77 -48.02 -47.24 -46.68 -46.17 503 1 Samples were drawn using NUTS(diag_e) at Mon Jun 08 18:35:58 2015. For each parameter, n_eff is a crude measure of effective sample size, and Rhat is the potential scale reduction factor on split chains (at convergence, Rhat=1).

对于回归斜率β,我们的后验均值为0.95(接近用于模拟数据的真实值1)。为了形成95%的后可信区间,我们简单地采用取样后部的2.5%和97.5%的百分位数,这里是0.75到1.17。

您可以从拟合的模型中获取各种其他数量。一种是绘制其中一个模型参数的后验分布。要获得回归斜率,我们可以执行以下操作:

result <- extract(fit) hist(result$beta)

β的后验分布直方图

现在让我们使用标准普通最小二乘拟合线性模型:

summary(lm(y~x)) Call: lm(formula = y ~ x) Residuals: Min 1Q Median 3Q Max -1.9073 -0.6835 -0.0875 0.5806 3.2904 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.10280 0.09755 -1.054 0.295 x 0.94753 0.10688 8.865 3.5e-14 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.9707 on 98 degrees of freedom Multiple R-squared: 0.4451, Adjusted R-squared: 0.4394 F-statistic: 78.6 on 1 and 98 DF, p-value: 3.497e-14

这给出了我们对斜率0.95的估计,与Stan的后验平均值相差2位小数,标准误差为0.11,这与Stan的后验SD相同。

stan和贝叶斯推理

有兴趣探索Stan并使用它来执行贝叶斯推理,这是出于测量误差和数据缺失的问题。正如多年前WinBUGS和其他人的作者所描述和展示的那样,贝叶斯方法在解决不同的不确定性来源问题时非常自然,这些不确定性来源超出参数不确定性,例如缺失数据或用误差测量的协变量。实际上,对于缺失数据的流行的多重插补方法是在贝叶斯范式内发展的,并且实际上可以被视为对完整贝叶斯分析的近似。

相关文章

  • R语言stan进行贝叶斯推理分析

    原文连接:http://tecdat.cn/?p=6252 R的Stan 可以从许多统计软件包中运行Stan。到目...

  • rethinking package 查看后验分布的主要代码

    本文所有代码均来自于《统计反思-用R和stan例解贝叶斯方法》 假期中,为学习贝叶斯模型花费了一些时间,虽然没有领...

  • 如何理解贝叶斯

    如何理解贝叶斯这个重要的概念? 到底什么是贝叶斯 Bayes是用于推理的,而推理讲究证据,所以贝叶斯的推理过程就是...

  • 数据挖掘之贝叶斯

    贝叶斯推理贝叶斯法则朴素贝叶斯分类器应用:文本分类 1. 贝叶斯推理 --提供了推理的一种概率手段 --两个基本假...

  • 贝叶斯推理:机器学习为什么需要大量信息?

    第5章 贝叶斯法 5.2贝叶斯推理:机器学习为什么需要大量信息? ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ️5.2贝叶斯推...

  • Matlab实现多传感器信息融合(D-S证据推论)

    D-S证据理论是对贝叶斯推理方法推广,主要是利用概率论中贝叶斯条件概率来进行的,贝叶斯条件概率需要知道先验概率。而...

  • R语言机器学习与临床预测模型67--贝叶斯网络

    R小盐准备介绍R语言机器学习与预测模型的学习笔记, 快来收藏关注【科研私家菜】 01 贝叶斯网络 贝叶斯网络是一个...

  • 贝叶斯推理

    1. 朴素贝叶斯公式?有什么不同? 2. 联合概率的分解 p(x,y,z) = p(x) p(y) p(z) =П...

  • 贝叶斯推理

    1. 根据观测的行为,先验概率更新为后验概率 2. 内曼-皮尔逊推理:设定解消假设,对立假设,设定显著水平(只有在...

  • 贝叶斯推理

    贝叶斯的统计学中有一个基本的工具叫贝叶斯公式、也称为贝叶斯法则, 尽管它是一个数学公式,但其原理毋需数字也可明了。...

网友评论

    本文标题:R语言stan进行贝叶斯推理分析

    本文链接:https://www.haomeiwen.com/subject/rdedmhtx.html