美文网首页
【R】理解线性回归模型,中介调节模型 & 方差分析

【R】理解线性回归模型,中介调节模型 & 方差分析

作者: 韦子谦 | 来源:发表于2023-09-20 15:19 被阅读0次

    线性回归模型、中介调节模型和方差分析其实相互关联,且某种程度上都属于一般线性模型(general linear model)。因此,在统一的框架下梳理这三个模型可以更好地融会贯通。将不同来源的、存在关联的信息整合到综合的知识结构中,有利于我们更系统地掌握一个领域的知识。同时,加深对统计学知识的理解,也能使我们避免在数据分析的过程中犯错,并更准确地解读结果。

    本文假设读者对上述三个模型以及R语言的基础知识有所了解,本文的目的是把三个模型放在统一的框架下梳理一遍。笔者并非统计学出身,只是由于研究中使用了这些模型,因此将自己的思考分享给大家。才疏学浅,错漏之处欢迎大家补充。

    线性回归模型(Linear Regression Model)

    为了偷懒不写代码,这里用了JASP(version 0.16.3)来展示例子。JASP是一个类似SPSS的提供GUI的统计分析软件,不过它其实是基于R语言来分析数据的,对于常用的一些分析都提供了基本的设置(不过更复杂的分析就需要自己在R里面敲代码来跑了)。

    这里用的是College Success这个数据,如果你想自己尝试的话,可以在JASP的菜单栏中找到这个数据(选择“Open”,“Data Library”,“4. Regression”,“College Success”,见下图)。

    该数据似乎来源于Moore等人编写的一本教科书,不过我没有这本书,而且我们只是为了做演示,所以就大概猜测一下变量的含义。根据简介,satm大概是SAT中的数学成绩,反过来可以推断hsm大概是高中的数学成绩,gpa就是大学绩点。这三个变量都是连续变量。

    我们先看看高中数学成绩(hsm)对gpa的影响。我们将hsm作为一个covariate,gpa作为一个outcome,线性回归分析的结果如下。

    涉及到的公式如下(去掉了误差的估计),这里我们做的是简单线性回归,用X来预测Y。i表示截距(intercept),也就是X为0的时候Y的初始值,它在某些时候是有意义的,例如当X表示从确诊到康复的时间,Y表示抑郁症状的水平,我就可以用截距来说明患者在确诊时的症状的严重程度。s表示斜率(slope),也就是我们估计的X的coefficient,表示X对Y影响的程度。

    Y = {i_0 + s_1X}

    先来看图中的第一、第二个表格。在这个例子中,我们假设X对Y没有影响(H0,也就是X解释了Y的variance的程度为0),然后用分析得到的结果和H0进行比较。这里是用了ANOVA来进行假设检验。

    首先解释为什么ANOVA会出现在回归...(施工中)

    中介调节模型

    在理解了线性回归模型的基础上,我们就可以看看中介调节模型了。不过这里不讲调节变量,只对最简单的一个中介模型进行讲解。

    我们还是用的刚刚的数据。我们假设高中时的数学成绩影响大学入学时的数学成绩,并进而影响大学绩点。假设的模型如下图所示。

    在这个模型中,a代表了x对m的影响,b代表了x不变的情况下m对y的影响,c'是代表了m不变的情况下x对y的影响(direct effect)。a乘b就是“x -> m -> y“这条路径的效应(indirect effect,以下写为ab或)。最后还有一个total effect,c=c'+ab,包括了x对y的direct effect(x -> y)和indirect effect(x -> m -> y)。不过我还不太清楚为什么indirect effect是a*b而非a+b,希望有了解的朋友可以解释一下。

    无论如何,这也意味着indirect effect可以表示为ab = c - c'。

    三者的关系可以表示如下(公式2.1和2.2),可以看出就是线性回归模型,其中i表示截距,e表示误差。

    M = {i_1 + aX + e_M}
    Y = {i_2 + c'X + bM + e_Y}

    而total effect则可以表示如下(公式2.3)。

    Y = i_3 + cX + e_Y

    如果我们假设:

    c = c' + ab
    i_3 = i2 + bi_1

    以及,total effect公式中的误差等于前两个公式中的:

    e_Y = e_Y + be_m

    那么公式2.3可以写为以下形式(公式2.4)。

    Y = (i_2 + bi_1) + (c' + ab)X + (e_Y + be_M)

    同样是一个线性回归模型。

    既然如此,现在来试着用线性回归的方式来估计各路径的系数。具体而言,我们需要做两个线性回归模型。首先是用hsm(x)预测satm(m)(对应公式2.1),结果如下图所示。可以得到路径a的效应,a = 23.911,p < 0.001。

    然后是在控制hsm(x)的情况下用satm(m)预测gpa(y),以及控制satm(m)的情况下用hsm(x)预测gpa(y),不过两者的结果可以在同一个模型中查看(对应公式2.2),如下图所示。得到b = 6.105e-4,p = 0.319,以及c' = 0.193,p < 0.001。

    以上两个线性回归模型的结果就足够了,因为我们只需要知道a、b、c'就可以算出c。不过我们也可以顺便看看用hsm(x)预测gpa(y)的结果(对应公式2.3),如下图所示。这里其实就是我们在上文线性回归部分里的做的分析。可以得到c = 0.208,p < 0.001。

    最后将结果整理如下。

    上图没有给出indirect effect,也就是ab,我们可以现在计算看看,如下。

    > 23.911*6.105e-4
    [1] 0.01459767
    

    也可以通过a、b、c'来计算c,如下。

    > 0.193+23.911*6.105e-4
    [1] 0.2075977
    

    最后用mediation analysis验证结果,见下图,结果是一致的。

    小结:中介调节模型可以被理解为通过一系列的回归模型来探讨多个变量如何通过一系列路径或在不同条件下相互关联的一种统计模型。

    顺便一提,结构方程的图是通过如下代码绘制的。

    library(DiagrammeR)
    
    code <- "digraph moderated_mediation_sem {
      # Nodes
      node [shape = rectangle, fontname = Arial, fontsize=12]
      X [pos = '-3,1!', label = 'hsm (x)']
      M [pos = '-1,2!', label = 'satm (m)']
      Y [pos = '1,1!', label = 'gpa (y)']
    
      # Edges
      edge [fontname = Arial, fontsize=12]
      X -> M [label = '23.911***']
      M -> Y [label = '0']
      X -> Y [label = 'c`=0.193***\nc=0.208***']
      
      # Graph
      graph [layout = neato, overlap = false, outputorder = edgesfirst]
    }"
    
    grViz(code) %>% 
      export_svg %>% 
      charToRaw %>% 
      rsvg_png("fig_example_mediation_model.png",width = 900*4, height = 300*4)
    

    References
    Hayes, A. F. (2013). Introduction to mediation, moderation, and conditional process analysis: A regression-based approach (pp. 85-122). Guilford publications.
    https://github.com/peterdalle/social-science-diagrams

    方差分析(Analysis of Variance, ANOVA)

    简单说就是,ANOVA可视为线性回归模型的一种特例。然而,因为分析的目的不同,ANOVA还会涉及到许多线性回归没有的东西(例如assumption check,post-hoc comparison)。这也是为什么在R语言中,我们可以用aov()或者Anova()(来自car包)来分析lm()得到的结果。网上不少人也因此纠结究竟是用Anova()还是summary()来输出lm()得到的模型的结果,这里其实就是涉及到应该用ANOVA还是线性回归来进行统计分析。因此,虽然两种模型同属于线性模型的框架,但是应用的场景不一样,因此具体用到的算法和报告的指标会有所区别

    作为例子,这里用的是Bear Googles这个数据,如果你想自己尝试的话,可以在JASP的菜单栏中找到这个数据(选择“Open”,“Data Library”,“3. ANOVA”,“Bear Googles”)。

    我们的自变量是FaceType(包括两个水平,用1和0表示),因变量是Attractiveness(连续变量,范围从1到8)。看名字可以大概猜到变量的含义,但是这里只是用于演示,就不展开阐述了。为了能够同时跑回归和ANOVA,我把FaceType这个分类变量复制了一份,定义为scale尺度,相当于用作dummy variable(见下图)。

    线性回归模型的结果见下图。

    方差分析的结果见下图。

    (施工中)

    系数和p值

    在线性回归中,我们关注的是自变量对因变量的variance的解释的程度。也就是X变化了,Y多大程度上会变化,所以我们关注的是slope,由表格可知slope的coefficient为1.333。同时,我们通过T-test来检验该slope是否显著区别于0。结果发现该slope显著区别于0,t = 3.175, p = 0.003,所以X对Y的影响(或者说关系)是显著的。

    在ANOVA中,我们关注的是自变量的不同分组对因变量的variance的影响是否有显著的差别。因此我们关注的是组间比较的结果,由于ANOVA通常会涉及多个水平,因此用到了F-test而非T-test,但因为我们这里的自变量只有两个水平,因此结果和T-test是一致的。t的平方 = F。

    > 3.175^2
    [1] 10.08062
    

    同时,因为我们这里用到的自变量的值只有1和0...(施工中)

    效应量

    R方并不会出现在ANOVA的结果中,相反,ANOVA通常会报告eta方(eta-squared)这类效应量指标。这是由两种模型的侧重点导致的。线性回归模型关注的是预测变量多大程度上解释了结果变量的variance,这反映在R方这一指标。假设1代表所有variance都可以被解释,那么我们就可以用1减去无法被解释的variance所占的比例,来表示可解释的variance的程度。其中,无法被解释的variance用residual的平方和来表示,再加上预测变量的平方和就相当于total variance。由此可计算出R方,如下,和表格中是一致的(为了方便和表格的结果比较,我在这里保留了三位小数)。

    > round(1 - 97.333 / (21.333 + 97.333), 3)
    [1] 0.18
    

    而ANOVA则通过eta方这类效应量指标来了解组间差异对结果的影响,这反映在eta方的计算方式,也就是eta方 = 组间差异的平方和(组间差异导致的variance) / 总平方和(total variance),如下。

    > round(21.333/(21.333+97.333), 3)
    [1] 0.18
    

    当然,因为两个模型都是基于相同的数据和分析思路跑出来的,所以这里得到了相同的结果。

    小结:方差分析和线性回归模型同属于线性模型,只不过研究者基于不同的研究目的将它们用于不同的场合中,这两种模型各自有着不同的侧重点。

     
    ----------2023.10.11更新----------
    增加了线性回归和ANOVA的部分内容

    相关文章

      网友评论

          本文标题:【R】理解线性回归模型,中介调节模型 & 方差分析

          本文链接:https://www.haomeiwen.com/subject/arzovdtx.html