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

标签 r list for-loop anova

我正在运行一系列模型并将它们存储在列表中:

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=","),")")))

关于r - 对存储在列表中的一系列模型进行方差分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436047/

相关文章:

python - 无需导入库和使用集即可删除列表中重复项的最快方法

arrays - 验证一个 url 是它要去的地方 Swift

javascript - 在 React 中的 .map 迭代中的单个元素上使用 onMouseEnter

arrays - 根据另一个数组上的条件构建数组

r - 按月订购数据框

r - 散点图中的聚类点

R:通过 *list* 列连接两个表(tibbles)

python - boolean 测试 Python 中的列表

r - 何时在 R 中的插入符包中使用 train() 的索引和种子参数

r - "trim"在 "apply()"中是什么意思?