jags
功能R
中的功能是否与rep
类似?我想使用类似的代码创建一个数组:
n ~ dmulti(pi, N) # pi is a 3 dimensional probability vector, N is fixed
# the dimension of n is hard coded in this line:
a <- c(rep(0, n[1]), rep(1, n[2]), rep(2, n[3]))
我仔细阅读了手册,但却无法找到实现这一目标的方法。我知道斯坦可能允许这样做,但我不能使用斯坦,因为我需要对离散参数做推断。我真的很感谢你的帮助!
此问题也发布在JAGS help forum。
答案 0 :(得分:3)
我已经在开发版本(未来的JAGS 4.0.0)中添加了rep
函数,正如Matt和John所提到的,这需要修复第二个参数,以便生成的向量的长度可以是在编译时确定。
答案 1 :(得分:1)
简短的回答是不,我不敢。 JAGS / BUGS语言的一个规定是变量必须具有固定的维度(每个元素只定义一次) - 在您的示例中,a将根据向量n更改维度大小。可能有其他方法可以获得您正在寻找的结果,但不使用此方法。
顺便说一句,你在代码的那一位使用n两次(多项式分布的LHS和RHS)是不允许的 - 虽然这可能只是一个错字:)
马特
答案 2 :(得分:0)
您可以使用一些循环填充矢量:
library(R2jags)
M <- function() {
for (i in 1:n[1]) {
a[i] <- 0
}
for (i in 1:n[2]) {
a[i + n[1]] <- 1
}
for (i in 1:n[3]) {
a[i + sum(n[1:2])] <- 2
}
}
j <- jags(list(n=3:5), NULL, 'a', M, DIC=FALSE)
j$BUGSoutput$mean$a
## [1] 0 0 0 1 1 1 1 2 2 2 2 2
然而,正如@MattDenwood所提到的,如果n
的元素之和是可变的,这将引发错误 - a
在整个模拟过程中必须保持恒定长度。