湖南辣鱼美食研发组

鱼与熊掌可以兼得——线性回归函数的复杂自变量

克里克学苑2018-12-05 10:38:18

前言

Hello 小伙伴们,上期的秤砣原理大家看的过不过瘾呀,回家有没有自己操练一下啊?称称你的心——线性回归原理与R中应用。今天我们要接着讲讲更复杂的线性函数构建方法与R中解析啦,小伙伴们快快搬小板凳来听呀!

 

俗话说,鱼,我所欲也;熊掌,亦我所欲也 。刚刚过去的春节是不是正验证了这句话啊 ?小伙伴们是不是看这个想买,看那个也想买,购物车左一件右一件,过了一礼拜回头看账单简直想剁手啊有没有?

 

唉,虽然我们的钱包不能允许我们鱼呀熊掌呀(耳机呀键盘呀背包呀包包呀化妆品呀)一起都拿下,但是神奇的R可以呀!


今天我们就来看一看线性回归里鱼与熊掌可以兼得的特殊情况:包含复杂自变量的线性回归函数。


一 鱼,我所欲也

各位小伙伴如果仔细读过上一期的文章,就会发现我们举例子的时候,选取的都是“纯数字”式的数据。

 

回忆不起来也没有关系(给我10秒抹一下眼泪),我们这里回顾一下上一期文章中举的例子:

图片一:(上)单一元素线性回归函数总结;(下)多元素线性回归函数总结


这两个例子中,speed 和x1,x2,x3都是数字,如果不进行线性回归拟合的话,我们可以对它们进行任意的运算(比如基础四则运算等)。线性回归拟合得到的结果(estimate)和这些元素可以组成回归函数,对因变量(dist和y2)进行预测。请大家注意,这里的预测指的是数值上的预测。

 

自变量全部是“数字式”数据时线性函数非常容易理解,我们可以自动带入学校里学的多元一次方程,就能明白截距和解释因子的意义。

 

那么在工作中,经常出现非数字式的数据,这种情况如果我们要探索线性关系,要怎么做呢?


二 熊掌,亦我所欲也

在R中,非数字式的数据通常指“字符”数据。比如说:最简易分组-男性(male)、女性(female);头发颜色—黑色(black)、金色(blonde)和棕色(brown);体重分组-高(high)、中(middle)、低(low)等。

 

这些数据本身是不能进行运算的(基础四则运算等),然而在工作中,我们有时也需要判断它们和因变量之间的关系,那么这种情况需要我们怎么做呢?

 

我们先来看一个比较简单的情况:性别(male,female)与某一因素之间(y)的关系,首先我们定义基本数据内容,性别(gender)为“字符”数据,y为“数字数据”。

图片二:定义基本数据


接下来我们对这一数据进行线性函数拟合,并且用summary()命令查看拟合结果。

图片三 简单分组数据的线性回归拟合结果


我们可以看到,整个结果的格式与“数字式”数据拟合出的结果格式完全相同。请大家注意第三部分coefficients中,第一行intercept和之前一样,第二行行名为gendermale。

 

咦,是不是缺了点什么?

 

之前我们定义数据内容时,性别(gender)有两组:男性(male)和女性(female),为什么结果里只体现出一组呢?

 

敲黑板!!小伙伴们注意,重点来了,在R中,当自变量是“字符”数据时,默认会有一组数据(例子中为female组)被选为“基准组”,又称对照组,这个自变量中同一元素(例子中为gender元素)中其它组别(male)都和这一组做对比。

 

为什么会有这样一个“默认操作”呢?那就要从数字数据和字符数据的根本区别开始说起了。


小伙伴们先回忆一下上一期文章中的数据哈(图片一),在图片一的例子中,整个分析的逻辑是什么样子的?应该是,当我知道speed是某个数值时,可以预测(模拟)出dist值时多少,并且,speed的取值是任意的。

 

重点就在“任意的”这三个字上,在数据样本中,speed的取值为4,7,8,9等。如果我们经过分析,确定speed和dist之间存在线性关系,那么我们随意给出一个speed数值,比如21,37,都可以得到相应的dist值。

 

那么对于“字符数据”式的自变量来说,这个“任意性”还存不存在了呢?

不存在了呀小伙伴们!!


拿我们的例子来说,例子中gender这个元素内含两组:male,female,新数据的gender元素也必须是这两者之一才能放入函数之中,假如某项新数据的gender元素恰好超出了原有数据的范畴,那么它是不能应用在已有的函数上的。

 

