【发布时间】:2015-07-28 10:34:51
【问题描述】:
从this question 跟进(请参阅可重现的数据框)我想运行 MCMCGLMM n 次,其中 n 是随机化的次数。我试图构建一个运行所有链并保存它们的循环(以便稍后检索随机变量的后验分布),但我遇到了问题。
这是数据框的样子(当n = 5,因此R1-R5),A =响应变量,L和V是随机效应变量,B是固定效应,R1 -R5 是 L 的随机分配,保持 V 的结构:
ID L B V A R1 R2 R3 R4 R5
1 1_1_1 1 1 1 11.1 6 19 21 1 31
2 1_1_1 1 1 1 6.9 6 19 21 1 31
3 1_1_4 1 1 4 7.7 2 24 8 22 22
4 1_1_4 1 1 4 10.5 2 24 8 22 22
5 1_1_5 1 1 5 8.5 11 27 14 17 22
6 1_1_7 1 1 7 11.2 5 24 13 18 25
我可以创建我想分配给我的链的名称,以及随着 MCMC 链的每次运行而变化的变量的名称 (R1-Rn):
n = 5
Rs = as.vector(rep(NA,n))
for(i in 1:n){
Rs[i] = paste("R",i, sep = "")
}
Rs
输出:
> Rs
[1] "R1" "R2" "R3" "R4" "R5"
然后我尝试了这个循环来产生 5 个链:
for(i in 1:n){
chains[i] = MCMCglmm(A ~1 + B,
random = as.formula(paste0("~" ,Rs[i], " + Vial")),
rcov = ~units,
nitt = 500,
thin = 2,
burnin = 50,
prior = prior2,
family = "gaussian",
start = list(QUASI = FALSE),
data = df)
}
- 感谢 Roland 帮助获得正确调用的随机效果,之前我收到错误
Error in buildZ(rmodel.terms[r] ... object Rs[i] not found- 由as.formula修复
但这将所有数据存储在chains 中,并且似乎只有$Sol 组件,但我需要能够访问 VCV 中的值,特别是 R的后验分布> 变量(例如summary(chainR1$VCV))
总结:似乎我在分配链名称时犯了一个错误,有没有人建议如何做到这一点,并保存后验分布甚至整个链?
【问题讨论】:
-
random = as.formula(paste0("~" ,Rs[i], " + V")),summary(chains[[1]]$VCV) -
第一部分可以很好地获得随机效果,谢谢 - 但第二部分没有
-
好吧,你可能应该将
chains初始化为一个列表而不是一个向量 -
如果downvoter 可以请解释donwvote 也许我可以改进问题