Восстановление переменных из объектов mcmc

Я использую 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]]) также сделал бы трюк. Или я усложняю?

1 ответ

Решение

Я не думаю relist() сделает свое дело...

Я предполагаю твой объект output является объектом класса mcmc.list как определено в пакете R coda, а также 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]
      )
    )
  )
}

Так, например, если ваша матрица B Хранится в output[[1]] имеет 3 строки и 4 столбца, которые вы напишите:

getMatrix(output[[1]], "B", 3, 4)

получить средства как матричный объект в R.

Другие вопросы по тегам