当包括多项式和它们之间的相互作用时,多重共线性可能是一个大问题。一种方法是查看正交多项式。
通常,正交多项式是关于某些内积正交的多项式族。
因此,例如,在具有权重函数的某些区域上的多项式的情况下w,内积为∫baw(x)pm(x)pn(x)dx- 正交性使内积0
除非m=n.
连续多项式最简单的例子是勒让德多项式,它在有限实数区间(通常在[−1,1])。
在我们的例子中,空间(观察本身)是离散的,我们的权重函数也是常数(通常),所以正交多项式是勒让德多项式的一种离散等价。将常数包含在我们的预测变量中,内积很简单pm(x)Tpn(x)=∑ipm(xi)pn(xi).
例如,考虑x=1,2,3,4,5
从常数列开始,p0(x)=x0=1. 下一个多项式的形式为ax−b,但我们目前并不担心规模,所以p1(x)=x−x¯=x−3. 下一个多项式的形式为ax2+bx+c; 事实证明p2(x)=(x−3)2−2=x2−6x+7与前两个正交:
x p0 p1 p2
1 1 -2 2
2 1 -1 -1
3 1 0 -2
4 1 1 -1
5 1 2 2
通常,基也被归一化(产生一个正交族)——也就是说,每个项的平方和被设置为某个常数(例如,n, 或者n−1,因此标准差为 1,或者可能是最常见的1)。
对一组多项式预测变量进行正交化的方法包括 Gram-Schmidt 正交化和 Cholesky 分解,尽管还有许多其他方法。
正交多项式的一些优点:
1) 多重共线性不是问题——这些预测变量都是正交的。
2) 低阶系数不会随着您添加项而改变。如果你适合一个学位k通过正交多项式的多项式,您无需重新拟合即可知道所有低阶多项式的拟合系数。
R中的示例(cars
数据,停车距离与速度):
在这里,我们考虑二次模型可能适用的可能性:
R 使用该poly
函数来设置正交多项式预测器:
> p <- model.matrix(dist~poly(speed,2),cars)
> cbind(head(cars),head(p))
speed dist (Intercept) poly(speed, 2)1 poly(speed, 2)2
1 4 2 1 -0.3079956 0.41625480
2 4 10 1 -0.3079956 0.41625480
3 7 4 1 -0.2269442 0.16583013
4 7 22 1 -0.2269442 0.16583013
5 8 16 1 -0.1999270 0.09974267
6 9 10 1 -0.1729098 0.04234892
它们是正交的:
> round(crossprod(p),9)
(Intercept) poly(speed, 2)1 poly(speed, 2)2
(Intercept) 50 0 0
poly(speed, 2)1 0 1 0
poly(speed, 2)2 0 0 1
这是多项式的图:
这是线性模型输出:
> summary(carsp)
Call:
lm(formula = dist ~ poly(speed, 2), data = cars)
Residuals:
Min 1Q Median 3Q Max
-28.720 -9.184 -3.188 4.628 45.152
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 42.980 2.146 20.026 < 2e-16 ***
poly(speed, 2)1 145.552 15.176 9.591 1.21e-12 ***
poly(speed, 2)2 22.996 15.176 1.515 0.136
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 15.18 on 47 degrees of freedom
Multiple R-squared: 0.6673, Adjusted R-squared: 0.6532
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e-12
这是二次拟合的图: