如何在JAGS中在一个分类变量和一个连续变量之间添加交互项?

时间:2018-04-17 20:20:51

标签: bayesian jags

我在JAGS中有标记重新捕获模型,我想编写分类变量和连续变量之间的交互。

ngr是组数

nind是我的标记重新捕获模型中的个体数量

gr.sp[ind]只在我的数据库中搜索哪个组属于个人ind

ngr是组数

Som priors:

phi.precip ~ dnorm(0,0.01)

for(groups in 1:ngr) {
  phi.gr[groups] ~ dnorm(0, 0.01)
}

以下是我的模型可能性的一小部分:

...
for(ind in 1:nind) {
  for(yr in 1:nyear) {
    logit(phi[ind,yr]) <- e.phi[ind,yr]
    e.phi[ind,yr] <- 
      phi.gr[gr.sp[ind]] + # Categorical variable telling how much belonging to a certain group changes your fitness
      phi.precip * sum.rainfall[yr] + # Effect of rain on my individuals 

      phi.gr.precip * phi.gr[gr.sp[ind]] * sum.rainfall[yr]   # This is the interaction between the categorical and the continuous I'm trying to code. 

  }
...}

首先,如何定义phi.gr.precip的先验?应该是类似的东西:

for(groups in 1:ngr) {
  phi.gr.precip[groups] ~ dnorm(0, 0.01)
}

但是,我不知道如何在可能性中实现它。

第二,phi.gr.precip如何编码以包括个体在(gr.sp[ind])中的群体与气候(sum.rainfall[yr]之间的相互作用,其代表雨量在一年以内)?

对类似的交互进行编码似乎需要phi.gr.precip中与分类变量中相同数量的参数。但这需要我在可能性内部循环:

...
for(ind in 1:nind) {
  for(yr in 1:nyear) {
    logit(phi[ind,yr]) <- e.phi[ind,yr]
    e.phi[ind,yr] <- 
      phi.gr[gr.sp[ind]] +
      phi.precip * sum.rainfall[yr] +
  for(groups in 1:ngr) {
      phi.gr.precip[groups] * phi.gr[gr.sp[ind]] * sum.rainfall[yr]
   }
  }
...}

运行模型时哪个不起作用。

1 个答案:

答案 0 :(得分:0)

您对先前的选择看起来合理。

您的可能性几乎是正确的,但JAGS无法为数字添加for循环。相反,您需要移动组的for循环以包裹整个总和。

...
for(ind in 1:nind) {
  for(yr in 1:nyear) {
   for(groups in 1:ngr){  ### MOVE THE FOR-LOOP HERE
    logit(phi[ind,yr]) <- e.phi[ind,yr]
    e.phi[ind,yr] <- 
      phi.gr[gr.sp[ind]] +
      phi.precip * sum.rainfall[yr] + phi.gr.precip[groups] * phi.gr[gr.sp[ind]] * sum.rainfall[yr]
   }
  }
...}