2

对于我的项目,我需要同时运行许多不同但相似的模型,因为只有一个变量发生了变化,我想让这个过程尽可能简单和耗时(我的 R 脚本此时很长...... )

data(mtcars)   
Model1 <- formula(mpg ~ cyl + disp)    
Model2 <- formula(mpg ~ cyl + hp)    
Model3 <- formula(mpg ~ cyl + wt)    
Model4 <- formula(mpg ~ cyl + qsec)  
All.Models <- cbind(Model1, Model2, Model3, Model4) 

有没有办法在模型函数(lm()、aov() 等)上运行所有公式,特别是 All.Models 并指定数据集(这里是在 mtcars 上,但我有不同的数据集)楷模)?

我尝试了以下两个版本:

All.Ouput1 <- lm(lapply(All.Models), data=mtcars)

或者

All.Output2 <- lapply(All.Models, lm(All.Models, data=mtcars))

在第一个中它运行了几分钟,直到我不得不手动停止它,第二个给我一个错误

还有str(All.Models)一个列表,其中模型需要 3 行

str(All.Models)
List of 12
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + disp
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + hp
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + wt
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + qsec
 - attr(*, "dim")= int [1:2] 3 4
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "Model1" "Model2" "Model3" "Model4"

先感谢您

4

1 回答 1

3

这是你想要的吗?

data(mtcars)   
F1 <- formula(mpg ~ cyl + disp)    
F2 <- formula(mpg ~ cyl + hp)    
F3 <- formula(mpg ~ cyl + wt)    
F4 <- formula(mpg ~ cyl + qsec)  
All.formulas <- list(F1, F2, F3, F4) 

All.models <- lapply(All.formulas,lm,data=mtcars)
lapply(All.models,summary)

公式并不是真正的模型。

具有明显回归调用的解决方案:

customF <- function(x) {

    out.model <- lm(x,data=mtcars)
    out.model$call <- x
    return(out.model)
}


All.models <- lapply(All.formulas,customF)
lapply(All.models,summary)

可能有一种更优雅的方式来做到这一点,但这也有效。

于 2013-09-02T12:20:36.003 回答