R语言中使用poly函数和I函数进行多项式拟合

3

我正在尝试了解如何使用R进行多项式拟合。通过在互联网上的研究,似乎有两种方法。假设我想将三次曲线ax^3 + bx^2 + cx + d拟合到某些数据集中,我可以选择以下两种方法之一:

lm(dataset, formula = y ~ poly(x, 3))

或者

lm(dataset, formula = y ~ x + I(x^2) + I(x^3))

然而,当我在 R 中尝试它们时,我得到了两条完全不同的曲线,具有完全不同的截距和系数。这里关于多项式的某些东西我没有理解对吗?


2
不同的系数...可能吧。实际上几乎可以肯定。但是不同的预测结果?不太可能。如果你希望得到对你的主张进行仔细考虑,你需要展示完整的代码。 - IRTFM
2
预测几乎肯定是相同的。如果你想让poly模拟使用I,那么请使用raw=TRUE参数。 - Dason
2个回答

2
这归结于不同函数的作用。 poly 生成正交多项式。将 poly(dataset$x, 3) 的值与 I(dataset$x^3) 进行比较。您的系数将不同,因为直接传递到线性模型中的值(而不是间接通过 Ipoly 函数)是不同的。
正如42所指出的,您的预测值将非常相似。如果 a 是您的第一个线性模型,b 是您的第二个线性模型,则在所有点上,b$fitted.values - a$fitted.value 应该非常接近0。

0
我现在明白了。似乎在计算原始多项式和正交多项式时存在差异。谢谢大家的帮助。

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