如何使用for循环在不同程度的不同多项式回归模型的结果上执行ANOVA

问题描述 投票:1回答:1

我对R很陌生,我认为我的问题很简单,但似乎无法解决。我在这里查看过类似的问题,但似乎无法找到解决我的特定问题的解决方案。

我正在使用ISLR软件包中附带的Wage数据集,尝试根据不同多项式年龄的函数对工资进行建模。

  library(ISLR) 
attach(Wage)

我正在对年龄在10岁以下的工资进行回归分析,然后我希望对每个模型进行方差分析并调查结果。我最接近的是这个。

  for (i in 1:10) {
    fit[[i]] <- lm(wage~poly(age, i) , data = Wage)
    result[[i]] <- aov(as.formula(paste(fit[i], "~ wage")))
  }

导致此错误;

Error in model.frame.default(formula = as.formula(paste(fit[i], "~ wage")),  : 

变量'list的无效类型(列表)(系数= c((Intercept) = 111.703608201744,poly(age, i) = 447.067852758315),残差= c(231655 = -19.3925481434428,86582 = -28.2033380861585,161300 = 17.4500251413464,155159 = 42.5676926169455,11443 = -42.0253778623369,376662 = 7.21810821763668,450601 = 56.7036617292801,377954 = 8.79783605559716,228963 = 8.18131081863092,81404 = 10.197404483506,302778 = 3.61466467869064,305706 = -24.4688637359983,8690 = -16.9669134309657,153561 = 25.4168784550536,449654 = 14.807739524331,447660 = -27.2938944517631,160191 = -25.1943075097583,230312 = 95.773820436023,301585 = 95.773820436023, ] = 7.84450555272621,153682 = -9.27460094600634,158226 = 91.9620415895517,11141 = -59.5891117312741,448410 = -49.3664897185768,305116 = 50.6467028157233,233002 = -14.5085059894098,8684 = 161.240161560035229379= -28.0716427246922,86064 = -40.6412633049063,378472 = -5.75413931818888,`1

任何帮助都是如此R菜鸟,将深表歉意。

谢谢!

r
1个回答
0
投票

要回答您的问题,您可以执行:

library(ISLR) 
attach(Wage)
fit <- vector("list",10)
result <- vector("list",10)
for (i in 1:10) {
    thisForm <- paste0("wage~poly(age, ",i,")")
    fit[[i]] <- lm(thisForm , data = Wage)
    result[[i]] <- aov(fit[[i]])
  }

上面我创建了公式,以便您可以在fit / aov对象中看到它,而不是使用i。

请注意,lm拟合已经在aov对象中,这意味着,您可以直接在aov对象上获取lm的系数,进行预测并执行所需的操作。您不需要单独存储lm fit:

coefficients(result[[1]]) ; coefficients(fit[[1]])
 (Intercept) poly(age, i) 
    111.7036     447.0679 
 (Intercept) poly(age, i) 
    111.7036     447.0679 
© www.soinside.com 2019 - 2024. All rights reserved.