首页 > 解决方案 > R Jags 中的泊松模型 - 节点 NbBones[4] 中的错误节点与父节点不一致

问题描述

我有一个数据框,例如;

Orders  Time  NbBones
1      12    21
1      34    43
2      32    0
3      21    0
2      10    0

和锯齿泊松模型:

Poisson_model<-"
model 
{
  for(i in 1 : N) 
  {
    NbBones[i] ~ dpois(lambda[i])
    lambda[i] <-  alpha + Coeforder[Orders[i]]  + Coeftime * Time[i] 
  }
  Coeforder[1] <- 0
  Coeforder[2] ~ dnorm(0,1)
  Coeforder[3] ~ dnorm(0,1) 
  Coeftime ~ dnorm(0,1) 
  alpha ~ dexp(1)  
}
"

data4jags <- list(Time = data$Time, NbBones = data$NbBones, Orders=data$Orders, N=length(data$Orders))


m1 <- jags.model(textConnection(Poisson_model), data = data4jags, n.chains = 3)

但是当我在 RI 中运行代码时,会收到以下错误消息:

Error in jags.model(textConnection(Model1), data = data4jags, n.chains = 3) : 
  Error in node NbBones[4]
Node inconsistent with parents

有人知道代码中的问题在哪里吗?非常感谢您的时间


对于本博尔克

你的意思是这样编码?

model1<-"
model 
{
  for(i in 1 : N) 
  {
    NbEVES_branche[i] ~ dpois(lambda[i])
    partial[i] <- alpha + Coeftime * Time[i]
    if (Orders[i]>1) {
    lambda[i] <-  partial[i] + Coeforder[Orders[i-1]]
}
Coeforder[1] ~ dnorm(0,1)
Coeforder[2] ~ dnorm(0,1) 
Coeftime ~ dnorm(0,1) 
alpha ~ dexp(1)  

  }
  "

标签: rbayesianjags

解决方案


有两件事突然出现在我身上。(1)您的模型允许泊松平均值为负值(尽管我希望这会给您带来不同的错误);(2) 如果允许您使用Coeforder第一个元素是逻辑节点 (0) 而其他元素是随机节点的数组 ( ),我会感到惊讶。这最终对我有用:

dd <- read.table(header=TRUE, text = "
Orders  Time  NbBones
1      12    21
1      34    43
2      32    0
3      21    0
2      10    0
")


ddj <- c(as.list(dd), N=nrow(dd))

model1<-"model {
  for(i in 1 : N) {
    NbBones[i] ~ dpois(lambda[i])
    partial[i] <- alpha + Coeftime * Time[i]
    lambda[i] <- ifelse(Orders[i] > 1,
         partial[i] + Coeforder[max(1,Orders[i]-1)],
         partial[i])
    }
    Coeforder[1] ~ dnorm(0,1)
    Coeforder[2] ~ dnorm(0,1) 
    Coeftime ~ dnorm(0,1)
    alpha ~ dexp(1)
}"

writeLines(model1, "tmp.jags")
library(rjags)
m1 <- jags.model("tmp.jags", ddj, n.chains = 3)

请注意,JAGS 没有if/else声明。该max(1,...)子句是必要的,因为该ifelse()语句总是评估它的两个潜在输出,即使它们不会被使用(所以我们必须小心避免引用Coeforder[0])。

更紧凑的是,您可以在 JAGS 之外设置模型矩阵X并使用类似于lambda[i] <- exp(inprod(X[i,], beta))where betais your full coefficient vector 的结构(这模仿了标准 Poisson GLM 的结构,包括对数链接/指数反向链接组件)


推荐阅读