如何在R中建立多项式回归模型?

3

我有一个包含70个变量的数据集,我想在它上面尝试多项式回归。如果列数只有三/四列,我可以手动编写以下代码--

 model <- lm(y ~ poly(var1,3) + poly(var2,3) + poly(var4,4)

如果我们有70个变量,该怎么办呢?我们需要手动输入所有变量的名称吗?还是有更简单的方法?

你是否有关于每个变量拟合的多项式程度的先前知识(例如,来自商业方面)?一般来说,多项式回归倾向于过拟合且不太具有泛化性。 - Sandipan Dey
这里我知道每个变量代表什么,但对它们的多项式程度一无所知。简单线性模型给出非常低的R平方值(约为0.02),我想了解一般多项式回归的建模方法。 - tired and bored dev
4
如果您的第一个问题意思是如何在许多变量上自动化进行,那么它可能被视为编程问题。如果您的主要问题与统计建模有关,则可以将此问题删除,并在CV上发表一个强调此点的问题。至于您的第二个问题,它不适合在SO上讨论,最好在CV上寻找答案。请注意,翻译时尽力使内容更加通俗易懂,但不要改变原来的意思。 - lmo
删除了问题的第二部分... - tired and bored dev
谢谢,adibender 也建议了同样的事情... - tired and bored dev
1个回答

4
如果所有变量都按系统命名,则您可以粘贴公式:
form <- as.formula(paste("y~", paste0("poly(var", 1:10, ")", collapse="+")))

或者(针对3次多项式):
form <- as.formula(paste("y~", paste0("poly(var", 1:10, ", degree=3)", collapse="+")))

另外,如果您的数据集 df 中仅包含因变量 y 和感兴趣的协变量(它们具有非系统性的名称),您可以尝试使用以下方法:

ind.y <- grep("y", colnames(df))
form <- as.formula(paste("y~", paste0("poly(", colnames(df[, -ind.y]), ", degree=3)", collapse="+")))

3
是的,但正如上面的评论所指出的那样,通常不希望预先设置多项式的次数,最好使用全局样条。惩罚样条通常更受青睐,例如使用mgcv包中的 gam 函数。此外,您可能还需要进行变量选择,但正如之前提到的那样,这是一个在交叉验证环节讨论的问题。 - adibender
好的。谢谢。我在这里学到了很多东西。我会去看看Gam,也许能找到我关于机器学习相关问题的答案。 - tired and bored dev
@user1478061 在第二点中,我本意是写“最好根本不使用全局多项式”。 - adibender
谢谢你的想法。实际上,我还没有决定采取什么方法。我也认为全局多项式可能不是一个好主意,但只是想探索一下它的效果,以便更多地了解它... - tired and bored dev
1
我的残差与拟合值图像看起来像第三个图(具有指数关系 - http://stats.stackexchange.com/questions/253035/trying-to-understand-the-fitted-vs-residual-plot/253039#253039 让人想起“数学的不合理有效性”论点...当我进行对数转换时,R平方值出现了跳跃,虽然没有达到很好的值,但有所改善... - tired and bored dev
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接