JAGS:先前在分布中的分布

时间:2017-05-26 17:10:44

标签: bayesian apriori jags rjags

这是我们的第一个模型:

# Data:
x1 = as.factor(c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1))
x2 = as.factor(c(0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1))
x3 = as.factor(c(0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1))
x4 = as.factor(c(0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1))
n = rep(1055, 16)
y = c(239, 31, 15, 11, 7, 5, 18, 100, 262, 32, 38, 32, 8, 7, 16, 234)

# Model:
mymodel = function(){
  for (i in 1:16){
    y[i] ~ dbin(theta[i], n[i] )
    eta[i] <- gamma*x1[i]+beta1*x2[i]+beta2*x3[i]+beta3*x4[i]
    theta[i] <- 1/(1+exp(-eta[i]))
  }

  # Prior
  gamma ~ dnorm(0,0.00001) 
  beta1 ~ dnorm(0,0.00001)
  beta2 ~ dnorm(0,0.00001)
  beta3 ~ dnorm(0,0.00001)
}

现在我们被要求将alpha添加为Normal,具有已知均值和未知方差。但是方差具有统一的先验,如图所示:

Model description

我不知道如何将alpha添加到模型中,然后在先验中指定新参数......

1 个答案:

答案 0 :(得分:0)

您只需将alpha添加到线性预测器中,并为其提供与任何其他参数一样的分布。但是,JAGS将Normal分布参数化为精度而不是方差(精度只是方差的倒数)。该模型看起来像这样。此外,您只需使用logit(eta)而不是应用逆logit。

mymodel = function(){
  for (i in 1:16){
    y[i] ~ dbin(eta[i], n[i] )
    logit(eta[i]) <- alpha + gamma*x1[i]+beta1*x2[i]+beta2*x3[i]+beta3*x4[i]
  }

  # Prior
  alpha ~ dnorm(0, tau_alpha)
  tau_alpha <- 1 / var_alpha
  var_alpha ~ dunif(0, 10)
  gamma ~ dnorm(0,0.00001) 
  beta1 ~ dnorm(0,0.00001)
  beta2 ~ dnorm(0,0.00001)
  beta3 ~ dnorm(0,0.00001)
}