因此,我尝试使用 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
}