中介效应的元分析

来源:SPSS学堂
作者:陈慧萍
 中介效应的元分析 
此方法将元分析和结构方程模型方法相结合(MASEM),在建立测量模型的基础之上,采用元分析的方法来估计构念间的“真实”相关系数。该方法可以比较不同理论在解释特定变量间关系时的解释力度。例如,以往辱虐管理的研究多采用公平视角和资源视角来解释其对员工组织公民行为(OCB)和反生产工作行为(CWB)的影响。然而,这些研究中并没有研究提供一个全面的视角解释为什么辱虐管理影响OCB和CWB,以及在这两种作用机制中,哪一种更为重要。为了解决此问题,本研究采用427项包含973个独立相关性的实证研究(N = 336,236)为样本,利用元分析-结构方程模型对模型进行分析。研究结果表明,组织公平(公平视角)和工作压力(资源视角)在辱虐管理与组织公民行为和反生产行为的关系中起中介作用。此外,组织公平在辱虐管理和OCB之间的中介效应影响比工作压力的中介效应影响更大,而工作压力在辱虐管理与CWB之间的中介效应影响比组织公平的中介效应影响更大。
方法:
一、文献检索与选取
数据库
PsycINFO, Education Research Complete,Psychology and Behavioral Sciences Collection,PsycARTICLES
关键研究者文献搜索
文献特征编码
基于R语言进行数据处理
1、主效应+同质性检验
2、调节效应检验
3、中介效应检验
A部分中介
B完全中介
C嵌套模型
D反转模型
固定效应模型:真值是一个点(差异小)
随机效应模型:真值是一个区间(差异大)
注意:
交代每一步删除的目的和标准、一定要报告两两相关系数、数量大于20,一个群体只取一个数据,追踪数据一般选第一次,多组数据选取组均值。
Metafor  删除异常值
metaSEM 中介效应的元分析软件
语句:
library(metafor)
data <- read.table('data2.txt')
data
##1.计算误差项
dat <- escalc(measure='ZCOR', ri=ri, ni=ni, data=data)
#2.先检验是否存在异常值,若有异常值,先剔除该研究在进入后学分析
inf <- influence(res)
### plot the influence diagnostics
plot(inf, layout=c(8,1))
### to save as png file
png(filename='plot_of_influence_diagnostics.png', pointsize=10,
res=95, width=680, height=1400, type='cairo')
##3.拟合固定效应模型
res <- rma(yi, vi, data=dat, method='FE')
### 4.拟合随机效应模型
res <- rma(ri=ri, ni=ni, measure='ZCOR', data=data)
英文文献可参考
《Why Abusive Supervision Impacts Employee OCB and CWB: A Meta-Analytic Review of Competing Mediating Mechanisms. Journal of Management.》
中文文献可参考
《父母卷入在家庭社会经济地位与学业成就间的中介作用:元分析结构方程模型》
一、数据导入
library(metaSEM)
library(semPlot)
data <- readStackVec('data.txt')
n<-scan(file='n.txt')
pi<-scan(file='pi.txt', what='')
grade<-scan(file='grade.txt', what='')
ses<-scan(file='ses2.txt', what='')
options(scipen=3),不显示科学计数法
二、stage1,计算效应量,即效应量调节效应分析
1 计算效应量和同质性检验
stage1:
fixed1 <- tssem1(data, n, method='FEM')
summary(fixed1)
2 中介效应分析(这边用中文文献进行参考)
STAGE2:估计中介效应
部分中介效应模型
A1 <- create.mxMatrix(c(0,0,0,
'0.1*SES2PI',0,0,
'0.1*SES2AA','0.1*PI2AA',0),
type='Full', byrow=TRUE, ncol=3, nrow=3,as.mxMatrix=FALSE)
dimnames(A1)[[1]] <- dimnames(A1)[[2]] <- c('SES','PI','AA')
A1
SES          PI          AA
SES '0'          '0'         '0'
PI  '0.1*SES2PI' '0'         '0'
AA  '0.1*SES2AA' '0.1*PI2AA' '0'
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
SES PI           AA
SES '1' '0'          '0'
PI  '0' '0.1*var_PI' '0'
AA  '0' '0'          '0.1*var_AA'
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
SES PI           AA
SES '1' '0'          '0'
PI  '0' '0.1*var_PI' '0'
AA  '0' '0'          '0.1*var_AA'
fixed2 <- tssem2(fixed1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB', model.name='TSSEM2',
mx.algebras=list( SES=mxAlgebra(SES2PI*PI2AA, name='SES')))
summary(fixed2)
完全中介模型
A1 <- create.mxMatrix(c(0,0,0,
'0.1*SES2PI',0,0,
0,'0.1*PI2AA',0),
type='Full', byrow=TRUE, ncol=3, nrow=3,as.mxMatrix=FALSE)
dimnames(A1)[[1]] <- dimnames(A1)[[2]] <- c('SES','PI','AA')
A1
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
fixed2 <- tssem2(fixed1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB', model.name='TSSEM2',
mx.algebras=list( SES=mxAlgebra(SES2PI*PI2AA, name='SES')))
summary(fixed2)
#相关模型设定
A1 <- create.mxMatrix(c(0,0,0,
0,0,0,
'0.1*SES2AA','0.1*PI2AA',0),
type='Full', byrow=TRUE, ncol=3, nrow=3,as.mxMatrix=FALSE)
dimnames(A1)[[1]] <- dimnames(A1)[[2]] <- c('SES','PI','AA')
A1
S1 <- create.mxMatrix(c(1,
'0.1*cor',1,
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
S1 <- create.mxMatrix(c(1,
'0.1*cor',1,
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
random2 <- tssem2(random1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB', model.name='TSSEM2')
summary(random2)
my.plot <- meta2semPlot(random2, manNames=c('SES','PI','AA') )
semPaths(my.plot, whatLabels='est', nCharNodes=10, layout='spring',
color='white', edge.label.cex=1.2)
#完全中介反转模型
A1 <- create.mxMatrix(c(0,'0.1*PI2SES',0,
0,0,0,
'0.1*SES2AA',0,0),
type='Full', byrow=TRUE, ncol=3, nrow=3,as.mxMatrix=FALSE)
dimnames(A1)[[1]] <- dimnames(A1)[[2]] <- c('SES','PI','AA')
A1
S1 <- create.mxMatrix(c('0.1*var_SES',
0,1,
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
S1 <- create.mxMatrix(c('0.1*var_SES',
0,1,
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
random2 <- tssem2(random1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB', model.name='TSSEM2',
mx.algebras=list( PI=mxAlgebra(PI2SES*SES2AA, name='PI')))
summary(random2)
my.plot <- meta2semPlot(random2, manNames=c('SES','PI','AA') )
semPaths(my.plot, whatLabels='est', nCharNodes=10, layout='spring',
color='white', edge.label.cex=1.2)
#完全中介模型的分组比较
1 比较不同年级的中介模型
stage1
cluster1 <- tssem1(data, n, method='FEM',
cluster=grade)
summary(cluster1)
A1 <- create.mxMatrix(c(0,0,0,
'0.1*SES2PI',0,0,
0,'0.1*PI2AA',0),
type='Full', byrow=TRUE, ncol=3, nrow=3,as.mxMatrix=FALSE)
dimnames(A1)[[1]] <- dimnames(A1)[[2]] <- c('SES','PI','AA')
A1
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
stage2
cluster2 <- tssem2(cluster1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB')
summary(cluster2)
图形输出:
my.plots <- lapply(X=cluster2, FUN=meta2semPlot,
manNames=c('SES','PI','AA') )
layout(t(1:2))
semPaths(my.plots[[1]], whatLabels='est', nCharNodes=10,
color='orange', layout='spring', edge.label.cex=0.8)
title('elementary')
semPaths(my.plots[[2]], whatLabels='est', nCharNodes=10,
color='skyblue', layout='spring', edge.label.cex=0.8)
title('secondary')
2 比较不同父母卷入的中介模型
stage1
cluster1 <- tssem1(data, n, method='FEM',
cluster=pi)
summary(cluster1)
stage2
cluster2 <- tssem2(cluster1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB')
summary(cluster2)
图形输出:
my.plots <- lapply(X=cluster2, FUN=meta2semPlot,
manNames=c('SES','PI','AA') )
layout(t(1:2))
semPaths(my.plots[[1]], whatLabels='est', nCharNodes=10,
color='orange', layout='spring', edge.label.cex=0.8)
title('home')
semPaths(my.plots[[2]], whatLabels='est', nCharNodes=10,
color='skyblue', layout='spring', edge.label.cex=0.8)
title('school')
#部分中介模型的分组比较
1 比较不同年级的中介模型
stage1
cluster1 <- tssem1(data, n, method='FEM',
cluster=grade)
summary(cluster1)
A1 <- create.mxMatrix(c(0,0,0,
'0.1*SES2PI',0,0,
'0.1*SES2AA','0.1*PI2AA',0),
type='Full', byrow=TRUE, ncol=3, nrow=3,as.mxMatrix=FALSE)
dimnames(A1)[[1]] <- dimnames(A1)[[2]] <- c('SES','PI','AA')
A1
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
S1 <- create.mxMatrix(c(1,
0,'0.1*var_PI',
0,0,'0.1*var_AA'),byrow=TRUE, type='Symm', as.mxMatrix=FALSE)
dimnames(S1)[[1]] <- dimnames(S1)[[2]] <- c('SES','PI','AA')
S1
stage2
cluster2 <- tssem2(cluster1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB')
summary(cluster2)
图形输出:
my.plots <- lapply(X=cluster2, FUN=meta2semPlot,
manNames=c('SES','PI','AA') )
layout(t(1:2))
semPaths(my.plots[[1]], whatLabels='est', nCharNodes=10,
color='orange', layout='spring', edge.label.cex=0.8)
title('elementary')
semPaths(my.plots[[2]], whatLabels='est', nCharNodes=10,
color='skyblue', layout='spring', edge.label.cex=0.8)
title('secondary')
2 比较不同父母卷入的中介模型
stage1
cluster1 <- tssem1(data, n, method='FEM',
cluster=pi)
summary(cluster1)
stage2
cluster2 <- tssem2(cluster1, Amatrix=A1, Smatrix=S1, diag.constraints=TRUE,
intervals.type='LB')
summary(cluster2)
图形输出:
my.plots <- lapply(X=cluster2, FUN=meta2semPlot,
manNames=c('SES','PI','AA') )
layout(t(1:2))
semPaths(my.plots[[1]], whatLabels='est', nCharNodes=10,
color='orange', layout='spring', edge.label.cex=0.8)
title('home')
semPaths(my.plots[[2]], whatLabels='est', nCharNodes=10,
color='skyblue', layout='spring', edge.label.cex=0.8)
title('school')
(0)

相关推荐