簡體   English   中英

從mcmc對象重構變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM