Как сохранить объект Coda в R
Я не уверен, как сохранить объект coda (mcmc.list) в R. Другие задали аналогичные вопросы, но я обнаружил, что приведенные ответы не очень ясны. В идеале я хотел бы сохранить объект coda как файл R.data или текстовый файл (например, csv), чтобы я мог повторно импортировать его и анализировать цепочки JAGS без необходимости повторного запуска модели (на что требуется около 30 минут). мой компьютер). Прямо сейчас мой объект coda "coda.samples" выглядит так:
str(coda.samples)
List of 3
$ : mcmc [1:3334, 1:1094] 0.904 0.977 0.927 0.945 0.905 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3334] "2001" "2011" "2021" "2031" ...
.. ..$ : chr [1:1094] "alpha[1,1]" "alpha[2,1]" "alpha[1,2]" "alpha[2,2]" ...
..- attr(*, "mcpar")= num [1:3] 2001 35331 10
$ : mcmc [1:3334, 1:1094] 0.824 0.866 0.839 0.832 1.032 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3334] "2001" "2011" "2021" "2031" ...
.. ..$ : chr [1:1094] "alpha[1,1]" "alpha[2,1]" "alpha[1,2]" "alpha[2,2]" ...
..- attr(*, "mcpar")= num [1:3] 2001 35331 10
$ : mcmc [1:3334, 1:1094] 0.956 0.944 0.895 0.809 1.064 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3334] "2001" "2011" "2021" "2031" ...
.. ..$ : chr [1:1094] "alpha[1,1]" "alpha[2,1]" "alpha[1,2]" "alpha[2,2]" ...
..- attr(*, "mcpar")= num [1:3] 2001 35331 10
- attr(*, "class")= chr "mcmc.list"
Как видите, это список из трех матриц, которые содержат 3334 оценки 1094 параметров (т.е. 3 цепочки длиной 3334). Я хотел бы сохранить этот объект Coda, чтобы я мог вызвать его обратно в R без необходимости повторного запуска модели каждый раз. Я также хочу сохранить тот факт, что есть три уникальные цепочки.
1 ответ
Это скрипт, который я использую при сохранении цепочек из MCMCglmm
, Заменить OBJECT
с названием вашего объекта Coda (например, название модели, как сделано в MCMCglmm
) и заменить FILEPATH
с подходящим местом сохранения.
save(OBJECT, file= "FILEPATH")
model = load("FILEPATH")
Полезный совет: я также заворачиваю свои модели в переключатели, используя if
а также else
- это может быть объединено для создания полезной системы, которая либо запускает и сохраняет сценарий, либо загружает предыдущий запуск (настройка runmod
в y
или же n
и выбирая loaddate
чтобы получить правильный файл. Например:
runmod = "y"
loaddate = "2017-01-12"
NITT = 130000
BURN = 30000
THIN = 100
# Model
if(runmod=="n"){
model4.1 = MCMCglmm(cbind(BWT_F, BWT_M, TAR_F, TAR_M) ~ trait-1,
random = ~us(trait):animal + us(trait):BYEAR + us(trait):MOTHER,
rcov = ~us(trait):units,
family = rep("gaussian", times = 4),
pedigree = Ped,
data = Data,
burnin = BURN,
nitt = NITT,
thin = THIN,
prior = prior4.1)
save(model4.1, file=paste0("FILEPATH......",NITT,"_",Sys.Date(),".rda"))
}else{
model41 = load(paste0("FILEPATH......",NITT,"_",loaddate,".rda"))
}