Восстановление переменных из объектов 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.