R语言 | 回归分析(三)
R语言
语言学与R语言的碰撞
Xu & Yang
PhoneticSan
学习参考
Discovering Statistics Using R
Statistics for Linguistics with R
How to Do Linguistics with R
R in Action
Analyzing Linguistic Data
R Graphics Cookbook
··· ···
Recap
进行线性回归需要满足三个前提假设:线性、残差正态性、残差的方差齐性。其中方差齐性检验可使用car包中的ncvTest( )函数或spreadLevelPlot( )函数。
两个以上的预测变量使用的方法叫做多元回归,基本公式是Y = b0 + b1X1 + b2X2 + ... + bnXn + ε,每一个系数表示其对应预测变量对因变量的影响。
多元回归使用的函数同样是lm( )函数,对于不同的预测变量,使用➕连接。如果考察某两个变量的交互效应,则使用:连接两个变量。建立null model和拟合回归模型后,使用anova( )分析。
R: The R Project for Statistical Computing
https://www.r-project.org/
RStudio:
https://rstudio.com/
R Project
Linguistics
1
分类预测变量
在之前的回归分析介绍中,我们探讨的预测变量都是连续型变量。比如例子中的WrittenFrequency(书写出现的频率)是一个“连续不断”的变量,它小数点后理论上有无数位。而在我们语言学的研究中,很多时候面对的是分类变量,比如有无焦点、男女性别分组、不同语境下的语调变化等等,这些我们也可以使用回归分析吗?
不同的焦点位置可以回归分析吗?
我们的答案是“可以”,而且它的建模步骤与连续型变量是一致的。依据我们之前学习回归分析的步骤,我们先后谈一谈“两个水平”和“两个以上水平”这两种情况。假设现在需要处理具有两个水平的一个分类变量,比如languageR包english数据中,词类(WordCategory)对阅读时长(RTlexdec)会不会有影响。为了进行分析,我们需要使用虚拟变量(dummy variable),因为我们的分类变量(N/V)不是定量的,所以借助0和1这两个虚拟变量代表这一预测变量的两个水平。它更像是一个开关,比如0代表无,0代表有,在这里我们可以设置N=0,V=1,回归建模方式不变。
library(languageR)
rt.m <- lm(RTlexdec ~ WordCategory, data=english)
建模后,我们使用summary( )函数查看这次拟合的情况。拟合优度很高的话,说明这次的线性回归模型是合适的,那么我们在与null model进行比对就行。因为我们的拟合优度接近于0,所以这里我们使用另一个例子来展示这种回归的结果。
分类预测变量
根据预测变量的两个水平来看,当出现多个水平的预测变量时,建模过程依旧不变。比如有三个水平,我们可以继续使用两个虚拟变量,也可以添加更多的虚拟变量来控制。需要注意的是,哪怕水平再多,我们也要记得这是在一个预测变量下的水平,因此还是使用简单的线性回归。如果是多个预测变量多水平,那么使用多元回归,本质上还是不变的。
多个水平下的虚拟变量
上面是我们介绍的,当预测变量(自变量)是分类变量的情况。如果我们的结果(因变量)也是分类变量,该如何进行回归分析呢?
R Project
Linguistics
2
逻辑回归概述
假设我们控制了一系列条件来开展一个实验,目的是让被试理解文字并给出“正确”或“错误”的回答,此时因变量是一个典型的分类变量,那么还可以使用回归分析吗?答案是可以,这种情况下使用的回归方法叫做逻辑回归(logistic regression),它是多元回归的一种,预测变量可以是连续型变量或分类变量,得到的结果是分类变量。根据结果的分类个数,逻辑回归可以被分为二元逻辑回归(binary logistic regression)和多元逻辑回归(multinomial/polychotomous logistic regression)。为了帮助大家更快入门逻辑回归,下面的介绍中我们以二元逻辑回归为主,以后再介绍多元逻辑回归。
线性回归与逻辑回归的区别
根据上面提到的预测变量为分类变量的情况,有的朋友可能会考虑把产出的分类变量结果也设置为虚拟变量,但是这样一来会产生一个问题,那就是截距、平均数这些参量都没有意义了:你如何定义在预测变量为0的情况下,作为分类变量的结果是什么?可见,仅仅使用虚拟变量是不够的。因此,人们决定使用概率(probability)进行解释,即不同预测变量下,结果正确的概率是多少。为了评判概率,学者们进一步提出了新的概念:优势比(odds ratio,又称OR值)。
优势比(odds ratio)
继续以本节开篇的举例为例,假设我们得到正确答案的概率p是80%(p=0.8),得到错误答案的概率是20%(1-p),那么我如果继续进行试验,得到正确答案的概率要比错误答案的概率多多少呢?使用优势比公式可以得到OR=p/1-p=4,那么得出的结论是得到正确答案的可能性是错误答案的四倍。可以看到,逻辑回归引入了优势比概念后,我们可以更加明晰地看到自变量在结果中的概率大小。
既然我们把结果解析为优势比,那么就可以定义逻辑回归的数学形式了。首先,因为概率是一个在(0,1)之间浮动的数值,同时因变量又是一个典型的二项分布,为了让它更符合线性回归模型,我们需要进行一些操作,来把(0,1)映射到(-∞,+∞)。这里使用到的函数被称为logit函数(logit function),它取优势比的自然对数,这样也就取消了优势比的上下限,将非线性的结果线性化。变换后,逻辑回归的数学形式如下所示。
逻辑回归的数学表达式
总体而言,逻辑回归的主要目标是把“本为非线性的分类结果转换为线性结果”,从而方便进行线性回归拟合。如果你没有理解上面的过程也不要紧,一定要记住逻辑回归中结果的含义即可,因为这些都可以在R中直接实现。
线性回归与逻辑回归数学形式的区别
R Project
Linguistics
3
逻辑回归R实现
上面我们提到,逻辑回归的分类变量结果不是一个标准的正态分布,因为结果非此即彼,计算的是每个结果的概率,它更符合二项分布(离散概率分布)。因此,逻辑回归不能直接使用lm( )函数进行拟合,取而代之的,我们使用广义线性模型(Generalized Linear Model)拟合,在R中对应的函数为glm( )函数,它的基本构成如下。
glm(outcome ~ predictors, data=..., family=...)
其中,family是定义分布类型,比如上面提到的,如果是一个二项分布,那么family="binomial"。你也可以直接指定定义因变量的函数,比如在逻辑回归中常用到的函数是logit函数,那么family可以写为:
glm(outcome ~ predictors, data=data.frame, family=binomial(link='logit'))
这一种写法与上面直接写为family="binomial"是等效的。为了方便练习,我们继续以languageR包中的english数据为例,这次我们查看长度(LengthInLetters)对“是否是词”的判断结果(CorrectLexdec)的影响。
为了方便考察,我们以CorrectLexdec的前几个数据为例,并命名为一个新的变量名。CorrectLexdec记录的是每个非词判断正确的人数,被试一共有30人,因此我们需要对这个进行处理,不然R会以为这是个连续变量而不是我们所提到的“正确/错误”的分类变量。不过好在glm( )函数会帮我们设置好相关的内容,所以我们无需自己计算logit函数内容。因为glm( )函数需要同时知道我们的分类变量的情况,在例子中即为判断正确/错误的人数,因此我们还需使用cbind( )函数把这两个内容变为一个矩阵输出,也就是把cbind(Correct, Incorrect)作为outcome。具体实现代码如下。
# 加载languageR
library(languageR)
# 进行逻辑回归模型拟合。其中CorrectLexdec给的是正确人数,总人数有30,因此错误人数为30减去正确人数。
eng.logR <- glm(cbind(CorrectLexdec, 30-CorrectLexdec) ~ LengthInLetters, data=english, family="binomial")
# 检查逻辑回归拟合情况
summary(eng.logR)
运行后我们可以得到对应的拟合结果了,可以看到它的结果和线性回归没有大的区别,我们需要注意的地方首先是它使用的是z分数来检验系数是否具有显著性差异,此外,在拟合优度上使用了AIC参数(Akaike information criterion)来衡量拟合程度,一般情况下我们要选择AIC较小的拟合结果。比如再添加一些变量进去:
eng.logR1 <- glm(cbind(CorrectLexdec, 30-CorrectLexdec) ~ LengthInLetters + WordCategory + AgeSubject, data=english, family="binomial")
可以看到它的AIC指数下降了,那么我们会优先考虑AIC较小的拟合结果。现在我们以第一次输出的eng.logR为例,用数学表达式写其实可以为ln(ORCorrectLexdec)= 1.83 – 0.09 LengthInLetters,比如我们想要预测长度为8判断为非词的正确概率,代入计算即可。
逻辑回归拟合检验
在找到最合适的拟合结果后,与null model进行假设检验,同样的使用anova( )函数即可。逻辑回归的结果报告与线性回归相类似,一般会使用表格将系数标明。到此为止,我们对回归有了一个入门的介绍。R语言入门系列的最后一期,我们将会介绍线性混合效应模型,介绍语音研究界常用的growth curve analysis方法,为我们的R语言入门学习画上圆满的句号。
逻辑回归的结果报告
—END—
排版:Xu & Yang