【无标题】

中介分析以及Mediate函数的使用及解释

1、中介效应

![中介效应](https://i-blog.csdnimg.cn/direct/3b6ccb365ea84b15b8e68d5453222bba.png

  • 中介分析/介导分析(Mediation analysis):假设自变量X和因变量Y中间存在一个中介变量(Mediator)M,如果X对M有显著影响,同时M对Y有显著影响,那么就可以称在X和Y之间存在由M引起的中介效应。这个分析过程就叫中介分析。如果X对Y也有意义,那么就是部分中介,否则就是完全中介
  • X对Y的总效应分为直接效应(directeffect)和间接效应(indirect effect),直接效应是指当中介变量(M)固定在某一水平时,自变量X对结局变量Y的效应。间接效应是指自变量X通过中介变量M对结局变量Y施加的影响。按上图所示则c为直接效应,间接效应则为a与b的结合
  • 根据Baron和Kenny等人的研究,符合以下标准的变量可以判定为中介变量:
    • 暴露水平的变化显著影响中介变量水平的变化(即X与M的关联具有统计学意义)。
    • 中介变量水平的变化显著影响结局变量(即M与Y的关联具有统计学意义)。
    • 暴露因素水平的变化显著影响结局变量(即X与Y的关联具有统计学意义)。
    • 通常情况下标准1)和标准2)被普遍接受,标准3)未被接收,理由是当直接效应和中介效应的作用方向相反时,X与Y间的关联可能无统计学意义,但不能否认中介效应的存在。

2、中介效应检验方法

中介效应检验方法

中介效应是否存在,其实就是检验X到M,M到Y的路径是否同时具有显著性意义。如上图所示,图中路径上的符号代表路径系数(回归系数)
目前做中介效应检验的方法有四种:**逐步回归法;系数乘积检验法;差异系数检验法和Bootstrapping。**严格意义上来说,它们的分析原理都是一致的,检验W2和W3路径是否同时有意义(通畅),区别在于判断有意义的标准严谨度不同。

  • 逐步回归法
    逐步回归法是一种逐渐选择最佳回归模型的统计方法,通过逐步添加或删除预测变量来找到最佳的回归模型。这种方法分为三种类型:前向选择(Forward Selection)、后向消除(Backward Elimination)和双向选择(Bidirectional Elimination)。

    在上图中分别检验W1,W2,W3和W1-1是否有显著,如果W2和W3同时有意义,那么中介效应存在;如果W1也有意义,那么就是部分中介,否则就是完全中介。部分中介存在的缺陷容易出现假阳性,因为W2的置信度为95%,而W3的置信度也是95%,如果不加以控制,判断A和B之间存在中介效应的置信度将会降低为95%的平方,也就是90.25%,也就意味着这个结论的可靠性降低了。逐步回归法直接用SPSS的回归功能就能完成。

    • 优缺点:
      • 优点:自动化选择变量,提高了模型的简化性和可解释性;适用于大数据集,减少了模型复杂度。
      • 缺点:容易过拟合,可能选择包含噪音的变量;不考虑变量之间的多重共线性问题;结果可能依赖于初始变量集。
  • 系数乘积检验法(Product of Coefficients Test)
    通过计算自变量对中介变量的影响(路径W2)和中介变量对因变量的影响(W3),再将两个路径系数相乘来评估中介效应。

    鉴于逐步回归法的缺陷,系数乘积检验法的原理是将W2和W3综合考虑,也就是考虑W2*W3是否有意义,这样就避免了分别检验W2和W3造成的置信度降低问题。Sobel检验可以使用SPSS中的Process插件来完成。

    • 检验显著性:
      • Sobel检验:假设ab的标准误是已知的,通过计算Z值(ab除以标准误)来检验显著性。Sobel检验也存在缺陷,那就是要求W2W3服从正态分布,但是这一点是很难保证的,即使是W2和W3服从正态分布,W2W3也不一定服从正态分布。
      • Delta方法:估计ab的标准误,并进行显著性检验。
    • 优缺点:
      • 优点:提供中介效应的直接估计;适用于简单的中介模型。
      • 缺点:对于样本量小的数据,结果可能不稳定;要求数据服从正态分布。
  • 差异系数检验法(Difference in Coefficients Test)
    差异系数检验法通过比较中介变量存在和不存在时自变量对因变量影响的系数来评估中介效应。

    差异系数检验法检验的是(W1-W1-1)是否有意义,因为通常情况下,W2*W3=(W1-W1-1),因此,乘积系数法和差异系数法的检验效力是基本上相同的,区别在于两者的标准误不同。经过很多研究者的对比,乘积系数法和差异系数法都比逐步回归法的检验结果更为准确。

    • 检验显著性
      • 使用标准误差计算中介效应的显著性。
      • 常用的检验方法包括Sobel检验。
    • 优缺点:
      • 优点: 简单易懂,适用于初步分析;不需要对中介变量进行复杂建模。
      • 缺点:依赖于线性关系假设;对于复杂模型或非线性关系,效果不佳。
  • Bootstrapping
    Bootstrapping是一种非参数统计方法,通过对原始样本进行重复抽样来估计统计量的分布,从而进行显著性检验和置信区间估计。

    大多数假设检验用到的标准误都是做无偏估计或有偏估计得来的,也就是说,检验用的标准误都是伪标准误(估计值),要使估计值准确,需要服从很多的假设条件(例如上面说到的正态分布),系数乘积检验法和差异系数检验法的标准误都是如此。但是很多数据无法完全满足标准误估计的假设条件,这样Bootstrapping就应运而生了。这种方法是根据标准误的理论概念,将样本容量很大的样本当作总体,进行有放回抽样(抽样次数可以自己定),从而得到更为准确的标准误。

    • 优缺点
      • 优点: 不依赖于样本分布的假设,适用于各种类型的数据;提供更加稳健的标准误和置信区间估计;适用于小样本数据
      • 缺点:计算量大,需要较长的计算时间;对于高度偏态的数据,效果可能不理想;依赖于重复抽样的次数,抽样次数过少可能导致结果不稳定
  • 应用场景
    逐步回归法适用于模型简化和变量选择;系数乘积检验法和差异系数检验法主要用于中介分析,前者更直接,而后者更简单;Bootstrapping则广泛用于各种统计分析和显著性检验,特别是当传统方法不适用时。四种方法检验原理都一样,区别在于显著性(置信度)水平的校正方式不同,后面三种的检验结果优于第一种逐步回归结果。校正不是万能的,即使是最优的Bootstrapping方法,因为它们都有前提假设条件,如果不满意这些假设条件,结论可想而知不会准确,因此想要得到准确的模型结果,还是要收集到具有代表性的样本数据,这个才是根本。

