我有一个包含多个线性回归模型的列表,像这样:
> 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 TableModel 1: rnorm(10) ~ 1Model 2: rnorm(10) ~ 1Model 3: rnorm(10) ~ 1Model 4: rnorm(10) ~ 1Model 5: rnorm(10) ~ 1Model 6: rnorm(10) ~ 1Model 7: rnorm(10) ~ 1Model 8: rnorm(10) ~ 1Model 9: rnorm(10) ~ 1Model 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
。