统计建模工具 | 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 matrix
str(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
校对:喵君姐姐
排版:华华