「脱离群众」的数据点,是「春风化雨」还是「秋风扫落叶」丨协和八
※说人话的统计学※
读过上一集《线性模型生病了,你懂得怎样诊断吗?》后,大家已经见识了线性回归模型的几种常见「病」,包括:
因变量与自变量间关系不线性;
残差分布不正态;
残差呈异方差性;
自变量之间存在多重共线性。
对于这几种「病」,我们在上一集中已经讨论了它们的成因,以及如何对症下药,打造更健康、更可靠的线性模型。这些问题有个共同点,就是它们都是模型整体的某种毛病——之所以产生了这些问题,是因为线性回归模型有某些方面存在不合理的、与现实情况明显不符的地方。尽管多数时候我们只能在有了具体的数据以后才能意识到这些毛病的存在, 但由于根源是在模型上,因而解决方法都是从改变模型本身入手,比如对变量进行变换、增加或减少某些变量,甚至换一种方法来拟合模型(如上集提到的加权最小二乘法)等等。
但还有一些情况,线性模型本身并没有毛病,然而数据有一些问题,从而拟合数据后得到的模型也被「传染」了。这时,我们就得使用另外的一些诊断方法,而解决方案也会变得更为微妙。今天,我们就一起来讨论一下这里头的常见问题。
离群值
我们先从一个例子讲起。假设我们想研究蓝精灵儿童时期身高随年龄的变化,最简单的办法,就是找到若干不同年龄的蓝精灵,记下它们的身高,然后就可以进行统计分析了。当然,我们知道与身高有关系的因素很多,但我们现在先把其它的影响因素放在一边,并且假设身高与年龄的关系是线性的。这时,我们就可以做个最简单的单变量线性回归分析。不出所料,从线性回归模型中,我们发现身高与年龄之间存在显著的正相关关系。为了展示这个结果,我们把所有数据点以及拟合得到的线性回归模型画在下面的图1中。
图1 身高与年龄散点图。图中直线代表由此样本得到的单变量线性回归模型。
这样就万事大吉了吗?如果你仔细端详上面的散点图,你会发现一个问题:在右上角有一个年龄大约为9.5、身高大约为89的数据点,似乎和其它数据点有些格格不入。如果只看其余的数据点,它们指向的趋势与这个点似乎相差甚远。与此同时,由此样本得到的线性回归模型在年龄为9.5处的身高预测值(约为75左右)也比该数据点的实际值小很多——线性回归模型大大低估了这个数据点所代表的蓝精灵的身高,也就是说,模型在该点的残差很大。
对于这样残差很大的数据点,我们通常称之为「离群值」(outlier),也许大家还会见过其它书籍把这个词翻译成「异常值」,我们认为稍微笼统了一些,有失精确。既然残差很大,也就是说模型在此处的解释和预测能力很差。虽然也许只是这一个点有这样的情况,但我们对拟合出来的模型的信心难免就要打点折扣了。
这时我们应该怎么办?我们不妨先想想,这种情况是否属于上一集我们讲过的线性模型的几种常见病:
是因变量与自变量关系不线性吗?这种可能性很难完全排除,比如说也许身高和年龄之间有抛物线式的上升关系,但从其它点的分布来看,似乎不太像。
是残差的分布有问题吗?有了这个离群值,样本残差的正态性和同方差性固然会不太好,不过只有这个点有些奇葩,现在也很难下结论。
是自变量之间存在多重共线性吗?在当前的模型里,只有一个自变量,自然没有共线性的问题。而且如果我们检查回归系数的置信区间,也能确认回归系数并没有很大的不确定性。当然,我们不能排除,有其它我们尚未包括到模型中的自变量在起作用,但这种情况往往会影响至少一部分数据点,而导致样本整体与模型间的偏离,而不是单独一个。
因此,遇到这种情况,我们需要一点新思路。看到离群值,我们首先要做的是检查是否有数据录入错误、单位不一致之类的低级失误——别笑,老司机也不免会偶尔在这个坑里翻车。如果能排除这种可能,我们就得认真思考一下,对那个格格不入的数据点,到底是该凉拌,还是法办?
强影响点
我们试着这么想:既然已经排除了人为错误的可能性,这个数据点当然就不能随意丢弃或删除,因为它可能的确包含了真实有用的信息。与此同时,从现有的结果来看,这个离群值和样本中的其它数据点不太一样。如果的确如此,把它们放在一起分析是否合适?如果离群值是由随机因素产生的小概率事件,把它也包含在样本里,是否反而会阻碍我们发现真实的规律?
这时我们就可以尝试一下,样本中包含或者排除这个离群值,对拟合出来的模型有多大影响?因此,我们用离群值以外的数据点,重新拟合线性回归模型,并将得到的结果(蓝色直线)和此前的结果(黑色直线)同时画在下面的图2中。
图2 身高与年龄散点图。图中黑色直线代表由整个样本得到的单变量线性回归模型,蓝色直线代表去掉右上角的离群值(9.5,89)后重新拟合得到的线性回归模型。
容易看到,是否包含这个离群值,的确对线性模型产生了很大的影响。去掉离群值后,线性模型的斜率(即身高随年龄的变化率)小了不少。在这个假想的数据集中,包含离群值时斜率为2.46,而不包含离群值时的斜率仅为1.46。换言之,对于我们想要研究的问题——蓝精灵身高随年龄增长的变化大小——来说,两个模型虽然来自几乎一样的、仅仅差了一个数据点的样本,给出的答案却有这么大的区别!
我们分别在保留和去除离群值时拟合两个模型,当然不是要看哪个结果更合心意,就把哪个写在论文里(这可是绝对不行的!)。重点在于,我们可以通过这种方法来衡量一个数据点对线性模型的影响力(influence)。如果我们把刚才的方法推广到样本中所有的数据点,也就是说,对每个数据点,都分别在保留和去除该数据点时拟合一个线性模型,然后比较两者的差别,我们就可以衡量各数据点的影响力大小了。
在理想情况下,样本里不同数据点的影响力应该是相差无几的。这就意味着,数据点都反映了大体相近的某种规律(用正式的语言来说,就是该样本是「均质化」[homogenous]的),从而就对线性模型的贡献而言,彼此之间没有太大差别——也就是所谓的「没了谁地球都照样转」。但是,如果像前面的例子那样,一个数据点的加入,就能「敢教日月换新天」,让模型得出的结论大变样,那我们就得再仔细斟酌了。此时,这个数据点由于对结果有不成比例的影响,因此被称为「没了谁地球都照样转」(influential point)。在没有进一步证据的情况下,我们当然很难直截了当地说哪个模型更「正确」,但至少存在明显的疑点。尤其是当两种情况会得出性质不同的结论(比如包含某数据点时,变量y与x之间有显著关系;而当去掉该数据点时,变量y与x之间不再有显著关系)时,我们就更需要小心了。
这个思路是对了,但还有一些技术问题要解决。
第一,像上面这样简单的只有1个自变量的例子,画图可以很有效地帮助我们找出潜在的离群值和强影响点,但因素一旦不止1个,这样的二维散点图就无法完整反映情况了。而且,靠肉眼看图难免有些主观。因此,我们需要一种更客观、更通用的判断方法。
第二,在某个数据点包含与否的两种情况下,线性模型怎样的变化算是足够大?对于一个特定的问题,我们固然可以直接比较回归系数的变化,但总归没有一个具体的界限——2.46和1.46差别看起来是挺大的,那如果是2.46和2呢?又或者2.46和2.3,这样的差别又算大吗?而且,我们知道回归系数的数值大小其实取决于因变量、自变量使用的单位。因此,光说回归系数变化多少,并不具有普遍性。
因此,统计学家们发明了一系列衡量单个数据点对线性回归模型结果影响大小的标准,包括Cook距离(Cook’s distance,由美国统计学家R. Dennis Cook发明)、DfBeta、DfFits等统计量,其中Cook距离最为常用。它的定义实际上遵循了我们刚才讲过的思路,即比较在保留和舍去某一个数据点的情况下得到的两个线性模型中回归系数的差别,然后再进行标准化,使得Cook距离称为一把统一的尺子,其尺度不会因为变量本身的尺度变化而变化。因此,不同的研究、不同的数据集、不同的模型得到的Cook距离都是可以等量齐观的。
现在,绝大多数统计软件都可以在拟合线性模型时很方便地输出每个数据点对当前模型的Cook距离。我们把前面例子(包含离群值(9.5,89))的Cook距离绘成下面的图3.要注意,图3中的横轴是数据文件中各数据点的编号,并没有实际意义。
图3 样本各数据点根据前述模型计算的Cook距离。
对于一个样本的Cook距离,我们首先要关注的是其整体的分布。在理想的、均质化的样本里,Cook距离应该彼此相差不大,而且数值都很小。从图3中我们可以看到,绝大多数数据点的Cook距离都比较小,唯独第20号数据点(就是离群值(9.5,89))的Cook距离远远高于其它,超过了2。通过这一观察,我们就可以初步判断,这个离群值很可能是个强影响点,会给模型的结果带来潜在的偏差。另外,一些统计学家也提出了具体的界限(常用的有1或,其中n为样本量,k为线性模型中回归系数的数量,包括截距),当某数据点的Cook距离超过该界限时,就判定该点为强影响点。
离群值不一定是强影响点
回顾一下上面的例子,我们先通过简单的二维散点图发现了一个离群值(如果模型中包含多个因素,残差图是更好的寻找离群值的方法),从而引出了关于数据点对线性模型影响力的讨论,并且用Cook距离确认了该点的确是强影响点。这是否意味着离群值一定是强影响点呢?
答案是否定的。从定义上说,在线性回归中,离群值指的是残差较大的点,而强影响点则是以包含该点与否时线性模型变化大小所决定的。一般来说,强影响点往往是离群值,但离群值不一定是强影响点。我们不妨来看下面图4中的例子。
在这个例子里,我们的样本和之前的例子几乎完全一样(可与图1或图2比较),唯一的区别是,我们把离群值挪了个位置,从(9.5,89)移到了(5.5,89)。我们还是依葫芦画瓢,按照刚才的思路来考察这个离群值对线性模型的影响。比较图4左边部分中,包含和不包含离群值得到的两个模型,可以看到两者的斜率变化其实不大。也就是说,该离群值并没有对关于身高随年龄变化大小的关键推断产生很大的影响。考察Cook距离也可以得到相似的结论——离群值仍然记为20号,从右图可见,虽然该店的Cook距离仍然比其他各点要大,但比起前面例子的离群值要小得多。因此,这进一步佐证了,在这个例子里,离群值(5.5,89)对线性模型的影响不太强。
你一定会问,为什么会有这样的差别呢?比较两个例子我们会得到一点提示——这似乎与离群值的自变量(年龄x)值有关。事实的确如此,离群值是否会成为强影响点取决于它们在自变量空间中的位置。如果离群值在自变量范围的边缘(如前一个例子),它就很可能会是强影响点;如果离群值在自变量范围的内部(如后一个例子),它对模型的影响就会弱得多了。
样本里有强影响点,该怎么办
读到这里,我们已经明确了强影响点的性质,并且掌握了Cook距离这门鉴别利器。如果我们的样本里没有强影响点,自然皆大欢喜;如果发现了强影响点,这时该怎么办?
这时我们要记住的最重要的原则是:不能轻易去掉任何一个数据点!我们掌握的工具,只能就当前的模型和样本而言,判断是否有某个(或某些)数据点对模型结果有异乎寻常的大影响。至于背后的原因,以至于该数据点是否反映真实客观的规律,我们都一无所知。因此,贸然去除某个数据点(即便论文里报告这一情况),是非常不恰当的。
解决这个问题最好的方法,自然是收集更多的数据。如果是「真理掌握在少数人手中」,这个当前看似奇葩的强影响点其实更能反映现实,当我们有更多数据时,自然也会朝真相越走越近;如果这个强影响点仅仅是凑巧产生的,随着新的数据点的加入,它的影响也会渐渐被淡化。
当然,现实情况中,我们时常没有进一步收集数据的条件。这时,最好的做法就是在论文中清晰准确地报告对强影响点的判断方法,并且同时汇报包含/不包含强影响点的分析结果,从而使后来的读者能够更好地判断研究成果的意义和价值。
精选每日一题
更多精选题可回顾历史推送文末
女,64 岁。2 型糖尿病 10 年,口服降糖药治疗,近 2 个月出现头昏、视物模糊。查体:BP 170/100 mmHg,双肺呼吸音清,心界不大,肝脾未触及,双下肢水肿,空腹血糖 9.6 mmol/L,餐后血糖 14.2 mmol/L,血肌酐 96 μmol,尿蛋白定量 0.7 g/d。
题目来源:临床执业医师资格考试往届真题
本期主播:闲闲闲兔
点击下方标题可阅读本系列任意文章
干货
第 1 章 高屋建瓴看统计
第 2 章 算术平均数与正态分布
第 3 章 t 检验:两组平均数的比较
第 4 章 方差分析(ANOVA):多组平均数的比较
第 5 章 线性回归:统计建模初步
(未完,更新中)
自检
番外篇
作者:张之昊
质控:粉条儿菜
编辑:鹅不食草