bruceR包v0.7.0:PROCESS()函数轻松实现中介效应和调节效应分析 您所在的位置:网站首页 spss数据集下载 bruceR包v0.7.0:PROCESS()函数轻松实现中介效应和调节效应分析

bruceR包v0.7.0:PROCESS()函数轻松实现中介效应和调节效应分析

2023-05-07 17:53| 来源: 网络整理| 查看: 265

【重要】请各位读者移步最新的两篇知乎文章:R语言综合工具包:bruceR中文帮助文档(持续更新)【FAQ】R语言综合工具包bruceR的常见问题解答

bruceR包目前已升级到0.7.0版(2021-05-28),相比于首次在CRAN官方平台发布的0.6.0版(2021-03-19),新版本有不少优化和改进,并且增加了一系列实用的新函数,尤其是能够轻松实现各种中介效应和调节效应分析的PROCESS()函数

bruceR包(CRAN正式版v0.6.0)使用指南:让R语言数据分析变得更简单CRAN - Package bruceR

自正式发布以来,在短短两个月时间里,bruceR包已经被下载2000多次。但是bruceR的功能仍在不断完善中。相比于0.6.0版,0.7.0版主要有以下几个方面的更新:

新函数开发PROCESS():致敬Hayes (2013, 2018)开发的SPSS PROCESS宏程序,更方便地进行各种中介效应和调节效应分析,支持一般/广义的线性/线性混合模型。HLM_ICC_rWG():计算多层线性模型的ICC(1)、ICC(2)、rWG指标。lavaan_summary():整理、汇总lavaan包的结构方程模型结果,同时可以更方便地计算各种类型的bootstrap置信区间。granger_causality():多元时间序列数据的格兰杰因果检验。show_colors():展示不同颜色或配色方案。%^%:paste0()的管道函数版本,更方便地拼接字符串。原函数优化为更多函数增加了“保存APA格式表格到Word文档”的功能,目前主要支持print_table()、Describe()、Freq()、Corr()、MANOVA()、PROCESS()、model_summary()、granger_causality()等函数输出结果表格到Word。优化了set.wd()、theme_bruce()、Alpha()、EMMEANS()等函数。修复了若干bug。

(更新记录详见:NEWS.md)

本文主要介绍v0.7.0新鲜出炉的PROCESS()。

社会科学研究者一定对「中介效应」和「调节效应」不陌生。

简而言之,对于自变量(X)和因变量(Y)之间的关系:

中介效应(mediation)看的是「作用机制」,即X是否通过中介变量(Med,记为M)的作用“间接”预测Y,那么X→M的路径系数a与M→Y的路径系数b的乘积a*b就是所谓的中介效应,一般称为间接效应(indirect effect),而考虑了M作用之后的X→Y的路径系数c'就是直接效应(direct effect)调节效应(moderation)看的是「边界条件」,即X与Y的关系是否随着调节变量(Mod,记为W)的变化而存在差异,如果调节作用显著,还需要进一步做简单斜率检验来考察调节变量取何值的时候X→Y的作用是显著/不显著的,那么W不同水平下X→Y的路径系数就是简单斜率(simple slopes)。同时,我们还会遇到有调节的中介(moderated mediation),即中介效应的大小取决于调节变量,此时调节变量W有可能对X→M、M→Y、X→Y中的一个或多个路径产生调节,我们一般将W不同水平下X→M→Y的间接效应称为条件间接效应(conditional indirect effect)。另外,一个容易混淆的概念是有中介的调节(mediated moderation),但其实“有中介的调节”与“有调节的中介”是“一个硬币的两面”,统计模型是同一个,只是解释的角度不同。学者普遍认为,“有中介的调节”比较难解释,需要充分的理论支持,实际应用也较少,所以一般考虑“有调节的中介”就足够了(详见上面推荐的《中介效应和调节效应:方法及应用》一书的第五章)。

在实际操作中,大家会用不同软件来进行中介/调节效应分析——Mplus、LISREL、SPSS的PROCESS插件等等。其中最受欢迎的可能是PROCESS插件(PROCESS macro for SPSS and SAS),因其操作简单、上手快、模型种类丰富。当然,如果要进行更复杂的路径分析和潜变量建模,仍然要用Mplus。

