错误:“切片器卡在无限密度的值上”在JAGS中运行二项式-β模型

时间:2017-11-06 11:17:34

标签: jags rjags

我正在尝试在JAGS中运行二项式-β模型(请参阅下面的示例代码)。我一直收到错误: 错误:尝试运行JAGS模型时遇到以下错误:

Error in node a0
Slicer stuck at value with infinite density

我正在努力理解。我想也许最初的条件是将β分布发送到参数空间的无限区域,但经过一些调查似乎并非如此。 有关此错误意味着什么或如何调整代码以适应它的任何想法?

我已将下面的代码与一些组成的示例数据放在一起。这是我在数据集中可能期望的那种数据。

#Generate some sample data
counts = c(80,37,10,43,55,23,53,100,7,11)
 n = c(100,57,25,78,55,79,65,100,9,11)
consp = c(1.00, 0.57, 0.25, 0.78, 0.55, 0.79, 0.65, 1.00, 0.09, 0.11)
treat = c(0.5,0.5,0.2,0.9,0.5,0.2,0.5,0.9,0.5,0.2)

#Model spec
model1.string <-"model{
for (i in 1:length(counts)){
counts[i] ~ dbin(p[i],n[i])
p[i] ~ dbeta( ( mu[i] * theta[i]) , ((1-mu[i])*theta[i]))
mu[i] <- ilogit(m0 + m1*consp[i] + m2*treat[i])
theta[i] <- exp(n0 + n1*consp[i])
}
m0 ~ dnorm(0, 1)
m1 ~ dnorm(0, 1)
m2~ dnorm(-1, 1)
k0 ~ dnorm(1, 1)
k1 ~ dnorm(0, 1)
}"

#Specify number of chains
chains=5
#Generate initial conditions
inits=replicate(chains, list(m0 = runif(1, 0.05, 0.25),
m1 = runif(1, 0,0.2),
m2=runif(1,-1,0),
k0 = runif(1, 0.5, 1.5),
k1 = runif(1, 0, 0.3)),simsplify = F)

#Run
model1.spec<-textConnection(model1.string)
results <- autorun.jags(model1.string,startsample = 10000,
data = list('counts' = counts,
'n' = n,
'consp'=consp,
"treat"=treat),
startburnin=5000, 
psrf.target=1.02,
n.chains=5,
monitor = c("m0", "m1", "m2","k0", "k1"), inits = inits),

1 个答案:

答案 0 :(得分:3)

当采样变量的概率密度在某一点无限时,切片采样器(由JAGS使用)不起作用。 Beta分布为0或1时可能会发生这种情况。

解决方法是截断创建问题的节点,如:

p[i] ~ dbeta( ( mu[i] * theta[i]) , ((1-mu[i])*theta[i])) I(0.001,0.999)

(我不记得语法,但JAGS明确允许截断的随机变量)