如何使用方差分析函数将多个模型保存在一个列表中?

how to use the function ANOVA to multiple models saved in a list?

我有一个包含多个线性回归模型的列表,如下所示:

> list
[[1]]

Call:
lm(formula = formula, data = data)

Coefficients:
(Intercept)           V1  
  512.91937     -0.04731  


[[2]]

Call:
lm(formula = formula, data = data)

Coefficients:
(Intercept)           V2  
  499.34648     -0.01863  


[[3]]

Call:
lm(formula = formula, data = data)

Coefficients:
(Intercept)           V3  
   504.0089      -0.0271

函数ANOVA主要用于选择最佳模型,因此允许n个模型进行比较。即:

anova(model1,model2,model3,...,modeln)

所以我想做的是类似的事情。当你有三个模型时,没有问题,但我有一个 100 个模型的列表,它们可以更多。所以我需要手动保存这一步。我需要类似

的东西
anova(list[[1]],list[[2]],...,list[[n]])

可能是apply家族的有用功能,但我不知道。

你可以用 do.call

> l <- replicate(10, lm(rnorm(10) ~ 1), simplify = FALSE) 
> do.call(anova, l)
Analysis of Variance Table

Model  1: rnorm(10) ~ 1
Model  2: rnorm(10) ~ 1
Model  3: rnorm(10) ~ 1
Model  4: rnorm(10) ~ 1
Model  5: rnorm(10) ~ 1
Model  6: rnorm(10) ~ 1
Model  7: rnorm(10) ~ 1
Model  8: rnorm(10) ~ 1
Model  9: rnorm(10) ~ 1
Model 10: rnorm(10) ~ 1
   Res.Df     RSS Df Sum of Sq F Pr(>F)
1       9 12.8275                      
2       9  5.6966  0    7.1309         
3       9 11.3766  0   -5.6801         
4       9 12.2143  0   -0.8376         
5       9  6.1445  0    6.0697         
6       9 14.0516  0   -7.9071         
7       9  6.5769  0    7.4748         
8       9  8.5335  0   -1.9566         
9       9  4.4292  0    4.1042         
10      9  9.0037  0   -4.5745     

不过,您确定要对似乎没有嵌套的模型执行此操作吗?此外,您应该避免定义与 base 函数重合的对象,例如 list.