R语言同样可以实现中介/调节效应分析。

R包mediation:中介效应分析(包括有调节的中介),支持多种模型,包括一般/广义的线性/线性混合模型,但无法报告简单斜率。R包interactions:简单斜率分析(包括二阶和三阶交互),支持多种模型,包括一般/广义的线性/线性混合模型,还能绘制调节效应图和Johnson-Neyman区间图,但无法进行中介分析。R包lavaan:从简单到复杂的路径分析及结构方程模型等都能实现,并且与Mplus的风格很接近,但随着模型变复杂,代码也会变复杂,更高的灵活度牺牲了使用的便捷性。R包processR:由Keon-Woong Moon开发的R包(并不是PROCESS官方的R包),底层通过lavaan实现中介/调节分析。jamovi软件模块jAMM:由Marcello Gallucci开发的R包,同时也是一个jamovi模块,底层同样是通过lavaan实现中介/调节分析。R脚本文件process.R:由PROCESS原作者Andrew F. Hayes开发的一个长达5300行的R脚本文件(不是R包,不是R包,不是R包),在官网可以免费下载(Download - The PROCESS macro for SPSS, SAS, and R)。虽然是官方脚本,但使用起来比较麻烦,需要事先运行一遍脚本(生成一个80多MB大小的R函数),而且目前的beta试用版仍然存在bug和局限。

有一天我幻想,如果能有一个函数把上面这些R包/脚本的功能整合起来,那么使用R语言进行中介/调节效应分析将会变得非常方便……

于是,bruceR::PROCESS()诞生了!

bruceR::PROCESS()函数内部采用mediation包进行中介效应分析、interactions包进行简单斜率分析、lavaan包进行链式多重中介分析,而有调节的中介则是同时调用了mediation和interactions两个包。

bruceR::PROCESS()函数并没有借鉴Hayes提供的官方脚本(毕竟官方有5300行代码),但是在开发时做了严格的比对,以确保结果的准确性(对于中介效应分析,不同软件的点估计是一致的,但区间估计由于使用了Bootstrap重抽样或Monte Carlo模拟,涉及一系列的随机过程,其结果不可能完全相同)。

bruceR::PROCESS()函数:

支持24种SPSS PROCESS模型,详见下图(覆盖了95%以上的需求,剩下来暂不支持的都是极其复杂的模型,如果实在有需要,可以使用lavaan包或Mplus)支持连续或二分类的自变量X、中介变量M、因变量Y支持连续、二分类、多分类的调节变量W支持无限多个平行的中介变量M、最多4个链式的中介变量M、最多2个调节变量W支持无限多个、不同类型的控制变量/协变量支持普通线性模型和线性混合模型(即多层线性模型HLM)支持4种估计中介效应置信区间的方法Percentile Bootstrap 95% CI(默认)Bias-Corrected Percentile Bootstrap 95% CIBias-Corrected and Accelerated (BCa) Percentile Bootstrap 95% CIMarkov Chain Monte Carlo (Quasi-Bayesian) 95% CI(线性混合模型仅支持该类型的置信区间)下面对比了bruceR::PROCESS()函数和官方PROCESS宏程序。PROCESS-bruceR-SPSS.pdf(Page 1)PROCESS-bruceR-SPSS.pdf(Page 2)PROCESS-bruceR-SPSS.pdf(Page 3)PROCESS-bruceR-SPSS.pdf(Page 4)

(PDF文档下载:PROCESS-bruceR-SPSS.pdf)

bruceR::PROCESS()不仅功能丰富,而且使用起来非常简单!

比如我们使用mediation包里面的一个真实数据集student来演示。

library(bruceR) #### Demo Data #### ?mediation::student data=mediation::student %>% dplyr::select(SCH_ID, free, smorale, pared, income, gender, work, attachment, fight, late, score) names(data)[2:3]=c("SCH_free", "SCH_morale") names(data)[4:7]=c("parent_edu", "family_inc", "gender", "partjob") data$gender01=1-data$gender # 0 = female, 1 = male data$gender=factor(data$gender01, levels=0:1, labels=c("Female", "Male"))

