所以我尝试使用R2OpenBUGS使用来自R的OpenBUGS进行非常复杂的模型,模型工作的短期运行,但是更长的运行失败。当我在R2OpenBUGS中的错误调用中设置debug = T时,日志显示:抱歉模块MathRandnum出错了。显然,要获得收敛估计,我需要运行模型进行大量迭代,通常它不能进行40K迭代。
我尝试过的一件事是短时间运行模型,停止,保存链条然后重新启动,这至少告诉我它什么时候失败。在此运行中,模型在44到48K迭代之间失败。
我不太了解MathRandnum模块正在做什么,但它似乎是MCMc更新过程的一部分。
所以我考虑这个问题的方法是,一旦设置了OpenBUGS随机种子并给出了初始值,那么链条就会出现。价值观及其更新过程是确定性的。因此,对于任何给定的种子和初始值,故障将在给定的迭代中发生。因此,如果有一种方法可以在故障发生之前更改种子,则可能不会发生。在OpenBUGS GUI中,您无法在此时更改种子,需要在编译模型之后和更新之前完成。这就是我的问题,是否有可能在重新启动时更改种子?如果有可能这样做是错误的吗?
或者,这个模型可能出了什么问题,是我对MathRandnum可能正确做法的解释?鉴于我认为它在不同点失败但是一旦初始化它总是在同一点失败这是否意味着改变种子预设(它可以取值1-14)可能会解决它?
我的BUGS模型如下。
{
# Priors
#State model priors
shape.c ~ dunif(0.0001, 3) # dispersal kernel shape/scale parameters
scale.alpha ~ dunif(0.0001, 3) #^
tau2 <- 1/(sigma2 * sigma2)
sigma2 ~ dunif(0, 5)
phi ~ dunif(0, 1)
alpha.theta ~ dnorm(0 , .01)
#alpha.theta ~ dflat()
beta.urb ~ dnorm(0 , .01)
beta.wood ~ dnorm(0 , .01)
beta.int ~ dnorm(0, .01)
init.occ ~ dnorm(0, 1000)T(0, 1) # Strong prior! Assumption that is absent from most sites in 2001
for (t in 1:nyear) {
alpha.p[t] ~ dnorm(mu.lp, tau.lp)
}
#Observation model priors
mu.lp ~ dnorm(0, 0.01)
tau.lp <- 1 / (sd.lp * sd.lp)
sd.lp ~ dunif(0, 5)
dtype2.p ~ dunif(dtype2p_min,dtype2p_max) #List length factor effects
dtype3.p ~ dunif(dtype3p_min,dtype3p_max) #
#State model
for (i in 1:nsite) {
z[i,1] ~ dbern(init.occ) # this follows from line 22
theta[i] <- min(max(0.00000000001, thetalim[i]), 0.999999999999) # overflow constraint
logit(thetalim[i]) <- alpha.theta + beta.urb*urban[i] + beta.wood*wood[i] + beta.int*wood[i]*urban[i]# + RE[i] #Site level environment relation
for (t in 2:nyear) { # This loop now starts at year 2002
gamma[i,t] <- min(max(0.00000000001, gammalim[i,t]), 0.999999999999) # overflow constraint
gammalim[i,t] <- (shape.c/(2*scale.alpha*(exp(loggam(1/shape.c)))))*(exp(-1*(pow((d[i,t]/scale.alpha), shape.c)))) # dispersal kernel from Clark 1998
muZ[i,t] <- z[i ,t-1] * phi + (1 - z[i,t-1]) * gamma[i, t]*theta[i] # Occupancy dynamics,
z[i,t] ~ dbern(muZ[i,t]) # True occupancy z at site i
}
}
# Observation model
for (j in 1:nvisit) {
Py[j] <- z[Site[j], Year[j]] * p[j]
logit(p[j]) <- alpha.p[Year[j]] + dtype2.p*DATATYPE2[j] + dtype3.p*DATATYPE3[j]
y[j] ~ dbern(Py[j])
Presi[j] <- abs(y[j] - p[j])
y.new[j] ~ dbern(Py[j])
Presi.new[j] <- abs(y.new[j] - p[j])
}
# Bayesian Goodness-of-fit
fit <- sum(Presi[])
fit.new <- sum(Presi.new[])
# Finite sample occupancy
for (t in 2:nyear) {
psi.fs[t] <- sum(z[1:nsite, t])/nsite
}