Stan中没有定义先验的参数


15

我刚刚开始学习使用Stanrstan。除非一直对JAGS / BUGS的工作方式感到困惑,否则我一直认为您必须为要从中提取模型的每个参数定义某种先验分布。似乎您不必根据Stan的文档在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);
} 

mu没有tau定义先验也没有。在将我的一些JAGS模型转换为Stan时,我发现如果我对许多参数(大多数)具有未定义的先验值,它们将起作用。

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

Answers:


18

摘自Stan参考手册(的较早版本):

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

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

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

(另请参阅1.0.1版本中的 C.3节)。

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

但是,对于Hamiltonian MC,您只需要(数字地)计算接头密度函数。平坦的(甚至不适当的)先验仅对密度贡献一个常数项,并且只要后验是正确的(有限的总概率质量)(它将具有任何合理的似然函数),就可以在HMC中将其完全忽略方案。


8

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

如果在模型块中未指定先验,则对theta的约束将确保其落在0和1之间,从而为theta提供隐式的统一先验。对于没有事先指定且无限制支持的参数,结果是不正确的先验。斯坦接受不当的先验,但后继者必须是适当的,才能使采样成功。

两者musigma都有不适当的统一先验。

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


如此我就很清楚了,如果STAN以对数(sigma)级别进行采样,则平坦先验仍超过sigma而不是超过log(sigma)?
RasmusBååth2013年

1
是的,统一的先验还sigma没有结束log(sigma)。Stan通过转换参数并使用雅可比行列式应用变量调整的正确更改来实现此目的。
syclik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.