我正在运行一系列模型并将其存储在list
:
fm0 <- list()
for(i in 1:3){
m <- formula(mpg ~ disp)
if(i > 1)
m <- update.formula(m, ~ . + gear)
if(i > 2)
m <- update.formula(m, ~ . + qsec)
fm1 <- lm(m, data = mtcars)
fm0[[i]] <- fm1
names(fm0)[i] <- paste0("m",i)
}
我想在这样的模型序列上运行anova
:
anova(fm0$m1, fm0$m2, fm0$m3)
# Analysis of Variance Table
#
# Model 1: mpg ~ disp
# Model 2: mpg ~ disp + gear
# Model 3: mpg ~ disp + gear + qsec
# Res.Df RSS Df Sum of Sq F Pr(>F)
# 1 30 317.16
# 2 29 317.01 1 0.1443 0.0130 0.9099
# 3 28 309.83 1 7.1839 0.6492 0.4272
但我想要一些通用的东西,我不需要输入列表中的每个命名组件,因为模型的数量是变化的(取决于数据,这是在另一个循环中设置的,其中上面的循环位于其中)
我尝试lapply(fm0, anova)
,但它自己在每个模型上运行anova
,这不是我所追求的。
答案 0 :(得分:3)
这是一个绝对不优雅的解决方案:
eval(parse(text=paste("anova(",paste("fm0[[",1:length(fm0),"]]",sep="",collapse=","),")")))