回归方法(二):多项式回归告诉你身高和体重的关系

这是一个吸引眼球的题目,但是正是一篇正儿八经的干货。

昨天学习了线性回归,今天依旧是用lm函数,不过期望实现的是多项式回归。对于一元多项式y=a_{0}+a_{1}X+a_{2}X^2+....+a_{k}X^k+\varepsilon,若X_{1}=X,X_{2}=X^2.....X_{k}=X^k,多项式回归就变成了多元线性回归。                  同样的对于多元多次多项式y=a_{0}+a_{1}X_{1}+a_{2}X_{2}+a_{3}X_{1}^2+....+a_{5}X_{1}X_{2}+\varepsilon,若X_{1}=X_{1},X_{2}=X_{2},X_{3}=X_{1}^2,...X_{5}=X_{1}X_{2},同样的也可以用多元线性回归的方法来做。

多项式回归应尽少创建新的变量,尽量使用低次多项式,否则会增加模型复杂度,造成过拟合或欠拟合

用R实现多项式回归

这里我使用的数据是R自带的database中的women,里面收集了女性的身高(height)和体重(weight)数据,让我们来看一下:如图所示,数据似乎有些怪异,应该是计量单位的原因,不出意外的话身高单位是英寸,体重单位是lbs(磅)贴心的我附上换算公式(1英寸=2.54cm,1lbs=0.453kg),接下来我们分别用线性回归和多项式回归对数据进行 拟合。

x<-women$height#定义x为身高
y<-women$weight#定义y为体重

 进行一元线性回归

> model1 <- lm(y ~x)#简单的一元线性回归
> summary(model1)#显示拟合细节

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.7333 -1.1333 -0.3833  0.7417  3.1167 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -87.51667    5.93694  -14.74 1.71e-09 ***
x             3.45000    0.09114   37.85 1.09e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.525 on 13 degrees of freedom
Multiple R-squared:  0.991,     Adjusted R-squared:  0.9903 
F-statistic:  1433 on 1 and 13 DF,  p-value: 1.091e-14

根据程序运行结果可知,确定系数已经非常高了,拟合程度已经不错了,那么多项式回归会更胜一筹吗?

> new_x <- cbind(x, x^2)##定义新的变量,把多项式变成多元一次
> model2 <- lm(y ~ new_x)##线性拟合
> summary(model2)#显示拟合细节

Call:
lm(formula = y ~ new_x)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.50941 -0.29611 -0.00941  0.28615  0.59706 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 261.87818   25.19677  10.393 2.36e-07 ***
new_xx       -7.34832    0.77769  -9.449 6.58e-07 ***
new_x         0.08306    0.00598  13.891 9.32e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3841 on 12 degrees of freedom
Multiple R-squared:  0.9995,    Adjusted R-squared:  0.9994 
F-statistic: 1.139e+04 on 2 and 12 DF,  p-value: < 2.2e-16

天(⊙o⊙)…,多项式的拟合结果似乎逼近完美。 整个的操作非常简单,模型也很简单,为了更直观接下来画图看拟合程度。

library(ggplot2)##加载画图用的ggplot2包
ggplot(data =women)+
    geom_point(aes(x ,y )) +
    geom_line(aes(x = women$height,y = model1$fit),color = "red") +
    geom_line(aes(x = women$height,y = model2$fit),color = "blue") +
    theme(panel.background = element_blank())#画图,图中有x,y散点图、线性拟合的直线、多项式拟合的曲线

根据上图所示,多项式拟合的曲线几乎完美的触碰了所有的点,而线性回归拟合的直线虽然和曲线的距离超近但仍旧有差距,根据已有的数据我们还是可以得出身高和体重是正相关的,但是事实上,他们的取值都在一定的范围内,也应该有异常值才算是完整的,本题目只是为了哗众取宠,因为数据只有15条无法成为科学依据,只是为了学习多项式回归。所以,各位高、矮、胖、瘦还是散了吧,我是为了浏览量。

猜你喜欢

转载自blog.csdn.net/never0822/article/details/81738684