[英]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
注意, i
是p
的最后一個索引,是兩個逗號。 希望他的幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.