【问题标题】:Replicating R's prod() function in WinBUGS在 WinBUGS 中复制 R 的 prod() 函数
【发布时间】:2019-03-10 06:03:18
【问题描述】:

使用 WinBUGS,如何计算单个向量中所有值的乘积?

我尝试在同一个向量上使用 for 循环。

例如:

在 R 中,如果 A

然而,

在 BUGS 中,如果 a

【问题讨论】:

    标签: vector winbugs r2winbugs


    【解决方案1】:

    您好,欢迎来到本网站!

    请记住,BUGS 是一种声明性语法,而不是一种编程语言,因此您不能像 R 等语言那样覆盖变量值。因此,您需要创建一些中间节点来执行您的操作计算。

    如果您有以下数据:

    A <- [1,2,3,4]
    nA <- 4
    

    然后你可以在你的模型中包含:

    sumlogA[1] <- 0
    for(i in 1:nA){
        sumlogA[i+1] <- sumlogA[i] + log(A[i])
    }
    prodA <- exp(sumlogA[nA+1])
    

    请注意,我正在处理对数刻度,然后取总和的指数 - 这在数学上等价于乘积,但计算更稳定。

    希望对你有帮助,

    马特

    【讨论】:

    • 非常感谢@MattDenwood。请您澄清一下为什么在 WinBUGS 代码中使用 prod() 并且在 pg 等学术文本示例中有效。 WinBUGS 中的贝叶斯总体分析 中的 165 (Kery & Schaub)? [链接] (books.google.co.uk/…)
    • 据我所知,这在 WinBUGS 中永远不会起作用,但它会在 OpenBUGS 或 JAGS 中起作用,所以也许该代码旨在与较新的软件一起使用。老实说,我已经很多年没有使用过 WinBUGS(或 OpenBUGS)了,因为它不再被开发。 JAGS 仍在开发中,也是跨平台的,这对我来说很重要。
    • 是的,我完全同意您关于使用最新软件的重要性的观点。我很感兴趣地发现 prod() 函数在 WinBUGS 中作为一种未记录的功能工作,但正如您所说,在 OpenBUGS 和 JAGS 中都有记录。它必须是在编写手册之后添加的。感谢您的回复!
    猜你喜欢
    • 2018-12-28
    • 2015-06-13
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多