2

我遇到了一个技术问题,看来我自己无法解决。我使用mcmcglmm包进行了估算。通过 results$Sol 我可以访问估计的后验分布。应用class()告诉我该对象属于“mcmc”类。使用as.data.frame()会生成一个嵌套数据框,其中包含其他数据框(一个数据框包含许多其他数据框)。我想rbind()主数据帧中的所有数据帧,以便生成一个数据帧(或者更确切地说是一个向量),其中包含所有后验分布的所有值以及(辅助)数据帧的名称作为行名。,有任何想法吗?我将不胜感激每一个提示!

更新:我没有设法为 stackoverflow 生成有用的数据集,对于所有这些采样链,这些数据集总是太大。如果您想帮助我,请考虑运行以下(示例)模型

require(MCMCglmm)
data(PlodiaPO)
result <- MCMCglmm(PO ~ plate + FSfamily, data = PlodiaPO, nitt = 50, thin = 2, burn = 10, verbose = FALSE)

result$Sol(一个 mcmc 对象)是所有链的存储位置。我想 rbind 所有链,以便拥有一个向量,其中所有后验分布的所有值和变量名称作为行名(或者因为不允许重复的行名,作为附加字符向量)。

4

1 回答 1

3

我不能(使用来自 MCMCglmm 的示例代码)构造一个示例,其中 as.data.frame(model$Sol) 给了我一个数据帧的数据帧。因此,尽管可能有一个简单的答案,但我不能很容易地检查它。

也就是说,这是一个可能有帮助的例子。请注意,如果您的子数据框没有相同的列名,那么这将不起作用。

# create a nested data.frame example to work on
a.df <- data.frame(c1=runif(10),c2=runif(10))
b.df <- data.frame(c1=runif(10),c2=runif(10))
full.df <- data.frame(1:10)
full.df$a <- a.df
full.df$b <- b.df
full.df <- full.df[,c("a","b")]

# the solution
res <- do.call(rbind,full.df)

编辑

好的,使用您的新示例,

require(MCMCglmm) 
data(PlodiaPO) 
result<- MCMCglmm(PO ~ plate + FSfamily, data=PlodiaPO,nitt=50,thin=2,burn=10,verbose=FALSE)
melt(do.call(rbind,(as.data.frame(result$Sol))))
于 2013-09-04T01:37:38.903 回答