为何R中两种二次多项式回归模型的系数结果不同?
两种多项式回归实现差异的原因分析
这两种写法的核心差异在于poly()函数的默认行为——它生成的是正交多项式,而非你预期的原始幂次项,具体拆解如下:
1. 本质区别
I(speed^2):直接计算speed的原始二次项,和一次项speed高度相关,模型系数是基于原始变量的回归结果,解释起来更直观(对应变量的边际效应)。poly(speed, degree = 2):默认生成正交化的一次、二次项,这些项经过处理后互相独立(协方差为0),目的是避免高阶多项式的多重共线性问题,但系数含义和原始幂次项完全不同,所以看起来结果差异很大。
2. 验证预测能力一致
虽然系数不同,但两个模型的拟合能力、预测结果完全一致,你可以用代码验证:
data(cars) # 原始幂次项模型 model1 <- lm(dist ~ speed + I(speed^2), data = cars) # 默认正交多项式模型 model2 <- lm(dist ~ poly(speed, degree = 2), data = cars) # 对比预测值 pred1 <- predict(model1, cars) pred2 <- predict(model2, cars) all.equal(pred1, pred2) # 输出TRUE,说明预测结果完全相同
3. 让poly()生成原始幂次项
如果想让poly()和I(speed^2)得到完全一致的系数,只需添加raw = TRUE参数,强制生成原始幂次项:
model3 <- lm(dist ~ poly(speed, degree = 2, raw = TRUE), data = cars) summary(model3) # 此时系数和model1完全一致
4. 两种方式的适用场景
- 正交多项式(poly默认):适合高阶多项式(比如3阶及以上),能有效缓解多重共线性,让各阶项的显著性检验更可靠。
- 原始幂次项:系数解释更直观,但高阶时容易出现多重共线性,导致系数估计不稳定。
内容的提问来源于stack exchange,提问作者cinnamon662
相关产品推荐
相关产品推荐

