我在R中使用MuMIn包为我的数据选择最佳模型。在这里,我使用随代码提供的Cement数据集的示例。
require(MuMIn)
data(Cement)
d <- data.frame(Cement)
idx <- seq(11,13)
avgmod.95p <- list()
for (i in 1:length(idx)){
d2 <- d[1:idx[i],]
fm1 <- lm(y ~ ., data = d2)
dd <- dredge(fm1, extra = c("R^2", F = function(x)
summary(x)$fstatistic[[1]]))
# 95% confidence set:
confset.95p <- get.models(dd, cumsum(weight) <= .95)
avgmod.95p[[i]] <- model.avg(confset.95p)
}
正如您所看到的,我正在运行和迭代循环来构建数据集的模型平均估计值(为了说明,我改变了这里的长度)。变量avgmod.95返回:
> avgmod.95p[[1]][3]
$avg.model
Estimate Std. Error Adjusted SE Lower CI Upper CI
(Intercept) 56.1637849 15.06079485 15.15303057 26.4643908 85.8631791
X1 1.4810616 0.14016773 0.16302190 1.1615446 1.8005787
X2 0.6850913 0.05397343 0.06358329 0.5604704 0.8097123
X4 -0.6063184 0.05919637 0.06964775 -0.7428255 -0.4698113
X3 0.2126228 0.19480789 0.23502854 -0.2480246 0.6732703
包括估计参数以及下限和上限置信区间。
如何将迭代循环中的所有输出组合成一个data.frame,例如:
Variable Estimate Lower CI Upper CI
X1 1.4810616 1.1615446 1.8005787
X1
X1
X2
即。对于X1,X2和X3,我有三个值,其中三个是循环中的迭代次数。
如何做到这一点?我试过了:
do.call(rbind.data.frame, avgmod.95p)
但它不起作用,因为它提供了一个错误。
答案 0 :(得分:1)
您要将其分配到列表中,所以让我们使用lapply
#get number of rows for each model
no.of.rows <-unlist(lapply(avgmod.95p, function(x) nrow(x$avg.model)))
#use lapply again to rbind the models
foo<-do.call(rbind, lapply(avgmod.95p, function(x) x$avg.model))
现在将它变成一个很好的data.frame,使用no.of行来指示它来自哪个模型:
result.df <- data.frame(Model.No = rep(seq(1:length(no.of.rows)),no.of.rows),
Coefs = rownames(foo),
foo)
如果你在for循环中修改你的索引,你也可以给它花哨的名字,并使用它。 你的avgmod.95p将命名为this,我们可以使用它。