[英]Reconstructing variables from mcmc objects
我正在使用rjags
作為采樣器。 該模型定義了3個矩陣。 coda.samples
函數返回樣本列表。 如果我選擇第一個示例列表,則列名看起來像這樣:
> 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()
函數。 所以如果我有矩陣A,B和C在列表L = list(A=A,B=B,C=C)
然后,我可以轉換該列表與一個矢量unlist()
並與轉換回relist()
我正在為mcmc對象尋找類似/現成的東西,但到目前為止無濟於事-我不敢相信我是第一個需要此東西的人。 顯然, relist(colMeans(output[[1]]))
不起作用。
有人可以幫助我進行重建嗎?
編輯:還請注意, relist()
函數僅需要一個框架,因此從colnames(output[[1]])
提取框架也可以解決問題。 還是我很復雜?
我認為relist()
不會成功。
我假設您的對象output
是R包coda
定義的mcmc.list
類的對象,而output[[1]]
是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中的矩陣對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.