首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openbugs常量过多错误

Openbugs常量过多错误
EN

Stack Overflow用户
提问于 2015-06-12 15:55:21
回答 1查看 144关注 0票数 2

我正在尝试运行下面的代码,其中我对对数似然表达式使用了零技巧(phi是我的对数似然):

代码语言:javascript
复制
 model{
for (l in 1:k) {
d.1[l] ~ dbern(p.1)
d.2[l] ~ dbern(p.2)
d.3[l] ~ dbern(p.3)
d.4[l] ~ dbern(p.4)
}
for (l in 1:k) {
zeros[l] <- 0
zeros[l] ~ dpois(phi[l])
u.1[l] <- pow((1 - p.1), (1 - d.1[l]))
u.2[l] <- pow((1 - p.2), (1 - d.2[l]))
u.3[l] <- pow((1 - p.3), (1 - d.3[l]))
u.4[l] <- pow((1 - p.4), (1 - d.4[l]))
f.1[l] <- pow(p.1, d.1[l]) * pow((1 - p.1), (1 - d.1[l]))
f.2[l] <- pow(p.2, d.2[l]) * pow((1 - p.2), (1 - d.2[l]))
f.3[l] <- pow(p.3, d.3[l]) * pow((1 - p.3), (1 - d.3[l]))
f.4[l] <- pow(p.4, d.4[l]) * pow((1 - p.4), (1 - d.4[l]))
a[l] <- pow((pow(u.3[l], -theta.1) + pow(u.4[l], -theta.1) - 
    1), (theta.0/theta.1 - 2)) * (-1) * ((theta.0/theta.1) * 
    (-1) + pow((theta.0/theta.1), 2))
b[l] <- pow((pow(u.1[l], -theta.2) + pow(u.2[l], -theta.2) - 
    1), (theta.0/theta.2 - 2)) * (-1) * ((theta.0/theta.2) * 
    (-1) + pow((theta.0/theta.2), 2))
c[l] <- pow(pow((pow(u.3[l], -theta.1) + pow(u.4[l], 
    -theta.1) - 1), -(1/theta.1)), -theta.0) + pow(pow((pow(u.2[l], 
    -theta.2) + pow(u.1[l], -theta.2) - 1), -(1/theta.2)), 
    -theta.0) - 1
d[l] <- pow((pow(u.3[l], -theta.1) + pow(u.4[l], -theta.1) - 
    1), (theta.0/theta.1 * 2 - 2)) * pow(theta.0/theta.1, 
    2)
e[l] <- pow((pow(u.1[l], -theta.2) + pow(u.2[l], -theta.2) - 
    1), (theta.0/theta.2 * 2 - 2)) * pow(theta.0/theta.2, 
    2)
phi[l] <- log((a[l] * b[l]) * (1 + theta.0)/pow(c[l], 
    -(2 + 1/theta.0)) + (d[l] * b[l] + a[l] * e[l]) * 
    ((1 + theta.0) * (1 + 2 * theta.0))/pow(theta.0, 
    3) * pow(c[l], -(3 + 1/theta.0)) + (d[l] * e[l]) * 
    ((1 + theta.0) * (1 + 2 * theta.0) * (1 + 3 * theta.0))/pow(theta.0, 
    4) * pow(c[l], -(4 + 1/theta.0))) + log(pow(theta.1, 
    2) * pow((u.3[l] * u.4[l]), -(1 + theta.1)) * pow(theta.2, 
    2) * pow((u.1[l] * u.2[l]), -(1 + theta.2)))
 }
 p.1 ~ dunif(0 , 1)
 p.2 ~ dunif(0 , 1)
p.3 ~ dunif(0 , 1)
p.4 ~ dunif(0 , 1)
theta.0 ~ dunif(0 , 2)
theta.1 ~ dunif(0 , 2)
theta.2 ~ dunif(0 , 2)
 }

使用数据:

代码语言:javascript
复制
 k <- 16
 d.1 <- c(0 , 0, 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0)
 d.2 <- c(0 , 1, 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0)
 d.3 <- c(1 , 0, 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0)
 d.4 <- c(0 , 1, 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0)

模型在语法上是正确的,数据已加载,但我得到了以下错误:

代码语言:javascript
复制
logical expression contains too many constants

有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-28 09:09:21

BUGS不喜欢包含太多常量的表达式。你需要引入一个子步骤来分解它们。请参阅本页面中“一些错误消息”下面的(c)点:http://mathstat.helsinki.fi/openbugs/Manuals/TipsTroubleshooting.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30798046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档