r - 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)
}
"
解决方案
有两件事突然出现在我身上。(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 beta
is your full coefficient vector 的结构(这模仿了标准 Poisson GLM 的结构,包括对数链接/指数反向链接组件)
推荐阅读
- java - Web servlet 和连接
- reactjs - 多选反应不起作用 MultiSelectReact 组件
- python-imaging-library - Python 如何只获取图像的 Y 分量?
- normalizr - Normalizr - 使用嵌套数组规范化对象数组
- scala - 使用流程中的最新项目完成请求
- c++ - 如何将 unordered_set 与自定义结构一起使用?
- c# - 从移动图库上传服务器上的个人资料照片
- mysql - MySQL Workbench EER/ERD 图 - 图形关系
- python - 谷歌表格“repeatCell”从现有单元格中去除格式
- c# - ASP.NET Core 应用程序中 Alpha 银行的结帐端点