如何指定rjags运行具有多个条件的分层模型

时间:2015-03-11 21:43:23

标签: r regression bayesian jags

我正在尝试使用rjags运行贝叶斯回归模型,我的数据有4个相关条件。在跨条件折叠时模型运行正常,但是我不明白在哪里/如何指定我希望这个模型为每个条件单独运行,但仍然给我一个coda.samples输出,允许我比较Beta值(我想要4个Beta0和4个Beta1值,每个条件一个)。这是我的模特:

    order_model <-
    "model {
beta_0 ~ dnorm(0, .0000001)
beta_1 ~ dnorm(0, .0000001)
sigma ~ dunif(0, 100)
sigma_u0 ~ dunif(0,100)
sigma_u1 ~ dunif(0,100)
sigma_i0 ~ dunif(0,100)


for (i in 1:num_items) {
  w_0i[i] ~ dnorm(0, 1/sigma_i0^2)
}

for (i in 1:num_subj+1) {
  u_0s[i] ~ dnorm(0, 1 / sigma_u0^2)
  u_1s[i] ~ dnorm(0, 1 / sigma_u1^2)
}
for (i in 1:length(rt)) {
  rt[i] ~ dnorm((beta_0 + w_0i[item[i]] + u_0s[subject[i]]) + (beta_1 + u_1s[subject[i]]) * order[i], 1/sigma^2)
}
}"

当引用主题和项目以获得固定效果偏移时,“rt”是连续因变量。条件以矢量“条件”编码,值为1:4。

我假设我需要另一个for循环,但我不确定在哪里。

1 个答案:

答案 0 :(得分:2)

我认为你只需要使用如下条件对beta_0和beta_1进行索引:

  rt[i] ~ dnorm((beta_0[condition[i]] + w_0i[item[i]] + u_0s[subject[i]]) + (beta_1[condition[i]] + u_1s[subject[i]]) * order[i], 1/sigma^2)

[或者beta_0 [condition [subject [i]]取决于数据的结构]

  for(c in 1:4){
       beta_0[c] ~ dnorm(0, .0000001)
       beta_1[c] ~ dnorm(0, .0000001)
  }

然后,您可以监控beta_0和beta_1的4个值,并使用JAGS的输出进行比较 - 比较可信区间,或者通过从另一个级别减去一个级别进行成对比较,然后查看差异的可信区间

马特