簡體   English   中英

WinBUGS,OpenBUGS中的類別變量

[英]Categorical variable in WinBUGS, OpenBUGS

我使用以下論文的腳本(Zipkin,EF,Royle,JA,Dawson,DK,Bates,S.,2010年。多物種發生模型來評估保護和管理行動的影響。生物保護143、479- 484)來估計鳥類的占有率。 我在檢測估計(下面代碼中的K循環)中的變量之一是Wind,這是一個分類變量,級別為1-6。 我試圖在dcat中使用dcat函數,我希望它是一個統一的先驗(beta(1,1)),但是OpenBUGS失敗並出現錯誤:

expected right parenthesis error pos 1344

當我刪除b3[i] ~ dcat(p[i,])#WIND Data不會發生b3[i] ~ dcat(p[i,])#WIND Data

任何有關如何正確指定dcat或如何為WinBUGS / OpenBUGS編碼類別變量的建議都將不勝感激!

#model***************************************************************

occ.full <- function()
{

  #Define prior distributions for community-level model parameters
  omega ~ dunif(0,1)

  mean.u ~ dunif(0,1)
  mu.u <- log(mean.u) - log(1-mean.u)
  mean.v ~ dunif(0,1)
  mu.v <- log(mean.v) - log(1-mean.v)
  #mua1 ~ dnorm(0, 0.001)#WTR
  mua2 ~ dnorm(0, 0.001)#WBH
  mua3 ~ dnorm(0, 0.001)#GPH
  mua4 ~ dnorm(0, 0.001)#FHD
#   mua5 #OPEN this is percent data
  mua6 ~ dnorm(0, 0.001)#EdgeArea
  mua7 ~ dnorm(0, 0.001)#ForestArea
  mua8 ~ dnorm(0, 0.001)#Patch size
  mub1 ~ dnorm(0, 0.001)#OrdDate
  mub2 ~ dnorm(0, 0.001)#Start
  #mub3#WIND
  mub4 ~ dnorm(0, 0.001)#Temp

  tau.u ~ dgamma(0.1,0.1)
  tau.v ~ dgamma(0.1,0.1) 
  #tau.a1 ~ dgamma(0.1,0.1)
  tau.a2 ~ dgamma(0.1,0.1)
  tau.a3 ~ dgamma(0.1,0.1)
  tau.a4 ~ dgamma(0.1,0.1) 
#   tau.a5 #OPEN this is percent data
  tau.a6 ~ dgamma(0.1,0.1)#EDGE
  tau.a7 ~ dgamma(0.1,0.1)#Forest
  tau.a8 ~ dgamma(0.1,0.1) #Patch size
  tau.b1 ~ dgamma(0.1,0.1) 
  tau.b2 ~ dgamma(0.1,0.1)
  p ~ dbeta(1,1) #b3 is categorical
  tau.b4 ~ dgamma(0.1,0.1)

  for (i in 1:(n+nzeroes)) {
    #Create priors for species i from the community level prior distributions
    w[i] ~ dbern(omega)
    u[i] ~ dnorm(mu.u, tau.u)  
    v[i] ~ dnorm(mu.v, tau.v) 
    #a1[i] ~ dnorm(mua2, tau.a2)   
    a2[i] ~ dnorm(mua2, tau.a2)
    a3[i] ~ dnorm(mua3, tau.a3)
    a4[i] ~ dnorm(mua4, tau.a4)     
    a5[i] ~ dbeta(1, 1)#OPEN is percent data
    a6[i] ~ dnorm(mua6, tau.a6)#EdgeArea 
    a7[i] ~ dnorm(mua7, tau.a7)#ForestArea
    a8[i] ~ dnorm(mua8, tau.a8)#Patch size

    b1[i] ~ dnorm(mub1, tau.b1)    
    b2[i] ~ dnorm(mub2, tau.b2)
    b3[i] ~ dcat(p[i,])#WIND Data
    b4[i] ~ dnorm(mub4, tau.b4)

    #Create a loop to estimate the Z matrix (true occurrence for species i 
    #at point j.      
    for (j in 1:J) {
      logit(psi[j,i]) <- u[i] + a2[i]*WBH[j] + a3[i]*GPH[j] + a4[i]*FHD[j] + a5[i]*OPEN[j] + a6[i]*EdgeArea[j] + a7[i]*ForestArea[j] + a8[i]*Patch[j]
      mu.psi[j,i] <- psi[j,i]*w[i]
      Z[j,i] ~ dbern(mu.psi[j,i])

      #Create a loop to estimate detection for species i at point k during 
      #sampling period k.      
      for (k in 1:K[j]) {  
        logit(p[j,k,i]) <- v[i] + b1[i]*OrdDate[j,k] + b2[i]*Start[j,k] + b4[i]*Temp[j,k] + b3[i]*Wind[j,k] 
        mu.p[j,k,i] <- p[j,k,i]*Z[j,i]
        X[j,k,i] ~ dbern(mu.p[j,k,i])
      }#K   
    }#J
  }#N

  #Sum all species observed (n) and unobserved species (n0) to find the 
  #total estimated richness
  n0 <- sum(w[(n+1):(n+nzeroes)])
  N <- n + n0

  #Create a loop to determine point level richness estimates for the 
  #whole community and for subsets or assemblages of interest.
  for(j in 1:J){
    Nsite[j]<- inprod(Z[j,1:(n+nzeroes)],w[1:(n+nzeroes)])
    Nfor[j]<- inprod(Z[j,1:n],h.for[1:n])
    Nnon[j]<- inprod(Z[j,1:n],h.non[1:n])
    Nint[j]<- inprod(Z[j,1:n],h2.int[1:n])
    Nedge[j]<- inprod(Z[j,1:n],h2.edge[1:n])
    #Nneo[j]<- inprod(Z[j,1:n],m.neo[1:n])
  }
}

我不確定dcat發行版本身,但是您的錯誤可能是因為您有:

b3[i] ~ dcat(p[i,])#WIND Data

但是,當您在模型中指定p時,它是三維數組p[j,k,i]. 我認為您需要:

b3[i] ~ dcat(p[,,i])#WIND Data

注意, ip的最后一個索引,是兩個逗號。 希望他的幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM