[英]Runtime error in JAGS
我正在尝试用JAGS做到这一点:
z[l] ~ dbeta(0.5,0.5)
y[i,l] ~ z[l]*dnorm(0,10000) + inprod(1-z[l],dnegbin(exp(eta_star[i,l]),alpha[l]))
( dnorm(0,10000)
将Dirac增量建模为0:如果对模型感兴趣,请参见此处 )。
但是我得到:
RUNTIME ERROR:
Incorrect number of arguments in function dnegbin
但是,如果我这样做:
y[i,l] ~ dnegbin(exp(eta_star[i,l]),alpha[l])
运行正常。 我想知道我不能乘以一个分布的值,所以我想像这样的事情可能起作用:
z[l] ~ dbeta(0.5,0.5)
pointmass_0[l] ~ dnorm(0,10000)
y[i,l] ~ dnegbin(exp(eta_star[i,l]),alpha[l])
y_star[i,l] = z[l]*pointmass_0[l]+inprod(1-z[l],y[i,l])
如果我运行,我得到:
ystar[1,1] is a logical node and cannot be observed
您正在寻找一个零膨胀负二项式模型。 如果使用“一个把戏”,则可以在JAGS中执行此操作,这是一种伪似然方法,当结果变量的分布不是JAGS中的标准分布之一时仍可以使用,但是您仍然可以为可能性。
“一个把戏”包括创建值为1的伪观测值,然后将它们建模为伯努利随机变量概率参数Lik / C,其中Lik是您观察到的可能性,C是一个大常数,以确保Lik / C < <1。
data {
C <- 10000
for (i in 1:N) {
one[i,1] <- 1
}
}
model {
for (i in 1:N) {
one[i,1] ~ dbern(lik[i,1]/C)
lik[i,1] <- (y[i,1]==0)*z[1] + (1 - z[1]) * lik.NB[i,1]
lik.NB[i,1] <- dnegbin(y[i,1], exp(eta_star[i,1]), alpha[1])
}
z[l] ~ dbeta(0.5,0.5)
}
请注意,名称dnegbin在JAGS中已重载。 有一个具有两个参数的分布,一个具有三个参数并返回似然性的函数。 我们正在使用后者。
我正在考虑将计数分布的零膨胀版本添加到JAGS中,因为上述构造对于用户来说是尴尬的报价,而零膨胀分布在JAGS内部很容易实现。
我也想知道一种更好的方法来处理这种情况。
一种俗气的解决方案是添加一个随机节点
ystarstar[i,j] ~ dnorm(ystar[i,j],10000000)
(例如,具有非常高的精度的正态分布,或术语中的狄拉克增量)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.