【问题标题】:if/else statement for defining a distribution in JAGS用于在 JAGS 中定义分布的 if/else 语句
【发布时间】:2018-03-25 14:36:31
【问题描述】:

在 JAGS 中,我想为参数 w[i] 定义一个泊松分布,如果另一个参数 e[i] 大于 0,它也会被截断(大于或等于 2)。

基本上我希望它代表:

w[i] ~ ifelse( e[i] > 0, dpois(mu) T(2,) , dpois(mu) )

我已经尝试使用 step 函数,方法是调整为响应其他请求类似内容的帖子而给出的代码:Choosing Different Distributions based on if - else condition in WinBugs/JAGS

但这似乎不起作用?

谢谢

【问题讨论】:

    标签: if-statement truncation jags


    【解决方案1】:

    也许是这样的?

    pois1 ~ dpois(mu) T(2,)
    pois2 ~ dpois(mu)
    for(i in 1:N){
    indicator1[i] <- ifelse(e[i] > 0, 1, 0)
    indicator2[i] <- ifelse(e[i] <= 0, 1, 0)
    w[i] <- (pois1 * indicator1[i]) + (pois2 * indicator2[i])
    }
    

    e[i] 大于1 时,w[i] 取值来自pois1。如果不是w[i],则取pois2的值。

    编辑:或者,您可以只定义一个指标变量并这样做。

    pois1 ~ dpois(mu) T(2,)
    pois2 ~ dpois(mu)
    for(i in 1:N){
    indicator[i] <- ifelse(e[i] > 0, 1, 0)
    w[i] <- (pois1 * indicator[i]) + (pois2 * (1 - indicator[i]))
    }
    

    【讨论】:

    • 谢谢!这行得通。现在意识到我遇到的问题实际上是 e[i] 是循环定义的,但现在全部排序了。
    • 太棒了。我添加了另一种方法来在答案中只定义一个指标变量。
    猜你喜欢
    • 2022-07-16
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多