我不确定如何在R中保存尾声(mcmc.list)对象。其他人也问了类似的问题,但我发现给出的答案并不是特别清楚。理想情况下,我希望将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的链)。我想存储这个尾声物体,这样我就可以把它召唤回R而不必每次都重新运行模型。我还想保留这样一个事实:有三个独特的链条。
答案 0 :(得分:1)
这是我从OBJECT
保存链时使用的脚本。将MCMCglmm
替换为您的coda对象的名称(例如,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"))
}
以获取正确的文件。例如:
{{1}}