查看原文
其他

如何发现数据中存在的特异值?

吴丽雯 量化研究方法 2019-06-14

真实世界的数据,由于测量误差、错误记录等原因,经常存在一些偏离其它大部分样本的特异值。这些特异值,常常会对数据分析造成很大的干扰。所以,如何在保留数据信息的基础上,辨别和剔除特异值,往往成为数据处理的第一步。如果是通过模型来进行分析,同样需要了解数据中的特异值是否会影响模型的准确性。


很多研究在提及特异值时只检查了离群值

然而离群值就是特异值的全部吗?

并不是



本文将介绍几种特异值以及常用的辨别方法。我们将看到,离群值不一定对回归分析造成很大的影响,引起回归偏差的数据点(强影响点)也并不一定就是离群值。


所以,在数据分析时,我们需要综合考虑不同种类的特异值:离群值、高杠杆点以及强影响点。


文中案例分析用到的数据集为R软件ISLR包中的Carseats数据,包括了400家商店某品牌儿童安全座椅的销售数据,变量包括销量(Sales,单位为千个)、广告宣传(Advertising,单位为千美元)以及定价(Price,单位为千美元)等。


假设某销售经理希望通过这个数据集,判断销量是否与宣传和定价相关。那么,自变量就是宣传和定价,因变量为该儿童座椅的销量。(后文中图下方若未特殊指明,均表明是用上述数据集,简称儿童座椅数据)


01 离群值


因变量的特异值即离群值,常常通过箱式图或学生化残差识别。


方法一:箱式图(box-plot)


大部分统计分析软件的箱式图绘制模块都自带辨别离群值的功能。以R软件为例,在箱式图中会以“°”标示离群值,即以下样本点:


- 大于箱子上边缘+1.5×四分位间距,

- 小于箱子下边缘-1.5×四分位间距。


在R软件中,可以使用boxplot()命令画出箱式图,并且判断离群值。



箱式图指出的两个可能的离群值为第317和377号观测值,因为这两个结果变量Sales的观测值超出了上文所说的判定范围。


方法二:学生化残差(studentized residual)


因为该经理想要通过线性回归,来回答广告、定价和销量是否相关的问题,我们也可以通过回归的残差寻找“销量”的特异值。学生化残差是一种标准化的残差,它可以告诉我们哪些数据点的残差较大,超过±3的学生化残差可以被看作可能的离群值。在R软件中,可以使用rstudent()命令计算学生化残差。

 


残差分析表明,51号观测值的回归残差远远偏离数据的平均值,所以这个“销量”有可能是一个离群值。


02 高杠杆点


自变量的特异值即高杠杆点。然而,实际应用中常常与离群值混为一谈。其实高杠杆点并不一定是离群值,反之亦然。


(本图所用数据为自编数据)


举一个简单的例子,上图A中的红点明显偏离其他的y值,所以可能是一个离群值,然而x落在其他数据中间,所以不是高杠杆点。同理,B图中的红点可能是一个高杠杆点,然而却不是离群值。C图中的红点可能既是离群值,也是高杠杆点。我们已经知道了如何判断离群值,那么如何定量判断一个点是不是高杠杆点呢?


对于单一线性模型中的自变量进行分析,我们也可以借助箱式图,就像上文中对因变量“销量”的分析一样。然而在文初我们所说的儿童座椅数据中,进行多重线性模型分析时(广告和定价对销量的影响),高杠杆点的判定,则需要全方位考虑多个自变量,这时,我们要引入一个概念叫做杠杆值(Leverage),英文符号为H。



杠杆值可以被看作是一组自变量的数值距离整个数据集平均值的偏差,偏差越大,杠杆值越大。而当某些数据点远远偏离其他点是,我们称之为“高杠杆点”,下图中标红。也有研究者认为,我们应该保守一些,只要杠杆值大于3倍平均杠杆值(红色虚线),就应该引起重视。


在R软件中,杠杆值可以用hatvalues()命令计算。

 


在这个数据集中,有7个数据点的杠杆值大于3倍平均杠杆值(红色虚线),其中,第43和311个观测的杠杆值明显大于其他数据点,可能对回归分析造成影响。我们也注意到,这个数据集中的高杠杆点和箱式图找出的离群值不重合。


03 强影响点


离群值和高杠杆点都可能对回归分析造成的影响,相比于离群值和高杠杆值本身,其实他们对分析造成的影响更值得我们关注。这些造成很大影响的数据点,被称为强影响点。我们依然用上面简单的Y~X的例子(自编数据)来理解强影响点。


(本图所用数据为自编数据)


