中介效应模型实践篇

学术   2024-08-01 11:48   陕西  

中介效应模型的三个模型

模型1:Y=cX+e1      c:总效应

模型2:M=aX+e2    

模型3:Y=c’X+bM+e3  c'直接效应    a*b间接效应

         

 

上一节分享了中介效应的理论知识,但是在看了温忠麟老师的“中介效应分析:方法和模型发展”,这一节打算以此为依据,在不违反温忠麟老师的流程的前提下,总结出自己的一套中介效应检验流程和软件操作以及结果的解读

         

 

那么首先看如下图是温忠麟提出的新的中介效应检验流程图:    

         

 

文中对此图的介绍如下:

(1)第一步, 检验(模型1:Y=cX+e1)的系数 c, 如果显著, 按中介效应立论, 否则按遮掩效应立论。但无论是否显著, 都进行后续检验。

(2)第二步, 依次检验方程(模型2:M=aX+e2)的系数 a 和(模型3:Y=c’X+bM+e3)的系数 b, 如果两个都显著, 则间接效应显著, 转到第四步; 如果至少有一个不显著, 进行第三步。

(3)第三步, 用 Bootstrap 法直接检验间接效应ab, H0 : ab = 0。如果显著, 则间接效应显著, 进行第四步; 否则间接效应不显著, 停止分析。

(4)第四步, 检验(模型3:Y=c’X+bM+e3)的系数 c, 如果不显著, 即直接效应不显著, 说明只有中介效应。如果显著, 即直接效应显著, 进行第五步。    

(5)第五步, 比较 ab 和 c的符号, 如果同号, 属于部分中介效应, 报告中介效应占总效应的比例ab/c。如果异号, 属于遮掩效应, 报告间接效应与直接效应的比例的绝对值|ab/c| 

 

实际上,温忠麟在文中总结,他提出的检验流程, 综合了依次检验法和 Bootstrap 法的优点, 推荐先尝试简单的依次检验 a 和 b, 如果不显著则用 Bootstrap 法直接检验系数乘积 ab 以提高检验力。用这个流程, 无论是考虑第一类错误率、检验力还是结果的解释性, 与单纯的 Bootstrap 法检验系数乘积相比, 只会更好不会更差。

那么,由于温忠麟老师这套流程其实是综合了遮掩效应,这个效应有兴趣的可以自己进一步研究,这里我想探讨中介效应,因此参考温忠麟老师这套流程的中介效应部分,作出了自己的流程图:

         

 

   

图3 中介模型自己的流程图

实际上,上面的流程图只是单独提取了温忠麟老师中介效应的部分,那么下面我来解释一下,这套流程图:

流程图有5步,但总结来看可以拆分为3大部分:1前提,检验间接效应,检验直接效应。

(1)1前提:即第一步检验系数c是否显著,显著继续进行,不显著终止分析。

(2)检验间接效应:分两种情况:

      第一是: a和b均显著,那么直接说明存在间接效应

      第二是: a和b至少有一个不显著,也就是a不显著或b不显著或a、b均不显著,那么需要采用Bootstrap法去进一步检验ab(ab即间接效应),若不显著,不存在间接效应,终止分析;若显著,存在间接效应。

(3)检验直接效应c,若不显著,则说明中介效应为完全中介效应;

           若显著,则说明中介效应为部分中介效应;

         

 

那么,理论理清了,我们接着直接进行代码实现:

本次采用的数据集介绍:

变量

属于

treat:是否治疗;

X:2分类变量

job_seek求职自我效能水平评分

M:连续变量

depress2治疗后抑郁症状得分

Y:连续变量

depress1:治疗前抑郁症状得分

                 

 

sex:性别        

分类变量

age:年龄

连续变量

occp:职业

分类变量

marital:婚姻

分类变量

nonwhite:种族

分类变量

educ:文化程度

分类变量

         

 

在这个研究中,X为treat,M为job_seek,Y为depress2