比如说呀,假如这里有一小撮新数据,它们的收集标准与时间和原有数据相同,其中有某一项gender元素为not sure (或者是unknown什么的,拿gender举例子我也实在是跪了 ),那么这一项数据是不能用我们这一次求得的线性函数来算y值的。

 

我们通过具体例子把两种数据的区别讲清楚了,下面还是要看一下,在数学原理上它们有什么不同。

 

首先,我们要回顾一下线性回归的本质:

公式一 经典线性回归模型


数字数据的应用与经典模型完全契合,如果我们将图片一中的例子带入,那么模拟出的线性回归模型为:

公式二 通过示例1模拟线性回归模型

 

我们之前提到的,数字数据的任意性就是指,对于新数据,可以将任意speed值带入公式,影响因子不变,从而求得新的dist。


ifspeed new = 33 , 

公式三 示例1中新数据在线性回归模型中的应用


字符数据的应用就与经典模型有区别了,如果我们将之前的例子(gender数据)带入,那么模拟出的线性回归模型为:

公式四 通过示例2模拟线性回归模型


这里涉及到字符数据一个非常有趣的特征:排他性。什么意思呢?male和female能同时出现吗? 不能。换句话说,gender元素的male组和female组能同时出现吗?不能。


总结一下:字符数据中一项元素的任意两个“组别”不能在同一数据样本中同时出现,又称为字符数据的“排他性”。

 

由于排他性的存在,当字符数据有且只有两组时(gender只有male和female两组),R是这么处理的: 选择一组为对照组(reference),对照组被认为是0,另一组被认为是1,函数可以写成:

公式五 字符数据只有两组时的线性回归模型


在此例子中,male=1, female=0;具体而言,当我们拿到某个样本,如果这个样本的gender元素为male,那么它的y值为:

公式六 样本性别为男性时因变量算法


同理,如果样本gender元素为female,那么样本的y值为?(intercept)。

 

这种算法又称为虚拟编码(dummy code),它解决了组别之间的区分问题,同时令计算过程简单明了——相信小伙伴们在看到之前的代码时都犹豫过为什么“纯字符”的数据居然也能得出数字结论吧,奥妙就在虚拟编码的0-1赋值上。

 

好,相信到这里小伙伴们都明白了在字符数据有且仅有两组时R中线性回归的拟合方法,也了解了虚拟编码这一神奇的方法。下面我们就要来说一说,当字符数据有很多组时,我们在R中要怎么做。

 

首先,我们新建一些数据,这次我们使用头发颜色(hair)的数据。头发颜色(hair)有三种:黑色(black)、棕色(brown)、金色(blonde)。因变量依然是y。我们看一下数据的情况:

图片四 头发颜色数据展示


在这个新的例子中,自变量依然只有一项(hair)并且是字符数据,因变量依然为y。这时我们要怎么进行虚拟编码呢?当自变量只有两组时可以0-1编码,现在有三种了,难不成要编成0、1和-1吗?

 

不是这样啦,我们不需要-1的出现,计算过程中也只有0、1两种情况。在这里呢,R是这样操作的,把自变量按“具体的分组”分成不同的“新自变量”,再对新自变量进行0-1虚拟编码。

 

比如说在新例子中,根据经典公式,线性回归函数的写法应该是:

公式七 hair数据的经典线性回归函数公式


那么如果我们根据hair的内容将它拆成新的自变量,它就会是:hairblack,hairbrown,hairblonde。这时,问题由原来的单一自变量转为三个自变量,用公式表示为:

公式八 由hair单一自变量拆分成的三个自变量构成的线性回归函数

 

在分组多于两个时,R中依然保留了预设对照组的处理方法(在之前的二元问题中,R选择了男性male组作为对照组),在这个问题中,R选择black组为对照组,因此R中出现的线性回归公式实际应为:

公式九 一项内容设为对照组后的线性回归函数


在这个公式下,x1对应hairbrown,x2对应hairblonde,它们的取值及意义为:

表格一 确定对照组后X1和X2取值的意义


x1与x2取值的对照关系为:

表格二 X1和X2不同取值下对应数据的实际意义


由这个表格可以看出,当x1与x2分别是0-1编码时,产生的四个组合恰好满足了原始自变量(hair)的三种分组。x1=1与x2=1不能同时出现(hair不能同时是brown和blonde),因此四个组合中有一个是“废掉的”,另外三个完美覆盖数据出现的所有情况。

 

