我正在运行一个简单的广义线性模型,从R调用JAGS。该模型是负二元分布的。该模型适用于鱼类数量的数据,大多数个体计数(下面数据集中的“C”)为零。
我最初用一个协变量,温度('Temp')运行模型。大约一半时间模型运行,另一半时间模型给我错误,'节点C中的错误[###]无效的父值。每次连续尝试运行模型时,错误消息中C [###]的值都会更改。
由于我在运行模型方面的成功不一致,我尝试添加另一个协变量,盐度('盐')。然后模型根本不会运行,并带有与上面相同的错误消息。
非常感谢任何关于错误来源的想法或建议 我怀疑分散参数r的初始值可能是问题。理想情况下,如果可以解决此错误,我会在模型拟合中添加几个协变量。
数据集和代码紧随其后。为了在本网站上正确加载数据,我省略了672个总值中的662个;即使数据集减少(n = 10而不是n = 672),问题仍然存在。
谢谢。
setwd("C:/Users/John/Desktop")
library('coda')
library('rjags')
library('R2jags')
set.seed(1000000000)
#data
n=10
C=c(0,0,0,0,0,1,0,0,0,1)
Temp=c(0,29.3,25.3,28.7,28.7,24.4,25.1,25.1,24.2,23.3)
Salt=c(6,6,0,6,6,0,12,12,6,12)
sink("My Model.txt")
cat("
model {
r~dunif(0,10)
beta0~dunif (-20,20)
beta1~dunif (-20,20)
beta2~dunif (-20,20)
for (i in 1:n) {
C[i] ~ dnegbin(p[i], r)
p[i] <- r/(r+lambda[i])
log(lambda[i]) <- mu[i]
mu[i] <- beta0 + beta1*Temp[i] + beta2*Salt[i]
}
}
", fill=TRUE)
sink()
n=n
C=C
Temp=Temp
Salt=Salt
#bundle data
bugs.data = list(
"n",
"C",
"Temp",
"Salt")
#parameters to monitor
params<-c(
"r",
"beta0",
"beta1",
"beta2")
#initial values
inits <- function(){list(
r=floor(runif(1,0,5)),
beta0=runif(1,-5,5),
beta1=runif(1,-5,5),
beta2=runif(1,-5,5))}
model.file <- 'My Model.txt'
jagsfit <- jags(data=bugs.data, inits=inits, params, n.iter=1000, n.thin=10, n.burnin=100, model.file)
print(jagsfit, digits=5)
答案 0 :(得分:0)
这对我来说大部分时间都可以正常工作,但如果inits函数采样r为0的值,那么它会因你描述的错误而失败 - 你更有可能在inits函数中使用floor()不知道你为什么这样做 - r不仅限于整数,而是严格肯定的。此外,每次运行模型时,您将获得不同的初始值(除非在R中设置随机种子),这使您的生活变得更加复杂。我通常建议选择固定(并且可能过度分散)的初始值,例如对于示例中的两个链,r = 0.01和r = 10。
然而,JAGS为这个模型选择了可用的初始值,你可以看到它没有提供你自己的内容,例如:
library('runjags')
listdata <- lapply(bugs.data, get)
names(listdata) <- unlist(bugs.data)
run.jags(model.file, params, listdata)
我也会想到你以前使用的r - 它很可能会对你的后部产生比预期更大的影响。另一个(不一定更好)选项就像伽马先验。
马特