Vol.1
前言
Stan 是一种编程语言,用于统计建模和数据分析。它使用贝叶斯方法,提供灵活的模型定义和高效的推断算法,适合复杂的统计模型等。Stan语言支持多种编程接口,其中RStan 是 Stan 的 R 语言接口,允许用户在 R 中编写、编译和运行 Stan 模型,并对结果进行分析和可视化。
Vol.2
Stan 的特点和优势
1
贝叶斯推断
Stan是一个全新的贝叶斯软件,是对汉密尔顿蒙特卡罗算法( Hamiltonian Monte Carlo, HMC)的扩展应用,能够高效估计复杂模型的后验分布。
2
灵活的建模语言
Stan 提供简洁且通用的建模语法,用户可以自定义复杂的统计模型,包括层级模型等。
3
高效的采样算法
Stan的 HMC 算法通常比传统的MCMC方法更高效,尤其在高维模型中表现良好。
Vol.3
Stan 的基本用法
Stan 的运行可分为以下 6 个步骤:
1、使用 Stan 概率模型语言,建立贝叶斯统计模型
2、通过 Stanc 函数将 Stan 模型语言编译为 C + + 代码
3、将 C + + 代码编译为可以被 R 载入的动态链接库
4、运行动态链接库的程序从后验分布中抽样
5、对后验分布样本进行收敛诊断
6、基于后验分布进行统计推断。
通常2-4步可从 R 中调用函数来实现,使用者不需要了解其中具体过程,但是如需对程序进行调试,也可以逐步执行2-4步。
Vol.4
RStan 的安装
1.rstan (stan and the rstan R package);https://mc-stan.org/users/interfaces/rstan.html
2.cmdstanr;https://mc-stan.org/cmdstanr/
rstan的安装
stan的安装具有其自身的特点且较为复杂,本次推文将只介绍在windows平台下,基于R的stan的安装和使用。首先需要安装好R软件。
检查 C + + 工具链安装情况,运行以下命令:
pkgbuild::has_build_tools( debug = TRUE)
如果输出的是FALSE,说明包含 C++工具链的Rtools软件尚未安装,可以从 http://cran.r-project.org/bin/windows/Rtools/ 下载并安装。在安装过程中,需要勾选“add rtools to system Path”选项。
pkgbuild::has_build_tools(debug = TRUE)
另外,RStan 安装前,为确保 R 中没有 RStan,在 R 中运行以下命令以清除原有 RStan:
remove.packages("rstan")if (file.exists(".RData")) file.remove(".RData")
重启 R,安装 rstan 包。运行以下命令:
install.packages("rstan", repos = "https://cloud.r-project.org/", dependencies = TRUE)
验证安装:要验证是否安装成功,可以运行 RStan 示例/测试模型:
example(stan_model, package = "rstan", run.dontrun = TRUE)
载入 rstan 包,运行命令:
library (rstan)
cmdstanr的安装
install.packages("cmdstanr", repos = c('https://stan-dev.r-universe.dev', getOption("repos")))
安装好后直接加载以下这些包,方便后面调用
library(cmdstanr)library(posterior)library(bayesplot)color_scheme_set("brightblue")
CmdStanR 需要先安装好CmdStan(Stan 的 shell 接口)。在安装之前也是需要有 C++ 工具链。
首先检查工具链是否设置在正确,使用以下函数:
check_cmdstan_toolchain()
如果配置正确,就会如下所示:
当配置正确时,就可以调用 install_cmdstan()函数来安装 CmdStan:
install_cmdstan(cores = 2)
如果顺利的话,一般就是安装好了,但是往往很多时候,都是不顺的...比如,可能安装了半天,最后出来的结果是这样的
在使用 CmdStanR 之前,它需要知道 CmdStan 安装的位置。检查 CmdStan 安装的路径和 CmdStan 版本号,可以使用:
cmdstan_path()cmdstan_version()
但由于上一步出bug了,所以这两行也不会出结果,所以这时,我们还是需要解决上一步的问题。
首先我们的cmdstanr应该是装好了,不出所料,可以运行一下library(cmdstanr)会发现是能加载出来的,但是大多数情况都是这一行代码install_cmdstan(cores = 2)会报错,根据报错的原因可以发现应该是解压错误。
这时候我们可以直接手动去C盘解压一下,找到C:\Users\Administrator\.cmdstan,可以发现解压出来也是有问题的,进展到30%可能就断了,所以这时候我们可以自己手动去下载。下载的网址如下:https://github.com/stan-dev/cmdstan/releases
下完手动解压之后一切都好使了,cmdstan_path(),cmdstan_version()这两行代码也能运行成功,但是可能会发现模型可能无法编译。最后又得把这个文件给手动删掉,然后尝试了好几次,通过install_cmdstan(cores = 1)也不行,最后通过install_cmdstan(cores = )成功了。如果小伙伴们在安装的时候出现了这些情况,可以按照我的步骤挨个试一下,也许就装成了。
示例
编译模型
cmdstan_model()是 cmdstanr 中的函数,用于编译 Stan 模型。它接受一个 Stan 文件路径作为输入,并将其编译为一个可执行模型。在这里,我们使用cmdstan安装附带的示例stan程序
file <- file.path(cmdstan_path(), "examples", "bernoulli", "bernoulli.stan")mod <- cmdstan_model(file)mod$print()
这个 Stan 模型编码了一个简单的伯努利模型,这个模型通过给定的数据 y 来估计 theta。其中theta 的先验分布是均匀分布。
data:定义数据
intN:定义一个非负整数 N,表示观测数据 y 的样本量。
array[N] inty:定义一个长度为 N 的整数数组 y,其中每个元素的取值在 0 和 1 之间。y 是观测数据,表示 N 次伯努利试验的结果(1 表示成功,0 表示失败)。
parameters:定义参数
realtheta:定义参数 theta,表示伯努利试验的成功概率。该参数的取值在 [0, 1] 区间。
model:定义模型
theta ~ beta(1, 1):给 theta 赋予一个 Beta(1, 1) 分布作为先验分布。在 Beta(1, 1) 下,theta 的分布是均匀分布,即在 [0, 1] 区间内,每个值的概率相等。
y ~ bernoulli(theta):定义观测数据 y 的似然函数,假设 y 服从伯努利分布,成功概率为 theta。这表示在 N 次伯努利试验中,每个试验的成功概率为 theta。
这个模型是一种简单的贝叶斯估计方法,用于估计伯努利试验的成功概率 theta。模型给 theta 一个先验(均匀分布),然后通过观测数据更新对 theta 的认识,即计算其后验分布。
运行 MCMC
Vol.5
计算方法
RStan 和 cmdstanr 都是用于在 R 中运行 Stan 模型的接口。
1
实现方式和依赖
RStan:是 Stan 的内存接口,依赖于 Rcpp 和 inline 等 R 包从 R 调用 C++ 代码。
cmdstanr:并不直接从 R 中调用任何 C++ 代码,而是基于 CmdStan,它是 Stan 的命令行接口。cmdstanr依靠幕后的 CmdStan 接口进行编译、运行算法以及将结果写入输出文件。
2
安装与兼容性
RStan:对于 RStan 来说,跟上 Stan 版本是很复杂的,通常需要对 rstan 包以及 rstan 和 StanHeaders 的新 CRAN 版本进行重要的更改。
cmdstanr:使用 CmdStanR,在使用cmdstanr::install_cmdstan()更新 CmdStan 后,R 将立即提供 Stan 中的最新改进。安装过程中,cmdstanr 自动下载并配置 CmdStan,减少了依赖冲突的可能性。
3
编译速度和性能
编译速度:cmdstanr 利用命令行编译器,编译速度通常比 RStan 更快,特别是对于较复杂的 Stan 模型来说更为明显。
内存和计算效率:cmdstanr 的内存管理通常更高效,占用内存更少,在大型数据和高维模型上表现更好。此外,cmdstanr 支持并行化运行多个链,大大提高了运行效率。
4
数据传输和结果处理
RStan:直接将数据和结果存储在 R 内存中,适合小规模数据分析。但当数据较大时,R 的内存管理会不足。
cmdstanr:数据传递和结果存储更灵活,结果可以保存为 .csv 文件,适合大型数据集分析。且 .csv 文件便于外部存储和其他工具进一步分析。
5
并行和采样速度
RStan:支持并行,但设置较为复杂,且在大型模型上可能性能有限。
cmdstanr:并行化配置简单,用户可以轻松指定 parallel_chains 参数来运行多个链,在多核 CPU 上运行更高效。
6
使用体验
RStan:适合小规模、简单的模型以及快速原型开发,在 R 环境内即可轻松完成所有任务。
cmdstanr:适合复杂模型和大数据分析,运行速度快,资源管理更高效,且与外部数据管道的集成更方便。
如果希望直接在 R 中构建并快速测试小型 Stan 模型,RStan 是一个便捷的选择。如果对模型规模、性能和系统兼容性有更高要求,尤其是大型数据或复杂模型分析,cmdstanr 更具优势。
PSYCH统计实验室
通知公告
网络分析课程目前开放视频课啦!
单次课200元/讲(学生),250元/讲(非学生)
共有四讲内容:
①横断面网络分析简介与基础
②网络分析与因子分析
③交叉滞后网络分析
④时间序列网络分析
购买后开放视频权限14天,可多次申请。
并赠送所有课程相关资料(无PPT)
如果想申请购买,请联系M18812507626
更多资讯
关注我们
文稿:Traveler
排版:Peruere
责编:Wink
审核:摘星
本文由“Psych统计自习室”课题组原创,欢迎转发至朋友圈。如需转载请联系后台,征得作者同意后方可转载。