查看原文
其他

复现丨跨层模型 in Mplus

萜妹 萜心话 2023-05-14

小可爱们好,好久没进行顶刊复现了。今天带大家一起复现Mplus中跨层有调节的中介模型。

Wong, M.-N., Cheng, B. H., Lam, L. W.-Y., & Bamberger, P. A. (2022). Pay Transparency as a Moving Target: A Multi-Step Model of Pay Compression, I-Deals, and Collectivist Shared Values. Academy of Management Journal. https://doi.org/10.5465/amj.2020.1831

整体介绍

故事的大致逻辑是:薪酬透明度可能会揭示具有相似工作级别的员工之间的薪酬差异,这将被视为异常现象。为了避免上述情况,领导会使员工彼此间的薪酬更加相似(即可变薪酬压缩)。员工进而会将薪酬调整的请求转移到不易观察到的形式(即特殊交易,尤其是非货币特殊交易,如额外的假期、额外的培训)。这些请求也更有可能会被允许。在鼓励个人密切观察和监督其同伴的集体主义共同价值观下,越有可能发生上述的隐藏性请求。

简而言之,公司层面的薪酬透明度,会导致可变薪酬压缩,进而导致员工特殊交易请求率与通过率的提高;上述间接效应将在以集体主义共同价值观为特征的企业中被放大

Research model

公开数据

获取地址:https://osf.io/nuvge/.

公开数据

各研究分别为:

  • 研究1:采用实验,检验假设1和5a;
  • 研究2:采用问卷,检验所有假设。

本次主要分享跨层模型在Mplus中的处理方式,仅以Study 2 为例。

Study 2 Result

结果复现

语法解读

数据导入

DATA:
FILE = "Data_Study_2.dat";

意为后续分析数据为同文件夹下的Data_Study_2.dat。

变量命名

VARIABLE:
NAMES = cid 
 num_emp revenue oten_sd age_sd edu_sd gen_div 
 oten_mc oten_mc2 bp_gini bp_cv 
 pt_p1 pt_p2 pt_p3 pt_p4 
 pt_o1 pt_o2 pt_o3 pt_o4 
 pt_c1 pt_c2 pt_c3 pt_c4
 colval1 colval2R colval3 
 vp_gini vp_cv 
 idr_d1 idr_d2 idr_d3 idr_d4 idr_b idr_f
 idg_d1 idg_d2 idg_d3 idg_d4 idg_b idg_f; 

Mplus的数据文件中不包含标题行,因此我们需要在Mplus中对每列数据命名,以便后续分析时调用。

作者这里的各变量命名及含义为:

企业序号
团队规模  企业年销售收入  团队任职年限异质性  团队年龄异质性  团队教育程度异质性  团队性别异质性
团队平均任职年限  团队平均任职年限的平方  基本薪酬基尼系数  基本薪酬变异系数
薪酬流程透明度1  薪酬流程透明度2  薪酬流程透明度3  薪酬流程透明度4  
薪酬结果透明度1  薪酬结果透明度2  薪酬结果透明度3  薪酬结果透明度4  
薪酬沟通透明度1  薪酬沟通透明度2  薪酬沟通透明度3  薪酬沟通透明度4  
集体主义共同价值观1  集体主义共同价值观2R 集体主义共同价值观3
可变薪酬压缩-基尼系数  可变薪酬压缩-变异系数

发展型特殊交易请求1  发展型特殊交易请求2  发展型特殊交易请求3  发展型特殊交易请求4  利益型特殊交易请求  特殊交易请求_f
发展型特殊交易通过1  发展型特殊交易通过2  发展型特殊交易通过3  发展型特殊交易通过4  利益型特殊交易通过  特殊交易通过_f;

变量调用

 USEVARIABLES = cid
   num_emp revenue oten_sd age_sd edu_sd gen_div oten_mc oten_mc2 
   bp_gini vp_gini
   pt_c1 pt_c2 pt_c3 pt_c4
   pt_p1 pt_p2 pt_p3 pt_p4
   pt_o1 pt_o2 pt_o3 pt_o4
   idr_d1 idr_d2 idr_d3 idr_d4
   idr_b
   idg_d1 idg_d2 idg_d3 idg_d4 
   idg_b;

