有可能用任意后验函数来定义斯坦模型吗

Is it possible to define a Stan model in terms of an arbitrary posterior function?

本文关键字:定义 模型 函数 任意 有可能      更新时间:2023-10-16

是否可以根据任意后验函数定义Stan模型?

我想的是类似于MCMCPack的MCMCmetrop1R()功能,其中用户定义了一个任意的后验函数。如果有一个很好的例子来说明如何使用C++API,我可以深入研究它

从某种意义上说,定义任意后验分布是Stan语言中所能做的一切。但是,如果你特别指的是后验分布,它不是Stan中已经定义的分布的组成,那么你可以使用increment_log_prob函数向对数后验添加项,无论它们是数据可能性的一部分还是参数的先验。请参阅用户手册中题为"自定义概率函数"answers"用户定义函数"的章节。

在stan-users-Google组的FAQ下有一个例子,尽管它使用了不推荐使用的直接操作lp__符号的语法,而不是使用increment_log_prob函数来做同样的事情。现在.stan文件将是

data {
  int<lower=1> N;
  real<lower=0,upper=1> x[N];
}
transformed data {
  real sum_log_x; // calculate this constant only once
  sum_log_x <- 0.0;
  for (i in 1:N)
    sum_log_x <- sum_log_x + log(x[i]);
}
parameters {
  real<lower=0> a;
  real<lower=0> b;
}
model {
  real summands[N];
  // put priors on a and b here if you want
  // log-likelihood
  increment_log_prob(N * (log(a) + log(b)) + (a - 1) * sum_log_x);
  for (i in 1:N) {
    summands[i] <- (b - 1) * log1m(pow(x[i],a)); // log1m(y) := log(1 - y)
  }
  increment_log_prob(summands);
}