用r语言做数据分析假设检验(中介效应的做法)
用r语言做数据分析假设检验(中介效应的做法)第一步检验总效应下面我们一步一步看操作:df=iris set.seed(12334) df$random1=runif(nrow(df) min=min(df$Sepal.Length) max=max(df$Sepal.Length)) df$mediator=df$Sepal.Length*0.35 df$random1*0.65 df$random2=runif(nrow(df) min=min(df$mediator) max=max(df$mediator)) df$dv=df$mediator*0.35 df$random2*0.65以上代码,我们用花瓣的长度为自变量,以自变量为基础模拟出了我们的中介变量mediator,还有因变量dv,此时因为我们数据都是自己模拟出来的,所以我们知道中介变量包含0.35的自变量变异,而因变量包含0.35的中介变量的变异,所以我们估计中介作
如果自变量X通过某一变量M对因变量Y产生一定影响,则称M为X和Y的中介变量。研究中介作用的目的是在已知X和Y关系的基础上,探索产生这个关系的内部作用机制。作用关系图如下:
It occurs when the independent variable's effect on the dependent variable is — as the name says — mediated by another variable: A mediator.
今天就给大家写一个如何用R语言做中介作用的例子。
数据介绍为了更好的让大家理解中介作用,今天我们基于iris数据集自己模拟一个数据集。
df=iris
set.seed(12334)
df$random1=runif(nrow(df) min=min(df$Sepal.Length) max=max(df$Sepal.Length))
df$mediator=df$Sepal.Length*0.35 df$random1*0.65
df$random2=runif(nrow(df) min=min(df$mediator) max=max(df$mediator))
df$dv=df$mediator*0.35 df$random2*0.65
以上代码,我们用花瓣的长度为自变量,以自变量为基础模拟出了我们的中介变量mediator,还有因变量dv,此时因为我们数据都是自己模拟出来的,所以我们知道中介变量包含0.35的自变量变异,而因变量包含0.35的中介变量的变异,所以我们估计中介作用是存在的,而且自变量对因变量的总效应应该是35% × 35% = 12.25%。
上面的这段话,大家好好理解!
分析操作接下来我们就来看看我们的统计结果是不是和我们想的一样。
- 第一步,检验总效应,本例中就是花瓣长度是不是会影响dv这个变量。
- 第二步,检验自变量对中介变量的效应,本例中就是花瓣长度对mediator这个变量的作用。
- 第三步,同时检验中介变量和自变量对因变量的效应。
- 第四步,对直接效应和间接效应进行比较。
下面我们一步一步看操作:
第一步检验总效应
总效应就是自变量和因变量之间的关系,在中介中对于总效应的理解有两派思想,第一派认为只有总效应显著,才有中介作用;第二派人认为,自变量和因变量之间的关系不存在时也可以有中介作用。(Bollen 1989 p. 52; Hayes 2018 p. 80)
所以总效应有没有问题不大,关键看你的审稿人如何想。
具体到我们的数据,检验总效应:
fit.totaleffect=lm(dv~Sepal.Length df)
summary(fit.totaleffect)
看到没,总效应和我们预想的一样0.12多,嘿嘿。
第二步,检验自变量对中介变量的效应
这一步检验必须的显著才行,不然就不用做了,因为如果自变量都不能影响中介变量,那还有啥的中介作用呢?很好理解
fit.mediator=lm(mediator~Sepal.Length df)
summary(fit.mediator)
差不多,这一步的效应也大概是0.35,哈哈。
第三步同时检验中介变量和自变量对因变量的效应
这一步就是将自变量和中介变量同时纳入回归方程,这一步中中介变量必须显著,整个方程变异的解释力度必须更大,也就是R方比只有自变量时更大。
fit.dv=lm(dv~Sepal.Length mediator df)
summary(fit.dv)
看上面的结果,我们知道中介变量作用依然显著,结合步骤2我们就可以得出确实有中介作用,值得注意的是mediator的系数也差不多0.35。
之前第一步是我们的自变量对因变量还有显著作用,此时没了,说明我们这个是个完全中介,什么意思呢?就是说自变量对因变量的作用完全的是中介变量造成的,或者说完全地被中介变量所解释。同样地,如果此步中自变量系数依然显著,则为部分中介。
第四步拟合系数估计和效应对比
此时我们需要安装一个新包mediation:
install.packages("mediation")
library(mediation)
然后我们把我们二三步做的回归方程喂给这个包的mediate方法:
results = mediate(fit.mediator fit.dv treat='Sepal.Length' mediator='mediator' boot=T)
summary(results)
注意这个mediate方法需要我们指定哪个是自变量,哪个是中介变量,在本例中treat='Sepal.Length' mediator='mediator',然后用bootstrap方法估计系数置信区间。
下面写一写输出的结果怎么看:
- ACME stands for average causal mediation effects,这个是自变量对因变量的间接作用,注意它是由自变量对中介变量的作用和中介变量对因变量的作用相乘得到的。0.3*0.37=0.11
- 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.这个是中介效应的占比,是用间接效应除以总效应得到的。0.113/0.13=0.87
今天给大家写了中介作用的R语言检验,其实用结构方程做更简单,不过这么写相信大家都能理解,如果有用请转发点赞,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
R语言:利用caret的dummyVars函数设置虚拟变量
数据可视化——R语言为ggplot图形添加P值和显著性水平
机器学习:什么是自然语言处理
R语言作图:ggplot2 分面(facet)相关设置
R语言作图:如何在同一图层画多个geoms
R数据分析:再写stargazer包,如何输出漂亮的表格
R数据分析:如何用R做验证性因子分析及画图,实例操练