6

我是一个非常新的统计分析世界,最近对 BUGS/JAGS/STAN 建模语言产生了兴趣。真正让我吃惊的是,我没有看到任何定义新函数或分布以避免代码重复的例子。例如,假设我经常使用泊松分布的平方,是否有以下方法?

dsqpo <- function(lambda) {
  tmp ~ dpois(lambda)
  tmp2 <- tmp * tmp
  return(tmp2)
}

然后稍后

model{
  ...
  x ~ dsqpo(alpha)
  y ~ dsqpo(beta)
}

无需每次都定义一个新的临时变量。

4

3 回答 3

2

在 WinBUGS、OpenBUGS 和 JAGS 中,您不能将新函数定义为建模语言的一部分。但是,您可以在 Component Pascal(用于 Win/OpenBUGS)或 C++(用于 JAGS)中进行低级编程。

对于 WinBUGS,请参阅 WBDev ( http://www.winbugs-development.org.uk/wbdev.html )。对于 OpenBUGS,请参见已安装程序的 UDev 子目录,其中包含 PDF 手册,基本上这与 WinBUGS 的工作方式相同。

对于 JAGS,它没有正确记录 - 在http://www.ncbi.nlm.nih.gov/pubmed/23959766上有一个用户编写的添加新发行版的教程,尽管我不知道任何功能。

于 2014-04-23T12:13:51.633 回答
2

对于 Stan,功能将在下一个版本中提供。当前版本 v2.2.0 没有将用户定义的函数作为语言的一部分。

有关建议的语法,请参阅:https ://github.com/stan-dev/stan/wiki/Function-Syntax-and-Semantics-Design

如需其他与 Stan 相关的帮助,请查看 stan-users google 组:https ://groups.google.com/forum/#!forum/stan-users

于 2014-04-21T21:36:55.687 回答
1

最近的论文“使用 Stan 进行贝叶斯推理:添加自定义分布的教程”详细描述了如何执行此操作。我将 doi 包括为持久链接。

参考

Annis, J., Miller, BJ 和 Palmeri, TJ (2016)。使用 Stan 进行贝叶斯推理:添加自定义分布的教程。行为研究方法,1-24。http://doi.org/10.3758/s13428-016-0746-9

于 2016-06-17T15:13:52.917 回答