vlambda博客
学习文章列表

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


  1. 重复测量方差分析可以类比为扩展版的配对样本t检验,它是让同一组个体参加了所有不同的处理条件,可以在ezANOVA( )函数中添加within=...语句实现重复测量分析。

  2. 当出现两个以上的因素时,我们可以采用双因素/多因素方差分析,探测主效应和不同因素之间的交互效应。

  3. 当方差分析出现显著性差异后,我们进行事后检验来进一步确定是哪一个因素出现了显著性差异,调用TukeyHSD( )函数可以完成事后检验,还有其他事后检验函数可以使用。


R语言 | 回归分析(一)


R: The R Project for Statistical Computing

https://www.r-project.org/

RStudio:

https://rstudio.com/





R Project

Linguistics

1

 相关与回归



在生活中,我们遇到过这样的问题:人的身高和体重有关系吗?于是,你开始记录并观察许多人的身高和体重,得到相应的散点图。在这个过程中,你实际上就是在探索身高与体重的相关性。相关(correlation)是用来描述和测量两个变量之间关系的统计分析方法,很多情况下是对没有控制或操纵情况下变量的观察。


R语言 | 回归分析(一)

相关示意图


对于变量间的相关性,我们主要从三个方面进行描述。其一,关系的方向。在确定了变量之间有相关性后,我们需要描述相关性是什么方向的,包括正相关(positive correlation)和负相关(negative correlation)。前者即两个变量同向移动(如上图所示),后者即两个变量向相反方向移动。其二,关系的形式。上图所示是一个典型的线性相关,换句话说,我们可以画一条直线来帮助我们表明关系。其三,关系的程度,这个描写也是测量相关性的重要一步,即相关分析测量与特定相关形式的拟合程度。以上图为例,如果我们根据两个变量做一条直线,那么我们得到的数据和这条直线的匹配程度是多少,我们用相关系数(correlation coefficient)来解释,越接近0表示相关性越小。有很多相关系数用以描写,日后我们再细谈。


R语言 | 回归分析(一)

不同的相关方向


在一开始我们就提到,上面的相关是我们通过观察和描写得到的结果。我们继续以身高体重为例,通过观察我们发现身高和体重呈现正相关。如果我想问你观察里没有的数据,比如没有182cm数据,它对应的体重「可能」是多少呢?正如上面提到,我们可以「拟合」一条直线来描述相关性,那么自然的可以通过这条直线来「预测」数据。这种分析思路,即所谓的回归分析(regression analysis)。回归分析是根据一个或多个预测变量来「预测」结果变量的方法。换句话说,我们可以理解为通过得到的样本中的自变量和因变量关系,来预测结果的方法。根据预测结果的类型,我们将回归分析主要分为线性回归(linear regression)、非线性回归(non-linear regressin)、logistic回归(logistic regression)等等。


R语言 | 回归分析(一)

线性回归


一般情况下,在语言学研究中,我们最常见的回归分析往往是线性回归和logistic回归,其中的线性回归分析我们会使用到多种模型,如GLM、GLMM等,今天我们首先从最简单的线性回归讲起。



R Project

Linguistics

2

 简单的线性回归



在开始线性回归分析之前,首先需要你调动一下高中数学课的一些知识。在高中我们也提到过线性回归方程,它本质上就是对数据的拟合。现在我们假定有一数据集中变量之间是成比例的关系,比如年轮与树龄的关系,那么这种关系我们就可以简单地用数学公式表述为Y=b1X。其中b1是我们熟悉的斜率(slope),这就是得到的回归方程,也就是拟合的模型。如果这个模型完美地适配我们的观察结果,那么所有的数据都应当落在这条直线上。


R语言 | 回归分析(一)

模型完美拟合观察数据的结果


但是,大多数情况下,我们不可能得到这样完美的拟合结果,数据都会或多或少地有一些偏差(error),因此我们需要把偏差考虑进去。这里的偏差,指的是数据与我们拟合结果的偏离程度。因此,在多数情况下,我们的拟合是加入了偏差得到的结果。这时,回归方程可以修订为Yi=b1X + εi,其中εi是数据的偏移程度。


R语言 | 回归分析(一)

考虑偏差后的拟合


最后,我们回顾下一个标准线性方程是由直线的斜率和截距(intercept)两部分组成的,截距是当x为0时y的值。比如年龄与身高的关系,在出生为0岁时,我们的身高不可能是0厘米,因此我们把0岁时的身高作为拟合方程的截距。这下,我们就可以得到一个完整的线性回归模型了:Yi = b0 + b1Xi+ εi,其中b0b1称为回归系数(regression coefficient),而i可以表示第i个被试得到的结果。通过拟合的模型,我们便可以预测结果了。


R语言 | 回归分析(一)

语言学中线性回归模型示例


