R语言学习八(回归诊断)

作者: 邱俊辉 | 来源:发表于2019-02-03 15:04 被阅读5次

    在上一节中,我们学会了用lm()函数来拟合OLS回归模型,通过summary()函数来获取模型参数和相关统计量,但是没有任何输出告诉我们模型是否合适,所以我们要进行回归诊断

    标准方法-plot()

    最常见的方法就是对lm()函数的返回对象使用plot()函数,可以生成评价拟合情况的四幅图形

    > fit<-lm(weight~height,data = women)
    > par(mfrow=c(2,2))
    > plot(fit)
    
    image.png

    生成的图形如上所示,下面对生成的图形进行解释
    OLS回归的统计假设为:正态性,独立性,线性,同方差性

    线性 Residuals vs Fitted 残差图与拟合图 若应变量与自变量线性相关,那么残差值与拟合值就没有任何系统关联,在图中可以看到有一个明显的曲线关系,这说明可能要对回归模型添加一个二次项
    正态性 Normal Q-Q 正态QQ图 用于检验残差正态性 如果满足正态假设,那么图上的点就应该均匀的落在呈45°角的直线上(图中虚线),不然就违反了正态性的假设
    同方差性 Scale-Location 位置尺度图 如果满足同方差性,那么图中水平线周围的点应该随机分布
    Residuals VS Leverage 残差与杠杆图 从图形中可以鉴别出离群点,高杠杆值点和强影响点 离群点:表明拟合回归模型对其预测效果不佳 高杠杆值点:是一个异常的预测变量值的组合 强影响点:表明它对模型参数的估计产生的影响过大,非常不成比例

    再来看一下二次拟合的诊断图

    > fit<-lm(weight~height+I(height^2),data = women)
    > plot(fit)
    
    image.png

    从图中可以看出,多项式回归模型更为理想,点13不满足残差正态性,点15为一个强影响点(cook距离值大),满足同方差性

    再来看一看多元线性回归诊断图

    > state<-as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
    > fit<-lm(Murder~Population+Illiteracy+Income+Frost,data = state)
    > plot(fit)
    
    image.png

    改进的方法-car包

    正态性-qqPlot()

    与基础包中的plot()相比,qqPlot()函数提供了更为精确的正态性假设检验的方法,它画出了在n-p-1个自由度的t分布下学生化残差

    > state<-as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
    > fit<-lm(Murder~Population+Illiteracy+Income+Frost,data = state)
    > qqPlot(fit)
          Nevada Rhode Island 
              28           39 
    
    image.png

    可以看出除了Nevada点,其他点离直线都很近,Nevada这个点有很大的残差值,说明模型低估了该州的谋杀率

    线性-crPlots()

    通过成分残差图也称偏残差图,可以看看因变量与自变量之间是否呈线性关系,也可以看看是否有不同于已设定线性模型的系统偏差,图形可以使用car包中的crPlots()函数绘制

    > crPlots(fit)
    
    image.png

    这个函数分别对4个自变量进行绘图,可已看出成分残差图证实了线性假设,蓝色虚线与紫色曲线几乎拟合,说明线性模型对该数据集是适合的

    同方差性-ncvTest() spreadLevelPlot()

    ncvTest()函数生成一个计分检验,如果检验显著,则说明存在异方差性

    > ncvTest(fit)
    Non-constant Variance Score Test 
    Variance formula: ~ fitted.values 
    Chisquare = 1.746514, Df = 1, p = 0.18632
    

    p=0.18632,不显著,说明方差满足不变假设

    spreadlevelPlot()函数则会绘制最佳拟合曲线散点图,如果违反同方差假设,你将会看到一个非水平的曲线

    > spreadLevelPlot(fit)
    
    Suggested power transformation:  1.209626 
    
    image.png

    图形显示,异方差性不明显,总体上满足同方差性

    相关文章

      网友评论

        本文标题:R语言学习八(回归诊断)

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