R语言学习八(回归诊断)
2019-02-03 本文已影响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
图形显示,异方差性不明显,总体上满足同方差性