自变量不止一个,线性回归该怎么做?| 协和八
说人话的统计学
在本系列前面几集里,我们为大家讲解了最简单的、只有一个自变量的线性回归模型,下面我们先来简单复习一下。
如果我们有一个因变量 y,考虑它与某个自变量(或者叫预测变量)x 的关系,如果我们选用了线性回归模型,就意味着我们认为
在《如果只能学习一种统计方法,我选择线性回归》里,我们讲过,β0 叫截距,意义就是在自变量 x 取 0 时,因变量 y 平均来说会取什么值;而 β1 是 x 这个自变量的回归系数(regression coefficient),描述了当 x 增加一个单位时,y 的平均值会变化多少。我们还强调了,线性回归模型本身并不涉及因果关系,我们所说的 y 随 x 的变化只描述了一种相关关系。
既然我们是要依靠这个模型来研究 x 和 y 之间的关系,回归系数自然是我们关注的重点。有了具体数据(也就是若干数据点( xi, yi ), i=1,2,..., n,n 为样本量),定下了这个模型,怎样找到(以及模型中的其它参数)?《回归线三千,我只取这一条》为大家介绍了极大似然估计的方法,可以为我们定下最符合数据的参数估计值(即「最小二乘解」),也就是它们各自符号上加顶帽子,记为
但是,光这么说,总归有些底气不足——我们对
比方说,我们发现
当然啦,咱们不能光说不练假把式对不对?就让我们回到此前的孩子身高与父母平均身高间关系的例子,来看一看上面这些招式都是怎么打的。
▣▣▣▣
在这个例子里,孩子身高是因变量 y,而他们父母两人身高的平均值是自变量 x。假设我们有了一组数据,在统计学软件里设定好本文开头的模型,得到了以下结果:
估计值 | t值 | p值 | 95%置信区间 | |
(截距) | 57.204 | 3.542 | 0.000896 | [24.73, 89.68] |
父母平均身高 | 0.415 | 4.160 | 0.000131 | [0.214, 0.615] |
我们该如何解读这个结果?首先我们来看截距和回归系数。根据实际数据,我们得到的模型(下图的蓝色直线)是:
子女身高 = 57.204 + 0.415 × 父母平均身高 + ε
我们说过,截距的含义是自变量 x 取 0 时,因变量 y 的平均值——只需把「父母平均身高=0」代入上式,就会得到
子女身高 = 57.204 + ε
由于误差 ε 服从均值为 0 的正态分布,所以此时子女身高的平均值就是 57.204。然而,身高这个量怎么可能是 0 呢?因此,在这个例子里,对截距的解读是没有太大意义的。
接下来,让我们把注意力放到父母平均身高的回归系数 0.415 上。它告诉我们,如果父母两人的平均身高增长 1 厘米,平均来讲,子女的身高就会增长 0.415 厘米。
这个结果验证了我们的常识:父母身高越高,子女的身高也就越高。
那么,从统计结果来看,这个正相关关系有多靠谱呢?或者说,统计学意义有多大?
这时,我们就要对「父母身高与子女身高之间没有线性相关关系」这个原假设(即 β1=0)做个检验。
从前面表格里我们看到,对这个原假设,p 值远小于 0.05。与此同时,
到这里,对于这个可以说是最简单的模型,我们才算是有了相对完整的思考链条。
但是,我们对线性回归模型的学习和应用才刚刚开始。
就拿这个例子来说,与子女身高有关系的因素太多了,除了父母的身高,还有性别、地域、民族、饮食、体育锻炼情况等等。之前我们在介绍 ANOVA 的时候,谈到过多因素 ANOVA,之所以有这样的方法,也是为了满足在数据分析中同时考虑多种因素与因变量之间关系的要求。
线性回归分析同样可以包含多个自变量,称为多重线性回归(multiple linear regression),而且我们以后还会看到,它比起多因素 ANOVA 在模型的灵活性、结果的解读上有明显的优势。
当然了,自变量一旦多起来,事情就没这么轻巧了。我们今天就从最简单的情况谈起。
▣▣▣▣
让我们来考虑一下,如果我们要同时考察父母平均身高和(子女的)性别这两个自变量与子女身高之间的关系,应该怎么做。
为什么说这是最简单的情况呢?因为性别不仅是个分类变量,而且还只有男、女两种情况,是个二分类变量(binary variable)。为了把分类也变成可以运算的数量,我们不妨把男、女分别记为 1 和 0(别的记法行不行?别着急,本文最后的部分会讨论这个问题)。
现在我们的第一个目标,就是建立模型,也就是说,把子女身高与性别、父母平均身高之间的数量关系以算式的形式确定下来,就好像本文开头子女身高与父母平均身高之间的模型一样。
这时候,我们就得问自己,性别和子女身高之间有什么关系?一个很简单的回答是,平均来说,两种性别的孩子身高会有些差别。更具体地讲,就是年龄相仿的男孩会比女孩高一些。这个回答很有用,但是还不够——既然我们要同时考虑性别和父母平均身高,我们就得想得再细一点儿:
①在性别一样的情况下,父母平均身高与子女身高的关系如何?
②在父母平均身高一样的情况下,性别与子女身高的关系如何?
既然说是从简单的情况开始,那么我们先这样假设:
①不论性别如何,子女身高随父母平均身高都是线性增长关系,而且增长率相同;
②不论父母平均身高如何,平均来说男孩和女孩身高的差别都不变。
你也许会问,你怎么知道你上面说的是对的呢?的确,上面的两个假设并不一定正确。幸运的是,数据分析不是一锤子买卖,我们只需大胆假设,小心求证——在下一集文章里,我们将会讨论如何验证这样的假设是否符合数据,如果不符合的话应该如何改进模型。
如果我们暂时接受上面①②两个假设,我们就能写出如下模型:
这里 x1 是父母两人的平均身高,x2 是性别,仍然用 1 和 0 分别表示男和女。和以前一样,β0 是截距,β1, β2 分别是父母平均身高和性别的回归系数,而 ε 是模型中的随机误差,服从均值为 0、方差为 σ2 的正态分布。
一看上面这个式子,或许你心里要嘀咕了:刚才何必那么啰嗦来这么一大段自问自答呢?直接说在之前的模型里加上一个表示性别的变量 x2 不就行了吗?
不错,从模型的形式上看,现在的模型无非只是比以前加了一项而已,但是它所包含的意义,要比「我们同时考虑了父母身高和孩子性别」来得更具体而精确。现在让我们来看看,我们建立的这个模型是如何对应了前面①②两条假设的。为了书写的简洁,下面我们省去误差项,因此也把=号改为~号。
①不论性别如何,子女身高与父母平均身高都是相同的线性增长关系:
当孩子是男性时,x2=1,模型变为
这是一条截距为 (β1+ β2)、斜率为 β1 的直线。
当孩子是女性时,x2=0,模型变为
这是一条截距为 β0、斜率为 β1 的直线。
也就是说,不论性别如何,子女身高 y 随着父母平均身高 x1 增长的速度都是 β1,因此男孩、女孩平均身高与父母身高的回归线是两条平行的直线。
②不论父母平均身高如何,平均来说男孩和女孩身高的差别都不变:
把上面两条式子相减,我们可以得到在父母平均身高相同时,男女孩平均身高的差异是
β2 是个固定的常数,换言之,不论父母平均身高 x1 是多少,根据这个模型,在给定某个具体的父母平均身高时,男女孩平均身高的差异都是 β2(这也是男女孩身高两条回归线互相平行所带来的必然结果)。
写到这里,相信大家已能了解到,y ~ β0 +β1* x1 + β2 * x2 这个模型所包含的对于因变量、自变量之间的数学关系。我们作为模型的使用者,一定要确保这个模型确实对应了我们想要回答的具体问题或者假说。现在有了各种统计学软件,要在模型里引进或者去掉一个自变量,只是几下按键或者修改一两行的程序事情,我们脑子里就更要把模型的数学意义掌握清楚,否则就是很容易南辕北辙。
如果研究假说或者相关理论要求我们考虑与这个模型不同的数学关系怎么办?别着急,以后的文章里,我们还会再为大家介绍其他形式的模型。
▣▣▣▣
明确了模型的意义,我们就可以把具体数据拟合到模型上,找出回归系数,并且对其做统计推断了。
虽然多了一个新的参数 β2,我们之前介绍过的极大似然估计和假设检验的方法仍然适用。下表是统计软件对这个新模型给出的结果(由于在性别这个变量中,我们把男性标记为 1,为了表达清晰,我们把这个变量称为“男性”):
估计值 | t值 | p值 | 95%置信区间 | |
(截距) | 57.349 | 4.521 | 4.16e-5 | [31.83, 82.87] |
父母平均身高 | 0.395 | 5.039 | 7.37e-6 | [0.237, 0.553] |
男性 | 6.357 | 5.550 | 1.28e-6 | [4.053, 8.661] |
把估计值填入模型里,我们会得到
子女身高 ~ 57.349 + 0.395 × 父母平均身高 + 6.357 × 男性
我们也可以向前面那样,在「男性」变量分别取 1 和 0 时,得到两条平行的回归线(如下图所示,男孩、女孩的数据点和相应回归线分别用蓝色和黑色绘出):
男孩身高 ~ 63.706 + 0.395 × 父母平均身高
女孩身高 ~ 57.349 + 0.395 × 父母平均身高
还和以前一样,我们来解读一下各个参数的含义。
首先我们来看截距,只有当父母平均身高和男性这两个变量都取 0 的时候,子女身高的平均值才会恒等于 57.349。也就是说,在这个模型里,截距的意义是,父母身高为 0 的女孩的平均身高。当然了,就和前面一样,由于身高不可能为 0,所以在这个例子里,截距没有太大的意义,但是值得记住的是普遍的结论——在多重线性回归中,截距的意义是所有自变量都取 0 时,因变量的平均值。
那么回归系数 β1 和 β2 呢?在之前只有一个自变量的模型 y ~ β0 +β1* x1 + β2 * x2 里,β1 的意义很简单,就是自变量 x 每增加一个单位时,因变量 y 的变化。现在,我们的模型里有了不止一个自变量,是否还能够这么说呢?这时我们要小心了,在多重线性回归里,回归系数仍然是因变量y随相应自变量的变化率,但是有一个额外的条件:在所有其它自变量保持不变的情况下。
要理解为什么,我们只需回到模型 y ~ β0 +β1* x1 + β2 * x2 本身,很容易看到只有当 x1 保持不变时,x2 增长一个单位才会使 y 发生 β2 的变化;反之亦然,只有当 x2 保持不变时,x1 增长一个单位才会使 y 发生 β1 的变化。可是,别看道理如此简单,解读多重线性回归的回归系数时,忘掉这个条件是很多人都会犯的错误——到时候可别说咱「说人话的统计学」没提醒过你哟!
进一步说,这其实也是多重线性回归的重要作用之一,就是把不同自变量对因变量的贡献「分解」开来。在我们这个例子里,子女性别和父母身高这两个变量本身就相对独立,这个作用可能还不是特别明显,但在很多科研课题中,多个自变量之间有很强的相关性,它们对因变量的贡献只靠单因素的分析方法很难研究清楚。这时,如果能把良好的实验设计与多重回归分析配合好,再加上足够的统计效能(通常靠较大的样本量来保证),就有可能把各自的效应做个拆分了。
回到我们的例子,父母平均身高的回归系数 0.395 意味着在性别不变的前提下,父母平均身高每提高 1 厘米,平均来说子女身高会提高 0.395 厘米。而「男性」变量回归系数 6.357 意味着在父母平均身高保持不变的前提下,男孩会比女孩平均高 6.357 厘米。这两个回归系数的 p 值都远小于 0.05,意味着这两个正相关关系都高度显著。
▣▣▣▣
在本文最后,我们来简单地说说,对于性别这个变量的数值表示方法。我们采取的办法是男性为 1,女性为 0。其实,我们如果要反过来女性为 1,男性为 0 也是没有任何问题的,得到的模型本质上还是同一个,只是形式不太一样:
子女身高 ~ 63.706 + 0.395 × 父母平均身高 - 6.357 × 女性
比较上一个模型,不难发现,由于现在的性别变量翻了个个儿,变成了「女性」,因此截距的意义就变成了父母身高为 0 时男孩的平均身高了(因为「女性」变量为0就是男性)。而「女性」变量的回归系数正好变成了原来「男性」回归系数的相反数——因为现在的模型里,「女性」的回归系数的意义是给定父母身高时女孩减男孩的平均身高了。
那如果男性为 1、女性为 2,甚或男性为-1,女性为 3.7 这样的奇葩表示方法行不行?从数学上说,也没什么不行,只不过此时截距和回归系数就变得不好解读了。因为截距是当所有自变量为 0 时因变量的平均值,如果性别变量里的 0 不属于任何一个类别,截距也就失去了具体的实际意义。
而回归系数是其他变量不变时,该自变量增加 1 个单位时因变量的变化。如果性别变量的两个分类之间相差不为 1,这个系数就不会正好是两性的因变量均值之差(给定其他变量不变),而会变成这个差值的某个倍数。所以,为了避免自找麻烦,我们通常对二分类变量作 0/1 处理,定为 0 的那个分类就变成「参考类别」(reference category)——因为回归系数是另一个类别减去这个参考分类的因变量平均值之差。
在统计学软件里,这也是一个需要小心的问题。我们一般有两种处理方法:
☑如果我们用字符来表示类别,比如「男」「女」「M」「F」之类,多数软件会自动在后台转换成 0/1 变量,并且选定其中一个做参考类别(也可以自己选定)。这时,我们只需要在阅读结果输出时,注意弄清楚谁是参考类别,然后作相应的解读就行。
☑如果我们的数据集里是用数值来表示类别的,这时候要尤其注意——正如上面讨论的那样,最好用 0/1 编码,这样能为结果的解读带来最大的便利。如果现成的数据用了其它数值(比如说 1 和 2),我们可以自己重新编辑成 0/1,也可以在统计学软件中设定该变量按分类变量处理,这时就回到和用字符表示的处理方法一样了。
1
END
1
回复「统计学」可查看「说人话的统计学」系列合辑,
或点击下方标题可阅读本系列任意文章
干货
第1章 高屋建瓴看统计
第2章 算术平均数与正态分布
第3章 t检验:两组平均数的比较
第4章 方差分析(ANOVA):多组平均数的比较
第5章 线性回归:统计建模初步
(未完,更新中)
自检
番外篇
精选每日一题
更多精选题可回顾历史推送文末
题目来源:临床执业医师资格考试往届真题
本期主播:铩羽
作者:张之昊
编辑:黑草乌叶