比较样条和多项式

compare splines and polynomials

我正在尝试编写一个函数来比较样条和多项式回归之间的基本模型。 但是当我使用我模型中的 model$formula 选项,并将其用于下一个变量的 gam 函数时,我收到一个错误:

Error in mod$formula + df_work_final$Apps :
non-numeric argument to binary operator

如何在函数中使用我的模型公式?

谢谢

完整示例:

library(gam)
library(ISLR)
data(College)

mod = gam(College$Grad.Rate~College$Private)

# This, I want to use into a function
Poly = function(valores){
    poly.1= gam(mod$formula + valores,data=College)
    poly.2= gam(mod$formula + poly(valores,2) ,data=College)
    poly.3= gam(mod$formula + poly(valores,3) ,data=College)
    poly.4= gam(mod$formula + poly(valores,4) ,data=College)
    poly.5= gam(mod$formula + poly(valores,5) ,data=College)
}

Poly(df_work_final$Apps)

将我之前的评论移动到答案中:

  • 无论如何,在模型公式中使用$应该禁止;改为使用模型拟合函数的 data 参数;

  • 我在你的初始 gam 中没有看到任何平滑函数,例如 los。您实际上只是在拟合一个线性模型 Grad.Rate ~ Private。那么,为什么不使用

    mod <- lm(Grad.Rate ~ Private, data = College)
    
  • + 对公式的串联无效。您想使用 update.formula(阅读 ?update.formula 了解更多信息),例如,

    update.formula(formula(mod), . ~ . + poly(Apps, 2))