【发布时间】:2021-07-18 01:30:43
【问题描述】:
您好,我正在使用这些软件包
library(tidyverse)
library(ISLR)
library(boot)
我创建了一个包含各种多项式模型的列表,我想将所有模型一起运行 anova。
df<- Wage
degrees <- seq(1,5)
Poly.fits <- vector("list", length(degrees))
for (d in degrees){
Poly.fits[[d]]<- lm(wage ~ poly(age,d), data = df)
}
这行得通
do.call("anova", Poly.fits)
这个也可以
anova(Poly.fits[[1]], Poly.fits[[2]], Poly.fits[[3]], Poly.fits[[4]], Poly.fits[[5]], test = "F")
我想根据此处找到的多个参数https://statisticsglobe.com/do-call-and-call-functions-in-r/ 来执行此操作
do.call("anova", list(Poly.fits, test = "F"))
但这不起作用并导致此错误
UseMethod("anova") 中的错误: 没有适用于“anova”的方法应用于“list”类的对象
如果有的话,有谁知道我怎样才能完成这项工作?
【问题讨论】:
-
考虑做
do.call("anova", c(Poly.fits, test = "F"))。既然你已经加载了 tidyverse,请考虑做invoke("anova", Poly.fits, test = "F") -
是的,c 函数使它工作,谢谢!
-
另请注意,您使用的是
poly(,..raw =FALSE),这意味着您正在获得正交矩阵。因此不需要for循环。只需summary(lm(wage ~ poly(age,5), data = df))即可。两个函数得到的p值应该完全一样 -
是的,就是这样。我这样做是为了让教授展示这一点。而且我还需要对每个模型进行交叉验证。感谢您的帮助!