※说人话的统计学※
我们前面讲了如何拟合线性模型,以及用R平方和其他标准来比较不同线性模型的优劣。我们所说的模型的「优劣」,讲的是模型与数据吻合程度如何,以及更进一步看模型是否能够对新的数据具备良好的预测能力。要对若干模型作这样的比较,其实有个前提:候选的模型们本身都是合格的、「健康」的模型。
就好像你为了准备一场求职面试,来到专卖店置办一套西服,在进试衣间之前,你总得看看衣服有没有破损或者污渍,甚至说衣服到底是不是西服(而不是滑雪服、游泳衣)、性别对不对,是吧?只有手上的衣服满足了这些基本要求,才有进一步评判合不合身、好不好看的需要。
今天,我们就退一步来回顾一下线性模型要满足哪些基本要求,以及如何诊断线性模型可能存在的毛病——只有通过了这些检查,模型得到的结论才有进一步考虑的价值。
数据用对了吗?
与其它统计方法一样,线性回归的最重要的前提条件,是要保证模型使用的数据要与试图解决的问题相一致。这有两个方面:1)保证重要的自变量(预测变量)没有被遗漏。这个我们之前在《天啦噜!没考虑到混杂因素,后果会这么严重?》有详细讲过原因。2)因变量(预测值)真正反映了你想研究的问题。这听上去好像很简单,下面我们就看个例子:
你想研究是不是皮肤越蓝的蓝精灵们就跑步越快,你发现下课铃响后,蓝精灵们都会往食堂跑,为了省事,你打算直接用蓝精灵跑到食堂的速度作为跑步快慢的测量值y。但是,可能往食堂跑得快的只是吃货蓝精灵,并不是真正跑步速度快的蓝精灵。由于测量值并不能完全与研究的问题一致,无论用什么分析方法,都无法准确地研究皮肤颜色和跑步快慢直接的关系。
看到这里,你也许会觉得,这种低级错误我怎么会犯呢?但是在实际的科研中,由于客观条件的限制,往往不是想测量什么就能测量什么,经常需要用一些近似的变量来研究我们真正关心的问题。这时,我们就要警惕这些近似是否合理,而且要在设计实验时就仔细考虑,因为一旦数据已经采集完毕后才意识到问题,后面再多的分析都很难补救这样的硬伤。从发表论文的实际需要来说,自己能提早发现问题总比被文章的审稿人抓出错误要好。
等拿到了数据、拟合好模型以后,我们往往会迫不及待地先看哪些变量有显著性。《说人话的统计学》读者们,且慢且慢,咱还得先看看数据是否满足线性模型的理论假设。
线性模型的理论假设适用吗?
要使用线性模型,有一个大前提是因变量和自变量之间的关系确实是线性的,即因变量y能够表达为下面的形式:
怎么知道y与x之间的关系是不是线性的呢?最直接的办法就是用x-y散点图来观察了,如果散点图中,x与y基本在一条直线上,就说明两者的关系是线性的(如下图左),否则就不是线性的(下图右):
那如果不是线性的情况该怎么办呢?在讲t检验学到的数据变换这里就可以被借鉴一下,详细的解读见《样本分布不正态?数据变换来救场!》。在线性回归模型里面,我们可以通过加入x2,log(x)等作为新的自变量,来拟合那些线性关系以外的关系。
除了线性假设之外,在《如果只能学习一种统计方法,我选择线性回归》里面讲过,线性模型将凡是模型不能拟合的部分都是算在一个误差项里面,并且假设误差项以零为中心呈正态分布,且误差是完全随机的,与自变量x无关。正是基于这些假设,我们才能找到线性模型的最大似然解。
模型拟合好之后,我们可以计算y的实际值与y的模型预测值之差,也叫做残差(residual),残差可以看作误差的测量值。检查残差的分布能够有效的检验线性模型中关于误差的前提是否满足。
首先我们可以看看残差是否符合正态分布这个条件,但是与t检验类似,在样本量比较大的时候(比如几十以上),其实正态性对线性模型而言并不是很重要。对线性模型质量影响更大的反而是残差是否满足与自变量不相关这一条件,而残差图正是为了达到这一目的而产生的。
残差图也是散点图的一种,只不过y轴对应的变量是残差,而x轴可以是某一个自变量,也可以是模型对应的预测值。
下面我们从两个例子来残差图是如何帮助诊断模型的。下图左是残差的分布并不随自变量x的变化而变化,这说明模型的误差完全是随机的,而下图右残差的平均值是抛物线状的,这说明因变量y与自变量的关系不完全是线性的,如果在模型里面加入x2作为新的自变量,这部分残差很有可能被x2所拟合。
残差图还有一种情况是残差的平均值并不随着x的变化而变化,但是残差的方差随着x的变化而变化,这种情况也叫做异方差性(heteroscedasticity)。在下图的例子里面,残差的平均值一直都在0附近,但是当自变量x越大,残差在y轴上的分布越分散,说明残差的方差随着自变量的增加而增加。这对于线性模型也不是一个好兆头,因为线性模型是假设误差项的方差是一个常数,并不随x的变化而变化。
残差呈异方差性的一个例子,参数的方差随着x的增加而增加
实际上,异方差性对于线性模型并不是一个致命的打击,用普通的线性模型估计出来的回归系数与实际情况也不会差太多,只是回归系数的方差会被放大。这时如果使用加权最小二乘法(weightedleastsquares),给误差大的数据点相对小一点的权重,则会得到比用普通最小二乘法更准确的对于回归系数的估计。
做了上面这些检验,线性模型的一些基本前提就可以保证了。但是这并不代表得到的结论就一定靠谱。如果构建线性模型的主要目的是统计推断,直白点说就是研究自变量的回归系数是否有统计显著性,那么我们的模型还得满足一个比较隐性的条件,那就是自变量之间要尽量相互独立。
自变量之间相互独立吗?
为了弄明白为什么要避免自变量不独立,我们从一个极端的例子看起。假设我们在一群五年级的蓝精灵小朋友里面研究性别对身高的影响,测量了10个男孩和10个女孩的身高。通过建立一个简单的线性模型,我们得到
当数据来自男孩时,「男孩」自变量对应的数值等于1,否则为0。如果你对线性模型比较熟悉,会发现上面这个模型其实很简单,翻译成人话就是说女孩平均身高是50cm,男孩平均身高是60cm。
假如分析数据的同学还是新手,没有想明白性别只要用一个变量就行了,在模型里面同时加入了男孩和女孩两个变量:
上面模型中男孩和女孩这两个自变量总有一个是1,另一个是0,那么这两个变量就是完全互相依赖的,因为其中一个变量的值完全决定了另一个变量,或者说知道其中一个变量的值,另一个变量也就知道了。
这时候如果我们直接拟合上面的模型会发生什么呢?统计软件很有可能无法计算出回归系数,因为满足最大似然的参数有无穷多个。下面我们来具体看看为什么:
当数据来自男孩时,y的最大似然估计就是男孩的平均身高,数据来自女孩时,y的最大似然估计就是女孩身高,所以满足最大似然条件的回归系数应该满足下面的方程组:
我们知道两个方程是无法确定三个变量的值的,只要满足
的回归系数都可以是上面方程的解,于是无法确定回归系数的具体数值。从这里我们可以看出,包括完全互相依赖的两个自变量会导致无法确定这两个变量回归系数的具体值。
实际应用中遇到的情形一般没有上面的例子那么极端,比如上海八月第一周的平均气温和八月整月的平均气温就有很强的相关性,但又不是百分之百相关,因为仅仅知道第一周的气温还不能完全确定整月的平均气温。
由于相关性不是百分之百,如果我们将本周的平均气温和本月的平均气温同时作为自变量放到模型里面,统计软件还是可以计算出每个变量的回归系数,但是在做统计推断的时候,对回归系数估计的不确定性会很大,具体表现为计算出的回归系数的方差会比只包含一个变量的时候大很多。
为什么有两个相关性很高的自变量的时候,每个自变量的回归系数会变得不确定呢?线性模型的本质就是用自变量x的变化来解释预测值y的变化,而如果y的变化既能够被自变量x1,也能够被自变量x2的变化所解释,那么模型就不知道这帐算在谁的头上,于是这两个高度相关的自变量的回归系数的不确定性就都增加了。
说了这么多,为什么我们不希望包含高度相关的两个自变量在模型里面呢?因为这有可能导致我们对模型拟合结果的误解,也许自变量x的回归系数本来是显著不等于0的,因为加入了另外一个与其高度相关的自变量,自变量x的回归系数可能就变得不显著了,导致我们错误的认为自变量x与预测值y没有显著的线性关系。
如何在构建模型的过程中确保自变量之间保持相对独立性呢?这个早就有现成的统计方法来解决了:VIF(varianceinflationfactor,方差膨胀因子)是专门来帮助检测自变量之间是否相对独立的。一般在构建有多个自变量的线性模型时,统计学软件会计算每个自变量的VIF,VIF越大,说明这个自变量与其它的自变量相关性越高。
VIF之所以叫做方差膨胀因子,是因为它反映了:自变量x的回归系数的方差,因为该自变量与其它自变量的相关性,而放大了多少倍。
听起来好像很高深的VIF其背后的原理并不复杂:如果知道其它自变量的值就能够很好地解释自变量x1的变化,那说明x1与其它自变量独立性很低,对应的VIF应该很高。前两节讲到的R2恰好可以用来衡量自变量x1能不能很好地被其它自变量解释。我们只需要将x1作为因变量,将其余的自变量当作预测变量,重新构建一个线性模型:
*注意这个模型里面的与y作为因变量的模型中的β没有任何关系
我们计算出上面模型对应的R2,把它记为R2x1,X1对应的VIF表达式为:
x1与其他自变量越不独立,上面的R2x1就越接近1,则分母越小,VIF越大。一般如果有自变量的VIF大于10就说明这个自变量与其它自变量的相关性太高,此时,这个变量对预测y值也不会有多少额外的帮助,可以考虑在模型中舍弃一些变量,当然具体选择哪些变量留下来还要根据具体情况,结合模型选择的一些标准来定。
这一集我们讲的模型诊断方法主要是来看线性模型本身的一些假设是否得到满足。有的时候,即使我们的模型已经很合理,但是由于数据本身存在一些异常,也会给拟合的结果带来负面影响,要想知道如何对付异常数据点,敬请