原始多项式
要获得问题中的普通多项式,请使用raw = TRUE
. 不幸的是,回归中的普通多项式有一个不受欢迎的方面。例如,如果我们拟合二次方,然后拟合三次方,则三次方的低阶系数都与二次方不同,即二次方为 56.900099702、-0.466189630、0.001230536 与 6.068478e+01、-5.688501e-01、 2.079011e-03 用下面的立方体改装后。
library(ISLR)
fm2raw <- lm(mpg ~ poly(horsepower, 2, raw = TRUE), Auto)
cbind(coef(fm2raw))
## [,1]
## (Intercept) 56.900099702
## poly(horsepower, 2, raw = TRUE)1 -0.466189630
## poly(horsepower, 2, raw = TRUE)2 0.001230536
fm3raw <- lm(mpg ~ poly(horsepower, 3, raw = TRUE), Auto)
cbind(coef(fm3raw))
## [,1]
## (Intercept) 6.068478e+01
## poly(horsepower, 3, raw = TRUE)1 -5.688501e-01
## poly(horsepower, 3, raw = TRUE)2 2.079011e-03
## poly(horsepower, 3, raw = TRUE)3 -2.146626e-06
正交多项式
我们真正想要的是添加三次项,使得使用二次拟合的低阶系数在使用三次拟合重新拟合后保持不变。为此,对 的列进行线性组合poly(horsepower, 2, raw = TRUE)
并对其执行相同操作,poly(horsepower, 3, raw = TRUE)
以使二次拟合中的列彼此正交,并且对于三次拟合也类似。这足以保证当我们添加高阶系数时低阶系数不会改变。注意前三个系数现在在下面的两组中是相同的(而在上面它们不同)。也就是说,在这两种情况下,低于 3 个低阶系数是 23.44592、-120.13774 和 44.08953。
fm2 <- lm(mpg ~ poly(horsepower, 2), Auto)
cbind(coef(fm2))
## [,1]
## (Intercept) 23.44592
## poly(horsepower, 2)1 -120.13774
## poly(horsepower, 2)2 44.08953
fm3 <- lm(mpg ~ poly(horsepower, 3), Auto)
cbind(coef(fm3))
## [,1]
## (Intercept) 23.445918
## poly(horsepower, 3)1 -120.137744
## poly(horsepower, 3)2 44.089528
## poly(horsepower, 3)3 -3.948849
相同的预测
重要的是,由于 的列poly(horsepwer, 2)
只是poly(horsepower, 2, raw = TRUE)
两个二次模型(正交模型和原始模型)的列的线性组合,表示相同的模型(即它们给出相同的预测),并且仅在参数化方面有所不同。例如,拟合值是相同的:
all.equal(fitted(fm2), fitted(fm2raw))
## [1] TRUE
这也适用于原始和正交立方模型。
正交性
我们可以验证多项式确实具有正交列,这些列也与截距正交:
nr <- nrow(Auto)
e <- rep(1, nr) / sqrt(nr) # constant vector of unit length
p <- cbind(e, poly(Auto$horsepower, 2))
zapsmall(crossprod(p))
## e 1 2
## e 1 0 0
## 1 0 1 0
## 2 0 0 1
残差平方和
正交多项式的另一个不错的特性是,由于poly
生成的矩阵的列具有单位长度并且相互正交(并且也与截距列正交),因此由于添加三次项而导致的剩余平方和的减少很简单响应向量在模型矩阵三次列上的投影长度的平方。
# these three give the same result
# 1. squared length of projection of y, i.e. Auto$mpg, on cubic term column
crossprod(model.matrix(fm3)[, 4], Auto$mpg)^2
## [,1]
## [1,] 15.5934
# 2. difference in sums of squares
deviance(fm2) - deviance(fm3)
## [1] 15.5934
# 3. difference in sums of squares from anova
anova(fm2, fm3)
##
## Analysis of Variance Table
##
## Model 1: mpg ~ poly(horsepower, 2)
## Model 2: mpg ~ poly(horsepower, 3)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 389 7442.0
## 2 388 7426.4 1 15.593 0.8147 0.3673 <-- note Sum of Sq value