2014-04-11 75 views
0

我正在使用R中的MuMIn包來爲我的數據選擇最佳模型。在這裏,我使用一個使用代碼提供的Cement數據集的例子。將疏通功能輸出轉換爲R中的data.frame

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

代碼是否正確?我得到''global.models'na.action'參數沒有設置,options('na.action')是「na.omit」'作爲錯誤。 – mvw

+0

我忘了包括包裝,現在應該工作。 – KatyB

+0

仍然無法正常工作。你能檢查'dd < - dredge..'這行嗎? – mvw

回答

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來自:

result.df <- data.frame(Model.No = rep(seq(1:length(no.of.rows)),no.of.rows), 
         Coefs = rownames(foo), 
         foo) 

如果你在for循環中修改你的索引,你也可以給它一些花哨的名字,並使用它。 你的avgmod.95p將會被命名,我們可以使用它。