【问题标题】:JAGS logistic regression models with non-integer weights具有非整数权重的 JAGS 逻辑回归模型
【发布时间】:2017-09-07 14:16:08
【问题描述】:

对于下面的逻辑回归模型,我希望能够使用 n(和 y)的非整数值从后验中采样。当部分数据可用或希望降低权重时,这种模型可能会发生这种情况。

model <- function() {
    ## Specify likelihood
    for (i in 1:N1) {
        y[i] ~ dbin(p[i], n[i])
        logit(p[i]) <- log.alpha[1] + alpha[2] * d[i]
    }
   ## Specify priors
   alpha[1] <- exp(log.alpha[1])
   alpha[2] <- exp(log.alpha[2])
   Omega[1:2, 1:2] <- inverse(p2[, ])
   log.alpha[1:2] ~ dmnorm(p1[], Omega[, ])
 }

dbin 需要 n 的整数值,因此在 n 非整数的情况下返回错误。

我已经读到应该可以使用那些技巧来做到这一点,但未能使其正常工作。帮助表示赞赏。

【问题讨论】:

    标签: r bayesian jags


    【解决方案1】:

    正如你所说,你应该可以用 one 技巧做到这一点。困难的部分是正确编码二项似然,因为 JAGS 没有二项式系数函数。但是,there are ways to do this。下面的模型应该能够做你想做的事情。有关这些技巧的更具体说明,请see my answer here

    data{
      C <- 10000
      for(i in 1:N1){
        ones[i] <- 1
      }
    }
     model{
    for(i in 1:N1){
    # calculate a binomial coefficient
    bin_co[i] <- exp(logfact(n[i]) - (logfact(y[i]) + logfact(n[i] - y[i])))
    # logit p
    logit(p[i]) <- log.alpha[1] + alpha[2] * d[i]
    # calculate a binomial likelihood using ones trick
    prob[i] <- (bin_co[i]*(p[i]^y[i])) * ((1-p[i])^(n[i] - y[i]))
    # put prob in Bernoulli trial and divide by large constant
    ones[i] ~ dbern(prob[i]/C)
    }
    ## Specify priors
    alpha[1] <- exp(log.alpha[1])
    alpha[2] <- exp(log.alpha[2])
    Omega[1:2, 1:2] <- inverse(p2[, ])
    log.alpha[1:2] ~ dmnorm(p1[], Omega[, ])
    }
    

    【讨论】:

    • 这很好用!非常感谢你。我认为 bin_co 是不必要的,因为它是 alpha 中的常量,我是否正确?
    • 不,bin_co 非常必要,因为它会随着每个数据点(即二项式系数)而变化。随着ny 随每个数据点而变化,bin_co 也是如此。有必要的第二个原因是因为二项式系数是二项式似然的一部分。如果您删除它,您将不再在分析中使用二项似然。
    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2020-12-22
    • 2021-04-10
    • 1970-01-01
    • 2018-09-20
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多