※说人话的统计学※
读过上一集《线性模型生病了,你懂得怎样诊断吗?》后,大家已经见识了线性回归模型的几种常见「病」,包括:
因变量与自变量间关系不线性;
残差分布不正态;
残差呈异方差性;
自变量之间存在多重共线性。
对于这几种「病」,我们在上一集中已经讨论了它们的成因,以及如何对症下药,打造更健康、更可靠的线性模型。这些问题有个共同点,就是它们都是模型整体的某种毛病——之所以产生了这些问题,是因为线性回归模型有某些方面存在不合理的、与现实情况明显不符的地方。尽管多数时候我们只能在有了具体的数据以后才能意识到这些毛病的存在,但由于根源是在模型上,因而解决方法都是从改变模型本身入手,比如对变量进行变换、增加或减少某些变量,甚至换一种方法来拟合模型(如上集提到的加权最小二乘法)等等。
但还有一些情况,线性模型本身并没有毛病,然而数据有一些问题,从而拟合数据后得到的模型也被「传染」了。这时,我们就得使用另外的一些诊断方法,而解决方案也会变得更为微妙。今天,我们就一起来讨论一下这里头的常见问题。
离群值
我们先从一个例子讲起。假设我们想研究蓝精灵儿童时期身高随年龄的变化,最简单的办法,就是找到若干不同年龄的蓝精灵,记下它们的身高,然后就可以进行统计分析了。当然,我们知道与身高有关系的因素很多,但我们现在先把其它的影响因素放在一边,并且假设身高与年龄的关系是线性的。这时,我们就可以做个最简单的单变量线性回归分析。不出所料,从线性回归模型中,我们发现身高与年龄之间存在显著的正相关关系。为了展示这个结果,我们把所有数据点以及拟合得到的线性回归模型画在下面的图1中。
图1身高与年龄散点图。图中直线代表由此样本得到的单变量线性回归模型。
这样就万事大吉了吗?如果你仔细端详上面的散点图,你会发现一个问题:在右上角有一个年龄大约为9.5、身高大约为89的数据点,似乎和其它数据点有些格格不入。如果只看其余的数据点,它们指向的趋势与这个点似乎相差甚远。与此同时,由此样本得到的线性回归模型在年龄为9.5处的身高预测值(约为75左右)也比该数据点的实际值小很多——线性回归模型大大低估了这个数据点所代表的蓝精灵的身高,也就是说,模型在该点的残差很大。
对于这样残差很大的数据点,我们通常称之为「离群值」(outlier),也许大家还会见过其它书籍把这个词翻译成「异常值」,我们认为稍微笼统了一些,有失精确。既然残差很大,也就是说模型在此处的解释和预测能力很差。虽然也许只是这一个点有这样的情况,但我们对拟合出来的模型的信心难免就要打点折扣了。
这时我们应该怎么办?我们不妨先想想,这种情况是否属于上一集我们讲过的线性模型的几种常见病:
是因变量与自变量关系不线性吗?这种可能性很难完全排除,比如说也许身高和年龄之间有抛物线式的上升关系,但从其它点的分布来看,似乎不太像。
是残差的分布有问题吗?有了这个离群值,样本残差的正态性和同方差性固然会不太好,不过只有这个点有些奇葩,现在也很难下结论。
是自变量之间存在多重共线性吗?在当前的模型里,只有一个自变量,自然没有共线性的问题。而且如果我们检查回归系数的置信区间,也能确认回归系数并没有很大的不确定性。当然,我们不能排除,有其它我们尚未包括到模型中的自变量在起作用,但这种情况往往会影响至少一部分数据点,而导致样本整体与模型间的偏离,而不是单独一个。
因此,遇到这种情况,我们需要一点新思路。看到离群值,我们首先要做的是检查是否有数据录入错误、单位不一致之类的低级失误——别笑,老司机也不免会偶尔在这个坑里翻车。如果能排除这种可能,我们就得认真思考一下,对那个格格不入的数据点,到底是该凉拌,还是法办?
强影响点
我们试着这么想:既然已经排除了人为错误的可能性,这个数据点当然就不能随意丢弃或删除,因为它可能的确包含了真实有用的信息。与此同时,从现有的结果来看,这个离群值和样本中的其它数据点不太一样。如果的确如此,把它们放在一起分析是否合适?如果离群值是由随机因素产生的小概率事件,把它也包含在样本里,是否反而会阻碍我们发现真实的规律?
这时我们就可以尝试一下,样本中包含或者排除这个离群值,对拟合出来的模型有多大影响?因此,我们用离群值以外的数据点,重新拟合线性回归模型,并将得到的结果(蓝色直线)和此前的结果(黑色直线)同时画在下面的图2中。
图2 身高与年龄散点图。图中黑色直线代表由整个样本得到的单变量线性回归模型,蓝色直线代表去掉右上角的离群值(9.5,89)后重新拟合得到的线性回归模型。
容易看到,是否包含这个离群值,的确对线性模型产生了很大的影响。去掉离群值后,线性模型的斜率(即身高随年龄的变化率)小了不少。在这个假想的数据集中,包含离群值时斜率为2.46,而不包含离群值时的斜率仅为1.46。换言之,对于我们想要研究的问题——蓝精灵身高随年龄增长的变化大小——来说,两个模型虽然来自几乎一样的、仅仅差了一个数据点的样本,给出的答案却有这么大的区别!
我们分别在保留和去除离群值时拟合两个模型,当然不是要看哪个结果更合心意,就把哪个写在论文里(这可是绝对不行的!)。重点在于,我们可以通过这种方法来衡量一个数据点对线性模型的影响力(influence)。如果我们把刚才的方法推广到样本中所有的数据点,也就是说,对每个数据点,都分别在保留和去除该数据点时拟合一个线性模型,然后比较两者的差别,我们就可以衡量各数据点的影响力大小了。
在理想情况下,样本里不同数据点的影响力应该是相差无几的。这就意味着,数据点都反映了大体相近的某种规律(用正式的语言来说,就是该样本是「均质化」[homogenous]的),从而就对线性模型的贡献而言,彼此之间没有太大差别——也就是所谓的「没了谁地球都照样转」。但是,如果像前面的例子那样,一个数据点的加入,就能「敢教日月换新天」,让模型得出的结论大变样,那我们就得再仔细斟酌了。此时,这个数据点由于对结果有不成比例的影响,因此被称为「没了谁地球都照样转」(influentialpoint)。在没有进一步证据的情况下,我们当然很难直截了当地说哪个模型更「正确」,但至少存在明显的疑点。尤其是当两种情况会得出性质不同的结论(比如包含某数据点时,变量y与x之间有显著关系;而当去掉该数据点时,变量y与x之间不再有显著关系)时,我们就更需要小心了。
这个思路是对了,但还有一些技术问题要解决。
第一,像上面这样简单的只有1个自变量的例子,画图可以很有效地帮助我们找出潜在的离群值和强影响点,但因素一旦不止1个,这样的二维散点图就无法完整反映情况了。而且,靠肉眼看图难免有些主观。因此,我们需要一种更客观、更通用的判断方法。
第二,在某个数据点包含与否的两种情况下,线性模型怎样的变化算是足够大?对于一个特定的问题,我们固然可以直接比较回归系数的变化,但总归没有一个具体的界限——2.46和1.46差别看起来是挺大的,那如果是2.46和2呢?又或者2.46和2.3,这样的差别又算大吗?而且,我们知道回归系数的数值大小其实取决于因变量、自变量使用的单位。因此,光说回归系数变化多少,并不具有普遍性。
因此,统计学家们发明了一系列衡量单个数据点对线性回归模型结果影响大小的标准,包括Cook距离(Cook’sdistance,由美国统计学家R.DennisCook发明)、DfBeta、DfFits等统计量,其中Cook距离最为常用。它的定义实际上遵循了我们刚才讲过的思路,即比较在保留和舍去某一个数据点的情况下得到的两个线性模型中回归系数的差别,然后再进行标准化,使得Cook距离称为一把统一的尺子,其尺度不会因为变量本身的尺度变化而变化。因此,不同的研究、不同的数据集、不同的模型得到的Cook距离都是可以等量齐观的。
现在,绝大多数统计软件都可以在拟合线性模型时很方便地输出每个数据点对当前模型的Cook距离。我们把前面例子(包含离群值(9.5,89))的Cook距离绘成下面的图3.要注意,图3中的横轴是数据文件中各数据点的编号,并没有实际意义。
图3样本各数据点根据前述模型计算的Cook距离。
对于一个样本的Cook距离,我们首先要白癜风恢复北京去哪里医院治疗白癜风