为什么在JAGS中节点值始终不可用?

问题描述

我是JAGS的新手,但是在搜索后,我还没有找到解决方案或对此行为的解释。基本上,根据我是否(和在哪里)将0值传递给多项式分布,可能会丢失该分布的预测。我已尽可能简化了这一过程。这是我要运行的模型:

test.bugs

data{
  for(i in 1:2){
    N[i] <- sum(counts_kNown[i,1:6])
  }
}
model {
  for(i in 1:2){
    pi[i,1:6] ~ ddirich(alpha[1:6])
  
    counts_kNown[i,1:6] ~ dmulti(pi[i,1:6],N[i])
    
    N_unkNown[i] ~ dpois(N[i])
    counts_unkNown[i,N_unkNown[i])
    
    # Example of trouble (yes,I Could just access N_unkNown here but this is a simplified example)
    # summation[2] may not exist
    summation[i] <- sum(counts_unkNown[i,1:6])
  }
}

我的问题是,根据我为counts_kNown的列传递数据的顺序,输出中可能不存在summation[2]

R代码来运行它:

library(rjags)

# This works fine
data <- list(
  alpha = rep(1/6,6),counts_kNown = matrix(c(
    2,2,4
  ),nrow=2,ncol=6,byrow=TRUE)
  
)
model <- jags.model("test.bugs",data=data,n.chains=1)
summary(coda.samples(model,variable.names=c("summation","counts_unkNown"),n.iter=1000))
# Output for counts_unkNown and summation exist


# Swap columns 5 and 6 to see problem
data <- list(
  alpha = rep(1/6,4,0
  ),n.iter=1000))
# Output for most of the counts_unkNown and summation[1] exist; about a half of the time summation[2] and counts_unkNown[2,5:6] are missing
# If you see summation[2] on first try,try running the prevIoUs line of code again a few times

根据coda.samples的帮助页面,我知道在第二个示例中summation[2]消失的原因是它可以具有NA,认情况下,它们会在传递时被丢弃,但这只会导致的问题

  1. 为什么首先要生成NA?
  2. 两个示例之间有什么不同?导致第一个示例在实际上是相同的数据,只是重新排序后才能正常工作吗?

另外,如果我用coda.samples运行na.rm=FALSE并直接查看样本,有时会为那些可疑的列显示NaN

感谢您的帮助,我正在运行JAGS 4.3.0。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)