为什么对于人工多项式展开和使用R`poly`函数会得到不同的预测?


10

为什么对于人工多项式展开和使用R poly函数会得到不同的预测?

set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()

# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)

# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)

在此处输入图片说明

我的尝试:

  • 截距似乎是一个问题,当我将模型与截距拟合时,即-1在模型中不存在时formula,这两行是相同的。但是,为什么没有截距,这两行是不同的?

  • 另一个“解决方案”是使用raw多项式展开而不是正交多项式。如果将代码更改为fit2 = lm(y~ poly(x,degree=2, raw=T) -1),将使两行相同。但为什么?


4
这与您的问题无关,但是您通常很愿意评论。在阅读代码时,我注意到的第一件事是您使用=<-分配不一致。我真的不会这样做,这并没有完全使人困惑,但是它给您的代码增加了很多视觉干扰,毫无益处。您应该选择一种或另一种用于您的个人代码,并坚持使用。
马修·德鲁里

感谢您帮助我编码!问题已解决。@MatthewDrury
Haitao Du

3
随机跟进技巧,可<-减少打字麻烦:alt+-
JAD

@JarkoDubbeldam感谢您的编码提示。我喜欢键盘快捷键
Haitao Du

Answers:


12

正如您正确注意到的那样,原始的不同之处在于,在第一种情况下,您使用“原始”多项式,而在第二种情况下,您使用了正交多项式。因此,如果将后面的lm调用更改为:和fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)之间将会得到相同的结果 。究其原因,为什么我们得到在这种情况下相同的结果是“小巫见大巫”; 我们安装的型号完全相同,没有任何惊喜。fitfit3fit<-lm(y~.-1,data=x_exp)

可以轻松检查两个模型的模型矩阵是否相同all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE)。


更有意思的是,为什么在使用截距时会得到相同的图。首先要注意的是,当使用截距拟合模型时

  • 在这种情况下,fit2我们只需垂直移动模型预测即可;曲线的实际形状是相同的。

  • 另一方面,在fit结果的情况下包括截距,不仅导致垂直放置的线不同,而且整体形状也不同。

通过简单地将以下拟合添加到现有图上,我们可以轻松地看到这一点。

fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)

fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')

在此处输入图片说明

好的...为什么非拦截拟合不同,而包含拦截的拟合却相同?渔获再次处于正交性条件下。

如果使用fit_b的模型矩阵包含非正交元素,则Gram矩阵crossprod( model.matrix(fit_b) )距离对角线很远;在fit2_b元素正交的情况下(crossprod( model.matrix(fit2_b) )实际上是对角线)。

因此,fit当我们将其扩展为包括截距时,fit_b我们更改了Gram矩阵 的非对角线条目,因此,与之相比,整体上的拟合结果是不同的(不同的曲率,截距等)符合。尽管在我们将其扩展为包括截距的情况下(如我们仅追加一个已经与我们拥有的列正交的列),正交性却反对阶数为0的常数多项式。这只是导致我们的拟合线沿截距垂直移动的结果。这就是情节不同的原因。XTXfitfit2fit2_b

有趣的问题是,为什么fit_bfit2_b相同?毕竟,来自fit_b面值的模型矩阵fit2_b都不相同。在这里,我们只需要记住这些并拥有相同的信息即可。只是它们的线性组合,因此本质上它们的拟合度将是相同的。在拟合系数中观察到的差异反映了值的线性重组,以使它们正交。(见G.格罗腾迪克答案在这里也对于不同的示例。)fit_bfit2_bfit2_bfit_bfit_b


+2.5感谢您的出色回答。对于最后一张图,我从@kjetilb halvorsen中学到了:描述这一点的另一种抽象方式是模型本身仅依赖于某个线性子空间,即设计矩阵定义的列空间。但是参数不仅取决于此子空间,还取决于该子空间的基础,该子空间由所使用的特定变量(即列本身)给出。例如,来自模型的预测将仅取决于线性子空间,而不取决于所选的基础。
海涛杜

希望你不介意,我重新格式化一点点..
杜海涛

@ hxd1011:完全没有问题,感谢您抽出宝贵的时间梳理一下它。
usεr11852
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.