1

是否有与功能类似jagsR功能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])) 

我通读了手册,但无法找到实现这一目标的方法。我知道 Stan 可能会允许这样做,但我不能使用 Stan,因为我需要对离散参数进行推断。我真的很感谢你的帮助!

这个问题也发布在JAGS 帮助论坛上

4

3 回答 3

3

正如 Matt 和 John 所暗示的,我在开发版本(未来的 JAGS 4.0.0)中添加了一个rep函数,这需要固定第二个参数,以便可以在编译时确定结果向量的长度。

于 2015-02-19T09:56:45.237 回答
1

简短的回答是否定的,恐怕不会。JAGS/BUGS 语言的规定之一是变量必须具有固定的维度(每个元素只定义一次) - 在您的示例中,a 将根据向量 n 更改维度大小。可能有其他方法可以获得您正在寻找的结果,但不使用这种方法。

顺便说一句,您在该代码位(多项分布的 LHS 和 RHS)中使用 n 两次,这是不允许的 - 尽管这可能只是一个错字:)

马特

于 2015-02-14T11:55:54.940 回答
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在整个模拟过程中必须具有恒定的长度。

于 2015-02-16T09:51:41.877 回答