3、中介效应的R实现

大家可以参考Mediation包的说明文档,里面有详细的说明。

  • mediation包核心是mediate函数
  • 输出结果怎么看:
    • ACME stands for average causal mediation effects,这个是自变量对因变量的间接作用,注意它是由自变量对中介变量的作用和中介变量对因变量的作用相乘得到的。
    • ADE stands for average direct effects,这个是自变量对因变量的直接效应,也就是控制了中介变量后,自变量对因变量的效应,也就是第三步做的。
    • Total Effect stands for the total effect (direct + indirect) of the IV on the DV. 这个就是总效应,也就是直接效应加间接效应ACME+ADE
    • Prop. Mediated describes the proportion of the effect of the IV on the DV that goes through the mediator.这个是中介效应的占比,是用间接效应除以总效应得到的。
  • 在实际处理中,我们会遇到各种各样的问题
    • 数据框中会含有空格和其他特殊字符
      • colnames(all_dataset) <- make.names(colnames(all_dataset)) # 将列名中的空格和其他特殊字符替换为下划线
    • 需要重复进行多个中介变量的计算
# 定义一个函数来进行重复计算
perform_mediate <- function(X, Y, treat, mediators, sims = 50, boot = FALSE, covariates = NULL, data = all_dataset) {
  results_list <- list()
  
  for (med in mediators) {
    cleaned_data <- data %>%
      drop_na(all_of(c(X, med, Y)))		# 使用drop_na(all_of(c(X, med, Y)))来去除包含缺失值的行。
    
    fitM <- lm(as.formula(paste(med, "~", X)), data = cleaned_data)		# 这里传入的X是变量名(列名),构建线性模型时,使用as.formula来动态构建公式
    fitY <- lm(as.formula(paste(Y, "~", X, "+", med)), data = cleaned_data)
    x <- mediate(fitM, fitY, treat = treat, mediator = med, sims = sims, boot = boot, covariates = covariates)
    
    results_list[[med]] <- summary(x)
  }
  
  return(results_list)
}

关于用代码举例说明的文章有很多,大家可以参考一下下面这几篇博客:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值