R语言用poly()拟合线性模型得到的系数与I()、Excel结果不一致原因
系数差异的核心原因
poly() 函数默认生成的是正交多项式基,而你用 I(X^2) + I(X) 构造的是普通原始多项式基,二者的自变量构造逻辑完全不同,因此回归系数没有可比性。
两种构造方式的区别
- 普通原始多项式的基就是原始变量的一次项、二次项本身,系数直接对应二次函数公式
y = ax² + bx + c里的a、b、c,和Excel二次拟合的计算逻辑完全一致,所以你得到的结果可以互相印证。 - 正交多项式的基是对原始变量做了正交变换后得到的新变量,所有基之间互相独立、不存在共线性。此时输出的系数仅表示对应正交基的贡献度,不能直接对应原始多项式的系数,所以和你的预期结果差异很大。
让 poly() 输出原始多项式系数的方法
如果你需要poly()返回和I()构造、Excel拟合一致的系数,只需要给poly()添加参数raw = TRUE即可,示例代码如下:
modelPoly_raw = lm( formula = Y ~ poly(X, degree = 2, raw = TRUE), data = df )
运行上述代码得到的系数会和你之前的modelI结果完全一致。
额外说明:默认正交多项式的优势是拟合高次多项式时不会因为自变量多重共线性导致数值计算不稳定,如果你不需要直接解释原始多项式的系数,默认正交多项式的拟合效果、预测结果、显著性检验都和原始多项式完全一致,结果是可信的。
内容的提问来源于stack exchange,提问作者GMSL
相关产品推荐
相关产品推荐

