中介效应(2)

x为多分类变量,m、y为连续变量,计算相对中介效应

image.png

image.png
image.png

image.png
rm(list = ls()) 
#install.packages("mediation")
library(mediation)
data(jobs)
head(jobs)
# 自变量为类别变量,中介变量和因变量为连续变量的中介分析,同样都是拟合线性模型。
# 如果自变量为二分类别变量,可利用回归分析按照逐步法进行中介分析
# 如果自变量为k个类别(k≥3)建议使用相对中介和整体中介分析方法。

# 相对中介分析过程:
# 根据研究目的选择自变量的某个水平为参照水平,因为自变量的其它k-1个水平都要与参照水平进行对照,从而得到相对于参照水平的中介效应、直接效应和总效应;因此需要对自变量进行虚拟编码。
# 相对总效应的的大小等于k-1个相对直接效应和相对中介效应的大小之和。
# 需要说明的是,类别自变量的水平数越多,需要检验的相对中介效应、直接效应和总效应就越多,这可能会导致检验的第一类错误率增大,Bootstrap置信区间的置信度(用1–α/(k-1) 代替通常的 1–α)来控制检验的第一类错误率。
# 相对中介分析检验的是多类别自变量的某一个水平相对于参照水平而言是否存在显著的中介效应,整体中介分析检验的是k-1 个相对中介效应是否全部为 0。
# 整体中介分析相比相对中介分析存在至少三个优势:
#   第一,整体中介分析的结果不受参照水平的影响;
#   第二,整体中介分析的统计功效高于相对中介分析;
#   第三,整体中介分析得到的某些模糊结论(存在若干显著的相对中介效应)要比相对中介分析的某些结论(自变量的某一个水平相对于参照水平的中介效应不显著) 更有意义。

整体中介分析包括整体中介效应、整体直接效应和整体总效应三部分:

# 多类别自变量的中介分析流程
# 1)整体中介分析。如果整体中介效应不显著,就表示k-1 个相对中介效应全部为 0,则分析结束;否则进入步骤2
# 2)相对中介分析,弄清具体哪一个或哪一些相对中介效应显著;如果相对中介效应不显著,则分析结束;否则进入步骤3
# 3)报告相应的相对直接效应检验的显著性结果,即使直接效应不显著,也避免使用完全中介的概念。
# 仍然depress1作为自变量,econ_hard作为中介变量,depress2作为因变量;treat作为控制变量
# depress1转换成因子变量
jobs$depress1<-ifelse(jobs$depress1<1.5,
                      "d1",
                      ifelse(jobs$depress1>=1.5 & jobs$depress1<2,
                             "d2",
                             ifelse(jobs$depress1>=2 & jobs$depress1<2.5,
                                    "d3","d4")))

jobs$depress1<-factor(jobs$depress1,levels = c("d1","d2","d3","d4"))

table(jobs$depress1)

第一个模型,X与Y的总效应

model.0 <- lm(depress2 ~ depress1+treat, data=jobs)
summary(model.0)

第二个模型,X与M的效应

model.1 <- lm(econ_hard~ depress1+treat, data=jobs)
summary(model.1)

第三个模型,M与Y的效应,调整X和Z

model.2 <- lm( depress2~ econ_hard+depress1+treat, data=jobs)
summary(model.2)

第四个模型,M与Y的模型,不调整X

model.3 <- lm( depress2~ econ_hard+treat, data=jobs)
summary(model.3)

编写一个函数,计算整体总效应、整体直接效应和整体中介效应是否有意义

