Error: "Slicer stuck at value with infinite density" running binomial-beta model in JAGS
Error: "Slicer stuck at value with infinite density" running binomial-beta model in JAGS
我正在尝试 运行 JAGS 中的二项式 beta 模型(参见下面的示例代码)。我不断收到错误:
错误:尝试 运行 JAGS 模型时遇到以下错误:
Error in node a0
Slicer stuck at value with infinite density
我正在努力理解它。我想也许初始条件是将 beta 分布发送到参数 space 的无限区域,但经过一些调查后情况似乎并非如此。
关于此错误的含义或如何调整代码以适应它的任何想法?
我将我的代码和一些虚构的示例数据放在了下面。这是我在我的数据集中可能期望的那种数据。
#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),
当采样变量的概率密度在某一点无穷大时,切片采样器(JAGS 使用)不起作用。 Beta 分布为 0 或 1 时可能会发生这种情况。
解决方法是截断产生问题的节点,如:
p[i] ~ dbeta( ( mu[i] * theta[i]) , ((1-mu[i])*theta[i])) I(0.001,0.999)
(我不太记得语法,但 JAGS 明确允许截断的随机变量)
我正在尝试 运行 JAGS 中的二项式 beta 模型(参见下面的示例代码)。我不断收到错误: 错误:尝试 运行 JAGS 模型时遇到以下错误:
Error in node a0
Slicer stuck at value with infinite density
我正在努力理解它。我想也许初始条件是将 beta 分布发送到参数 space 的无限区域,但经过一些调查后情况似乎并非如此。 关于此错误的含义或如何调整代码以适应它的任何想法?
我将我的代码和一些虚构的示例数据放在了下面。这是我在我的数据集中可能期望的那种数据。
#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),
当采样变量的概率密度在某一点无穷大时,切片采样器(JAGS 使用)不起作用。 Beta 分布为 0 或 1 时可能会发生这种情况。
解决方法是截断产生问题的节点,如:
p[i] ~ dbeta( ( mu[i] * theta[i]) , ((1-mu[i])*theta[i])) I(0.001,0.999)
(我不太记得语法,但 JAGS 明确允许截断的随机变量)