对于我的项目我需要运行许多不同的模型,但同时类似,因为只有一个变量发生变化,我想让这个过程尽可能简单易行(我的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"
提前谢谢
答案 0 :(得分: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)
可能有一种更优雅的方式,但这也有效。