ОБНОВЛЕНИЕ: теперь с примером Traceplot
ОБНОВЛЕНИЕ: теперь с новым графиком трассировки
Я пытаюсь адаптировать Outhwaite et. als 2018 для моделирования заполняемости и у меня есть пара вопросов, на которые я никак не могу найти ответ...
Код, используемый для создания модели
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.
Я запускаю модель на некоторых данных завода, просто пробую ее, чтобы увидеть, работает ли она, сходится ли и ведет ли себя так, как я ожидал.
Вопрос номер 1 (ОТВЕЧЕН): Меня интересует количество psi.fs[t]. Но поскольку модель вычисляет эту величину после фактического процесса моделирования, можно ли оценить конвергенцию для psi.fs[t]?
Код R для работающей модели с 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)
для построения графика, трассировка кажется разбросанной по всему месту, но Rhat для jagsrespsi$BUGSoutput
равен 1 за все мои годы? gelman.diag(as.mcmc(jagsrespsi))
также указывает на сходимость. То же самое касается мониторинга psi!
Я очень удивлен поведением этой модели и подозреваю, что что-то не так... но не знаю, где искать