前面我们通过这个小数据了解了离群值和高杠杆点的差别,那么这三个点中,哪个(些)点是强影响点呢?如果我们先用全部数据做一次线性回归(蓝色实线),再从数据中去除掉离群值/高杠杆点,重新做回归(红色虚线)。比较两次的回归曲线,我们会发现图A和C中的特异值并没有对回归造成很大的影响,而图B中,去除掉高杠杆值之后,回归曲线发生了非常大的变化,所以这个点很有可能是强影响点。


在实际研究中,譬如本文中儿童座椅的案例,可能涉及多个自变量,研究者们一般用下面两种方法定量分析高影响点。


方法一:DFFITS法 (Difference in fits)


在使用统计软件进行回归分析时,可以用自带的DFFITS模块进行模型的诊断。DFFITS值反映去掉了某一个数据值之后,新建立的模型对于其他点的拟合残差的大小变化情况。一般来说,当DFFITS大于/小于某个阈值的时候,则可以认为这是一个强影响点。


然而,在实际应用中,对于阈值的设定是相对主观的,不同的研究可能使用不同的阈值,只要特异值的DFFITS明显不同于其他数据点,就有可能被当作一个强影响点分析。


在R软件中,DFFITS值可以通过dffits()命令计算。在我们的儿童座椅案例中,DFFITS分布如下:



在这个模型中,点51和377的DIFFTS值在所有数据点的边缘,同时,注意到这两个点分别是通过学生化残差和箱式图找出的离群值,我们有理由怀疑这两个点是强影响点。


方法二:Cook距离


另一个定量分析影响大小的量叫做Cook距离(Cook’s Distance)。Cook距离直接总结了去除某一个数据点之后,其他样本拟合值的变化,相当于综合了残差和杠杆值的信息,很受欢迎。一个数据点的Cook距离越大,它对于整个回归模型的影响就越大,常用的判断标准如下:


  • 如果Cook距离大于0.5, 那么这个点就有可能是强影响点

  • 如果Cook距离大于1,那么这个点就非常有可能是强影响点,必须得到关注


实际应用中,也有研究者选择更为保守的方法,把所有极大或极小的Cook距离对应的数据都挑选出来,一一核实。


在R软件中,Cook距离可以通过cooks.distance()命令计算。

 


在儿童座椅的案例中, 上文通过DFFITS法找到的第51号观测值的Cook距离是最高的,同时,这个数据点在之前的学生化残差分析中也被认为是离群值。不过可以观察到,所有数据点的Cook距离都小于0.5。所以,可能数据中并不存在强影响点,这个回归分析还是很可靠的。


04 简单总结


特异值有很多种,本文介绍的三种特异值:


- 离群值:因变量Y的特异值

- 高杠杆点:自变量X的特异值

- 强影响点:对回归分析造成很大影响的特异值


一个数据点可能是以上的一种或多种特异值。


辨别特异值时,应当考虑上面这三种可能性。


相对于离群值和高杠杆点,强影响点对于数据分析的影响最大。


05 如何处理特异值?


“这些我都知道啦,然后怎么办??”



对于特异值,最大的问题就是如何处理它们。然而学术界对如何鉴别特异值,以及如何处理它们,并没有一个标准的操作。从本文也可以看出,鉴别特异值的方法多种多样,每种方法找出的特异值不一定相同。


不过对于大部分情况,在找出特异值之后,首先应该检查存不存在数据错误:


  • 如果是数据收集或者是录入的错误,尽量更正数据;

  • 如果只有个别的特异值,取值在目标群体中非常少见,可以考虑剔除数据;

  • 如果是由于测量错误等因素,可以考虑剔除数据。


虽然特异值的鉴别相对主观,但也不能简单地仅仅因为某些数据不契合模型,就剔除它们,还是应该有一个客观、合理的理由。所有剔除数据的方法和理由都应该报告在结果中。如果对于是否剔除某些强影响点感到犹豫,或者剔除前后结论有重大改变的情况,应该同时报告剔除数据前后两个结果,并且在文章中讨论可能的原因。


同时,也应考虑建立的模型是否合理:


  • 是不是漏掉了某些重要的自变量?

  • 是否应该考虑自变量的交互作用?

  • 是否应该考虑非线性模型?


参考文献:

1.<An Introduction to Statistical Learning> Chapter 3. (2015) Springer

2.https://onlinecourses.science.psu.edu/stat501/node/336



图文 |  医咖会

作者 |  吴丽雯

编辑 | 大蒜蒜


今日推荐公号

考博圈

考博成功经验的分享,

各种论文、学科干货不时发放,

揭秘考博中不常为人所知的事情

一个女博士留美的那七年,是一场关于人生的游历和冒险。

屡败屡战,最终相约清华园》

扫码关注可获取更多文章及考博经验指导



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存