统计方法的最终目的,是帮助我们定量地理解一组因素(自变量)如何影响我们关心的现象(因变量)。与自变量 x 类似,因变量 y 不仅可以是连续的数值,也可以是代表类别的离散值。 在研究体重和健康的关系时,我们如果将血压高低作为因变量,那么 y 就是连续的,而如果我们将是否得心脏病作为因变量,那么 y 就是分类变量(categorical variable)。
咱们之前学习的 t 检验,ANOVA,线性回归等方法,解决的问题都有一个共同点:因变量 y 是连续的。这些方法的不同之处主要在于自变量 x 的特点,t 检验中自变量只能取两个类别,比如科研中常用的对照组和实验组的比较就常常用到 t 检验。ANOVA 中自变量(也称为因素)就更灵活了,不仅可以包括多个自变量,每个自变量还可以有多个组别。到了线性回归模型,对于自变量就更加没有限制了,不管是连续的还是类别变量通通都可以丢进去,保准儿给你吐出个模型。
虽然线性回归模型在自变量的种类上面已经没有限制了,因变量只能是连续的数值却是一个很大的制约因素(后面会详细说)。这个制约有多大呢?实话说,很大——大到需要统计学家们再发明许多其它模型,专门来解决这个问题,因为在实际应用中,因变量是分类变量的情形太普遍了。
分类变量中最简单、也最常用的情形是二元变量(binary variable)。二元变量的预测在我们日常生活中比比皆是。很多人都有出门前查看一下天气预报的习惯,看看今天会不会下雨,这里下雨就是二元变量,因为只有下和不下两种情况。在健康领域,疾病的诊断需要综合各种测试的结果,给出病人是否患某疾病的结论。在商业领域,咱们在网上网购的时候,电商平台为了让我们多剁手,需要利用各种信息(如性别、年龄、地域、过往购物历史等)预测用户是否会点击某个商品链接。
既然二元变量作为因变量的情况如此普遍,而我们学过的招术又都不奏效,那么有什么统计模型可以帮助我们预测类别变量呢?那就是大名鼎鼎的逻辑回归模型(logistic regression)了。
逻辑回归模型模型的目的是预测概率
别看逻辑回归模型的名字有「逻辑」二字,其实这只是音译,跟逻辑并没有神马太大的关系。逻辑回归模型的输入是各种自变量的值,输出是因变量取某个特定值的概率。看到这里,你可能要抗议了,不是说好的要预测二元变量吗?怎么挂羊头卖狗肉,变成预测概率了呢?
大家读过我们对于线性回归模型的讨论,都会知道,由于数据的产生有随机性,我们无法完全精确地预测因变量的取值。在已知父母身高以及孩子性别的情况下,孩子的身高并不是一个固定的值,因此在线性回归模型里面,我们强调过,模型预测的是在给定自变量取值情况下,因变量 y 的平均值(可回顾《如果只能学习一种统计方法,我选择线性回归》)。 类似的,在预测二元变量的时候,我们预测的也是因变量取值的平均值。我们马上就会发现,预测二元变量的平均值和取某个特定值的概率是等价的。
为了实际应用的方便,我们可以用 y 取值 0 和 1 来代表二元变量对应的两种情况。这时预测二元变量的取值就变成预测 y 是等于 0 还是 1。如果把抛硬币时哪面朝上作为一个二元变量 y,我们可以用1代表正面,0 代表反面(当然反过来也是完全可以的)。
假设我们扔了 10 次硬币,8 次正面朝上,那么 y 的平均值是 (8×1 + 0×2) / 10 = 0.8,这正是 y = 1(正面朝上)的概率。也就是说,取值 0 或 1 的二元变量y的平均值与 y = 1 的概率是一回事。因此,逻辑回归模型预测二元变量y(用 0 或 1 表示)的平均值,也就是预测 y 取值为 1 的概率。
为什么线性回归模型不适合预测二元变量?
既然是预测 y 的平均值,能不能照搬之前学过的线性回归模型呢?如果非要生搬硬套,使用线性模型预测二元变量,在某些情况下,得到的结果可能与用逻辑回归模型也差不太远。但是,使用逻辑回归模型几乎总是会得到更合理的结果。
假如把分析数据比做烹饪,选择模型就像是选择厨具。线性模型有点像电饭锅,只要开伙做饭就都会用到,逻辑回归模型像炒锅,使用频率也很高。如果是炒菜,我们都会用炒锅 。在电饭锅里面烹小炒,虽然菜扔进去也能煮熟,指不定还能将就着吃,但是有炒锅的时候,咱们干嘛不用呢?
下面我们来细数为什么线性回归模型并不适合预测因变量是二元变量的情况。
首先,大家应该还记得,线性回归模型的其中一条理论假设,是模型预测值与真实之间的误差满足正态分布。这一条在 y 是二元变量的情况下很难得到满足。比方说,在自变量取某组数值的情况下,线性回归模型给出的预测值 y 是 0.6。由于因变量 y 是个二元变量,所以实际数据的 y 只能取 0 和 1。这样一来,预测值和真实值之间的误差要么是 -0.6,要么是 0.4,因此误差的分布只会是两根柱子,不可能形成像正态分布那样中间高、两头低的连续分布。
再者,线性模型的预测值取值范围不一定在 0 到 1 之间。既然模型是用来预测二元变量取特定值的概率,那么模型的输出就应该在 0 到 1 之间,如果模型输出的值大于 1 或者小于 0 则毫无意义。在线性模型里面,只要自变量能够任意取值,那么模型的预测值也可以是任意值。因此,使用线性模型预测二元变量便会导致预测值出现 0 到 1 之外的「非法」值。
最后,线性模型假设的y的平均值是各个因素的线性叠加,这一点往往并不符合实际。射击运动员可能需要几个月的训练能把打中十环的概率提高到百分之五十,如果线性模型成立,只要再花几个月的时间就能提高到百分之百的命中率。实际上,即使花费数年的训练也很难达到百分之百。如果我们把射中靶心当作一个二元变量 y,在 y = 1 的概率非常接近1 的时候,自变量 x(训练时间)通常需要变化很大才能进一步提高其概率。这是现实世界遵循的规律,好的数学模型应该能反映这一规律。
到底什么是逻辑回归模型?
上面说到的用线性回归模型预测二元变量的种种问题在使用了逻辑回归模型之后便会迎刃而解。说了这么多逻辑回归模型的厉害之处,下面我们就来看看它的庐山真面目。
其中 p 代表 y = 1 的概率,x 代表了不同的自变量,表示了误差项。与线性回归模型对比,等式右边完全相同,实际上逻辑回归模型也是广义上的线性模型。而等式的左边形式更复杂了,引入了一些非线性的变换。
等式左边的式子 log(p/(1-p)) 是对因变量 y 的一个转换,它有一个专门的名字,叫做「分对数」,在英语里面叫做 logit,由于英语发音的原因,所以就有了「逻辑回归模型」这么一个奇怪的名字。分对数与概率 p 有着一一对应关系,只要确定了分对数,便能计算出 y = 1 的概率,反之亦然。
引入了分对数以后,等式左边就可以取任意值,从而不会出现模型的预测值「不合法」的现象。分对数中,p 的取值在 0-1 之间,p/(1-p) 便可以取任意大于 0 的值。对它再取对数,得到的分对数便可以是任意的实数(如下图)。换句话说,不论丢进去的自变量取什么值,模型输出的概率 p 总是在 0-1 之间。
逻辑函数长什么样?左图是 p/(1-p) 的函数曲线,在赌博中,如果 p 代表输掉的概率,p/(1-p) 就是赔率(odds);对左图的曲线取对数后得到右图中逻辑函数的曲线。从右图中可以看到,在概率 p 大于 0.5 时,逻辑函数取正值,小于 0.5 时,逻辑函数取负值,当 p 接近与 0 或 1 这两个极端值时,逻辑函数变化很快,分别趋近于负无穷和正无穷。
不难想象,实现将概率 p 对应到整个实数范围的转换的方法有无穷多个,为什么利用分对数进行转换的逻辑回归模型被使用得最多呢?这还得说一点儿概率论的历史。
最早的概率理论是为了研究赌博而发明的。十七世纪的数学天才帕斯卡和费马为了解决赌博时赔率为多少比较公平,建立了概率论的基础。赌博中的赔率是指奖金应该是赌注的多少倍。当输掉的概率是 p 时, 就恰好是最公平的赔率(想想这是为什么?),即赌博的结果是不会赢钱也不会输钱,而将赔率取对数就能得到分对数。
说到底,概率、赔率、分对数三者都是对可能性的一种量化,就好像测量温度有摄氏度,华氏度和开尔文等不同的标准,但是这些描述的都是「温度」这一属性。赔率、分对数、概率这三者描述的也都是「可能性」这一属性,只不过具体在数值上的尺度不一样而已。
在实际应用中,相对于概率和赔率,分对数这种描述方法恰好与影响因变量取特定值可能性的因素之间有比较好的线性关系,而逻辑回归模型正好利用了这一规律,于是成为了预测二元变量最常用的模型形式。