上一步骤是对所有数据列进行命名,而我们在具体分析时并不会都用到,所以这里需要告诉软件,我们会用到哪些列。

作者这里省略了bp_cv、vp_cv、idr_f 等无关列。

变量层级

 CLUSTER = cid;
 WITHIN = ;
 BETWEEN = num_emp revenue oten_sd age_sd edu_sd gen_div oten_mc oten_mc2
   bp_gini vp_gini
   pt_c1 pt_c2 pt_c3 pt_c4 
   pt_p1 pt_p2 pt_p3 pt_p4
   pt_o1 pt_o2 pt_o3 pt_o4
   idg_d1 idg_d2 idg_d3 idg_d4 
       idg_b;    

因此是跨层模型,所以还需要告诉软件,以哪个变量划分组织、组内?又有哪些变量是组间层次?哪些变量是组内层次?

Data

作者定义了组间变量,未在组间层次出现的变量既可分解为组间变量也可分解为组内变量。

分析设置

 ANALYSIS:
        TYPE = twolevel random;
        ALGORITHM=INTEGRATION;
        Integration=montecarlo;
        Processor = 8;

第一行指定了分析数据的类型为两层随机效应模型,即在不同层次之间存在随机变异。

第二行指定了分析所使用的算法为积分法(Integration),即对模型的似然函数进行积分计算,得出相应的参数估计值和标准误。

第三行指定了对于积分法的具体实现方法,这里采用蒙特卡罗模拟(Monte Carlo)方法进行计算。

第二、三行涉及针对调节效应的计算。

第四行指定了所使用的处理器数量为8,这是指定Mplus在计算过程中可使用的最大处理器数量。这可以提高计算速度和效率,特别是对于较大的数据集和复杂的模型。

Processor参数可以设置为任何大于1的正整数,以指定Mplus在计算过程中可使用的最大处理器数量。具体来说,Processor参数可以设置为计算机的实际处理器核心数量,以最大化计算速度和效率。

测量模型

  MODEL:
      %BETWEEN%
        pt_pd by pt_c1 pt_c2 pt_c3 pt_c4;
        pt_od by pt_p1 pt_p2 pt_p3 pt_p4;
        pt_cd by pt_o1 pt_o2 pt_o3 pt_o4;
        pt by pt_pd pt_od pt_cd;

薪酬透明度由于是一个多维变量,所以进行了两次潜变量的生成。

作者先根据12道题得分(观测变量)生成了3个子维度得分(潜变量),再由这3个子维度得分生成了最终得分(潜变量)。

        colvalb by colval1 colval3;
        colval1@0 colval3@0;
        
        idr_db  by idr_d1 idr_d2 idr_d3 idr_d4 ;
        idr_bb  by idr_b;
        idr_d1@0 idr_d2@0 idr_d3@0 idr_d4@0 ;
        idr_b@0;

        idg_db by idg_d1 idg_d2 idg_d3 idg_d4;
        idg_bb by idg_b;
        idg_b@0;

在Between层生成其他的潜变量。

idr_b@0意为将idr_b的方差固定为0

        [vp_gini idr_db idr_bb idg_db idg_bb];
        [idr_d1@0 idr_d2@0 idr_d3@0 idr_d4@0 idr_b@0];
        [idg_d1@0 idg_d2@0 idg_d3@0 idg_d4@0 idg_b@0];

[vp_gini idr_db idr_bb idg_db idg_bb]是指估计这些变量的截距。

 int2 | colvalb xwith vp_gini;

该句含义为,将colvalb与vp_gini的交互项定义为int2。

 colvalb (w);

该句含义为,将colvalb的方差定义为w,后续计算效应量时会用到。

      %WITHIN%
        idr_dw  by idr_d1 idr_d2 idr_d3 idr_d4 ;
        idr_bw  by idr_b ;
        idr_b@0;

在组内层次估计由员工汇报的变量,后续结构模型的分析中不会用到。

