(线性回归)R语言的模型诊断图(Residuals vs Fitted, Normal QQ, Scale-Location, Residuals Leverage)
参考链接:
线性回归,是概率统计学里最重要的统计方法,也是机器学习中一类非常重要的算法。线性模型简单理解非常容易,但是内涵是非常深奥的。尤其是线性回归模型中的Diagnostics plot的阅读与理解一直被认为是线性回归中的一个难点。
在任何线性模型中,能够直接“lm”(模型有意义),既要考虑各个参数的t-test所得出的p-value,也要考虑总体模型F-检验得出的p-value。在这之后,还要清楚一个线性模型是建立在以下五个假设的基础上的。如果不满足以下五个假设,那么模型即使通过了t-test和F-test,其预测效果也大打折扣。同时,也可以通过对这五个指标的研究,进一步优化模型(比如使用其他非参数统计方法,Box-Cox等变换方法,基于AIC,BIC,Adjusted-R^2,Cpd等方法的特征选择,Lasso,Ridge-regression,Elastic Net等等)。
• Normal i.i.d. errors
• Constant error variance
• Absence of influential cases
• Linear relationship between predictors and outcome variable
• Collinearity
而针对这五个假设进行验证,最直观和简单的方法就是用R语言自带的模型诊断图。但如前面所说,这些模型诊断图的阅读和理解,一直是一个难点。本人在这里详细的介绍这种方法。
我本人是习惯用python的。我其实非常不喜欢R复杂的包依赖关系以及在使用中繁琐的手动包安装过程。但是精细处理线性回归的问题,使用R比使用Python有更多的好处。
Python其实也有一个性能不错的统计学包,StatsModel:
http://www.statsmodels.org/stable/index.html
欢迎各位读者朋友尝试使用这一工具完成我们这篇文章中所讲的内容。在这里我们使用RStudio以及最新版本(当前时间是2019年3月8日)来进行项目分析。其实这也是我个人认为非常罕见的R的功能竟然比Python还要强大的地方。
我们首先使用lm()方法,也就是R语言中求线性回归的命令对任意一个线性模型进行线性回归。但是为了方便起见,我们可以把这个“线性回归"命名为fit。
fit=lm(因变量~自变量)
之后我们就可以用R语言绘制Diagnostics plot了。同样的,在R语言里,这里也只有一行代码。
plot(fit)
如果您的代码确实可以执行,在RStudio中应该显示出四张图片。 分别是:
Residuals vs Fitted
Normal QQ
Scale-Location
Residuals vs Leverage
如图所示。就是一个这样的图:
但是这些图,画出来了,怎么去理解?在这里我们引用美国弗吉尼亚大学的一篇参考资料来给大家进行讲解。
原文地址是:https://data.library.virginia.edu/diagnostic-plots/
- Residuals vs Fitted
Resiuals即为残差的意思(估计值与真实值之差)。这就是残差与真实值之间的关系画图。在理想线性模型中有五大假设。其中之一便是残差应该是一个正态分布,与估计值无关。如果残差还和估计值有关,那就说明模型仍然有值得去改进的地方,当然,这样的模型准确程度也就大打折扣。
显然,左边的图残差和估计值基本是无关的。但是右边的图,残差和估计值几乎成一个二次关系。那么这样的模型就需要进行修正了。
如果您觉得单纯用图来看还不放心,在统计学里有四种检测方法可以进一步去测试残差和估计值是否是无关的。那便是:
Shapiro-Wilk
Kolmogorov-Smirnov
Anderson-Darling
Correlation test
你可以使用R,对你的模型分别进行以上四大检验。相关的资料可以参考Julian Faraway的Linear Model with R等著名统计学书籍。这些检验理论上都比较复杂,所以我们可能会在后面展开讨论。但是实际操作是非常简单的。至于哪一种检测方法最好?Based on a 2011 paper by Razali and Wah, Shapiro-Wilk is the best test, while Anderson-Darling performs almost the same. 其实在实际操作中都是差不多的,您挑几个看着顺眼的试一下就okay。
- Normal QQ
Normal QQ-plot用来检测其残差是否是正态分布的。左边是一个残差基本正态分布的图。右边则是一个用Normal QQ-plot进行分析显示出问题的图。1和2其实用来干的事情是差不多的。
注意一条:R语言可以显示出偏差比较大的数据组。比如左边图中的38,98,36等等。这些点从改进模型的角度可以把它删除。但是有时候这些不正常的点或许暗含着一些特殊的规律。机器学习专家应该在这里和领域专家进行沟通。或者从业务的角度上来说,机器学习专家或者统计学家应该立即对出现偏差的点进行汇报。看是这些点本身有误差,还是暗含着不一样的物理或者统计规律。
- Scale-Location
这个图是用来检查等方差假设的。在一开始我们的五大假设第二条便是,我们假设预测的模型里方差是一个定值。如果方差不是一个定值那么这个模型的可靠性也是大打折扣的。
左边的图是一个方差基本确定的情况。这种情况就是可以通过测试的。方差基本是一个常数。但是右边就不对了。大家发现方差是在不断增长的。如果出现这种情况,那么就需要进一步对模型进行分析。
在实际操作中,还会出现类似“微笑曲线”或者“倒微笑曲线”的情况。也是无法通过方差恒定测试的。如果您在这个地方依然还不相信其结果,那么可以使用Berush-Pegan test进行分析。
- Residuals vs Leverage
Leverage就是杠杆的意思。这种图的意义在于检查数据分析项目中是否有特别极端的点。
在这里我们引入了一个非常重要的指标:Cook距离。我们在线性模型里用Cook距离分析一个点是否非常“influential。”一般来说距离大于0.5的点就需要引起注意了。在这里我们借用了物理学电磁场理论中的等电势理念。那个1,和0.5分别就是Cook距离为1和0.5的等高线。
需注意,即使R将这些特殊的点标记了出来,也不等于他们一定需要被删除。还是要参考Cook距离的绝对大小。
线性回归的模型诊断的确是一个难点。大家也可以参考Julian Farway等一批国内外的优秀著作进行学习。