估计JAGS中的后验是一个因素的水平

时间:2018-03-13 17:44:41

标签: jags

我正在JAGS中运行一个N混合模型,试图看一个栖息地的N后验预测值是否高于另一个。我想知道如何在运行模型后单独获得每个栖息地的估计种群大小的后验概率。所以,例如,如果我想在所有网站上求和,我会说 JAGS模型中的totalN< -sum(N [])并将“totalN”标识为我的参数之一。如果我有2个栖息地等级来对N求和,我是否需要一个for循环或是否有其他方法来定义它?

到目前为止,我的模型如下......

模型{

先验

#abundance
beta0 ~ dnorm(0, 0.001)     # log(lambda) intercept
beta1 ~ dnorm(0, 0.001) #this is my regression parameter for habitat
tau.T ~ dgamma(0.001, 0.001) #this is for random effect of transect

# detection
alpha.p ~ dgamma(0.01, 0.01)
beta.p ~ dgamma (0.01, 0.01)

丰度的泊松模型

for (i in 1:nsite){
loglam[i] <- beta1*habitat[i] + ranef[transect[i]]
loglam.lim[i] <- min(250, max(-250, loglam[i]))  # 'Stabilize' log 
lam[i] <- exp(loglam.lim[i])
N[i] ~ dpois(lam[i])
}
for (i in 1:14){
ranef[i]~dnorm(beta0,tau.T)
}

测量误差模型

for (i in 1:nsite){
for (j in 1:nrep){
y[i,j] ~ dbin(p[i,j], N[i])
p[i,j] ~ dbeta(alpha.p,beta.p) #detection probability follows a beta distribution
}
}

后验预测

Nperhabitat<-sum(N[habitat]) #this doesn't work, only estimates a single set of posterior densities for N
#and get a derived detection probability

}

1 个答案:

答案 0 :(得分:0)

我将在此假设habitat是二进制向量。我会在您的数据中添加两个额外的向量,用于定义habitat中的哪些元素为1,哪些元素为0.从那里,您可以使用这两个向量索引N

# done in R and added to the data list supplied to JAGS
hab_1 <- which(habitat == 1)
hab_0 <- which(habitat == 0)

# add to data list
data_list <- list(..., hab_1 = hab_1, hab_0 = hab_0)

然后,在JAGS模型中,您只需添加:

N_habitat_1 <- sum(N[hab_1])
N_habitat_0 <- sum(N[hab_0])

这有效地告诉JAGS提供每种栖息地类型的总丰度。如果你有更多的栖息地与另一个栖息地的网站,这种丰富可能隐藏个体的密度实际上可能更少。因此,您可能希望将此丰度除以每种栖息地类型的站点总数:

dens_habitat_1 <- sum(N[hab_1]) / sum(habitat)
dens_habitat_0 <- sum(N[hab_0]) / sum(1 - habitat)

当然,这是假设habitat是二进制的。