Stan 中没有定义先验的参数

机器算法验证 马尔可夫链蒙特卡罗 事先的 锯齿 图形模型 斯坦
2022-02-16 02:28:35

我刚刚开始学习使用Stanrstan. 除非我一直对 JAGS/BUGS 的工作方式感到困惑,否则我认为您总是必须为要从中提取的模型中的每个参数定义某种先验分布。不过,根据它的文档,您似乎不必在 Stan 中执行此操作。这是他们在此处提供的示例模型。

data {
  int<lower=0> J; // number of schools 
  real y[J]; // estimated treatment effects
  real<lower=0> sigma[J]; // s.e. of effect estimates 
} 
parameters {
  real theta[J]; 
  real mu; 
  real<lower=0> tau; 
} 
model {
  theta ~ normal(mu, tau); 
  y ~ normal(theta, sigma);
} 

既没有mutau没有定义先验。在将我的一些 JAGS 模型转换为 Stan 时,我发现如果我留下许多或大多数未定义先验的参数,它们就可以工作。

问题是当我有没有定义先验的参数时,我不明白 Stan 在做什么。它是否默认为均匀分布?这是 HMC 的特殊属性之一,它不需要为每个参数定义先验吗?

2个回答

来自(早期版本)Stan 参考手册:

不指定先验等同于指定统一先验。

仅当参数有界时,统一先验才是正确的[...]

在 Stan 程序中也允许不正确的先验;它们来自没有采样语句的无约束参数。在某些情况下,不正确的先验可能会导致正确的后验,但是由用户来保证对参数或数据的约束确保后验的适当性。

(另见1.0.1 版本中的 C.3 节)。

这在 Stan 中可以但在 BUGS 中没有问题的根本原因可能与以下事实有关:在 BUGS 中,您的模型“程序”指定了一个正式的图形模型,而在 Stan 中,您正在编写一个小函数来计算联合概率密度函数。没有为所有变量指定适当的先验可能会破坏图形模型的良好形式属性。

但是,对于哈密顿量 MC,您只需要(数值上)计算联合密度函数。一个平坦的(甚至不正确的)先验只对密度贡献一个常数项,因此只要后验是正确的(有限的总概率质量)——它将具有任何合理的似然函数——它可以在 HMC 中完全忽略方案。

来自Stan 参考 v1.0.2(第 6 页,脚注 1)

如果模型块中没有指定先验,则对 theta 的约束确保它介于 0 和 1 之间,从而为 theta 提供隐式统一先验。对于没有先验指定和无限支持的参数,结果是不正确的先验。Stan 接受不正确的先验,但后验必须正确才能使采样成功。

两者mu都有sigma不正确的统一先验。

在引擎盖下,mu并被sigma区别对待。sigma用下限定义;Stan 样本来自log(sigma)(对变换进行雅可比调整)。有关转换的更多详细信息,请参阅第 27 章(第 153 页)。