Rjags使用超前先验

时间:2016-07-13 08:45:06

标签: r jags r2jags

我使用rjags使用N-mixture模型计算物种丰度并计算数据。为了捕获我的数据的分散,我使用了hyperpriors。但是我得到了一个

"Error in node S[1,1,2] Invalid parent values"

我的猜测是我的先前OR的维度存在问题,其中一个先验为负,null或NA,这会停止计算节点S.

知道如何解决这个问题吗?是否可以初始化S?

model {
##  PRIORS ##

lambda[1] ~ dunif(0, 500)
lambda[2] ~ dunif(0, 500) 
p[1] ~ dunif(0, 1)
p[2] ~ dunif(0, 1)
# surdispersion
muepsomega1 ~ dnorm(0,0.0001)
sigepsomega1 ~ dunif(0,100)
iomega1 ~ dnorm(0,0.0001)
tauepsomega1 <- 1/(sigepsomega1*sigepsomega1) 
omega2 ~ dunif(0, 1)

## LIKELIHOOD ##
# Create a loop across all j sites
for(j in 1:nSites) {

# surdispersion sur omega 1
omega1[j] <- iomega1 + epsomega1[j]
epsomega1[j] ~ dnorm(muepsomega1,tauepsomega1)

N[1,j,1] ~ dpois(lambda[1]) 
N[2,j,1] ~ dpois(lambda[2])

for (i in 1:3) {    
  S[i,j,1] ~ dnegbin(2, 1) 
  } # end loop i
for(t in 2:nYears) {
  # Estimate survivorship (between year survival)
  S[1,j,t] ~ dnegbin(omega1[j], N[1,j,t-1])  
  S[2,j,t] ~ dnegbin(omega2, N[2,j,t-1]) 

  N[1,j,t] <- S[1,j,t] 
  N[2,j,t] <- S[2,j,t] 
  } # end loop t in 2:years

# Loop across sampling replicates to estimate detection
for (t in 1:nYears){
  for(k in 1:nReps){
    n[1,j,k,t] ~ dnegbin(p[1], N[1,j,t]) 
    n[2,j,k,t] ~ dnegbin(p[2], N[2,j,t]) 

   } # end loop k nreps
  } # end loop j sites
}

这就是我称之为模型的方式:

#Model file
modFile = "model/2016-07-12/model_Nmix.R"

inits <- function(){
list('lambda' =c(1,1), 'p'= c(1,1),'omega2' = 1,'iomega1'=1, 'muepsomega1'= 1, 'sigepsomega1'= 1, 'epsomega1'=c(1,1,1,1,1,1,1)) } # size epsomega1 is length(nSites)=7

 # Compile the model
 require(rjags)
 abundance.out <- jags.model(file=modFile, data=data,n.chains = 3, n.adapt = 3000)

1 个答案:

答案 0 :(得分:0)

让epsomega1和iomega1来自不具有任何概率密度而非负值的分布。 Gamma,统一,对数正态或截断的正态分布是候选,您的选择应取决于您认为最正确的模型规范实际上是什么。