假设我们有以下语句:
for (i in 1:N) {
pi[i,1] <- ....
pi[i,2] <- ....
pi[i,3] <- ....
...
pi[i,100] <- ...
Y[i] ~ dcat(p[i,])
}
让我们这么说吧Y[1] = 5
。jags 会评估所有pi[1,1:100]
节点,还是唯一需要的节点,即pi[1,5]
?
根据我的经验,似乎 JAGS 评估所有父节点的效率很低,因为在我摆脱 dcat 后,我的模型加速了 3 倍。我必须使用多个 for 循环来处理不同的结果Y[i]
。
现在我意识到,dcat
在 JAGS 中实际上不需要sum(pi[]) = 1
,并且dcat
它将归一化pi[]
以使其总和为 1。这意味着它必须评估所有节点。
这是非常可悲的。是否有任何智能等价物dcat
只会评估唯一需要的一个父节点?WinBUGS 和斯坦呢?