1 基本介绍
中介效应(mediation effect)分析能解释自变量 X 对因变量 Y 的影响是如何通过中介变量(mediator) M实现的,是多变量研究的重要统计方法。
中介效应 VS 间接效应(indirect effect)
- 在只有一个中介变量的模型中,二者是等价的
- 当中介变量大于1时,间接效应可以是某特定中介变量的中介效应,也可以是某几个或所有中介效应的和
中介效应 VS “遮掩效应” (suppression effects)
- 当自变量 X 对因变量 Y 的影响显著时,使用中介效应分析X是如何影响Y的
- 当自变量 X 对因变量 Y 的影响不显著时,使用遮掩效应分析X为何不影响Y的
2 简单中介效应
假设变量都是连续并且已经标准化(回归方程中没有截距项),则简单中介效应模型的分析就是拟合得到如下线性回归方程: $$ \begin{equation} \left\{ \begin{gathered} Y&=cX+\epsilon_1 \ \ \ \ \ \ (1) \ \\ M&=aX+\epsilon_2 \ \ \ \ \ \ (2) \ \\ Y&=c'X+bM+\epsilon_3 \ \ \ \ \ \ (3) \end{gathered} \right. \end{equation} $$
- 其中回归系数$c$表示自变量 X 对因变量 Y 的效应;
- 回归系数$a$为自变量 X 对中介变量 M 的效应
- 回归系数$b$表示控制了 X 的影响后 M 对 Y 的效应
- 回归系数$c'$表示控制了 M 的影响后 X 对 Y的效应
- $\epsilon$表示残差, 假设残差服从正态分布且相互独立
上式将(3)代入(2),整理可得: $$Y=(c'+ab)X+\epsilon_2 b + \epsilon_2$$
- 其中$ab$为自变量 X 对因变量 Y 的中介效应(mediation effect)
- $c'$为 X 对 Y 的直接效应(directeffect),$c'+ab$为 X 对 Y 的总效应(total effect)
- 当回归系数$c'$不显著时,自变量 X 对因变量 Y 是完全中介效应
3 中介效应检验
依次检验法,又称联合显著法:
- 基本思路:依次检验方程(2)的系数$a$和方程(3)的系数$b$,两个系数都显著(对应的备择假设是$H1:a \neq 0 且b \neq 0$)时推得中介效应$ab$显著(对应的备择假设是$H1:ab \neq 0$)
- 需要注意的一个细节是,一般假设检验显著时对应的$I$型错误率是$0.05$,而联合显著法检验时对应的$I$型错误率是$1-0.95^2=0.0975$
贝叶斯法,又称为马尔科夫链蒙特卡罗法 (Markov Chain Monte Carlo, MCMC):
- 基本思路:它将参数看成是随机变量, 将参数的先验分布和观测数据整合在一起, 通过MCMC法得到参数的后验分布和区间估计, 如果区间估计不包含0, 就表示中介效应显著
- 贝叶斯法的关键步骤是为模型参数选择合适的先验分布。当样本量小或抽样方差大时, 合适的先验信息能有效改善参数的估计
Bootstrap 法:
- 非参数法与参数法主要是重复抽样的对象不同:非参数法的抽样过程依赖于样本数据,当参数已知(估计值和标准误差)时的便可以使用参数法,即借助蒙特卡罗法(MC)进行模拟抽样
- 基本思路: 通过不断抽取Bootstrap 样本并计算 a 和 b 的估计值, 得到 ab 的Bootstrap 区间估计, 如果区间估计不包含 0, 则中介效应显著
乘积分布法:
- 基本思路:乘积分布法默认 ab 的分布是两个正态变量的乘积分布, 根据乘积分布得到 ab 的区间估计, 如果区间估计不包含 0, 则中介效应显著
- 乘积分布法只需要提供 a 和 b的估计值及其标准误差即可, 不需要原始数据
不同检验方法的选择:
- Bootstrap 法是应用最为广泛的直接检验系数乘积的方法
- 一般推荐先使用依次检验法,当依次检验法不显著时再考虑Bootstrap 法
- 如果要报告中介 效应的置信区间, 使用 Bootstrap 法较好
- 如果有合适 的先验信息, 也可使用贝叶斯法
其他不推荐的中介效应检验方法
- 系数差异检验法,检验的原假设为$H_0:c-c'=0$,此方法的$I$型错误率有时会很高,所以已被淘汰
- 直接检验法之Sobel检验,基于正态假设检验$ab$的分布,在系数满足正态分布的情况下,系数的乘积也不一定是正态的,所以此方法局限性比较大,现在很少有人用了
4 中介效应的效应量
效应量是对中介效应的量化
常见的几种中介效应的效应量如下所示:
- 中介效应与总效应之比
$$P_M=ab/c$$
- 在$ab$和$c$符号一致时推荐使用,适用于大样本(>500)的情况
- 中介效应与直接效应之比
$$R_M=ab/c'$$
- 相比$PM$波动性更大,稳定所需的样本量也更多(>5000)
- 中介效应与可能的最大中介效应之比
$$k^2=ab/ab_{max}$$
- 最大中介效应计算主要根据系数$a$和$b$可能的变化区间计算出$ab$可能的变化区间(计算已集成在了R语言的MBESS包中),此方法是对$R_M$的改进
- $k^2$的缺点是不具备单调性,并且分母的计算方式不被广泛认可
- 从方差解释率的角度提出的效果量
$$R^2_{med}=r^2_{MY}-(R^2_{Y,MX}-r^2_{XY})$$
- 其中$r^2_{MY}$是因变量Y与中介变量M的相关系数,表示Y可以被M解释的部分
- $R^2_{Y,MX}$是回归方程(3)的拟合优度(决定系数/测定系数),表示Y可以被X和M共同解释的部分
- $r^2_{XY}$是因变量Y与自变量X的相关系数,表示Y可以被X解释的部分
- 所以$R^2_{med}$表示 Y 的方差只能被 X 和 M 共同解释而不能被 X 或 M 独立解释的部分
- $R^2_{med}$的缺点是不具备单调性,并且可能存在负值的情况
- $v$:对$R^2_{med}$的改进
$$v=(r_{MY}-ac')^2-(R^2_{Y,MX}-r^2_{XY})$$
- 其实就是把$R^2_{med}$中的$R_{Y,MX}$替换为了$R_{Y,MX}-ac'$
- 具备了单调性,但可解释性明显低于$P_M$
5 中介效应分析示例
以R语言为例,分析X(成绩)与 Y(幸福)之间的关系,并考虑中介因素 M(自尊)
# 加载模拟数据
myData <- read.csv('http://static.lib.virginia.edu/statlab/materials/data/mediationData.csv')
model.0 <- lm(Y ~ X, myData) # 拟合方程(1)
summary(model.0)
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 2.8572 0.6932 4.122 7.88e-05 ***
# X 0.3961 0.1112 3.564 0.000567 ***
### b1 = 0.3961, p < .001 # significant!
model.M <- lm(M ~ X, myData) # 拟合方程(2)
summary(model.M)
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 1.49952 0.58920 2.545 0.0125 *
# X 0.56102 0.09448 5.938 4.39e-08 ***
model.Y <- lm(Y ~ X + M, myData) # 拟合方程(3)
summary(model.Y)
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 1.9043 0.6055 3.145 0.0022 **
# X 0.0396 0.1096 0.361 0.7187
# M 0.6355 0.1005 6.321 7.92e-09 ***
### b4 = 0.0396, p = 0.719 # the effect of X on Y disappeared!
### b3 = 0.6355, p < 0.001
library(mediation)
med.out <- mediate(model.M, model.Y, treat='X', mediator='M',
boot=TRUE, sims=500) # 效应分析
summary(med.out)
# Estimate 95% CI Lower 95% CI Upper p-value
# ACME 0.3565 0.2155 0.5291 0.00
# ADE 0.0396 -0.1761 0.2598 0.66
# Total Effect 0.3961 0.1563 0.5794 0.00
# Prop. Mediated 0.9000 0.5254 1.8820 0.00
### ACME表示中介效应,ADE表示直接效应,Total Effect表示总效应
### ACME = 0.3565, 95% CI [0.2155, 0.5291] # 中介效应显著
### 中介效应占比 Prop. Mediated = ACME / Total Effect
### 结论:“成绩”和“幸福感”之间主要是间接效应,中介变量为“自尊”
# 以上流程只是为了方便理解,实际使用可简化为如下四行:
model.M <- lm(M ~ X, myData)
model.Y <- lm(Y ~ X + M, myData)
med.out <- mediate(model.M, model.Y, treat='X', mediator='M',
boot=TRUE, sims=100)
summary(med.out)
# 可视化效应分析
plot(med.out)
# 敏感性分析
sens.out <- medsens(med.out, rho.by = 0.1, effect.type = "indirect", sims = 100) summary(sens.out)
# Rho ACME 95% CI Lower 95% CI Upper R^2_M*R^2_Y* R^2_M~R^2_Y~
#[1,] 0.4 0.1141 -0.0016 0.2297 0.16 0.0738
#[2,] 0.5 0.0358 -0.0742 0.1459 0.25 0.1153
#[3,] 0.6 -0.0601 -0.1713 0.0511 0.36 0.1660
### Rho为灵敏度参数,Rho=0表示没有混杂效应
### Rho值越大表示混杂效应越强,此时对应的中介效应结果越可靠
### 上述结果给出了不同Rho下的中介效应的区间与拟合优度R^2
par(mfrow = c(1,2)) # 敏感性分析可视化
plot(sens.out, sens.par = "rho", main = "Anxiety", ylim = c(-0.2, 0.2))
plot(sens.out, sens.par = "R2", r.type = "total", sign.prod = "positive")
流程小结:
其他代码实践案例:
- 用python做带调节的中介模型检验详解:对应的开源项目很久没更新了
- R语言使用lavaan包进行多中介效应分析:用法灵活,相对小众,复杂场景可能存在问题
6 复杂中介效应模型
带有类别变量的中介效应模型:
- 自变量属于类别型变量的使用哑变量处理
- 因变量或中介变量属于类别型,线性回归改为逻辑回归
- 逻辑回归系数注意先进行标准化处理(如$a_{new}=a/SE(a)$),再计算效果量
使用纵向数据的中介效应模型:
- 此类模型主要用于考察时间变化、个体变化、多水平模型整合等情况
- 方法一般为多层线性模型、潜变量增长模型、交叉滞后面板、多层自回归
多重中介效应模型:通过多个中介变量更清晰地解释自变量对因变量的效应
多层中介效应模型:适用于多层(嵌套)非独立数据,如学生信息嵌套于班级信息
有调节的中介模型:受调节变量Z的影响的中介过程,即中介量会随 Z 的不同取值而变化
有中介的调节模型:中介过程受调节变量Z的影响,并且调节效应(至少部分地)通过中介变量M对因变量Y起作用(即限定了调节变量Z的影响是通过中介变量M传达的)