与 jags 中的 R "rep" 类似的功能来创建数组?
Similar function to R "rep" in jags to create array?
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]))
我通读了手册,但找不到实现此目的的方法。我知道 Stan 可能会允许这样做,但我不能使用 Stan,因为我需要对离散参数进行推理。非常感谢您的帮助!
此问题也发布在 JAGS help forum。
简短的回答是否定的,恐怕不是。 JAGS/BUGS 语言的规定之一是变量必须具有固定的维度(每个元素只定义一次)——在您的示例中,a 将根据向量 n 更改维度大小。可能有其他方法可以获得您正在寻找的结果,但不使用这种方法。
顺便说一下,您在那段代码(多项式分布的左轴和右轴)中使用了两次 n,这是不允许的 - 虽然这可能只是一个错字:)
马特
您可以用一些循环填充向量:
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
在整个模拟过程中必须具有恒定长度。
我已经在开发版本(未来的 JAGS 4.0.0)中添加了一个 rep
函数,正如 Matt 和 John 所提到的,这需要固定第二个参数,以便得到的向量的长度可以在编译时确定。
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]))
我通读了手册,但找不到实现此目的的方法。我知道 Stan 可能会允许这样做,但我不能使用 Stan,因为我需要对离散参数进行推理。非常感谢您的帮助!
此问题也发布在 JAGS help forum。
简短的回答是否定的,恐怕不是。 JAGS/BUGS 语言的规定之一是变量必须具有固定的维度(每个元素只定义一次)——在您的示例中,a 将根据向量 n 更改维度大小。可能有其他方法可以获得您正在寻找的结果,但不使用这种方法。
顺便说一下,您在那段代码(多项式分布的左轴和右轴)中使用了两次 n,这是不允许的 - 虽然这可能只是一个错字:)
马特
您可以用一些循环填充向量:
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
在整个模拟过程中必须具有恒定长度。
我已经在开发版本(未来的 JAGS 4.0.0)中添加了一个 rep
函数,正如 Matt 和 John 所提到的,这需要固定第二个参数,以便得到的向量的长度可以在编译时确定。