查看原文
其他

线性模型生病了,你懂得怎样诊断吗?| 协和八

2017-08-11 田菊 协和八

※说人话的统计学※

我们前面讲了如何拟合线性模型,以及用 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 的增加而增加

实际上,异方差性对于线性模型并不是一个致命的打击,用普通的线性模型估计出来的回归系数与实际情况也不会差太多,只是回归系数的方差会被放大。这时如果使用加权最小二乘法(weighted least squares),给误差大的数据点相对小一点的权重,则会得到比用普通最小二乘法更准确的对于回归系数的估计。

做了上面这些检验,线性模型的一些基本前提就可以保证了。但是这并不代表得到的结论就一定靠谱。如果构建线性模型的主要目的是统计推断,直白点说就是研究自变量的回归系数是否有统计显著性,那么我们的模型还得满足一个比较隐性的条件,那就是自变量之间要尽量相互独立。

自变量之间相互独立吗?

为了弄明白为什么要避免自变量不独立,我们从一个极端的例子看起。假设我们在一群五年级的蓝精灵小朋友里面研究性别对身高的影响,测量了 10 个男孩和 10 个女孩的身高。通过建立一个简单的线性模型,我们得到

当数据来自男孩时,「男孩」自变量对应的数值等于 1,否则为 0。如果你对线性模型比较熟悉,会发现上面这个模型其实很简单,翻译成人话就是说女孩平均身高是 50cm,男孩平均身高是 60cm。

假如分析数据的同学还是新手,没有想明白性别只要用一个变量就行了,在模型里面同时加入了男孩和女孩两个变量:

上面模型中男孩和女孩这两个自变量总有一个是 1,另一个是 0,那么这两个变量就是完全互相依赖的,因为其中一个变量的值完全决定了另一个变量,或者说知道其中一个变量的值,另一个变量也就知道了。

这时候如果我们直接拟合上面的模型会发生什么呢? 统计软件很有可能无法计算出回归系数,因为满足最大似然的参数有无穷多个。下面我们来具体看看为什么:

当数据来自男孩时,y 的最大似然估计就是男孩的平均身高,数据来自女孩时,y 的最大似然估计就是女孩身高,所以满足最大似然条件的回归系数应该满足下面的方程组:

我们知道两个方程是无法确定三个变量的值的,只要满足

的回归系数都可以是上面方程的解,于是无法确定回归系数的具体数值。从这里我们可以看出,包括完全互相依赖的两个自变量会导致无法确定这两个变量回归系数的具体值。

实际应用中遇到的情形一般没有上面的例子那么极端,比如上海八月第一周的平均气温和八月整月的平均气温就有很强的相关性,但又不是百分之百相关,因为仅仅知道第一周的气温还不能完全确定整月的平均气温。

由于相关性不是百分之百,如果我们将本周的平均气温和本月的平均气温同时作为自变量放到模型里面,统计软件还是可以计算出每个变量的回归系数,但是在做统计推断的时候,对回归系数估计的不确定性会很大,具体表现为计算出的回归系数的方差会比只包含一个变量的时候大很多。 

为什么有两个相关性很高的自变量的时候,每个自变量的回归系数会变得不确定呢?线性模型的本质就是用自变量 x 的变化来解释预测值 y 的变化,而如果 y 的变化既能够被自变量 x1,也能够被自变量 x2 的变化所解释,那么模型就不知道这帐算在谁的头上,于是这两个高度相关的自变量的回归系数的不确定性就都增加了。

说了这么多,为什么我们不希望包含高度相关的两个自变量在模型里面呢?因为这有可能导致我们对模型拟合结果的误解,也许自变量 x 的回归系数本来是显著不等于 0 的,因为加入了另外一个与其高度相关的自变量,自变量 x 的回归系数可能就变得不显著了,导致我们错误的认为自变量 x 与预测值 y 没有显著的线性关系。 

如何在构建模型的过程中确保自变量之间保持相对独立性呢?这个早就有现成的统计方法来解决了: VIF(variance inflation factor,方差膨胀因子)是专门来帮助检测自变量之间是否相对独立的。一般在构建有多个自变量的线性模型时,统计学软件会计算每个自变量的 VIF,  VIF 越大,说明这个自变量与其它的自变量相关性越高。

