2

我是 OpenBUGS 的新手,在使用 logit() 函数拟合模型时遇到了一些问题。

阅读周围我发现一个可能的解决方案是明确指定 logit 函数而不使用 WinBUGS 自己的 logit 函数:

在更复杂的模型中,我们在使用 WinBUGS 自己的 logit 函数时经常遇到问题,例如实现收敛(实际上,即使使用相当简单的模型也可能出现问题。)。因此,通常最好通过 logit.p[i] <- log(p[i] / (1 – p[i])), p[i] <- exp(logit.p[i ]) / (1 + exp(logit.p[i])) 或 p[i] <- 1 / (1 + exp(- logit.p[i]))。

(更多信息在这里http://www.mbr-pwrc.usgs.gov/software/kerybook/AppendixA_list_of_WinBUGS_tricks.pdf第 14 点。)。

问题是我不明白该怎么做,假设我使用 WinBUGS 集成 logit 函数的原始似然函数是:

for (i in 1:n){
    y[i] ~ dbern(p[i])
    logit(p[i]) <- beta[1] + beta[2]*x1[i] + beta[3]*x2[i] + beta[4]*x3[i] 
    }

我如何明确地写出来?

非常感谢。

文森佐

4

1 回答 1

2

感谢一位同事,我找到了在OpenBUGS中显式指定logit函数的方法,工作代码如下:

for (i in 1:n){
y[i] ~ dbern(logit.p[i])
logit.p[i] <- 1 / (1 + exp(-p[i]))
p[i] <-  beta[1] + beta[2]*x1[i] + beta[3]*x2[i] + beta[4]*x3[i] 
}
于 2016-09-06T19:02:14.583 回答