R语言RStan贝叶斯示例:重复试验模型和种群竞争模型Lotka Volterra

最近我们被客户要求撰写关于RStan的研究报告,包括一些图形和统计输出。

Stan是一种用于指定统计模型的概率编程语言。Stan通过马尔可夫链蒙特卡罗方法(例如No-U-Turn采样器,一种汉密尔顿蒙特卡洛采样的自适应形式)为连续变量模型提供了完整的贝叶斯推断。

可以通过R使用rstan 包来调用Stan,也可以 通过Python使用 pystan 包。这两个接口都支持基于采样和基于优化的推断,并带有诊断和后验分析。

在本文中,简要展示了Stan的主要特性。还显示了两个示例:第一个示例与简单的伯努利模型相关,第二个示例与基于常微分方程的Lotka-Volterra模型有关。

什么是Stan?

  • Stan是命令式概率编程语言。
  • Stan程序定义了概率模型。
  • 它声明数据和(受约束的)参数变量。
  • 它定义了对数后验。
  • Stan推理:使模型拟合数据并做出预测。
  • 它可以使用马尔可夫链蒙特卡罗(MCMC)进行完整的贝叶斯推断。
  • 使用变分贝叶斯(VB)进行近似贝叶斯推断。
  • 最大似然估计(MLE)用于惩罚最大似然估计。

Stan计算什么?

  • 得出后验分布 。
  • MCMC采样。
  • 绘制,其中每个绘制都按后验概率的边缘分布。
  • 使用直方图,核密度估计等进行绘图

安装 rstan

要在R中运行Stan,必须安装 rstan C ++编译器。在Windows上, Rtools 是必需的。

最后,安装 rstan

install.packages(rstan)

Stan中的基本语法

定义模型

Stan模型由六个程序块定义 :

  • 数据(必填)。
  • 转换后的数据。
  • 参数(必填)。
  • 转换后的参数。
  • 模型(必填)。
  • 生成的数量。

数据块读出的外部信息。

data {
  int N;
  int x[N];
  int offset;
}

变换后的数据 块允许数据的预处理。

transformed data {
  int y[N];
  for (n in 1:N)
    y[n] = x[n] - offset;
}

 参数 块定义了采样的空间。

parameters {
  real<lower=0> lambda1;
  real<lower=0> lambda2;
}

变换参数 块定义计算后验之前的参数处理。

transformed parameters {
  real<lower=0> lambda;
  lambda = lambda1 + lambda2;
}

在 模型 块中,我们定义后验分布。

model {
  y ~ poisson(lambda);
  lambda1 ~ cauchy(0, 2.5);
  lambda2 ~ cauchy(0, 2.5);
}

最后, 生成的数量 块允许进行后处理。

generated quantities {
  int x_predict;
  x_predict = poisson_rng(lambda) + offset;
}

类型

Stan有两种原始数据类型, 并且两者都是有界的。

  • int 是整数类型。
  • real
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值