先做一个调节效应分析,调节变量是性别(事先转换为factor类型),属于二分变量。

## Model 1 ## PROCESS(data, y="score", x="late", mods="gender")Model 1:调节效应(二分类调节变量)

如果调节变量是连续变量,那么默认取平均值及其上、下一个标准差的点来做简单斜率分析。当然,你还可以通过设置mod1.val和mod2.val参数来手动输入调节变量的多个取值。与官方PROCESS一样,这里最多支持两个调节变量(多于两个调节变量也难以解释了)。

PROCESS(data, y="score", x="gender", mods="late")->P P$results[[1]]$jn[[1]] # Johnson-Neyman interval P$results[[1]]$jn[[1]]$plot # Johnson-Neyman plot (ggplot object)Model 1:调节效应(连续型调节变量)

除此之外,调节变量还可以是多分类的(事先在R里面转换为factor类型)。

# (allows multicategorical moderator) d=airquality d$Month=as.factor(d$Month) # moderator: factor with levels "5"~"9" PROCESS(d, y="Temp", x="Solar.R", mods="Month")Model 1:调节效应(多分类调节变量)

当调节变量有两个时,需要额外设置mod.type参数,默认是"2-way"(例如Model 2),还可以设为"3-way"(例如Model 3)。

## Model 3 ## PROCESS(data, y="score", x="late", mods=c("gender", "family_inc"), mod.type="3-way")Model 3:有调节的调节效应

下面是中介效应分析的几个例子。首先是Model 4(单个中介或平行多重中介,可以设置无限多个中介变量)。这里我们加入了性别作为控制变量,通过covs参数设定(可以加入无限多个控制变量)。

## Model 4 ## PROCESS(data, y="score", x="parent_edu", meds="family_inc", covs="gender", ci="boot", nsim=1000, seed=1)Model 4:中介效应

Model 4的其他用法这里不再截图,代码也是十分简单,下面是两个例子。

# (allows an infinite number of multiple mediators in parallel) PROCESS(data, y="score", x="parent_edu", meds=c("family_inc", "late"), covs=c("gender", "partjob"), ci="boot", nsim=1000, seed=1) # (multilevel mediation) PROCESS(data, y="score", x="SCH_free", meds="late", clusters="SCH_ID", ci="mcmc", nsim=1000, seed=1)

链式中介(Model 6)则需要进一步设定med.type参数,这也是唯一一个需要设定这个参数的情况。多个变量用c()把变量名连起来就好了。

## Model 6 ## PROCESS(data, y="score", x="parent_edu", meds=c("family_inc", "late"), covs=c("gender", "partjob"), med.type="serial", ci="boot", nsim=1000, seed=1)Model 6:链式中介效应

最后,来一个有调节的中介作为结尾,需要设定mod.path参数:"x-y"、"x-m"、"m-y"中的一个或多个,或者设为"all"(等价于设为所有3个路径)。有调节的中介存在很多情形,下面只是其中一种(Model 8)。

## Model 8 ## PROCESS(data, y="score", x="fight", meds="late", mods="gender", mod.path=c("x-m", "x-y"), ci="boot", nsim=1000, seed=1)Model 8:有调节的中介(同时调节X-M和X-Y路径)

更多例子和用法说明,请参考:

bruceR::PROCESS()的函数帮助文档PROCESS-bruceR-SPSS(PDF和Markdown文件)

另外,函数还提供了保存结果的功能,可以把回归模型的结果以APA三线表的形式存到Word文档,内部调用的是bruceR::model_summary()函数。你可能会问,怎么不能保存中介或调节效应的结果到Word呢?如果能保存,岂不是更方便?这事儿你得问问Hayes,毕竟官方PROCESS甚至无法把任何结果保存到Word呀!(不,主要是我比较懒,什么时候我勤快了,也许就能把这个功能给实现了,哈哈!)

欢迎更新你电脑里的bruceR包。

如果遇到bug,并且确定是bruceR的问题,还请指出。

如果是R语言入门不到位的问题,bruceR不背锅哈!

以上。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有