【问题标题】:Defining new functions and distributions in the BUGS/JAGS/STAN language用 BUGS/JAGS/STAN 语言定义新的函数和分布
【发布时间】:2014-06-06 01:10:27
【问题描述】:

我是一个全新的统计分析领域,最近对 BUGS/JAGS/STAN 建模语言产生了兴趣。真正让我吃惊的是,我没有看到任何定义新函数或分布以避免代码重复的示例。比如说我经常用泊松分布的平方,有没有办法做到以下几点?

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

然后是以后

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

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

【问题讨论】:

    标签: winbugs jags stan r2winbugs


    【解决方案1】:

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

    参考

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

    【讨论】:

    • 恐怕你必须为非学术人士“购买”本教程。
    • 您可以给作者发邮件,也可以在 scihub 上搜索。
    【解决方案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 有一个用户编写的添加新发行版的教程,尽管我对函数一无所知。

    【讨论】:

      【解决方案3】:

      对于 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

      【讨论】:

        猜你喜欢
        • 2018-03-25
        • 1970-01-01
        • 2021-02-15
        • 2015-05-19
        • 1970-01-01
        • 2020-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多