R语言与回归

作者: 李作 | 来源:发表于2016-10-20 18:29 被阅读173次

    首先,先来一篇文章:回归分析的七种武器 ,这里详细地讲解了回归分析的各种类型,我就不要在这里啰嗦了。接下来,我先说说简单线性回归。
    所用数据为R中基础安装中的数据集women,提供了15个年龄在30~39岁间女性的身高体重信息。

    > women
       height weight
    1      58    115
    2      59    117
    3      60    120
    4      61    123
    5      62    126
    6      63    129
    7      64    132
    8      65    135
    9      66    139
    10     67    142
    11     68    146
    12     69    150
    13     70    154
    14     71    159
    15     72    164
    

    单从数字上看不出什么,我们先做一个图来看看它们之间到底有没有相关性,有相关性的话再开始进一步的回归分析。

    plot(women)
    
    Paste_Image.png

    嗯,很好,明显的正相关,接下来,就可以欢欢喜喜地去做相关模型啦~
    现在,我们要用R中的lm()函数进行回归。


    lm()用法:

    lm(formula, data,...)
    

    参数是formula模型公式,例如y ~ x。公式中波浪号(~)左侧的是响应变量,右侧是预测变量。函数会估计回归系数β0和β1,分别以截距(intercept)和x的系数表示。


    fit<-lm(weight~height,data=women)
     summary(fit)
    
    Call:
    lm(formula = weight ~ height, data = women)
    
    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 ***
    height        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
    
    

    以上,我们先用lm()拟合结果,然后用summary()对结果进行展示。

    Coefficients列出了拟合模型的截距项(-87.51667)和斜率( 3.45000); 1.525为残差标准误,即模型用身高预测体重的平均误差; 0.991为R^2项,即实际和预测之间的相关系数,表明模型可以解释体重99.1%的方差;另从p值(1.09e-14<0.001)可以看出不可以拒绝回归系数为0的推断。

    所以,可以得到回归模型为:

    Weight=-87.52+3.45*Height

    表明身高每增加1英寸,体重将预计增加3.45磅。

    最后,我们列出由模型得到的预测值并画出曲线图:

    fitted(fit)
           1        2        3        4        5        6        7        8        9       10 
    112.5833 116.0333 119.4833 122.9333 126.3833 129.8333 133.2833 136.7333 140.1833 143.6333 
          11       12       13       14       15 
    147.0833 150.5333 153.9833 157.4333 160.8833 
    > plot(women$height,women$weight)
    > abline(fit)
    
    Paste_Image.png

    从图中可以看出,模型基本很好地拟合了原始数据,但是并没有提供关于模型在多大程度满足统计假设的信息,我们需要对其进行回归诊断。
    对返回的fit使用plot()函数,可以生成评价模型拟合情况的四幅诊断图。

    par(mfrow=c(2,2))
    plot(fit)
    
    ![Uploading Paste_Image_978641.png . . .]

    以上四幅图分别为残差图与拟合图(判断线性)、正态QQ图(判断正态性)、位置R度图(判断同方差性)、残差与杠杆图(检验异常点)。

    根据OLS回归的统计假设,我们对以上图形一次进行判断:

    • 正态性 :若满足正态性的要求,则图中的点应落在呈45度角的直线上
    • 独立性:根据题目要求,由于女性的身高体重相互独立,固满足要求
    • 线性:若因变量与自变量线性相关,则残差值与预测值就没有任何系统关联,很明显,图中呈现一条曲线关系。
    • 同方差性:若满足不变方差的假设,则图中水平线周围的点应随机分布。

    根据上述分析,我们的模型并没有达到最优,还可以进行改良。
    根据经验,选择在拟合模型上加一个二次项:

     fit2<-lm(weight~height+I(height^2),data=women)
     par(mfrow=c(2,2))
     plot(fit2)
    
    第二次拟合诊断图

    这一次的诊断效果明显比过去好了,那么我们就来看看这个模型的参数吧:

    summary(fit2)
    
    Call:
    lm(formula = weight ~ height + I(height^2), data = women)
    
    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 ***
    height       -7.34832    0.77769  -9.449 6.58e-07 ***
    I(height^2)   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
    
    

    根据p值斜率与方差显著,R^2值99.95%,模型拟合的更好了。

    Weight=261.88-7.35*Height+0.08*Height^2

    最后,我们来总结一下简单线性回归的一般步骤吧:

    Paste_Image.png

    哦,对了,参考书就是那本评分很高的《R in Action》

    相关文章

      网友评论

      • 范捷琦:感谢作者,把R算出来相关术语解释的很清楚,谢谢。

      本文标题:R语言与回归

      本文链接:https://www.haomeiwen.com/subject/nkgfuttx.html