用python做带调节的中介模型检验详解
简介在采用传统统计手段的经济学,心理学等学科中,通常是在阅读大量文献的基础上,提出自己的理论假设,并建立模型,收取一定量(通常是几百)的样本数据来验证自己的假设。其中就包含了调节,中介变量这类非常容易发论文的模型。而在学习中我们会发现老师让我们使用SPSS的PROCESS插件来处理这类模型。但是SPSS收费(虽然用的通常是破解版),PROCESS插件安装麻烦,于是我想到了python,今天就来教大
简介
在采用传统统计手段的经济学,心理学等学科中,通常是在阅读大量文献的基础上,提出自己的理论假设,并建立模型,收取一定量(通常是几百)的样本数据来验证自己的假设。其中就包含了调节,中介变量这类非常容易发论文的模型。而在学习中我们会发现老师让我们使用SPSS的PROCESS插件来处理这类模型。但是SPSS收费(虽然用的通常是破解版),PROCESS插件安装麻烦,于是我想到了python,今天就来教大家使用python的PyProcessMacro开源库来进行调节中介模型的统计检验。
事前准备
关于搭建python环境的内容,这里就不多说了,可以下载安装Anaconda的集成环境,当然更好的选择是使用云IDE,这里向大家推荐一下Datalore,Jetbrains出品的云IDE,包含了各种科学计算必须库,需要的库也可以很方便的搜索安装,这里是链接:
https://datalore.jetbrains.com/notebooks
只要注册账户就能使用基本的计算引擎,满足一般使用。
接下来安装必要的库:
pip install pyprocessmacro
anaconda prompt里输入以上pip安装指令,或者在datalore里:
搜索pyprocessmacro,然后点击Install,安装完毕弹出右下角提醒,点击restart kernel重启内核,就安装完毕了!
在安装完库之后:
我们还需要process的模型图,
百度文库链接点这
里面定义好的是各式各样的模型图和相应的计算模型,我们需要找到我们研究符合的模型,记住它的序号,这里以8号模型为例:
其中X是自变量,Mi是多个中介变量,Y是因变量,W是调节变量。
实例
(以下使用数据为真实采集样本数据,出于隐私安全不公开)
在准备好我们需要的库,模型之后,我们就可以开始实际的分析了,首先呢,我们需要把我们的变量和模型对应上,本案例中的模型是这样子的:
和上面我们找的8号模型对比基本一致,Uncertainty是自变量,State_N是中介变量,Condition是调节变量,MIL是因变量,只不过多了一个Trait_N作为控制变量。
首先我们把我们需要的变量读出来:
import pandas as pd
df = pd.read_excel('xxx.xlsx')
df_X = df[['Condition','Uncertainty','State_N','MIL','Trait_N']
这里给没有了解过基本语法的小白说几句,使用.info()方法可以轻松的看到整个数据框的基本信息,图中包含了694条非空数据,以及5个变量,使用.head()方法可以打印出前五条信息进行速览,使用.tail()方法可以看到倒数前五条信息,使用.describe()方法可以对数据进行描述统计,打印出频数,均数,标准差,最小值,四分位差,最大值信息。
接下来我们进行检验,并打印出模型的总结信息:
from pyprocessmacro import Process
p = Process(data=df_X, model=8, x="Uncertainty", y="MIL", w="Condition",m=["State_N"],controls=["Trait_N"],controls_in="all_to_y")
p.summary()
需要重点讲解的是第二条语句,
data即我们上面读出来的数据框,后面的x,y,w,m,controls都是以列名的形式从我们的数据框中读出。
model=8即8号模型,是我们根据我们自己的模型和百度文库里的链接比较选取出来的模型序号。
x即自变量,y即因变量,w即调节变量,m即中介变量,controls即控制变量,其中中介变量和控制变量都可是以列表的形式传输的,如果你想传多个,只要把[“State_N”]改为[“你的变量名1,你的变量名2”]依次往后类推即可,这和SPSS里面的变量选取是类似的。
controls_in代表控制变量的路径,有"x_to_m",“all_to_y”,"all"三个参数。
x_to_m表示在自变量和中介变量中设置控制,all_to_y表示在自变量到因变量之间和中介变量到因变量之间设置,all表示在所有运算中都会进行控制。
此外还有一些参数,比如logit=True,表示如果你的因变量是二分类输出(0,1),那么需要设置该参数会使用logistic回归。
modval={“condition”:[-1,0,1]},表示对调节变量设置自定义的观察点,默认的观察点是M-SD,M,M+SD,本案例中由于condition本身就只有三个值,所以结果是一样的。
接下来开始总结的解读:
Number of samples discarded due to convergence issues: 0
***************************** OUTCOME MODELS ****************************
Outcome = MIL
OLS Regression Summary
R² Adj. R² MSE F df1 df2 p-value
0.2692 0.2628 1.0318 50.6744 5 688 0.0000
Coefficients
coeff se t p LLCI ULCI
Cons 4.6885 0.2316 20.2411 0.0000 4.2345 5.1425
Uncertainty -0.6470 0.0544 -11.8873 0.0000 -0.7536 -0.5403
Condition 0.2938 0.2120 1.3861 0.1662 -0.1216 0.7092
Uncertainty*Condition -0.0912 0.0652 -1.3985 0.1624 -0.2189 0.0366
Trait_N 0.0051 0.0334 0.1511 0.8799 -0.0605 0.0706
State_N 0.6168 0.0547 11.2802 0.0000 0.5096 0.7239
-------------------------------------------------------------------------
Outcome = State_N
OLS Regression Summary
R² Adj. R² MSE F df1 df2 p-value
0.0368 0.0312 0.5482 8.7844 3 690 0.0000
Coefficients
coeff se t p LLCI ULCI
Cons 2.7162 0.1236 21.9822 0.0000 2.4740 2.9584
Uncertainty 0.1719 0.0379 4.5337 0.0000 0.0976 0.2462
Condition 0.2968 0.1538 1.9295 0.0541 -0.0047 0.5982
Uncertainty*Condition -0.1042 0.0473 -2.2034 0.0279 -0.1969 -0.0115
-------------------------------------------------------------------------
********************** DIRECT AND INDIRECT EFFECTS **********************
Conditional direct effect(s) of Uncertainty on MIL at values of the moderator(s):
Condition Effect SE t p LLCI ULCI
-1.0000 -0.5558 0.0843 -6.5938 0.0000 -0.7210 -0.3906
0.0000 -0.6470 0.0544 -11.8873 0.0000 -0.7536 -0.5403
1.0000 -0.7381 0.0855 -8.6290 0.0000 -0.9058 -0.5705
Conditional indirect effect(s) of Uncertainty on MIL at values of the moderator(s):
Mediator Condition Effect Boot SE BootLLCI BootULCI
State_N -1.0000 0.1703 0.0439 0.0946 0.2677
State_N 0.0000 0.1060 0.0280 0.0562 0.1668
State_N 1.0000 0.0417 0.0403 -0.0346 0.1234
**************** INDEX OF MODERATED MEDIATION ******************
Moderator Mediator Index Boot SE LLCI ULCI
Condition State_N -0.0643 0.0314 -0.1303 -0.0045
首先是两个回归模型,第一个模型表示因变量为MIL时的回归模型,看P值可以发现cons(即常量),Uncertainty(自变量),State_N(中介变量)是在该回归方程中是显著的,Condition(调节变量)和交互项均不显著。第二个模型表示因变量是中介变量State_N时的回归方程构建,其中Uncertainty(自变量)是显著的,condition(调节变量)不显著。
PS:这个不重要。
接下来看条件直接效应和条件间接效应。
条件直接效应(即conditional direct effect)在本案例中P值均小于.05,说明调节作用存在。
条件间接效应(即Conditional indirect effect)在本案例中,当condition位于低水平和中间水平时,BootLLCI和BootULCI区间不含0,中介效应存在,当condition位于高水平时,包含0,中介效应不存在。在三种水平下,中介效应是否存在不一致,说明调节中介效应存在。
最后的调节中介结果。
即最后一行,判定指标中的LLCI和ULCI也没有包含0,说明该模型的调节中介效应成立。
此外该库还提供了方便的作图功能:
通过p.plot_conditional_direct_effects和p.plot_conditional_indirect_effects作图,图中显示的是单调节变量的图,如果有双调节变量,可以将第二个调节变量作为类别轴导入,即在后面的参数里加上hue=‘xxxx’。也可以将第二个调节变量作为列轴导入,生成多个子图,加上col=‘xxxx’。
参考资料:
https://github.com/QuentinAndre/pyprocessmacro
https://www.zhihu.com/question/317327367?sort=created
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)