结构模型

  MODEL:
      %BETWEEN%
        vp_gini on num_emp revenue oten_sd age_sd edu_sd gen_div oten_mc oten_mc2 bp_gini 
          pt(a);

        idr_db on num_emp revenue oten_sd age_sd edu_sd gen_div oten_mc oten_mc2 bp_gini 
          pt 
          vp_gini (b1_1)
          colvalb
          int2 (b1_3);

        idr_bb ononnum_emp revenue oten_sd age_sd edu_sd gen_div oten_mc oten_mc2 bp_gini 
          pt 
          vp_gini (b2_1)
          colvalb
          int2 (b2_3);
        
        idg_db on num_emp revenue oten_sd age_sd edu_sd gen_div oten_mc oten_mc2 bp_gini 
          pt vp_gini idr_db (c1);

        idg_bb on num_emp revenue oten_sd age_sd edu_sd gen_div oten_mc oten_mc2 bp_gini 
          pt vp_gini idr_db (c2);

        idr_bb with idr_db;
        idg_bb with idg_db;

这里跟着Between部分的测量模型之后,萜妹为了表达清晰才重写了次“MODEL:       %BETWEEN%”,实际上是不需要重复的。

作者利用on语句,根据模型定义了多个回归关系,并对部分回归参数命名。

如将pt对vp_gini的回归系数命名为了a。

  MODEL CONSTRAINT:

        NEW(id_d_h, id_d_l, id_d_diff,
        id_b_h, id_b_l, id_b_diff,
        ss_d_h, ss_d_l, ss_d_diff,
        ss_b_h, ss_b_l, ss_b_diff);

        id_d_h=a*(b1_1+b1_3*sqrt(w))*c1;
        id_d_l=a*(b1_1-b1_3*sqrt(w))*c1;
        id_d_diff=id_d_h-id_d_l;
        id_b_h=a*(b2_1+b2_3*sqrt(w))*c2;
        id_b_l=a*(b2_1-b2_3*sqrt(w))*c2;
        id_b_diff=id_b_h-id_b_l;

        ss_d_h=b1_1+b1_3*sqrt(w);
        ss_d_l=b1_1-b1_3*sqrt(w);
        ss_d_diff=ss_d_l-ss_d_h;
        ss_b_h=b2_1+b2_3*sqrt(w);
        ss_b_l=b2_1-b2_3*sqrt(w);
        ss_b_diff=ss_b_l-ss_b_h;

在model constraint部分,新生成了一些变量。具体的数据关系在下面根据等式定义。

注意这里的sqrt(w),就是我们常说的调节变量的标准差。

输出结果

  OUTPUT:
  CINTERVAL tech1 tech3 tech5 tech8;

结果解读

Unstandardized Path Coefficients of the Multilevel Models for Testing Indirect Effect

组内残差

回归系数

组间残差

Pseudo R2

Pseudo R2没办法直接得出,还需要进一步计算。作者文中给出了参考文献,但萜妹还没来得及溯源,所以这里就不展开。有兴趣的小可爱可以先自行研究。

Snijders, T. A. B. & Bosker, R. J. 1994. Modeled variance in two-level models. Sociological Methods & Research, 22(3): 342-363

Bootstrap置信区间

跨层Bootstrap没有办法在Mplus中实现,作者还是借助了R软件进行。


这篇推送的分析就到这里啦。因为作者只提供了Mplus语法,所以萜妹的复现也仅局限在Mplus之中。我这里的结果看起来比较简单,但作者在文章中其实还进行了很多补充分析,大家可以利用作者的数据与语法进行深度地复现。

另外想谈谈我为什么选择复现这篇。第一个的原因是我想找一篇公开了语法、数据的跨层文章,我在AMJ上按时间顺序找最新录用,这篇是时间最新的文章(也已经是半年之前了);第二个原因,虽然我们常常用Mplus做结构方程模型检验,但也常有不规范的地方,比如只写结构部分的语法,这篇文章纳入了测量部分才是比较规范的做法。

最后,我应该还会继续找公开数据的跨层模型,尤其是用R分析的。小可爱们如果有看到合适的,也可以分享给我吖。

往期推送:

Mplus丨基础使用指南
Mplus丨常用模型语句
复现丨基于R的实验检验
复现丨类别变量的三阶交互

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存