[英]"convergence" for a derived quantity in JAGS/R2Jags
更新:现在使用 Traceplot 示例
我正在尝试适应Outhwaite 等。 als 2018占用建模代码,并且有几个问题我似乎无法找到答案...
用于创建 model 的代码
cat(
"model{
### Model ###
# State model
for (i in 1:nsite){
for (t in 1:nyear){
z[i,t] ~ dbern(psi[i,t])
logit(psi[i,t])<- b[t] + u[i]
}}
# Observation model
for(j in 1:nvisit) {
y[j] ~ dbern(Py[j]+0.0001)
Py[j]<- z[Site[j],Year[j]]*p[j]
logit(p[j]) <- a[Year[j]] + c*logL[j]
}
### Priors ###
# State model priors
for(t in 1:nyear){
b[t] ~ dunif(-10,10) # fixed year effect
}
for (i in 1:nsite) {
u[i] ~ dnorm(0, tau.u) # random site effect
}
tau.u <- 1/(sd.u * sd.u)
sd.u ~ dunif(0, 5) # half-uniform hyperpriors
# Observation model priors
for (t in 1:nyear) {
a[t] ~ dnorm(mu.a, tau.a) # random year effect
}
mu.a ~ dnorm(0, 0.01)
tau.a <- 1 / (sd.a * sd.a)
sd.a ~ dunif(0, 5) # half-uniform hyperpriors
c ~ dunif(-10, 10) # sampling effort effect
### Derived parameters ###
# Finite sample occupancy - proportion of occupied sites
for (t in 1:nyear) {
psi.fs[t] <- sum(z[1:nsite,t])/nsite
}
#data# nyear, nsite, nvisit, y, logL, Site, Year
}", file="bmmodel.txt"
)
注意 dbern(Py[j]+0.0001) 包含一个校正因子,因为 dbern(0) 在 JAGS 中不受支持。
我在一些工厂数据上运行 model 只是基本上尝试看看它是否像我预期的那样运行、收敛和表现。
问题 1(已回答) :我对 psi.fs[t] 的数量感兴趣。 但是由于 model 是在实际建模过程之后计算这个量的,是否可以评估 psi.fs[t] 的收敛性?
使用 R2JAGS 运行 model 的R2JAGS
代码
jagsrespsi<-jags(data.list, inits=test.inits,
n.chains=2, n.iter=15000, n.thin=3,
DIC=T,
model.file=paste0(modeltype,"model.txt"), parameters.to.save=c("psi.fs"))
问题 2 :当我使用traceplot(jagsrespsi)
到 plot 时,traceplot 似乎到处都是,但我多年来的jagsrespsi$BUGSoutput
的 Rhat 都是 1? gelman.diag(as.mcmc(jagsrespsi))
也表示收敛。 监测 psi 也是如此!
我对这种 model 行为感到非常惊讶,我怀疑有什么问题......但不知道去哪里找
是的,您可以检查psi.ft[]
的收敛性,方法与检查模型参数的收敛性完全相同。 这正是发生的情况,例如,在逻辑回归中,对于某些线性预测变量z
,拟合的响应概率计算为exp(z)/(1 + exp(z))
。
当您说跟踪图“到处都是”时,您是什么意思? 这可能是好是坏。 你能举个例子吗? 一个“好”的跟踪图看起来像一条“肥大的毛毛虫”:从样本空间的所有区域中获取的连续样本,一个水平的毛球。 尽管是为 SAS 编写的,但此页面给出了合理的高级描述,说明了良好的跟踪 plot 的外观,以及不太理想的示例可能表明哪些问题。
响应您的编辑以包含跟踪 plot...
对我来说,这看起来不是一个特别好的跟踪图:连续样本之间似乎存在一些负自相关。 您是否计算过有效样本量 [ESS]?
但是 plot 可能看起来有点奇怪,因为您的链条很短,恕我直言。 您可以使用 ESS 为估计概率的准确性提供非常粗略的近似值:二项式比例的最坏情况半宽度 CI 为 +/- 2 * sqrt(0.5*0.5/N)
,其中 N 是样本大小(或本例中的 ESS)。 因此,即使您的 MCMC 过程的效率为 1——因此 ESS 等于链长——那么您估计的准确度也仅为 +/-0.02。 要将概率估计到小数点后 2 位(因此 CI 的半宽不超过 0.005),您需要 ESS 为 40,000。
在测试期间使用短链长度没有任何问题,但对于“生产”运行,我总是使用远大于 2,500 的 chan 长度。 (而且我还会使用多个链,以便我可以使用 Gelman-Rubin 统计来测试收敛性。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.