对存储在列表中的一系列模型进行方差分析

anova on a sequence of models stored in a list

我正在 运行创建一系列模型并将它们存储在 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,这不是我想要的。

这是一个绝对不雅的解决方案:

eval(parse(text=paste("anova(",paste("fm0[[",1:length(fm0),"]]",sep="",collapse=","),")")))