我们可以借用数学中“降维”(降低维度)这一概念描述这一处理方法:当某一字符式自变量内容多于两组时,按照其内容将单一自变量变为多项自变量,同时其中一项内容被设置为对照组,即整个自变量维度降一级。

 

好,原理讲清楚了,下面我们来看一看在R中实际操作的过程与结果:

图片五 hair数据线性回归函数拟合(多组自变量)过程与结果


summary()命令的结果清晰的体现了“降维”的处理方式,第三部分Coefficients中列出的自变量为hairblonde 与hairbrown,estimate依然是它们分别的影响因子,那么假设线性回归拟合成立,那么结果可以写为:

 

ifhair=black, y=4.3333;(x1=0,x2=0)

ifhair=blonde, y=4.3333+0.6667*1=5;(x1=1,x2=0)

ifhair=brown, y=4.3333+0.6667*0+2.6667*1=7;(x1=0,x2=1)

 

请大家注意的是,对照组(reference:hairblack)本身在线性回归中是“基准参照物”,其它组别都是“和对照组进行比较”。因此,我们在以上结果中看到,hairbalck在intercept中体现了出来,同时hairblonde与hairbrown都是在hairbalck的基础上得出的结果(intercept+?1 和 intercept+?2)。


这就是两组或多组“字符式”数据在线性回归中的处理方法。


三 鱼与熊掌可以兼得

之前我们举的例子都是很“纯粹”的,要么只有鱼(以speed为代表的数字数据),要么只有熊掌(以gender和hair为代表的字符式数据)。那么我们来看看,线性回归模型中,鱼与熊掌如何兼得。

 

首先,我们要明确的是,这两种变量是可以同时出现在一个线性回归模型中的。在我们不给它们额外“加戏”的情况下,它们享有同等的地位。享有同等地位的两种变量在写法上与同一种变量情况下的两个元素相同,即:

公式十一 同是容纳数字数据和字符数据的线性回归函数写法


尽管写法相同,这两种数据都保留了自己的特性和处理方法:数字数据依然可以连续取值,它的影响因子依然反映了最小变化下因变量的改变值;字符式数据依然把我们的选择限制在原始数据所提供的几种可能中,在字符数据只有两组的情况下,线性模型会自动选择其中一种作为对照组,而在数据多于两组时,处理方法与前文所述相同,即,选择一组作为对照,将数据降维,拆成多组自变量,采用0-1虚拟编码,得到的影响因子需要综合考虑。

 

下面我们来实际操作一下,假设我们收集了某个地区人群的数据,统计项目有年龄(age),体重(weight)和头发质量(hairquality),并且获得了他们的健康数据得分(health.indicator)。在R中数据呈现如下:

图片六 混合式数据举例


现在我们要检验一下,这部分人群的健康数据得分和年龄、体重以及头发质量有没有线性关系。在这个问题中,自变量年龄和体重为连续数据,头发质量为分组数据(3组),在R中的线性拟合可以写为:

图片七 混合数据在R中的线性回归拟合


这里我们的数据都是随机生成的,拟合出来并没有线性关系,健康数据得分(因变量)和年龄、体重、头发质量(自变量)也没有统计学显著关系,小伙伴们可以拿手边的真实世界数据四处拟合一下,看看能不能发现好玩的线性关系。


为了给大家掰扯明白分组数据的原理,今天介绍了好多数学公式。尽管有个论调说,一篇文章中出现的数学公式越多,读者专心阅读的时间越短,但是我相信小伙伴们这么爱我,一定都是喜欢钻研的好宝贝,公式更能激发大家的探索欲对不对?(对!一定对!)今天学到的口诀是什么?遇到分组就降维,bingo!

 

好啦,线性回归拟合中关于“数据”的部分我们用两篇文章讲完啦,大家有时间多回归文章,随时用数据练起来呀。下一篇我们要来讲非常令人头痛的数据偶联问题,敬请期待呀~


关于我们

克里克学院是一家致力于组织生命科学及医学领域科研及应用培训的专业机构,致力于让该领域每一位愿意不断学习和自我提升的科研/临床工作者都能从中找到一系列契合自己需要的专业课程!也让每一位愿意分享和传播自己经验和学识的同行有一个可以充分发挥和展现的讲台!


我们的宗旨


打破高校壁垒,遍请天下名师!




关注我们




版权所有:克里克学院