下面我们通过语言学实例进一步说明线性回归分析的过程。首先要确定系数。比如我们探索词频是否对阅读时间有影响,可以看出自变量是词频,因变量是阅读时间,那么Yi就是这里的阅读时间,b0是在考虑所有其他自变量之前,不同被试的阅读时间的平均值,b1是自变量词频,它反映词频在多大程度上影响阅读时间。


回归系数我们都已经确定好了,那该如何确定拟合的模型可以很好地反映搜集到的数据呢?换句话说,我们该怎么用它来进行显著性检验呢?这里使用最小二乘法(least squares)进行检验。回归线是为了寻找最能契合数据的直线,这也就意味着,每个数据到这个回归线的距离是最小的,这个距离即实际观察/搜集得到的数据与拟合的模型之间的差,被称为残差(residual),其实就是最开始我们提到的εi。而最小二乘法则是使用残差平方和计算来确定我们的回归线拟合程度如何。


R语言 | 回归分析(一)

残差与最小二乘法


现在,我们做一个假设检验:H0表示词频对阅读时间没有影响,即阅读时间的平均值足够预测了。为了进行检验,我们需要计算总平方和SST(通过计算不同数值距离与均值的差值的平方和得到)和残差平方和SSR(通过计算不同数值与回归曲线的残差的平方和得到),二者的差值可以得到模型的平方和SSM,即回归线与均值的差值,三者关系为SST = SSM + SSR


R语言 | 回归分析(一)

Model Sum of Squares


可以看到,SST代表总变异程度,SSM代表拟合的线性模型的变异程度,SSR代表模型中的误差。可以看到,最关键的是SSM,它是与模型息息相关的变异系数。因此判断一个线性模型的拟合程度,我们期望SSM要远大于误差SSR引起的效应。如何定义?我们使用R2判定拟合优度,是SSMSST的比值,它和皮尔逊相关系数(Person Correlation Coefficient)有一定关系,我们之后会介绍。R2在[0,1]之间浮动,越接近1说明拟合越好,反之越差。当拟合程度较高时,我们才可以进一步说明变量的关系。



R Project

Linguistics

3

 R语言实现



介绍完简单线性回归分析的基本逻辑后,我们下面进行R语言的实战。首先我们使用的函数为lm( )函数,“lm”代表了linear model,它的主要构成部分如下:

lm(outcome ~ predicators, data=...)

我们需要注意,在这个函数中,前一个是你的因变量y,后一个才是你的自变量x。我们以languageR包中的english数据为例,即上面我们的回归分析示意图。加载之后,我们使用summary( )函数观察数据中都有哪些内容,可以看到有很多东西。我们以其中RTlexdec和WrittenFrequency为例。


R语言 | 回归分析(一)

english数据


根据lm( )函数的构成方式,我们探索WrittenFrequency对RTlexdec的影响,那么RTlexdec应该在前,并把模型结果赋值给一个变量名以供我们方便调用检查(这一步是很必要的,之后我们介绍其他模型之间的比较时会很方便),代码如下:

eng.m <- lm(RTlexdec ~ WrittenFrequency, data=english)

建模完毕后,我们使用summary( )函数来查验结果具体结果如下图所示。


R语言 | 回归分析(一)

lm( )函数建模结果


在estimate一栏,从上到下依次表示截距和斜率,Pr则是显著性检验结果,R2则在倒数第二行,你会发现有两个数值,前者是上面我们提到的,后者是针对你的预测变量数而进行的修改。换句话说,当你不断添加新的变量到回归模型中时,只有当新项超过“偶然下才会出现”的预期时,修正后的R2才会变动。可以看到我们这次的拟合优度非常低,说明它不是一个很好地拟合,需要添加其他内容,这里我们暂时忽略这个问题。假设我们拟合得很好,下一步就是检测WrittenFrequency是不是真的对RTlexdec有影响。为了评估模型的相关性,我们需要将它与null model进行比较。null model则是将predicator变为“无”,具体如下。

base.m <- lm(RTlexdec ~ 1, data=english)

进行拟合后,我们将两个模型进行比较,使用anova( )函数即可,这里不能使用ezANVOA( )函数,因为它并不能比较线性模型。运行后我们可以看到,两个模型间有显著性差异,说明我们添加的WrittenFrequency是一个对RTlexdec会产生影响的因素。


F-test结果


到这里,最基本的线性回归分析就介绍完毕了。为什么需要进行回归分析?其实很多情况下,我们采用拟合回归线,可以很好地解释线性变化的连续数据,比如基频,可以更好的解读某因素对基频是否具有显著性影响,而不会因为方差分析“第几个点有显著性差异,第几个点没有”而不知如何解释的情况。懂得最基本的逻辑后,我们就可以进一步探索其他回归分析方法了。













—END—

排版:Xu & Yang