VIF 之所以叫做方差膨胀因子,是因为它反映了:自变量 x 的回归系数的方差,因为该自变量与其它自变量的相关性,而放大了多少倍。

听起来好像很高深的 VIF 其背后的原理并不复杂:如果知道其它自变量的值就能够很好地解释自变量 x1 的变化,那说明 x1 与其它自变量独立性很低,对应的 VIF 应该很高。前两节讲到的 R2 恰好可以用来衡量自变量 x1 能不能很好地被其它自变量解释。我们只需要将 x1 作为因变量,将其余的自变量当作预测变量,重新构建一个线性模型:

*注意这个模型里面的与 y 作为因变量的模型中的 β 没有任何关系

我们计算出上面模型对应的 R2,把它记为 R2x1,X1 对应的 VIF 表达式为:

x1 与其他自变量越不独立,上面的 R2x1 就越接近 1,则分母越小,VIF 越大。一般如果有自变量的 VIF 大于 10 就说明这个自变量与其它自变量的相关性太高,此时,这个变量对预测 y 值也不会有多少额外的帮助,可以考虑在模型中舍弃一些变量,当然具体选择哪些变量留下来还要根据具体情况,结合模型选择的一些标准来定。

这一集我们讲的模型诊断方法主要是来看线性模型本身的一些假设是否得到满足。有的时候,即使我们的模型已经很合理,但是由于数据本身存在一些异常,也会给拟合的结果带来负面影响,要想知道如何对付异常数据点,敬请关注下期内容 🙂

五年执医 三年模拟

精选每日一题

更多精选题可回顾历史推送文末

题目来源:临床执业医师资格考试往届真题

本期主播:铩羽


点击下方标题可阅读本系列任意文章

干货

第 1 章  高屋建瓴看统计

你真的懂p值吗?

做统计,多少数据才算够?(上)

做统计,多少数据才算够?(下)

提升统计功效,让评审心服口服!

你的科研成果都是真的吗?

见识数据分析的「独孤九剑」

贝叶斯vs频率派:武功到底哪家强?


第 2 章  算术平均数与正态分布

数据到手了,第一件事先干啥?

算术平均数:简单背后有乾坤

正态分布到底是怎么来的?


第 3 章  t 检验:两组平均数的比较

想玩转t检验?你得从这一篇看起

就是要实用!t 检验的七十二变

不是正态分布,t 检验还能用吗?

只有15个标本,也能指望 t 检验吗?

样本分布不正态?数据变换来救场!

数据变换的万能钥匙:Box-Cox变换

t 检验用不了?别慌,还有神奇的非参数检验

只讲 p 值,不讲效应大小,都是耍流氓!

找出 t 检验的效应大小,对耍流氓 say no!

用置信区间,就是这么(不)自信!

如何确定 t 检验的置信区间

优雅秀出你的 t 检验,提升Paper逼格!

要做 t 检验,这两口毒奶可喝不得!


第 4 章  方差分析(ANOVA):多组平均数的比较

要比较三组数据,t 检验还能用吗?

ANOVA在手,多组比较不犯愁

ANOVA的基本招式你掌握了吗?

ANOVA做出了显著性?事儿还没完呢!

听说,成对t检验还有ANOVA进阶版?

重复测量ANOVA:你要知道的事儿都在这里啦

没听说过多因素 ANOVA ?那你就可就 OUT 了!

多因素ANOVA=好几个单因素ANOVA?可没这么简单!

两个因素相互影响,ANOVA结果该如何判读?

ANOVA还能搞三四五因素?等等,我头有点儿晕

要做ANOVA,样本量多大才够用


第 5 章  线性回归:统计建模初步

车模航模你玩过,统计学模型你会玩吗?

如果只能学习一种统计方法,我选择线性回归

回归线三千,我只取这一条

三千回归线里选中了你,你靠谱吗?

自变量不止一个,线性回归该怎么做?

找出「交互效应」,让线性模型更万能

天啦噜!没考虑到混杂因素,后果会这么严重?

回归系数不显著?也许是打开方式不对!

评价线性模型,R平方是个好裁判吗?

如果R平方是砒霜,本文教你三种解药!

(未完,更新中)


自检

妈妈说答对的童鞋才能中奖

统计学的十个误区,你答对了吗?


番外篇

说人话的统计学:一份迟来的邀请

作者:田菊

编辑:猕猴桃皮 黑草乌叶

质控:小二仙草

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

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