查看原文
其他

统计建模工具 | Rstan的入门

The following article is from 心研心漫 Author 漫漫求索0910

转载自公众号:心研心漫

作者:漫漫求索0910


Hello,

这里是行上行下,我是喵君姐姐~


在介绍Rstan之前需要了解一些stan的情况。关于stan的介绍,可以从以下的网址中获知:https://mc-stan.org/


Stan是一个最先进的统计建模和高性能统计计算平台。在社会、生物、物理科学、工程和商业领域,成千上万的用户依赖于Stan进行统计建模、数据分析和预测。


用户可以在stan的概率编程语言使用对数(log)密度函数得到MCMC抽样的全贝叶斯统计推断、近似贝叶斯推断与变分推断、惩罚最大似然估计与优化。


到此有个大概的了解就可以了。总之是一个很好的建模工具,有兴趣的话可以提前看一下文档,我觉得很有趣。接下来讲重点:Rstan。关于这方面的中文介绍比较少,所以就想着给大家介绍一下,当作一个了解的切口。如果想要深入学习的话,可以看文末的补充材料。


PS:后台回复关键词“Rstan”即可获得所述的文字版介绍及相关资料啦!



安装


install.packages("rstan")

如果安装不了这个包,检查一下有没有安装Rtools(win)。


加载包


library(rstan)


示例一


stan建模文件,需要另存为8schools.stan


data { int<lower=0> J; // 学校数目 real y[J]; // 测试效果的预测值 real<lower=0> sigma[J]; // 测试效果的标准差  } parameters {   real mu; real<lower=0> tau;   real eta[J];}transformed parameters {  real theta[J];  for (j in 1:J)    theta[j] = mu + tau * eta[j];}
model {  target += normal_lpdf(eta | 0, 1);  target += normal_lpdf(y | theta, sigma)


新建一个R文件,另外最好加上8schools.stan的路径设置


setwd("")#8schools.stan所在的路径schools_dat <- list(J = 8,         y = c(28,  8, -3,  7, -1,  1, 18, 12),          sigma = c(15, 10, 16, 11,  9, 11, 10, 18)fit <- stan(file = '8schools.stan', data = schools_dat,           iter = 1000, chains = 4)#file所引用的是刚才建立的模型#data是指数据集,iter迭代数


最后可以打印出一些你需要参数


print(fit)plot(fit)pairs(fit, pars = c("mu", "tau", "lp__"))la <- extract(fit, permuted = TRUE) # 回传数组列表 mu <- la$mu ### 回传三维的数组:叠代、马尔可夫链及参数a <- extract(fit, permuted = FALSE)### 对stanfit项目使用S3函数a2 <- as.array(fit)m <- as.matrix(fit)d <- as.data.frame(fit)

示例二


在rstan的文档里面的例子和网站上的有所区别,他们需要放在同一个文件夹里面。


## Not run:stanmodelcode <- " data {int<lower=0> N; real y[N];}parameters { real mu;}model { target += normal_lpdf(mu | 0, 10); target += normal_lpdf(y | mu, 1);} "
#以上部分是模型部分,需要先跑出来

y <- rnorm(20) dat <- list(N = 20, y = y); fit <- stan(model_code = stanmodelcode, model_name = "example",  data = dat, iter = 2012, chains = 3, verbose = TRUE,   sample_file = file.path(tempdir(), 'norm.csv')) #模型拟合print(fit)# extract samples e <- extract(fit, permuted = FALSE) # return a list of arrays str(e)arr <- as.array(fit) # return an array str(arr)mat <- as.matrix(fit) # return a matrixstr(mat) ## End(Not run)


为了讲清楚操作部分,所以录制了一个小小视频,希望帮助到入门的朋友们。关于模型方面的介绍后期有机会再更新。还在学习中,敬请期待。



推荐学习资源

https://www.bilibili.com/video/BV135411t7f3

https://www.bilibili.com/video/BV1RK4y1b7ay


参考资料

https://mc-stan.org/rstan/

rstan manual下载:

https://cran.r-project.org/web/packages/rstan/index.html

rstan简介以及安装:

https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started


另外还有许多不错的作者写过相关的介绍:

https://blog.csdn.net/a358463121/article/details/70194082

https://blog.csdn.net/qq_19600291/article/details/89888740

有兴趣的话可以再去看看。


PS:后台回复关键词“Rstan”即可获得所述的文字版介绍及相关资料啦!


转载自公众号:心研心漫

作者:漫漫求索0910

校对:喵君姐姐

排版:华华


行上行下 | 科研素养相关推文汇总

脑科学方向 | Python3在科研里的使用

行上行下 | 科研相关软件安装及使用合集

第二期 | 李红教授浅谈如何成为优秀研究生

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存