从 mcmc 对象重建变量
Reconstructing variables from mcmc objects
我正在使用 rjags
作为采样器。该模型定义了 3 个矩阵。 coda.samples
函数 returns 样本列表。如果我采用第一个样本列表,列名如下所示:
> colnames(output[[1]])
"A[1,1]" "A[2,1]" "A[1,2]" "A[2,2]" ...
"B[1,1]" "B[2,1]" "B[3,1]" "B[4,1]" ...
"C[1,1]" "C[2,1]"
显然,A、B 和 C 在我的模型中是矩阵。我想根据这些样本的平均值重建它们。我可以使用 colMeans(output[[1]])
轻松获得方法,但我不知道如何轻松地从该向量重建矩阵。
重建的一个好方法是 relist()
函数。因此,如果我在列表 L = list(A=A,B=B,C=C)
中有矩阵 A、B 和 C,那么我可以使用 unlist()
将此列表转换为向量,然后使用 relist()
转换回来。我正在为 mcmc 对象寻找 similar/readymade 的东西,但到目前为止无济于事 - 我不敢相信我是第一个需要这个的人。显然,relist(colMeans(output[[1]]))
不起作用。
谁能帮我重建一下?
编辑:另请注意,relist()
函数只需要一个骨架,因此从 colnames(output[[1]])
中提取骨架也可以解决问题。还是我复杂化了?
我认为 relist()
不会成功...
我假设你的对象 output
是 class mcmc.list
的对象,如 R 包 coda
中所定义,并且 output[[1]]
是一个对象class mcmc
表示第一个 MCMC 链的样本。
我很确定 coda
没有任何理解,例如"A[1,1]"
是一个 JAGS 矩阵,它只是把它当作一个变量名来处理。所以你必须迭代相关变量并自己强加结构。
理想情况下,您将其包装在如下函数中:
getMatrix <- function(output, varname, rows, cols) {
unname(
sapply(1:cols, function(j)
sapply(1:rows, function(i)
summary(output[,sprintf("%s[%s,%s]", varname, i, j)])[[1]][1]
)
)
)
}
因此,例如,如果存储在 output[[1]]
中的矩阵 B
有 3 行和 4 列,您可以写成:
getMatrix(output[[1]], "B", 3, 4)
在 R 中获取作为矩阵对象的均值。
我正在使用 rjags
作为采样器。该模型定义了 3 个矩阵。 coda.samples
函数 returns 样本列表。如果我采用第一个样本列表,列名如下所示:
> colnames(output[[1]])
"A[1,1]" "A[2,1]" "A[1,2]" "A[2,2]" ...
"B[1,1]" "B[2,1]" "B[3,1]" "B[4,1]" ...
"C[1,1]" "C[2,1]"
显然,A、B 和 C 在我的模型中是矩阵。我想根据这些样本的平均值重建它们。我可以使用 colMeans(output[[1]])
轻松获得方法,但我不知道如何轻松地从该向量重建矩阵。
重建的一个好方法是 relist()
函数。因此,如果我在列表 L = list(A=A,B=B,C=C)
中有矩阵 A、B 和 C,那么我可以使用 unlist()
将此列表转换为向量,然后使用 relist()
转换回来。我正在为 mcmc 对象寻找 similar/readymade 的东西,但到目前为止无济于事 - 我不敢相信我是第一个需要这个的人。显然,relist(colMeans(output[[1]]))
不起作用。
谁能帮我重建一下?
编辑:另请注意,relist()
函数只需要一个骨架,因此从 colnames(output[[1]])
中提取骨架也可以解决问题。还是我复杂化了?
我认为 relist()
不会成功...
我假设你的对象 output
是 class mcmc.list
的对象,如 R 包 coda
中所定义,并且 output[[1]]
是一个对象class mcmc
表示第一个 MCMC 链的样本。
我很确定 coda
没有任何理解,例如"A[1,1]"
是一个 JAGS 矩阵,它只是把它当作一个变量名来处理。所以你必须迭代相关变量并自己强加结构。
理想情况下,您将其包装在如下函数中:
getMatrix <- function(output, varname, rows, cols) {
unname(
sapply(1:cols, function(j)
sapply(1:rows, function(i)
summary(output[,sprintf("%s[%s,%s]", varname, i, j)])[[1]][1]
)
)
)
}
因此,例如,如果存储在 output[[1]]
中的矩阵 B
有 3 行和 4 列,您可以写成:
getMatrix(output[[1]], "B", 3, 4)
在 R 中获取作为矩阵对象的均值。