Calculate_effect <- function(model0, model1, model2, model3, n,k,data){    #n为样本量,k为自变量分类数,data为数据集
  #计算总体总效应检验
  F_value <- (n-k)*summary(model0)$r.squared/(k*(1-summary(model0)$r.squared))
  df1 <- k-1
  df2 <- n-k
  p_value1 <- 1 - pf(F_value, df1, df2)
  print(paste0("总效应检验:P=", p_value1))
  
  #计算总体的直接效应检验
  delta_R2 <- summary(model2)$r.squared - summary(model3)$r.squared
  F_value <- (n-k-1)*delta_R2/((k-1)*(1-summary(model2)$r.squared))
  df1 <- k-1
  df2 <- n-k-1
  p_value2 <- 1 - pf(F_value, df1, df2)
  print(paste0("总直接效应检验:P=", p_value1))
  
  #计算中介效应检验
  a <- summary(model.2)
  b <- as.data.frame(a$coefficients)
  M.effect <- summary(model1)$adj.r.squared*b$Estimate[2]
  
  #借助bootstrap方法计算中介效应
  library(boot)

  # 定义计算 R^2*b统计量的函数
  r_squared <- function(data, indices) {
  # 使用 bootstrap 抽样的索引
    d <- data[indices, ]  # 选择样本
    model.1 <- update(model1, data=d)# 拟合模型
    model.2 <- update(model2, data=d)
     return(summary(model.1)$adj.r.squared * coef(model.2)[2])  # 返回统计量的值
  }

  # 使用自助法计算 
  set.seed(123)  # 设置随机种子以便复现结果
  boot_results <- boot(data, statistic = r_squared, R = 500)  # 500 次抽样

  # 计算置信区间
  out <- boot.ci(boot_results, type = "perc")  # 百分位数置信区间
  print(paste0("中介效应:", M.effect,"  95%CI:",out$percent[4]," - ",out$percent[5]))
}
Calculate_effect(model.0,model.1,model.2,model.3,899,4,jobs)  


使用’mediation’包中的mediate()进行相对中介效应分析

# 以b1作为基线水平,分别计算b2、b3、b4相对于b1的相对中介效应分析,为了防止检验的第一类错误增大,增加Bootstrap置信区间的置信度(用0.98代替通常的0.95)来控制检验的第一类错误率。
#b2的相对中介效应分析
contcont2 <- mediate(model.1, 
                    model.2, 
                    sims=500, 
                    treat="depress1", 
                    mediator="econ_hard",
                    boot=TRUE,
                    control.value="d1",  ##b1作为基线水平
                    treat.value="d2",     
                    conf.level = 0.98)  #改!
summary(contcont2)
#b3的相对中介效应分析
contcont3 <- mediate(model.1, 
                    model.2, 
                    sims=500, 
                    treat="depress1", 
                    mediator="econ_hard",
                    boot=TRUE,
                    control.value="d1",
                    treat.value="d3",
                    conf.level = 0.98)
summary(contcont3)
#b4的相对中介效应分析
contcont4 <- mediate(model.1, 
                    model.2, 
                    sims=500, 
                    treat="depress1", 
                    mediator="econ_hard",
                    boot=TRUE,
                    control.value="d1",
                    treat.value="d4",
                    conf.level = 0.98)
summary(contcont4)
# 三个相对中介效应输出结果表明:3个相对中介效应都为部分中介效应。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 中介效应分析方法_spss中介效应分析 关键词:spss中介效应结果分析、中介效应分析、spss中介效应检验分析、...
    constant007阅读 17,739评论 1 12
  • 在了解中介效应软件操作之前,需要知道一些中介效应的基础理论。这些理论在后续检验分析过程中都会贯穿始终。 一、中介效...
    spssau阅读 4,134评论 0 1
  • 中介效应说明 中介效应主要研究自变量对因变量影响的过程中,自变量是否通过中介变量再对因变量产生影响,那什么情况表明...
    spssau阅读 4,138评论 0 1
  • 中介效应和调节效应是一对比较容易混淆的概念,他们都与回归分析有关,相比自变量因变量,中介变量和调节变量都属于第三变...
    spssau阅读 7,890评论 0 2
  • 接上一篇文章,本文继续说明中介调节效应研究问卷的研究方法及案例应用。 中介调节效应研究框架的应用举例 研究“员工工...
    spssau阅读 12,758评论 1 5