【问题标题】:Doing do.call anova not working with extra arguments做 do.call anova 不使用额外的参数
【发布时间】: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值应该完全一样
  • 是的,就是这样。我这样做是为了让教授展示这一点。而且我还需要对每个模型进行交叉验证。感谢您的帮助!

标签: r function anova do.call


【解决方案1】:

Onyambu 是正确的

这行得通

do.call("anova", c(Poly.fits, test = "F"))

这个也可以

invoke("anova", Poly.fits, test = "F")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多