在代码实现中,我们需要进行4步

(1)建立模型1:Y=cX+e1

(2)建立模型2:M=aX+e2

(3)建立模型3:Y=c’X+bM+e3

(4)Bootstrap法检验,并计算出直接效应、间接效应、间接效应占比

         

 

R代码:

.libPaths()#查看R包位置.libPaths("D:/Program File/R/R-4.3.2/library")#定义包安装位置setwd("F:/01陕西省疾控/010心血管高危人群/result")#设置工作空间getwd()#加载工作空间           install.packages("mediation")##加载R包    #中介包library(mediation)#载入数据data<-jobs           # treat:是否治疗;   X:2分类变量# job_seek:求职自我效能水平评分;   M:连续变量# depress2:治疗后抑郁症状得分   Y:连续变量data$X<-data$treat#定义自变量data$M<-data$job_seek#定义中介变量data$Y<-data$depress2#定义因变量#(1)建立模型1:Y=cX+e1model1<- lm(Y ~ X + sex + age+occp+marital+nonwhite+educ, data=data)#(2)建立模型2:M=aX+e2model2<- lm(M ~ X + sex + age+occp+marital+nonwhite+educ, data=data)#(3)建立模型3:Y=c’X+bM+e3model3<- lm(Y ~X + M + sex + age+occp+marital+nonwhite+educ, data=data) summary(model1)summary(model2)    summary(model3)

         

 

上面其实就是逐步检验的结果:我们可以依次查看系数c、a、b的显著性来判断是否存在中介效应,再根据系数c’的显著性判断是完全中介还是部分中介

#中介效应分析

set.seed(1000)#设置随机种子result <-mediate(model2, model3, #填模型2和模型3                   treat="X",      #自变量                   mediator="M",   #中介变量                   sims=500,       #重复抽样500次                   robustSE = T)  summary(result) ### summary模型回归结果

   

#ACME :间接效应,即中介效应

#ADE :直接效应

#Total Effect:总效应

#Prop. Mediated:中介效应占比

上述结果是Bootstraps的结果,我们也可以直接看这里的结果;

(1)看总效应c显著,才能进行下一步

(2)看间接效应是否显著;若间接效应显著,再进行下一步

(3)再看直接效应是否显著,直接效应显著,则为部分中介;直接不显著,则完全中介效应

plot(result1) ###绘制模型回归结果图

#敏感性分析

sens.out <- medsens(result,                     rho.by = 0.1,                     effect.type = "indirect",                         sims = 1000)summary(sens.out)

### Rho为灵敏度参数,Rho=0表示没有混杂效应

### Rho值越大表示混杂效应越强,此时对应的中介效应结果越可靠

### 上述结果给出了不同Rho下的中介效应的区间与拟合优度R^2

         

 

         

 

#敏感性分析可视化

par(mfrow = c(1,2))#(可运行可不运行,一页多图)#画左图,(-0.8,0.8是敏感性分析Y轴的长宽)plot(sens.out, sens.par = "rho", main = "Sensitive analysis", ylim = c(-0.8, 0.8))#画右图plot(sens.out, sens.par = "R2", r.type = "total", sign.prod = "positive")

         

 

   

         

 

图1 Y轴表示中介效应值,X轴表示敏感度关于rho。

图一的总结是:rho的绝对值越高,中介效应越可靠

         

 

今天先分享到这里,这一期的中介变量和Y变量都是连续变量,下期分享以下三种情况,R如何构建中介模型: 

中介变量

 因变量

连续变量

2分类变量

2分类变量

连续变量

2分类变量

2分类变量

连续变量

生存时间/2分类变量

2分类变量

生存时间/2分类变量

  所以留个疑问:中介变量如果是多分类怎么办呢?    


流病统计与科研学习笔记
流行病与卫生统计学专业主要分享基于SAS、R以及其他统计软件实现各种统计学方法和结果绘图,提高自己的学习能力
 最新文章