调节效应、中介效应和结构方程

Published

September 8, 2025

调节效应和中介效应

调节效应

调节效应的基础

调节效应(Moderation Effect)是统计学和社会科学中的一个概念,指的是某个第三变量(称为调节变量调节因子)能够改变两个其他变量之间的关系的强度或方向所产生的作用。通过调节效应的分析,可以更好地理解复杂的变量关系,为研究者提供更加精细化的理论指导和建议。

当一个调节变量存在时,它会通过影响自变量与因变量之间的关系来发挥作用。例如:

  • 如果 ( X ) 是自变量,( Y ) 是因变量,( Z ) 是调节变量,那么调节效应的核心是: [ Y = _0 + _1 X + _2 Z + _3 (X Z) + ] 其中,( _3 ) 是交互项系数,表示 ( Z ) 调节 ( X ) 和 ( Y ) 关系的强弱或方向。

调节效应的示例

  1. 政府透明度与公众信任
  • 自变量(X):政府透明度(Transparency)。
  • 因变量(Y):公众对政府的信任(Public Trust)。
  • 调节变量(Z):公民政治参与水平(Political Participation)。
    • 解释:高水平的政治参与可能会增强透明度对公众信任的正面影响,因为公民更关注并感受到透明度带来的好处。
    • 效果
      • 高参与:透明度增加显著提高公众信任。
      • 低参与:透明度的影响不明显。
  1. 财政分权与地方经济增长
  • 自变量(X):财政分权程度(Fiscal Decentralization)。
  • 因变量(Y):地方经济增长(Local Economic Growth)。
  • 调节变量(Z):地方政府问责制(Government Accountability)。
    • 解释:高问责制的地方,财政分权带来的灵活性能更有效地促进经济增长;而低问责制可能导致腐败和低效。
    • 效果
      • 高问责制:财政分权显著促进经济增长。
      • 低问责制:财政分权可能削弱经济增长。
  1. 环境政策严格性与污染治理成效
  • 自变量(X):环境政策严格性(Environmental Policy Stringency)。
  • 因变量(Y):污染治理效果(Pollution Mitigation Effectiveness)。
  • 调节变量(Z):企业技术创新能力(Technological Innovation in Firms)。
    • 解释:具有高技术创新能力的企业能够更好地适应和满足严格的环境政策要求。
    • 效果
      • 高创新能力:政策严格性对治理成效有更大影响。
      • 低创新能力:政策严格性可能导致高成本而无法显著改善污染。

可视化调节效应

调节效应通常用交互图(Interaction Plot)展示。

  • 将( X ) 和 ( Y ) 的关系在不同 ( Z ) 水平下的表现。
  • 不同 ( Z ) 水平会呈现不同的斜率或曲线。

调节效应分析示例

一项关于气候变化与灾害Chapman and Lickel 2015的研究中,研究者向211名实验参与者讲述非洲发生干旱造成人道主义危机,告诉其中一半的参与者气候变化是造成干旱的原因,另一半参与者未被告知任何关于干旱的原因。接着通过一系列问题让实验参与者评价拒绝援助的正当性,以及了解他们对气候变化的怀疑程度。最后了解参与者捐款的意愿。 实验的目的是了解框架(frame),即是否告知干旱是由于气候变化产生的,对捐助意愿(donate)的影响数据

假定对气候变化怀疑(skeptic)程度较高的人框架对捐助意愿的效应也比较小,会存在调节效应。

disaster <- read.csv("disaster.csv", header = T)
# 调节效应
moderafit <- lm(donate ~ frame + skeptic + frame:skeptic, data = disaster)
summary(moderafit)

Call:
lm(formula = donate ~ frame + skeptic + frame:skeptic, data = disaster)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.8341 -0.7077  0.1659  0.9101  2.6682 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    5.02947    0.22632  22.223   <2e-16 ***
frame          0.67930    0.33091   2.053   0.0413 *  
skeptic       -0.13953    0.05790  -2.410   0.0168 *  
frame:skeptic -0.17071    0.08393  -2.034   0.0432 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.234 on 207 degrees of freedom
Multiple R-squared:  0.1343,    Adjusted R-squared:  0.1218 
F-statistic: 10.71 on 3 and 207 DF,  p-value: 1.424e-06

中介效应

中介效应(Mediation Effect)是统计学和社会科学中的一个概念,指一个中介变量(Mediating Variable)在自变量(Independent Variable, (X))和因变量(Dependent Variable, (Y))之间起中介作用,即部分或全部传递自变量对因变量的影响。中介效应主要用于探讨变量之间的作用机制,揭示因果路径。中介效应的分析能够揭示隐藏的机制和作用路径,为理论研究提供深入的解释,并为实践应用提供精细化的决策依据。

中介效应的基础

如果 (X) 通过一个中介变量 (M) 影响 (Y),这表明 (M) 是 (X) 和 (Y) 之间的中介变量。公式化表达为: [ X M Y ] 其中:

  • (X):自变量,独立变量。
  • (Y):因变量,依赖变量。
  • (M):中介变量。

中介效应说明 (X) 不仅直接影响 (Y)(直接效应),还通过 (M) 间接影响 (Y)(间接效应)。

中介效应的数学模型

经典的中介效应模型可以分为三步:

  1. 总效应模型:(Y = cX + _1),其中 (c) 是 (X) 对 (Y) 的总效应。
  2. 中介变量模型:(M = aX + _2),其中 (a) 是 (X) 对 (M) 的效应。
  3. 结果变量模型:(Y = c’X + bM + _3),
    • (c’):控制 (M) 后,(X) 对 (Y) 的直接效应。
    • (b):(M) 对 (Y) 的效应。

间接效应由 (a b) 表示,总效应可以分解为: [ c = c’ + (a b) ]

中介效应模型的效应类型

  • 总效应:自变量对因变量的总影响,包括直接效应和间接效应。
  • 直接效应:自变量对因变量的直接影响,不通过中介变量传递。
  • 间接效应:自变量通过中介变量对因变量的影响。

中介效应的类型

  1. 完全中介效应(Full Mediation)
    • (X) 对 (Y) 的影响完全通过 (M) 传递。
    • 控制 (M) 后,(X) 对 (Y) 的直接效应 (c’) 不显著。
  2. 部分中介效应(Partial Mediation)
    • (X) 对 (Y) 的影响部分通过 (M) 传递。
    • 控制 (M) 后,(X) 对 (Y) 的直接效应 (c’) 仍然显著。

中介效应的示例

  1. 教育政策研究
  • 自变量:教育投资(Education Investment)。
  • 中介变量:师资水平(Teacher Quality)。
  • 因变量:学生成绩(Student Performance)。
    • 解释:教育投资可以通过提升师资水平来间接影响学生成绩。
  1. 公共卫生领域
  • 自变量:健康教育活动(Health Education)。
  • 中介变量:健康知识水平(Health Knowledge)。
  • 因变量:健康行为(Health Behavior)。
    • 解释:健康教育活动通过提高健康知识水平,进而改变人们的健康行为。
  1. 公共服务数字化与市民满意度
  • 自变量(X):公共服务数字化水平(Digitalization of Public Services)。
  • 中介变量(M):服务便利性(Convenience of Service)。
  • 因变量(Y):市民满意度(Citizen Satisfaction)。
    • 解释:数字化的服务提高了服务的便利性,间接提升市民对公共服务的满意度。

中介效应的检验方法

  • 逐步回归分析:按照三步模型依次验证每个路径的显著性。
  • Bootstrap方法:通过重复抽样计算间接效应及其置信区间,常用于提高检验效力。
  • Sobel检验:检验间接效应是否显著,计算公式为: [ z = ] 其中 () 表示估计系数的标准误。

中介效应与调节效应的区别

  • 中介效应:关注变量之间的因果路径,解释“为什么”自变量会影响因变量。
  • 调节效应:关注变量之间的关系强弱,解释“在什么情况下”自变量会影响因变量。

中介效应分析的示例

上面气候变化与灾害的研究中,框架可能是通过影响正当性,然后正当性再影响捐助意愿的,即中介效应。

library(lavaan)
This is lavaan 0.6-19
lavaan is FREE software! Please report any bugs.
# 中介效应
mediamodel <- ' # 直接效应
donate ~ c*frame
# 中介效应
justify ~ a*frame
donate ~ b*justify
# 间接效应 (a*b)
ab := a*b
# 总效应
total := c + (a*b)
'
mediafit <- sem(mediamodel, data = disaster)
summary(mediafit)
lavaan 0.6-19 ended normally after 1 iteration

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         5

  Number of observations                           211

Model Test User Model:
                                                      
  Test statistic                                 0.000
  Degrees of freedom                                 0

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  donate ~                                            
    frame      (c)    0.212    0.135    1.576    0.115
  justify ~                                           
    frame      (a)    0.134    0.127    1.054    0.292
  donate ~                                            
    justify    (b)   -0.953    0.072  -13.159    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .donate            0.948    0.092   10.271    0.000
   .justify           0.856    0.083   10.271    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    ab               -0.128    0.122   -1.051    0.293
    total             0.084    0.181    0.463    0.643

绘制图形

library("semPlot")
semPaths(mediafit,whatLabels = 'est',residuals = F, nCharNodes=0, sizeMan = 12,edge.label.cex = 1.5)

条件过程模型

条件过程模型(Conditional Process Model)是一个综合框架,用于同时分析中介效应(Mediation Effect)和调节效应(Moderation Effect)。它探讨自变量通过中介变量影响因变量的机制,同时考虑调节变量如何影响这一机制的强度或方向。条件过程模型是一种强大的分析工具,能够揭示复杂的变量关系,为研究者提供深入的理论解释和实践指导。

条件过程模型的基础

条件过程模型结合了中介效应和调节效应,回答以下关键问题:

  • 机制问题:自变量如何通过中介变量间接影响因变量?(中介效应)
  • 情境问题:这种中介效应在什么情况下更强或更弱?(调节效应)

公式化表示为: [ Y = b_1 M + b_2 X + b_3 W + b_4 (M W) + ] 其中:

  • (X):自变量。
  • (M):中介变量。
  • (Y):因变量。
  • (W):调节变量。
  • (b_4):调节变量 (W) 对中介效应的调节作用。

条件过程模型的关键特征

  • 中介效应的调节:调节变量 (W) 改变了自变量 (X) 通过中介变量 (M) 对因变量 (Y) 的间接影响。
  • 模型交互:条件过程模型包含交互项(例如 (M W)),用来描述调节效应如何影响中介效应。
  • 多路径分析:条件过程模型可以同时研究直接效应、间接效应和调节效应。

条件过程模型的类型和示例

  1. 调节的中介效应(Moderated Mediation Effect)
  • 定义:调节变量影响中介效应中某一路径的强度或方向。
  • 解释:调节变量 ((W)) 改变了自变量 ((X)) 通过中介变量 ((M)) 对因变量 ((Y)) 的间接效应。
  • (X):自变量
  • (M):中介变量
  • (W):调节变量,对 (X M) 或 (M Y) 的路径进行调节
  • (Y):因变量

示例:环保政策严格性 ((X)) 通过企业创新 ((M)) 改善环境质量 ((Y)),但监管强度 ((W)) 调节这一过程。

  1. 中介的调节效应(Mediated Moderation Effect)
  • 定义:中介变量的某一路径影响受调节变量的影响。
  • 解释:中介变量 ((M)) 解释了调节变量 ((W)) 如何影响自变量 ((X)) 对因变量 ((Y)) 的关系。
  • (X W):自变量和调节变量的交互作用
  • (M):中介变量,解释交互作用如何影响 (Y)
  • (Y):因变量

示例:政策执行力度 ((X)) 和地方经济发展水平 ((W)) 的交互作用通过基层治理能力 ((M)) 间接影响社会稳定 ((Y))。

  1. 结合复杂模型(Combined Model)

解释:同时存在调节的中介效应和中介的调节效应,展示了变量之间更复杂的关系。 - (X → M → Y):中介效应 - (W):调节变量同时作用于 (X → M) 和 (M → Y) 的路径。

示例:公共政策透明度 ((X)) 通过公众信任 ((M)) 增强公众满意度 ((Y)),但这种过程因社会参与度 ((W)) 的不同而改变。

条件过程模型的分析方法

  1. 基于回归分析的交互项建模
  • 在回归模型中添加中介变量、调节变量以及交互项(如 (M W))。
  • 分析每个路径系数的显著性以验证条件过程关系。
  1. Bootstrap法
  • 通过Bootstrap重复抽样方法计算间接效应的置信区间。
  • 验证不同调节水平下的中介效应是否显著。
  1. PROCESS工具
  • PROCESS工具是Andrew F. Hayes开发的一个专用宏,用于SPSS和R语言,可以直接分析复杂的条件过程模型。
  1. 结构方程的路径分析
  • 结合各类的结构方程分析软件进行路径分析。

条件过程模型的优点

  • 综合性强:能够同时分析机制问题(中介效应)和情境问题(调节效应)。
  • 解释力强:揭示复杂的因果路径和不同情境下的效果差异。
  • 广泛适用:适用于社会科学、心理学、公共管理等多个领域。

条件过程模型的分析

综合调节与中介效应,框架对捐助意愿的直接和间接效应是受到怀疑程度的调节的,即被调节的中介效应。

# 具有调节中介效应的条件过程模型
cpmodel <- ' # 直接效应
donate ~ c1*frame + c2*skeptic + c3*skeptic:frame 
# 中介效应
justify ~ a1*frame + a2*skeptic + a3*skeptic:frame
donate ~ b*justify

# 间接效应取决于skeptic的值,需要用平均值(或其他代表值)带入计算间接效应
# 间接效应 (a*b) skeptic取平均值3.38
a1b := (a1+a3*3.38)*b
# 总效应
total := c1 + (a1+a3*3.38)*b
'
cpfit <- sem(cpmodel, data = disaster)
summary(cpfit)
lavaan 0.6-19 ended normally after 1 iteration

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         9

  Number of observations                           211

Model Test User Model:
                                                      
  Test statistic                                 0.000
  Degrees of freedom                                 0

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  donate ~                                            
    frame     (c1)    0.160    0.264    0.606    0.544
    skeptic   (c2)   -0.043    0.046   -0.918    0.359
    skptc:frm (c3)    0.015    0.068    0.219    0.827
  justify ~                                           
    frame     (a1)   -0.562    0.216   -2.606    0.009
    skeptic   (a2)    0.105    0.038    2.782    0.005
    skptc:frm (a3)    0.201    0.055    3.675    0.000
  donate ~                                            
    justify    (b)   -0.923    0.083  -11.113    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .donate            0.943    0.092   10.271    0.000
   .justify           0.648    0.063   10.271    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    a1b              -0.108    0.103   -1.054    0.292
    total             0.052    0.285    0.182    0.856

图形

semPaths(cpfit,whatLabels = 'est', layout = "spring",,residuals = F, nCharNodes=0, sizeMan = 8,edge.label.cex = 1)

结构方程的特点

  • 结构方程分析需要建立在理论基础上,从变量的测量、变量关系的假定和模型的设定都需要有清晰的理论支持或逻辑推理作为依据。
  • 结构方程模型同时处理潜变量的测量和变量间关系的分析,变量测量中的误差也被包含在变量关系的分析过程中。
  • 结构方程是基于变量间的协方差进行分析,协方差能够反映变量间的关联,也能反映理论模型生成的协方差与实际观测所得的协方差之间的差异。
  • 结构方程需要大样本,样本量大于200。
  • 结构方程的评估基于多重指标对整体模型进行比较,不依赖于单一的统计显著性。

结构方程模型分析的过程

结构方程的组成

结构方程的变量:

  • 结构方程主要变量为尺度变量,类别变量只作为分组讨论的调节变量。
  • 潜变量(F)必须有两个以上(一般为3个以上,2个的情况需要模型存在多个潜变量,且之间存在关联性)的测量变量(V1, V2),测量变量间的协方差反映潜在变量的共同影响,测量变量无法被潜变量解释的部分为测量误差(E1, E2)。
  • 内生潜变量所影响(对应)的为内生测量变量,外生潜变量所影响(对应)的为外生测量变量,内生潜变量的残差称为干扰项。

结构方程的参数:

  • 测量模型参数包括潜变量与测量变量的关联强度\(\lambda\),也成为因子载荷,外生测量变量的测量误差\(\delta\),内生测量变量的测量误差\(\varepsilon\),外生变量的协方差\(\phi\)
  • 结构模型参数包括外生潜变量与内生潜变量之间的关系\(\gamma\),内生潜变量之间的关系\(\beta\),内生潜变量的残差或干扰项\(\zeta\)

结构方程模型设定

  • 简效原则:将变量间的关系以最符合理论又最简单扼要的方式加以设定。如果一个简单模型能够解释较多实际数据的变化,那么以这个模型来说明数据的关系,比较不会得到错误的结论,结构方程可以防止弃真错误,难以防止纳伪错误。
  • 结构方程会遇到等值模型问题,即不同设定的模型拟合优度相等,可以通过前导理论策略(通过理论排除对等的模型)或参数竞争比较策略(比较对等模型参数估计)来解决。

结构方程模型识别

  • 结构方程的不同设定会产生模型识别问题,只有在过度识别条件下,才能对模型参数进行计算估计。通过比较待估参数数量\(t\)和测量数据量\(DP\)之间的大小,可以判断(必要不充分)模型能否参数估计。
    • \(t < DP\),为过度识别,如同有三个方程,求两个未知数的解。
    • \(t = DP\),为充分识别,如同有两个个方程,求两个未知数的解。
    • \(t > DP\),为识别不足,如同只有一个方程,求两个未知数的解。
    • 其中,待估参数数量\(t\)根据具体的模型设定决定,测量数据量\(DP\)由外生测量变量的个数\(p\)和内生测量变量的个数\(q\)计算。 \[DP=\frac{(p+q)(p+q+1)}{2}\]
  • 当结构方程模型设定没有结构关系的假设,模型可以顺利识别(Null Beta Rule);当结构方程模型设定只估计结构参数,干扰项只估计方差不估计相关,模型自动识别(递归法则)。尽量保持简单的模型结构。

结构方程模型拟合评估

  • 结构方程模型分析策略与一般统计推断有明显差异,是以支持原假设作为模型拟合度存在的证据。
  • 结构方程的原假设是偏好的模型(根据理论对结构系数做出了某些假定,某些系数不为零)与实际观察的数据是相符的,其检验则是通过与饱和模型(对各观察变量之间关系都做了相关假定,所有系数均不为零)相比较,如果模型之间卡方检验值比较大,则说明两个模型存在显著差异,拒绝原假设(拒绝偏好的模型),接受饱和模型。
  • 模型的卡方统计量、自由度和p值,卡方值越小越好,p值大于0.05。但是样本量越大,p值会减少倾向显著,作为拟合优度指标并不准确,需要考虑其他拟合指数。如果模型正确,卡方统计量会等于其自由度,但增加估计参数的数量会减小卡方值。
  • 近似均方根残差Root Mean Square Error of Approximation (RMSEA; Steiger, 1990) 和90%的置信区间,越小越好,小于0.08比较理想。
  • 比较拟合指数Comparative Fit Index (CFI; Bentler, 1990),越大越好,应大于0.9。
  • 标准化均方根残差Standardized Root Mean Square Residual (SRMR),越小越好,大于0.1说明拟合不好。

验证性因子分析

验证性因子分析的原理

  • 不同于探索性因子分析(EFA),验证性因子分析(CFA)必须有特定的理论或概念架构作为基础。CFA可以作为结构方程模型的前置步骤,也可以独立进行,只检验测量模型。
  • CFA要求构念要有明确的操作化定义界定内容与范畴;测量构念的指标要能被明确指出,并且同一构念指标要具有相当的一致性,不同构念指标要具有区分度;还要经过统计验证观察数据能否支持或推翻构念是否存在的假设。
  • CFA模型中,从潜变量到测量变量的箭头,代表研究者所假设的潜变量到测量变量的因果关系,统计估计量称为因子载荷,类似于回归系数,测量变量的变异可以拆解为共同变异(common variance)和独特变异(unique variance)。
  • 与回归模型将测量误差作为随机误差处理不同,CFA将测量变量中分离独特变异,这种变异包括了随机误差和系统误差(例如方法效益带来的误差,会导致题项相关系数偏大)。CFA可以通过共变关系分析和多维测量假设有效估计独特变异中的系统性误差。

CFA的内部拟合检验

  • CFA除了要求整体拟合效果外,还要求针对个别因子的质量进行检验,了解个别参数是否理想(项目信效度),各潜变量的组合情形是否稳定可靠(构念的信效度)。遇到不理想的参数,可以剔除不良题项或添加参数提高测量模型的内在拟合。
  • 项目质量检验:题项测量误差越小则信度越高,而因子载荷越高则测量误差越小,所以可以用因子载荷来判断题项质量。一般当因子载荷\(\lambda\)大于0.71时,\(\lambda^2\)为50%,意味着潜变量能够解释测量变量50%的变异(即回归的R方),说明项目具有理想质量。但是对于社会科学而言,编制的量表因子载荷都不会太高,因子载荷\(\lambda\)大于0.55(\(\lambda^2\)为30%)即是理想的结果。
  • 组合信度(\(\rho_c\)):对于一组题项而言,潜变量的变异代表真实分数的变异,因此题项的组合信度可以用测量变量变异被潜变量解释的百分比来表示(类似于内部一致性系数,\(Cronbach's \quad \alpha\))。一般量表信度需达到0.7,社会科学领域不易达到此水平,0.5以上可认为获得基本稳定性。

\[\rho_c=\frac{(\Sigma\lambda_i)^2}{((\Sigma\lambda_i)^2 + \Sigma\Theta_{ii}+2\Sigma\Theta_{ij})}\]

  • 平均变异萃取量(\(\rho_\nu\)):测量题项的因子载荷越高,表示题项能够反映潜变量的能力越高,潜变量因子能够解释各个测量变量变异的程度越大,因此可以用平均变异萃取量(即EFA中的特征值)反映潜变量被测量变量有效估计的聚敛程度。\(\rho_\nu\)大于0.5,表示潜变量聚敛能力理想。

\[\rho_{\nu}=\frac{\Sigma\lambda^2_i}{(\Sigma\lambda^2_i + \Sigma\Theta_{ii})}=\frac{\Sigma\lambda^2_i}{n}\]

  • 因素区辩力:不同潜变量之间必须能够有效分离。
    • 相关系数区间估计:如果两个潜变量的相关系数的95%置信区间包含1,表示构念缺乏区辩力。
    • 竞争模式比较法:将设定CFA模型与完全相关模型(将潜变量的相关设定为1)相比较,如果两个模型没有区别,表示构念缺乏区辩力。
    • 平均变异萃取量比较法:比较两个潜变量的平均变异萃取量的平均值是否大于其相关系数的平方。

验证性因素分析的步骤

  1. 建立测量模型的假设
  2. 进行模型识别,输入模型指令
  3. 执行CFA分析
  4. 结果分析
  5. 模型修正
  6. 完成分析,给出报告

组织创新气氛测量模型

案例来自《组织创新气氛量表》(邱皓政,1999),样本是384位企业员工,量表为Likert式6点度量的自陈量表,基于理论和文献先界定影响组织气氛知觉的因素包括组织价值、工作方式、团队合作、领导风格、学习成长、环境气氛等6个因素,每个因素采用3个题项测量,共有18个题项,题项描述性统计如下。

library(haven)
library(tidyverse)
library(modelsummary)
library(lavaan)
library(semPlot)

dat <- read_sav("ch05.sav")
names(dat) <- c("A1","A2","A3","B1","B2","B3","C1","C2","C3","D1","D2","D3","E1","E2","E3","F1","F2","F3")
dat <- zap_labels(dat)
dim(dat) 
[1] 313  18
datasummary_skim(dat, fun_numeric = list('取值'=NUnique, '缺失值'=PercentMissing, '均值'=Mean, '中位数'=Median,'标准差'=SD, '最小值'=Min, '最大值'=Max), output = "data.frame", type = "numeric", fmt_sprintf("%.2f")) |> knitr::kable()
取值 缺失值 均值 中位数 标准差 最小值 最大值
A1 6 0 4.42 5.00 0.98 1.00 6.00
A2 6 0 4.31 4.00 1.02 1.00 6.00
A3 6 0 4.07 4.00 0.97 1.00 6.00
B1 6 0 4.02 4.00 1.16 1.00 6.00
B2 6 0 4.25 4.00 1.16 1.00 6.00
B3 6 0 4.24 4.00 1.09 1.00 6.00
C1 6 0 4.37 4.00 0.98 1.00 6.00
C2 6 0 4.34 4.00 1.03 1.00 6.00
C3 6 0 4.31 4.00 1.05 1.00 6.00
D1 6 0 4.83 5.00 0.94 1.00 6.00
D2 5 0 4.95 5.00 0.84 2.00 6.00
D3 5 0 4.83 5.00 0.91 2.00 6.00
E1 6 0 4.63 5.00 0.97 1.00 6.00
E2 6 0 4.73 5.00 1.01 1.00 6.00
E3 6 0 4.70 5.00 0.98 1.00 6.00
F1 6 0 4.23 4.00 1.17 1.00 6.00
F2 6 0 4.63 5.00 1.09 1.00 6.00
F3 6 0 4.49 5.00 0.94 1.00 6.00

测量模型的设定

  • 模型有18个测量变量和6个潜变量
  • 模型中18个测量误差
  • 为确定6个潜变量的度量,每个因素方差设定为1
  • 每个测量变量只受单一潜变量影响,因此有18个因子载荷参数
  • 因子共变允许自由估计,产生15个相关系数参数
  • 测量误差之间视为独立,没有共变关系

测量模型的识别

  • 测量数据\(DP=18\times(18+1)/2=171\)
  • 模型待估参数包括18个因子载荷、18个测量误差、15个潜变量协方差(潜变量方差设定为1,不需要估计),因此待估参数\(t=18+18+15=51\)
  • 因为待估参数小于测量数据,所以测量模型可以识别

模型分析与报告

lavaan包的模型设定默认不同潜变量之间具有相关性(即允许因子共变),如果需要不同的设定,可以在cfa函数中用\(orthogonal=T\)将协方差约束为0;cfa函数默认是将第1个因子载荷设定为1,如需固定潜变量方差为1,可以通过\(std.lv=TRUE\)来设定。

cfa_model  <-'
#定义测量模型  
  FA =~ L11*A1 + L21*A2 + L31*A3
  FB =~ L12*B1 + L22*B2 + L32*B3
  FC =~ L13*C1 + L23*C2 + L33*C3
  FD =~ L14*D1 + L24*D2 + L34*D3
  FE =~ L15*E1 + L25*E2 + L35*E3
  FF =~ L16*F1 + L26*F2 + L36*F3'

cfa_fit <- cfa(model = cfa_model, 
               data = dat,
               std.lv = TRUE) # 根据模型设定,固定潜变量方差为1
summary(cfa_fit, 
        fit.measures = T, # 输出拟合指标
        standard = T)  # 输出标准化解
lavaan 0.6-19 ended normally after 31 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        51

  Number of observations                           313

Model Test User Model:
                                                      
  Test statistic                               241.755
  Degrees of freedom                               120
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2842.819
  Degrees of freedom                               153
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.955
  Tucker-Lewis Index (TLI)                       0.942

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -6751.785
  Loglikelihood unrestricted model (H1)      -6630.907
                                                      
  Akaike (AIC)                               13605.569
  Bayesian (BIC)                             13796.626
  Sample-size adjusted Bayesian (SABIC)      13634.870

Root Mean Square Error of Approximation:

  RMSEA                                          0.057
  90 Percent confidence interval - lower         0.047
  90 Percent confidence interval - upper         0.067
  P-value H_0: RMSEA <= 0.050                    0.132
  P-value H_0: RMSEA >= 0.080                    0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.052

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  FA =~                                                                 
    A1       (L11)    0.815    0.051   15.967    0.000    0.815    0.830
    A2       (L21)    0.706    0.055   12.733    0.000    0.706    0.692
    A3       (L31)    0.614    0.054   11.430    0.000    0.614    0.634
  FB =~                                                                 
    B1       (L12)    0.789    0.062   12.759    0.000    0.789    0.682
    B2       (L22)    0.961    0.058   16.591    0.000    0.961    0.833
    B3       (L32)    0.856    0.056   15.406    0.000    0.856    0.788
  FC =~                                                                 
    C1       (L13)    0.699    0.053   13.178    0.000    0.699    0.717
    C2       (L23)    0.736    0.056   13.119    0.000    0.736    0.715
    C3       (L33)    0.696    0.058   11.950    0.000    0.696    0.663
  FD =~                                                                 
    D1       (L14)    0.810    0.045   18.177    0.000    0.810    0.867
    D2       (L24)    0.741    0.040   18.750    0.000    0.741    0.886
    D3       (L34)    0.655    0.047   14.086    0.000    0.655    0.720
  FE =~                                                                 
    E1       (L15)    0.806    0.046   17.392    0.000    0.806    0.830
    E2       (L25)    0.912    0.046   19.851    0.000    0.912    0.906
    E3       (L35)    0.791    0.047   16.810    0.000    0.791    0.811
  FF =~                                                                 
    F1       (L16)    0.641    0.066    9.663    0.000    0.641    0.550
    F2       (L26)    0.828    0.058   14.296    0.000    0.828    0.758
    F3       (L36)    0.786    0.049   16.142    0.000    0.786    0.837

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  FA ~~                                                                 
    FB                0.542    0.054    9.989    0.000    0.542    0.542
    FC                0.494    0.061    8.102    0.000    0.494    0.494
    FD                0.417    0.058    7.176    0.000    0.417    0.417
    FE                0.526    0.052   10.080    0.000    0.526    0.526
    FF                0.695    0.046   15.148    0.000    0.695    0.695
  FB ~~                                                                 
    FC                0.697    0.047   14.906    0.000    0.697    0.697
    FD                0.447    0.055    8.127    0.000    0.447    0.447
    FE                0.575    0.048   12.091    0.000    0.575    0.575
    FF                0.391    0.061    6.403    0.000    0.391    0.391
  FC ~~                                                                 
    FD                0.522    0.055    9.493    0.000    0.522    0.522
    FE                0.603    0.050   12.127    0.000    0.603    0.603
    FF                0.600    0.054   11.032    0.000    0.600    0.600
  FD ~~                                                                 
    FE                0.557    0.046   12.046    0.000    0.557    0.557
    FF                0.316    0.062    5.137    0.000    0.316    0.316
  FE ~~                                                                 
    FF                0.443    0.056    7.944    0.000    0.443    0.443

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .A1                0.300    0.046    6.509    0.000    0.300    0.311
   .A2                0.544    0.055    9.980    0.000    0.544    0.522
   .A3                0.561    0.052   10.700    0.000    0.561    0.598
   .B1                0.716    0.068   10.525    0.000    0.716    0.535
   .B2                0.408    0.057    7.211    0.000    0.408    0.306
   .B3                0.447    0.052    8.602    0.000    0.447    0.379
   .C1                0.461    0.050    9.305    0.000    0.461    0.485
   .C2                0.519    0.055    9.354    0.000    0.519    0.489
   .C3                0.618    0.061   10.173    0.000    0.618    0.560
   .D1                0.217    0.031    7.055    0.000    0.217    0.248
   .D2                0.151    0.024    6.204    0.000    0.151    0.215
   .D3                0.399    0.037   10.799    0.000    0.399    0.482
   .E1                0.292    0.032    9.243    0.000    0.292    0.311
   .E2                0.181    0.030    6.113    0.000    0.181    0.179
   .E3                0.325    0.033    9.733    0.000    0.325    0.342
   .F1                0.948    0.083   11.400    0.000    0.948    0.698
   .F2                0.507    0.058    8.700    0.000    0.507    0.425
   .F3                0.265    0.042    6.276    0.000    0.265    0.300
    FA                1.000                               1.000    1.000
    FB                1.000                               1.000    1.000
    FC                1.000                               1.000    1.000
    FD                1.000                               1.000    1.000
    FE                1.000                               1.000    1.000
    FF                1.000                               1.000    1.000

模型结果的报告

summary报告第一部分为模型基本信息,估计方法为最大似然估计,优化方法为非线性最小优化,待估参数51个,样本量313。

summary报告第二部分为拟合指标,包括卡方值和检验结果、CFI、RMSEA、SRMR等。

  • 模型拟合度分析:对照前面的标准,卡方值显著性水平\(0<0.05\),表示假设模型与观察值之间有显著的差异;\(\chi^2/df>2\)也说明拟合度不理想;NFI、NNFI、CFI均大于标准0.9,SRMR小于标准0.08,这四个指标都表明拟合比较理想;RMSEA为0.057略微大于标准0.05,表明模型拟合不理想;综合来看,理论模型没有达到最佳的拟合度,仍有修正的空间。
fitmeasures(cfa_fit, c("chisq", "df", "pvalue", "nfi","nnfi","cfi", "rmsea", "srmr"))
  chisq      df  pvalue     nfi    nnfi     cfi   rmsea    srmr 
241.755 120.000   0.000   0.915   0.942   0.955   0.057   0.052 

summary报告第三部分为参数估计结果,包括因子载荷、潜变量协方差、测量误差和潜变量的方差。

  • 潜变量(Latent variables)部分为因子载荷参数估计值相关结果,std.lv对应的是潜变量被标准化时的载荷,std.all对应的是所有变量都被标准化时的载荷(类似于标准化的回归系数)。
  • 协方差(Covariances)部分为潜变量协方差,由于潜变量方差设定为1,此处协方差也等于潜变量间的相关系数。
  • 方差(Variances)部分为测量误差的方差和潜变量的方差,由于潜变量方差设定为1,所以此处均为1。

残差分析

模型拟合后可以依据拟合协方差矩阵列出估计的测量变量的方差和协方差,这些模型导出数与实际观察值之间的差距即为残差。通过分析标准化残差的大小和分布,可以了解测量变量间关系的拟合程度,确定存在问题的题项。

fitted(cfa_fit) # 提取拟合协方差矩阵
$cov
      A1    A2    A3    B1    B2    B3    C1    C2    C3    D1    D2    D3
A1 0.965                                                                  
A2 0.576 1.043                                                            
A3 0.500 0.433 0.937                                                      
B1 0.349 0.302 0.262 1.338                                                
B2 0.425 0.368 0.320 0.759 1.332                                          
B3 0.378 0.328 0.285 0.675 0.823 1.179                                    
C1 0.282 0.244 0.212 0.385 0.469 0.417 0.950                              
C2 0.297 0.257 0.223 0.405 0.494 0.439 0.515 1.061                        
C3 0.280 0.243 0.211 0.383 0.467 0.415 0.487 0.512 1.102                  
D1 0.275 0.239 0.207 0.286 0.348 0.310 0.296 0.312 0.295 0.873            
D2 0.252 0.218 0.190 0.262 0.319 0.284 0.271 0.285 0.269 0.601 0.700      
D3 0.223 0.193 0.168 0.231 0.282 0.251 0.239 0.252 0.238 0.531 0.486 0.829
E1 0.345 0.299 0.260 0.365 0.445 0.396 0.340 0.358 0.338 0.363 0.332 0.294
E2 0.391 0.339 0.294 0.413 0.504 0.448 0.385 0.405 0.383 0.411 0.376 0.333
E3 0.339 0.294 0.255 0.359 0.437 0.389 0.334 0.352 0.332 0.357 0.326 0.289
F1 0.363 0.315 0.274 0.198 0.241 0.214 0.269 0.283 0.268 0.164 0.150 0.133
F2 0.469 0.407 0.353 0.255 0.311 0.277 0.347 0.366 0.346 0.212 0.194 0.171
F3 0.446 0.386 0.335 0.243 0.296 0.263 0.330 0.347 0.328 0.201 0.184 0.163
      E1    E2    E3    F1    F2    F3
A1                                    
A2                                    
A3                                    
B1                                    
B2                                    
B3                                    
C1                                    
C2                                    
C3                                    
D1                                    
D2                                    
D3                                    
E1 0.942                              
E2 0.735 1.013                        
E3 0.638 0.721 0.951                  
F1 0.229 0.259 0.225 1.359            
F2 0.296 0.335 0.291 0.531 1.193      
F3 0.281 0.318 0.276 0.504 0.651 0.883
cfares <- resid(cfa_fit)  # 提取残差
cfares$cov
       A1     A2     A3     B1     B2     B3     C1     C2     C3     D1     D2
A1  0.000                                                                      
A2 -0.003  0.000                                                               
A3  0.022 -0.037  0.000                                                        
B1 -0.080  0.057  0.037  0.000                                                 
B2 -0.009  0.104 -0.057  0.001  0.000                                          
B3 -0.021  0.053 -0.011  0.002 -0.001  0.000                                   
C1 -0.085  0.022 -0.054  0.022  0.015  0.024  0.000                            
C2 -0.019  0.039 -0.101  0.005 -0.020 -0.041  0.042  0.000                     
C3  0.070  0.167  0.079 -0.004  0.002  0.006 -0.050 -0.004  0.000              
D1  0.030  0.113 -0.048 -0.012  0.026  0.043 -0.052 -0.006  0.022  0.000       
D2 -0.033  0.021 -0.071 -0.031 -0.041 -0.029 -0.076 -0.003  0.018  0.008  0.000
D3 -0.010  0.075 -0.050 -0.005  0.057  0.067  0.094  0.114  0.117 -0.028  0.004
E1 -0.017  0.015  0.087  0.021  0.073  0.063 -0.001 -0.077  0.047  0.055  0.013
E2 -0.047  0.100  0.032 -0.029 -0.034 -0.024  0.024 -0.034  0.016 -0.021 -0.054
E3 -0.103  0.105 -0.010 -0.031 -0.013  0.019  0.005 -0.004  0.045  0.005 -0.019
F1 -0.018 -0.060  0.058 -0.035  0.097  0.021  0.070  0.118  0.111  0.107  0.130
F2 -0.007 -0.043 -0.064 -0.122 -0.060  0.004 -0.080 -0.048  0.121 -0.015 -0.005
F3  0.031 -0.007  0.018 -0.027  0.040  0.015 -0.006 -0.057  0.024 -0.033 -0.044
       D3     E1     E2     E3     F1     F2     F3
A1                                                 
A2                                                 
A3                                                 
B1                                                 
B2                                                 
B3                                                 
C1                                                 
C2                                                 
C3                                                 
D1                                                 
D2                                                 
D3  0.000                                          
E1  0.083  0.000                                   
E2  0.074 -0.001  0.000                            
E3  0.045 -0.016  0.010  0.000                     
F1  0.187  0.076  0.109  0.097  0.000              
F2  0.038 -0.056 -0.012 -0.019  0.019  0.000       
F3  0.028 -0.017  0.001 -0.016 -0.032  0.009  0.000
range(cfares$cov); median(cfares$cov)  # 残差的全距和中位数
[1] -0.1216818  0.1866437
[1] 7.123659e-07
resid(cfa_fit, type="standardized") # 提取标准化残差,方便与标准正态分布比较
$type
[1] "standardized"

$cov
       A1     A2     A3     B1     B2     B3     C1     C2     C3     D1     D2
A1  0.000                                                                      
A2 -0.363  0.000                                                               
A3  1.765 -1.670  0.000                                                        
B1 -2.017  1.218  0.774  0.000                                                 
B2 -0.326  2.626 -1.426  0.055  0.000                                          
B3 -0.700  1.340 -0.288  0.081 -0.146  0.000                                   
C1 -2.886  0.559 -1.395  0.552  0.522  0.784  0.000                            
C2 -0.611  0.950 -2.455  0.117 -0.662 -1.305  2.421  0.000                     
C3  1.876  3.832  1.833 -0.099  0.044  0.162 -2.676 -0.185  0.000              
D1  1.262  3.253 -1.394 -0.301  0.901  1.417 -1.900 -0.216  0.653  0.000       
D2 -1.688  0.684 -2.317 -0.888 -1.700 -1.090 -3.170 -0.104  0.599  3.454  0.000
D3 -0.301  1.933 -1.283 -0.112  1.480  1.767  2.707  3.162  3.024 -4.148  0.748
E1 -0.643  0.417  2.439  0.528  2.335  1.975 -0.045 -2.494  1.359  2.226  0.609
E2 -2.361  3.078  0.956 -0.781 -1.407 -0.873  0.943 -1.297  0.479 -1.071 -3.481
E3 -3.617  2.895 -0.260 -0.760 -0.408  0.568  0.172 -0.119  1.255  0.213 -0.859
F1 -0.456 -1.244  1.205 -0.544  1.656  0.373  1.449  2.317  2.177  2.172  2.947
F2 -0.295 -1.216 -1.743 -2.351 -1.483  0.104 -2.284 -1.330  2.968 -0.463 -0.189
F3  1.823 -0.259  0.661 -0.666  1.394  0.490 -0.222 -2.153  0.745 -1.412 -2.229
       D3     E1     E2     E3     F1     F2     F3
A1                                                 
A2                                                 
A3                                                 
B1                                                 
B2                                                 
B3                                                 
C1                                                 
C2                                                 
C3                                                 
D1                                                 
D2                                                 
D3  0.000                                          
E1  2.629  0.000                                   
E2  2.415 -0.342  0.000                            
E3  1.378 -1.831  2.050  0.000                     
F1  3.664  1.520  2.231  1.915  0.000              
F2  0.933 -1.571 -0.403 -0.528  0.649  0.000       
F3  0.835 -0.641  0.056 -0.579 -2.117  1.473  0.000
cfastd <- cfares$cov[lower.tri(unclass(cfares$cov),diag = F)]

ggplot(mapping = aes(sample=cfastd)) +
  geom_qq() +
  geom_qq_line() # 绘制QQ残差散点图分析是否服从正态分布

  • 模型修饰指数:残差分析除了初步观察测量变量间的问题,还可以将模型没有设定的关系参数加入假设,并与原设定模型相比,计算模型如果调整后这些残差变化对于模型改善的贡献,即为模型修饰指数(Modification Index)。
  • 当MI指数大于5时,表示该残差有修正的必要。EPC(expected parameter change)表示预期的参数改变量,一般综合考虑MI和EPC确定修正的方向。
modificationindices(cfa_fit, sort. = T, maximum.number = 6)
    lhs op rhs     mi    epc sepc.lv sepc.all sepc.nox
96   FC =~  D3 19.838  0.241   0.241    0.265    0.265
63   FA =~  C3 14.826  0.289   0.289    0.276    0.276
118  FE =~  A1 14.048 -0.258  -0.258   -0.262   -0.262
265  D1 ~~  D2 13.890  0.192   0.192    1.061    1.061
266  D1 ~~  D3 13.426 -0.132  -0.132   -0.448   -0.448
175  A2 ~~  E1 12.247 -0.097  -0.097   -0.243   -0.243

内在拟合度检验

根据内部拟合检验部分提出的各项内部拟合指标,对测量模型进行检验。

  • 项目质量检验:因子载荷均大于0.55,大部分大于0.71,可以通过。
cfa_lambda <- inspect(cfa_fit,what="std")$lambda
cfa_lambda <- cfa_lambda[cfa_lambda!=0]
print(cfa_lambda, digits = 2)  # 检验因子载荷
 [1] 0.83 0.69 0.63 0.68 0.83 0.79 0.72 0.71 0.66 0.87 0.89 0.72 0.83 0.91 0.81
[16] 0.55 0.76 0.84
  • 组合信度CR均大于0.7,显示内在拟合较好;平均变异萃取量AVE除因素C、F外均大于0.5,说明拟合一般。
library(semTools)    
compRelSEM(cfa_fit) # 计算组合信度CR
   FA    FB    FC    FD    FE    FF 
0.769 0.812 0.743 0.869 0.889 0.748 
AVE(cfa_fit)        # 计算平均变异萃取量AVE
   FA    FB    FC    FD    FE    FF 
0.523 0.592 0.487 0.681 0.725 0.499 
  • 因素区辩力:采取相关系数区间估计检验,潜变量的相关系数最大值为0.7,标准误约为0.05,95%置信区间为0.6-0.8,没有包含1,说明潜变量的区分度较好(参见summary报告第三部分的潜变量协方差,即相关系数)。
cfa_res <- summary(cfa_fit, standard=T)
cfa_res$pe[43:57,] |>
select(lhs, op, rhs, est, se, z, std.all, pvalue) |>
mutate(across(where(is.numeric), ~round(., 3)))
   lhs op rhs   est    se      z std.all pvalue
43  FA ~~  FB 0.542 0.054  9.989   0.542      0
44  FA ~~  FC 0.494 0.061  8.102   0.494      0
45  FA ~~  FD 0.417 0.058  7.176   0.417      0
46  FA ~~  FE 0.526 0.052 10.080   0.526      0
47  FA ~~  FF 0.695 0.046 15.148   0.695      0
48  FB ~~  FC 0.697 0.047 14.906   0.697      0
49  FB ~~  FD 0.447 0.055  8.127   0.447      0
50  FB ~~  FE 0.575 0.048 12.091   0.575      0
51  FB ~~  FF 0.391 0.061  6.403   0.391      0
52  FC ~~  FD 0.522 0.055  9.493   0.522      0
53  FC ~~  FE 0.603 0.050 12.127   0.603      0
54  FC ~~  FF 0.600 0.054 11.032   0.600      0
55  FD ~~  FE 0.557 0.046 12.046   0.557      0
56  FD ~~  FF 0.316 0.062  5.137   0.316      0
57  FE ~~  FF 0.443 0.056  7.944   0.443      0

测量模型的调整

测量模型调整的原则

  • 对于测量模型,可以对测量变量与潜变量之间的关系进行调整,删减测量变量或建立测量变量与其他潜变量之间的联系,也可以对测量变量残差的共变关系进行调整增减。
  • 对测量模型进行修正,应结合理论,避免过度拟合。

假设模型的调整和设定

根据前面CFA分析检验的结果,MI指数显示测量变量C3与潜变量A之间的关系如果纳入模型能够提升拟合度14.82,增加参数量因子载荷0.28,综合考量是贡献最大的参数改善。因此需要调整假设和设定,测量变量C3同时受到潜变量C和A的影响,其他参数设定不变。

模型调整后的结果报告

  • 估计参数数量增加1个到52个,C3在A上的因子载荷为0.268,并且结果是显著的,并且其他变量显著性未受影响。
new_model <-' 
#define the measurement model  
  FA =~ L11*A1 + L21*A2 + L31*A3 + L37 * C3
  FB =~ L12*B1 + L22*B2 + L32*B3
  FC =~ L13*C1 + L23*C2 + L33*C3
  FD =~ L14*D1 + L24*D2 + L34*D3
  FE =~ L15*E1 + L25*E2 + L35*E3
  FF =~ L16*F1 + L26*F2 + L36*F3'

new_fit <- cfa(new_model,
               data = dat,
               std.lv = TRUE)
summary(new_fit)
lavaan 0.6-19 ended normally after 30 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        52

  Number of observations                           313

Model Test User Model:
                                                      
  Test statistic                               226.794
  Degrees of freedom                               119
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  FA =~                                               
    A1       (L11)    0.805    0.051   15.803    0.000
    A2       (L21)    0.711    0.055   12.859    0.000
    A3       (L31)    0.616    0.054   11.510    0.000
    C3       (L37)    0.268    0.065    4.128    0.000
  FB =~                                               
    B1       (L12)    0.789    0.062   12.766    0.000
    B2       (L22)    0.961    0.058   16.591    0.000
    B3       (L32)    0.855    0.056   15.407    0.000
  FC =~                                               
    C1       (L13)    0.729    0.054   13.605    0.000
    C2       (L23)    0.755    0.057   13.284    0.000
    C3       (L33)    0.533    0.066    8.080    0.000
  FD =~                                               
    D1       (L14)    0.811    0.045   18.185    0.000
    D2       (L24)    0.741    0.040   18.743    0.000
    D3       (L34)    0.655    0.047   14.078    0.000
  FE =~                                               
    E1       (L15)    0.806    0.046   17.389    0.000
    E2       (L25)    0.912    0.046   19.857    0.000
    E3       (L35)    0.791    0.047   16.809    0.000
  FF =~                                               
    F1       (L16)    0.641    0.066    9.656    0.000
    F2       (L26)    0.828    0.058   14.305    0.000
    F3       (L36)    0.786    0.049   16.137    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
  FA ~~                                               
    FB                0.545    0.054   10.046    0.000
    FC                0.409    0.067    6.078    0.000
    FD                0.424    0.058    7.319    0.000
    FE                0.533    0.052   10.283    0.000
    FF                0.700    0.046   15.368    0.000
  FB ~~                                               
    FC                0.668    0.049   13.556    0.000
    FD                0.447    0.055    8.128    0.000
    FE                0.574    0.048   12.089    0.000
    FF                0.391    0.061    6.401    0.000
  FC ~~                                               
    FD                0.491    0.057    8.614    0.000
    FE                0.569    0.052   10.857    0.000
    FF                0.545    0.059    9.309    0.000
  FD ~~                                               
    FE                0.557    0.046   12.045    0.000
    FF                0.316    0.062    5.137    0.000
  FE ~~                                               
    FF                0.443    0.056    7.943    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .A1                0.317    0.045    6.981    0.000
   .A2                0.538    0.054    9.962    0.000
   .A3                0.557    0.052   10.694    0.000
   .C3                0.629    0.057   10.951    0.000
   .B1                0.715    0.068   10.524    0.000
   .B2                0.408    0.057    7.221    0.000
   .B3                0.447    0.052    8.608    0.000
   .C1                0.418    0.051    8.222    0.000
   .C2                0.491    0.057    8.612    0.000
   .D1                0.216    0.031    7.036    0.000
   .D2                0.151    0.024    6.209    0.000
   .D3                0.400    0.037   10.802    0.000
   .E1                0.293    0.032    9.249    0.000
   .E2                0.181    0.030    6.108    0.000
   .E3                0.325    0.033    9.736    0.000
   .F1                0.949    0.083   11.402    0.000
   .F2                0.506    0.058    8.689    0.000
   .F3                0.265    0.042    6.283    0.000
    FA                1.000                           
    FB                1.000                           
    FC                1.000                           
    FD                1.000                           
    FE                1.000                           
    FF                1.000                           
  • 模型拟合度的变化:卡方值依然显著未改善;卡方均值改善小于2;NFI、NNFI、CFI均有所增加;RMSEA、SRMR均有所减小,说明拟合度有改善。
fitmeasures(cfa_fit, c("chisq", "df", "pvalue", "nfi","nnfi","cfi", "rmsea", "srmr")) # 原设定模型
  chisq      df  pvalue     nfi    nnfi     cfi   rmsea    srmr 
241.755 120.000   0.000   0.915   0.942   0.955   0.057   0.052 
fitmeasures(new_fit, c("chisq", "df", "pvalue", "nfi","nnfi","cfi", "rmsea", "srmr")) # 调整后模型
  chisq      df  pvalue     nfi    nnfi     cfi   rmsea    srmr 
226.794 119.000   0.000   0.920   0.948   0.960   0.054   0.048 
  • 参数估计的比较:调整的测量变量C3与因素A的因子载荷为0.27,与MI指数增加因子载荷0.28非常接近,模型调整后,因子C的载荷有所变化,在C1、C2、C3上的载荷由0.70、0.74、0.70变化为0.73、0.76、0.53;因子A上的载荷变化不大。模型调整后,潜变量的相关系数有所变化,变化最大的是因子A和因子C之间的相关系数。

模型的路径图

semPaths(cfa_fit, what = "std") 

semPaths(new_fit, what = "std") 

路径分析

路径分析所包括的变量都是外显观察变量,不涉及潜变量,所用的操作可采用结构方程分析技术,相当于没有测量模型的结构方程。当模型结构过于复杂时,会出现自由度\(df\le0\)的情况,无法计算拟合指数。

模型设定与识别

研究假设组织气氛知觉包括6个变量:组织价值(VALUE)、工作方式(JOBSTYLE)、团队合作(TEAMWORK)、领导风格(LEADERSH)、学习成长(LEARNING)、环境气氛(ENVIRON)。这6个变量均会影响员工的组织承诺感(commit),进而影响员工的工作绩效(out),此时,组织承诺作为中介变量,同时年资(TENURE)是控制变量,既影响组织承诺,也影响工作绩效。 整个模型有9个观察变量,因此测量数据\(DP=(9\times10)/2=45\)。模型设定6个组织气氛知觉变量之间都相关,因此有15个相关系数参数,7个外生变量有7个方差参数,2个内生变量有2个解释残差(即回归方程的误差项),9个路径回归系数,所以待估参数\(t=15+7+2+9=33\)个。\(t<DP\)因此模型时可识别的。

参数估计

变量描述

dat <- read_sav("ch07.sav")
datasummary_skim(dat, fun_numeric = list('取值'=NUnique, '缺失值'=PercentMissing, '均值'=Mean, '中位数'=Median,'标准差'=SD, '最小值'=Min, '最大值'=Max), output = "data.frame", type = "numeric", fmt_sprintf("%.2f")) |> knitr::kable()
取值 缺失值 均值 中位数 标准差 最小值 最大值
out 9 0 4.22 4.33 0.63 2.00 5.00
commit 22 0 9.49 9.67 1.59 4.00 12.00
VALUE 15 0 4.27 4.33 0.81 1.00 6.00
JOBSTYLE 15 0 4.18 4.33 0.95 1.00 6.00
TEAMWORK 14 0 4.33 4.33 0.83 1.33 6.00
LEADERSH 12 0 4.87 5.00 0.77 2.00 6.00
LEARNING 14 0 4.71 5.00 0.88 1.67 6.00
ENVIRONM 14 0 4.43 4.33 0.88 1.00 6.00
TENURE 106 0 9.12 4.00 9.23 0.08 32.00

参数估计设定

  • 设定结构模型部分(代码part1),组织承诺commit被7个变量解释;员工绩效被2个变量解释。代码形式与回归方程类似。
  • 设定相关系数部分(代码part2),lavaan包会自动外生变量添加两两相关的相关系数参数,路径图里显示6个组织气氛变量与年资不相关,因此要手动设定。
  • 还可以定义感兴趣的间接效应和总效应(代码part3和part4)。
path1 <-'
#part1:设定结构模型
  commit~ a1*VALUE+a2*JOBSTYLE+a3*TEAMWORK+a4*LEADERSH
          +a5*LEARNING+a6*ENVIRONM+a7*TENURE
  out~c*TENURE+b*commit
#part2:设定外生变量的相关系数
  VALUE    ~~ JOBSTYLE 
  VALUE    ~~ TEAMWORK 
  VALUE    ~~ LEADERSH 
  VALUE    ~~ LEARNING
  VALUE    ~~ ENVIRONM 
  JOBSTYLE ~~ TEAMWORK 
  JOBSTYLE ~~ LEADERSH 
  JOBSTYLE ~~ LEARNING 
  JOBSTYLE ~~ ENVIRONM 
  TEAMWORK ~~ LEADERSH 
  TEAMWORK ~~ LEARNING 
  TEAMWORK ~~ ENVIRONM
  LEADERSH ~~ LEARNING 
  LEADERSH ~~ ENVIRONM 
  LEARNING ~~ ENVIRONM 
  # 设定相关系数为0
  TENURE   ~~ 0*VALUE 
  TENURE   ~~ 0*JOBSTYLE 
  TENURE   ~~ 0*TEAMWORK 
  TENURE   ~~ 0*LEADERSH 
  TENURE   ~~ 0*LEARNING
  TENURE   ~~ 0*ENVIRONM
#part3:定义间接效应 (a*b)
  a1b := a1*b
  a2b := a2*b
  a3b := a3*b
  a4b := a4*b
  a5b := a5*b
  a6b := a6*b
  a7b := a7*b
#part4:定义年资TENURE的总效应
  total := c + a7b'

结果报告

summary报告第一部分为模型基本信息,估计方法为最大似然估计,优化方法为非线性最小优化,待估参数33个,样本量281.

summary报告第二部分为拟合度检验,包括卡方值和检验结果、CFI、RMSEA、SRMR等。

  • 模型拟合度分析:对照前面的标准,CFI值0.98大于标准0.9,SRMR值0.06小于标准0.08,表明拟合比较理想;RMSEA为0.067略微大于标准0.05,表明模型拟合不理想;综合来看,理论模型拟合度较好。

summary报告第三部分为参数估计结果,包括路径回归系数、外生变量协方差、外生变量方差和内生变量的解释残差、直接效应和间接效应参数估计。

  • 回归模型(Regressions)部分为路径回归系数估计值相关结果,std.all对应的是标准化的回归系数。团队合作(TEAMWORK)和领导风格(LEADERSH)对组织承诺(commit)的回归系数不显著。其余回归系数均显著。
  • 协方差(Covariances)部分为外生变量协方差,由于模型设定年资(TENURE)与其他外生变量不相关,因此固定为0,std.all是标准化后的协方差,即外生变量的相关系数。协方差估计结果均显著,说明外生变量间相关性存在。
  • 方差(Variances)部分为内生变量的解释残差(.commit和.out)和外生变量的方差。
  • 定义参数估计(Defined Parameters)部分为总效应和间接效应系数相关信息。同样,团队合作(TEAMWORK)和领导风格(LEADERSH)的间接效应系数a3b和a4b不显著,显然这与回归模型的结论一致。
path1_fit <- sem(path1, data = dat)
path1_res <- summary(path1_fit, fit.measures=T,standard = T)
path1_res
lavaan 0.6-19 ended normally after 43 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        33

  Number of observations                           281

Model Test User Model:
                                                      
  Test statistic                                27.106
  Degrees of freedom                                12
  P-value (Chi-square)                           0.007

Model Test Baseline Model:

  Test statistic                               866.406
  Degrees of freedom                                36
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.982
  Tucker-Lewis Index (TLI)                       0.945

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3522.025
  Loglikelihood unrestricted model (H1)      -3508.473
                                                      
  Akaike (AIC)                                7110.051
  Bayesian (BIC)                              7230.116
  Sample-size adjusted Bayesian (SABIC)       7125.475

Root Mean Square Error of Approximation:

  RMSEA                                          0.067
  90 Percent confidence interval - lower         0.033
  90 Percent confidence interval - upper         0.101
  P-value H_0: RMSEA <= 0.050                    0.181
  P-value H_0: RMSEA >= 0.080                    0.287

Standardized Root Mean Square Residual:

  SRMR                                           0.060

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  commit ~                                                              
    VALUE     (a1)    0.428    0.116    3.687    0.000    0.428    0.218
    JOBSTYLE  (a2)    0.242    0.100    2.409    0.016    0.242    0.146
    TEAMWORK  (a3)    0.106    0.118    0.895    0.371    0.106    0.056
    LEADERSH  (a4)    0.108    0.119    0.912    0.362    0.108    0.053
    LEARNING  (a5)    0.363    0.115    3.159    0.002    0.363    0.203
    ENVIRONM  (a6)    0.276    0.106    2.611    0.009    0.276    0.153
    TENURE    (a7)    0.022    0.008    2.816    0.005    0.022    0.129
  out ~                                                                 
    TENURE     (c)    0.011    0.004    2.964    0.003    0.011    0.157
    commit     (b)    0.172    0.021    8.135    0.000    0.172    0.430

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  VALUE ~~                                                              
    JOBSTYLE          0.367    0.051    7.244    0.000    0.367    0.479
    TEAMWORK          0.271    0.043    6.288    0.000    0.271    0.405
    LEADERSH          0.206    0.039    5.274    0.000    0.206    0.331
    LEARNING          0.344    0.047    7.328    0.000    0.344    0.486
    ENVIRONM          0.369    0.047    7.782    0.000    0.369    0.524
  JOBSTYLE ~~                                                           
    TEAMWORK          0.420    0.053    7.853    0.000    0.420    0.530
    LEADERSH          0.328    0.048    6.829    0.000    0.328    0.446
    LEARNING          0.461    0.057    8.078    0.000    0.461    0.550
    ENVIRONM          0.269    0.052    5.149    0.000    0.269    0.323
  TEAMWORK ~~                                                           
    LEADERSH          0.318    0.043    7.443    0.000    0.318    0.496
    LEARNING          0.390    0.049    7.884    0.000    0.390    0.533
    ENVIRONM          0.368    0.049    7.571    0.000    0.368    0.506
  LEADERSH ~~                                                           
    LEARNING          0.386    0.047    8.259    0.000    0.386    0.566
    ENVIRONM          0.249    0.043    5.800    0.000    0.249    0.369
  LEARNING ~~                                                           
    ENVIRONM          0.332    0.050    6.626    0.000    0.332    0.430
  VALUE ~~                                                              
    TENURE            0.000                               0.000    0.000
  JOBSTYLE ~~                                                           
    TENURE            0.000                               0.000    0.000
  TEAMWORK ~~                                                           
    TENURE            0.000                               0.000    0.000
  LEADERSH ~~                                                           
    TENURE            0.000                               0.000    0.000
  LEARNING ~~                                                           
    TENURE            0.000                               0.000    0.000
  ENVIRONM ~~                                                           
    TENURE            0.000                               0.000    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .commit            1.456    0.123   11.853    0.000    1.456    0.586
   .out               0.305    0.026   11.853    0.000    0.305    0.773
    VALUE             0.647    0.055   11.853    0.000    0.647    1.000
    JOBSTYLE          0.907    0.077   11.853    0.000    0.907    1.000
    TEAMWORK          0.691    0.058   11.853    0.000    0.691    1.000
    LEADERSH          0.598    0.050   11.853    0.000    0.598    1.000
    LEARNING          0.776    0.065   11.853    0.000    0.776    1.000
    ENVIRONM          0.765    0.065   11.853    0.000    0.765    1.000
    TENURE           84.834    7.157   11.853    0.000   84.834    1.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    a1b               0.073    0.022    3.358    0.001    0.073    0.094
    a2b               0.041    0.018    2.310    0.021    0.041    0.063
    a3b               0.018    0.020    0.889    0.374    0.018    0.024
    a4b               0.019    0.021    0.906    0.365    0.019    0.023
    a5b               0.062    0.021    2.945    0.003    0.062    0.087
    a6b               0.047    0.019    2.486    0.013    0.047    0.066
    a7b               0.004    0.001    2.661    0.008    0.004    0.055
    total             0.014    0.004    3.787    0.000    0.014    0.212

直接与间接效应

路径分析的目的之一是探讨内生变量被外生变量解释的总体效应、直接效应和间接效应。尽管采用分阶段回归的方式也能够估计出各个效应值,但是结构方程技术更方便对这些效应进行统计检验。

  • 直接效应:summary报告参数估计的回归模型部分的路径系数便是直接效应。例如组织价值(VALUE)对组织承诺(commit)的直接效应为a1,即0.428,而年资(TENURE)对工作绩效(out)的直接效应为c,即0.011.

  • 间接效应:外生变量通过中介变量对另一个内生变量产生的影响,便是间接效应。例如间接效应系数a1b代表组织价值对组织承诺的效应(a1=0.428)通过组织承诺对工作绩效的直接效应(b=0.172)间接影响到工作绩效,形成间接效应(a1b),并且数值上间接效应等于两段直接效应的乘积,即\(a1b=a1\times b=0.428\times 0.172=0.073\),统计检验显示其p值为0.001,该间接效应具有统计上的意义。

  • 总效应:一个变量对结果变量直接效应和间接效应的总和便是总效应。例如,年资(TENURE)对工作绩效的直接效应(c=0.011),年资通过组织承诺对工作绩效的间接效应(a7b=0.004),那么年资对工作绩效的总效应\(total=c+a7b=0.011+0.004\simeq 0.015\),统计检验其p值为0,该总效应具有统计上的意义。

path1_res$pe[c(1:9,40:47),] |>
  select(lhs, op, rhs, est, se, z, std.all, pvalue) |>
  mutate(across(where(is.numeric), ~round(., 3)))
      lhs op      rhs   est    se     z std.all pvalue
1  commit  ~    VALUE 0.428 0.116 3.687   0.218  0.000
2  commit  ~ JOBSTYLE 0.242 0.100 2.409   0.146  0.016
3  commit  ~ TEAMWORK 0.106 0.118 0.895   0.056  0.371
4  commit  ~ LEADERSH 0.108 0.119 0.912   0.053  0.362
5  commit  ~ LEARNING 0.363 0.115 3.159   0.203  0.002
6  commit  ~ ENVIRONM 0.276 0.106 2.611   0.153  0.009
7  commit  ~   TENURE 0.022 0.008 2.816   0.129  0.005
8     out  ~   TENURE 0.011 0.004 2.964   0.157  0.003
9     out  ~   commit 0.172 0.021 8.135   0.430  0.000
40    a1b :=     a1*b 0.073 0.022 3.358   0.094  0.001
41    a2b :=     a2*b 0.041 0.018 2.310   0.063  0.021
42    a3b :=     a3*b 0.018 0.020 0.889   0.024  0.374
43    a4b :=     a4*b 0.019 0.021 0.906   0.023  0.365
44    a5b :=     a5*b 0.062 0.021 2.945   0.087  0.003
45    a6b :=     a6*b 0.047 0.019 2.486   0.066  0.013
46    a7b :=     a7*b 0.004 0.001 2.661   0.055  0.008
47  total :=    c+a7b 0.014 0.004 3.787   0.212  0.000

模型调整

模型调整主要依据MI指数,考察大于5的取值,结合理论进行判断。

  1. 工作绩效与组织承诺的残差间有显著的修正空间,MI值为15.2,但是预期变化量EPC为-0.24(原设定为0),表明有某种未观察到的变量,同时影响工作绩效和组织承诺,但是对它们的影响效应是相反的,尚缺乏有效的理论支撑。
  2. 工作绩效对组织承诺的结构参数对应的MI值为15.2,表示该参数要纳入模型,但是如果纳入会导致回馈循环效应,并且预期改变量为-0.8,表示员工工作绩效越高,组织承诺越低,难以有理论或逻辑上的解释,缺乏合理性。
  3. 学习成长、领导风格、组织价值、团队合作对工作绩效的结构参数对应的MI值均大于5,预测值也为正,表明这些变量得分越高,工作绩效越好,理论逻辑上是合理的。可以考虑增加这些变量对结果变量的直接效应。
modificationindices(path1_fit, sort. = T, maximum.number = 8)
       lhs op      rhs     mi    epc sepc.lv sepc.all sepc.nox
48  commit ~~      out 15.228 -0.244  -0.244   -0.366   -0.366
63  commit  ~      out 15.228 -0.800  -0.800   -0.319   -0.319
68     out  ~ LEARNING 13.063  0.158   0.158    0.222    0.222
67     out  ~ LEADERSH  9.170  0.140   0.140    0.173    0.173
64     out  ~    VALUE  7.031  0.127   0.127    0.162    0.162
66     out  ~ TEAMWORK  6.771  0.115   0.115    0.152    0.152
125 TENURE  ~ ENVIRONM  5.352  1.453   1.453    0.138    0.138
120 TENURE  ~    VALUE  4.581  1.462   1.462    0.128    0.128

先增加一条学习成长到工作绩效的直接效应,设定新的模型,试试看。

path2 <- '#part1:set the structure model
  commit~ a1*VALUE+a2*JOBSTYLE+a3*TEAMWORK+a4*LEADERSH
          +a5*LEARNING+a6*ENVIRONM+a7*TENURE
  out~c*TENURE+b*commit + d*LEARNING # 添加直接效应d
#part2:set the correlation
  VALUE    ~~ JOBSTYLE 
  VALUE    ~~ TEAMWORK 
  VALUE    ~~ LEADERSH 
  VALUE    ~~ LEARNING
  VALUE    ~~ ENVIRONM 
  JOBSTYLE ~~ TEAMWORK 
  JOBSTYLE ~~ LEADERSH 
  JOBSTYLE ~~ LEARNING 
  JOBSTYLE ~~ ENVIRONM 
  TEAMWORK ~~ LEADERSH 
  TEAMWORK ~~ LEARNING 
  TEAMWORK ~~ ENVIRONM
  LEADERSH ~~ LEARNING 
  LEADERSH ~~ ENVIRONM 
  LEARNING ~~ ENVIRONM 
  # fix
  TENURE   ~~ 0*VALUE 
  TENURE   ~~ 0*JOBSTYLE 
  TENURE   ~~ 0*TEAMWORK 
  TENURE   ~~ 0*LEADERSH 
  TENURE   ~~ 0*LEARNING
  TENURE   ~~ 0*ENVIRONM
#part3:define indirect effect (a*b)
  a1b := a1*b
  a2b := a2*b
  a3b := a3*b
  a4b := a4*b
  a5b := a5*b
  a6b := a6*b
  a7b := a7*b
#part4:define total effect of COMMIT
  total := c + a7b'

path2_fit <- sem(path2, data = dat)

summary(path2_fit, fit.measures=T, standard=T)
lavaan 0.6-19 ended normally after 44 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        34

  Number of observations                           281

Model Test User Model:
                                                      
  Test statistic                                13.714
  Degrees of freedom                                11
  P-value (Chi-square)                           0.249

Model Test Baseline Model:

  Test statistic                               866.406
  Degrees of freedom                                36
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.997
  Tucker-Lewis Index (TLI)                       0.989

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3515.330
  Loglikelihood unrestricted model (H1)      -3508.473
                                                      
  Akaike (AIC)                                7098.659
  Bayesian (BIC)                              7222.363
  Sample-size adjusted Bayesian (SABIC)       7114.551

Root Mean Square Error of Approximation:

  RMSEA                                          0.030
  90 Percent confidence interval - lower         0.000
  90 Percent confidence interval - upper         0.073
  P-value H_0: RMSEA <= 0.050                    0.736
  P-value H_0: RMSEA >= 0.080                    0.024

Standardized Root Mean Square Residual:

  SRMR                                           0.041

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  commit ~                                                              
    VALUE     (a1)    0.428    0.116    3.687    0.000    0.428    0.218
    JOBSTYLE  (a2)    0.242    0.100    2.409    0.016    0.242    0.146
    TEAMWORK  (a3)    0.106    0.118    0.895    0.371    0.106    0.056
    LEADERSH  (a4)    0.108    0.119    0.912    0.362    0.108    0.053
    LEARNING  (a5)    0.363    0.115    3.159    0.002    0.363    0.203
    ENVIRONM  (a6)    0.276    0.106    2.611    0.009    0.276    0.153
    TENURE    (a7)    0.022    0.008    2.816    0.005    0.022    0.129
  out ~                                                                 
    TENURE     (c)    0.011    0.004    3.192    0.001    0.011    0.166
    commit     (b)    0.125    0.024    5.201    0.000    0.125    0.315
    LEARNING   (d)    0.158    0.043    3.706    0.000    0.158    0.222

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  VALUE ~~                                                              
    JOBSTYLE          0.367    0.051    7.244    0.000    0.367    0.479
    TEAMWORK          0.271    0.043    6.288    0.000    0.271    0.405
    LEADERSH          0.206    0.039    5.274    0.000    0.206    0.331
    LEARNING          0.344    0.047    7.328    0.000    0.344    0.486
    ENVIRONM          0.369    0.047    7.782    0.000    0.369    0.524
  JOBSTYLE ~~                                                           
    TEAMWORK          0.420    0.053    7.853    0.000    0.420    0.530
    LEADERSH          0.328    0.048    6.829    0.000    0.328    0.446
    LEARNING          0.461    0.057    8.078    0.000    0.461    0.550
    ENVIRONM          0.269    0.052    5.149    0.000    0.269    0.323
  TEAMWORK ~~                                                           
    LEADERSH          0.318    0.043    7.443    0.000    0.318    0.496
    LEARNING          0.390    0.049    7.884    0.000    0.390    0.533
    ENVIRONM          0.368    0.049    7.571    0.000    0.368    0.506
  LEADERSH ~~                                                           
    LEARNING          0.386    0.047    8.259    0.000    0.386    0.566
    ENVIRONM          0.249    0.043    5.800    0.000    0.249    0.369
  LEARNING ~~                                                           
    ENVIRONM          0.332    0.050    6.626    0.000    0.332    0.430
  VALUE ~~                                                              
    TENURE            0.000                               0.000    0.000
  JOBSTYLE ~~                                                           
    TENURE            0.000                               0.000    0.000
  TEAMWORK ~~                                                           
    TENURE            0.000                               0.000    0.000
  LEADERSH ~~                                                           
    TENURE            0.000                               0.000    0.000
  LEARNING ~~                                                           
    TENURE            0.000                               0.000    0.000
  ENVIRONM ~~                                                           
    TENURE            0.000                               0.000    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .commit            1.456    0.123   11.853    0.000    1.456    0.586
   .out               0.291    0.025   11.853    0.000    0.291    0.739
    VALUE             0.647    0.055   11.853    0.000    0.647    1.000
    JOBSTYLE          0.907    0.077   11.853    0.000    0.907    1.000
    TEAMWORK          0.691    0.058   11.853    0.000    0.691    1.000
    LEADERSH          0.598    0.050   11.853    0.000    0.598    1.000
    LEARNING          0.776    0.065   11.853    0.000    0.776    1.000
    ENVIRONM          0.765    0.065   11.853    0.000    0.765    1.000
    TENURE           84.834    7.157   11.853    0.000   84.834    1.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    a1b               0.054    0.018    3.008    0.003    0.054    0.069
    a2b               0.030    0.014    2.186    0.029    0.030    0.046
    a3b               0.013    0.015    0.882    0.378    0.013    0.018
    a4b               0.014    0.015    0.898    0.369    0.014    0.017
    a5b               0.046    0.017    2.700    0.007    0.046    0.064
    a6b               0.035    0.015    2.333    0.020    0.035    0.048
    a7b               0.003    0.001    2.477    0.013    0.003    0.040
    total             0.014    0.004    3.869    0.000    0.014    0.206

学习成长到工作绩效的直接效应(d)为0.158,p值为0,说明该效应存在。比较前后模型的拟合度指标发现,卡方值明显下降,p值已大于0.05,RMSEA和SRMR都小于目标值。新模型完美拟合,无需再进行调整。

fitmeasures(path1_fit, c("chisq", "df", "pvalue", "nfi","nnfi","cfi", "rmsea", "srmr")) # 原设定模型
 chisq     df pvalue    nfi   nnfi    cfi  rmsea   srmr 
27.106 12.000  0.007  0.969  0.945  0.982  0.067  0.060 
fitmeasures(path2_fit, c("chisq", "df", "pvalue", "nfi","nnfi","cfi", "rmsea", "srmr")) # 调整后模型
 chisq     df pvalue    nfi   nnfi    cfi  rmsea   srmr 
13.714 11.000  0.249  0.984  0.989  0.997  0.030  0.041 

前后两个模型是嵌套关系,可以进行嵌套模型的卡方差异检验,检验模型修正带来的拟合优度增幅是否具有显著意义。

anova(path1_fit, path2_fit)

Chi-Squared Difference Test

          Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff Pr(>Chisq)    
path2_fit 11 7098.7 7222.4 13.714                                          
path1_fit 12 7110.1 7230.1 27.106     13.391 0.20999       1  0.0002528 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

可以绘制两个模型的路径图进行比较。

统合模型分析

统合模型的基础

  • 统合模型的构成:统合模型包含测量模型和结构模型。如果结构模型中的变量都是潜变量,则称为完全统合模型或完全潜在模型,如果结构模型中的某一个或某几个变量是单一指标的测量变量,则称为部分潜在模型。

  • 统合模型分析步骤:通常采用两阶段策略,第一个阶段是针对测量模型确定因素结构的拟合性,第二阶段则是在不改变测量模型的前提下,增加结构模型的设定,并评估结构模型的拟合性。该方法的优点在于测量模型的检测可以提供潜变量的聚敛与区分效度的信息,结构模型则可以提供预测效度的证据。

  • 变量组合的策略:结构方程模型分析经常会以变量组合策略简化测量模型,使结构模型得以在比较简化的情形下进行估计。

    • 例如某个潜变量有6个测量变量,可以每两题加起来求平均值,将6个变量聚合成3个变量以降低模型的复杂程度。聚合层次的变量分数称为组合分数。特别是当样本量太少,而模型估计参数很多,变通做法是通过将测量变量组合成单一变量,将潜变量转换为观察变量后进行路径分析。
    • 变量组合的优点:简化模型、提高模型拟合度、获得较理想的估计解、得到较好的测量信度、较高的变量解释力、观察变量的尺度更具有等距性与正态性、更理想的检验效力(每题的样本量与题数的比值更高)、避免特殊题项的干扰。
    • 变量组合不应为简化而简化,需要提出简化的理由与统计量上支持,必须经过验证性因子分析的检验,保证构念的单一维度,并且组合的题项要具有相同的尺度(例如都是二分变量或者都是相同点数的likert量表)。

统合模型分析的操作

250位教师的创意教学行为调查数据,包括教师的创造人格特质(Person)、创意教学自我效能感(Efficacy)、组织社会化(Socialized)、教学创新行为(Crea)等4个潜变量的10个测量变量。

  • 创造人格特质包括多角推理、兴趣广泛、乐在工作3个测量变量
  • 自我效能感包括自我肯定、自我防卫、社会支持寻求、外在压力抗衡4个测量变量
  • 组织社会化包括组织融入和工作熟练度2个测量变量
  • 教学创新行为已将9个量表题项加总成组合分数

假设模型

研究假设:

  1. 教师创意教学⾃我效能越⾼,越能够表现出创意教学⾏为。
  2. 教师个⼈创造性格越强、组织社会化程度越⾼,则创意教学⾃我效能越⾼。
  3. 教师个⼈创造性格与组织社会化程度两项特质,会透过⾃我效能的中介作⽤,间接影响教师的创意教学⾏为。

数据是以协方差矩阵的形式给出的。可以通过热力图展示测量变量间的相关系数。

library(tidyverse)
library(lavaan)
library(modelsummary)
library(semPlot)
library(corrplot)
corrplot 0.95 loaded
library(semptools) # 给路径图标记显著性

N <- 250 # 样本量
# 协方差矩阵
COV <- structure(c(17.711, 1.843, 0.801, 1.243, 1.692, 7.518, 7.585, 
                   6.499, 3.02, 2.663, 1.843, 0.404, 0.146, 0.227, 0.226, 1.074, 
                   1.062, 0.906, 0.369, 0.318, 0.801, 0.146, 0.374, 0.11, 0.115, 
                   0.301, 0.538, 0.388, 0.237, 0.307, 1.243, 0.227, 0.11, 0.589, 
                   0.208, 0.531, 0.609, 0.434, 0.322, 0.335, 1.692, 0.226, 0.115, 
                   0.208, 0.393, 0.741, 0.806, 0.664, 0.196, 0.326, 7.518, 1.074, 
                   0.301, 0.531, 0.741, 7.565, 5.202, 4.53, 1.947, 2.092, 7.585, 
                   1.062, 0.538, 0.609, 0.806, 5.202, 7.046, 4.626, 1.524, 1.824, 
                   6.499, 0.906, 0.388, 0.434, 0.664, 4.53, 4.626, 6.335, 1.649, 
                   1.662, 3.02, 0.369, 0.237, 0.322, 0.196, 1.947, 1.524, 1.649, 
                   4.482, 2.335, 2.663, 0.318, 0.307, 0.335, 0.326, 2.092, 1.824, 
                   1.662, 2.335, 2.982), dim = c(10L, 10L), dimnames = list(c("CREAT", 
                                                                              "SEFF1", "SEFF2", "SEFF3", "SEFF4", "PER1", "PER2", "PER3", "SOC1", 
                                                                              "SOC2"), c("CREAT", "SEFF1", "SEFF2", "SEFF3", "SEFF4", "PER1", 
                                                                                         "PER2", "PER3", "SOC1", "SOC2")))

# X和Y相关系数,等于二者的协方差除以二者标准差的积:
COR <- COV / (sqrt(diag(COV) %*% t(diag(COV))))

# 调用corrplot命令,绘制热力图
# Generate a lighter palette
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))

corrplot(COR, method = "shade", shade.col = NA, tl.col = "black", tl.srt = 45,
         col = col(200), addCoef.col = "black", cl.pos = "n")

模型设定与识别

  • 由于该模型有10个测量变量,测量数据的数目为\(DP=10\times11/2=55\)个。
  • 模型有5个外生测量变量,5个内生测量变量,所以有5个外生测量残差,4个内生测量残差(潜变量CREA只有1个指标,完美预测,该测量变量残差固定为0,因后面要调整测量模型,概念模型中依然采取测量变量和潜变量分开的方式,本质是1个变量),待估参数9个。
  • 模型有2个外生潜变量,2个内生潜变量,所以外生潜变量的协方差1个(概念图未标出)和方差2个(与之前的CFA部分处理不同,此处不通过限定外生变量方差为1来标准化,改为限定第一个因子载荷为1,如下),内生潜变量2个解释残差,待估参数5个。
  • 每个测量变量仅受一个潜变量影响,故产生10个因子载荷,为确立两个潜变量的尺度,潜变量的第一因子载荷固定为1,所以要扣除4个,待估参数6个。
  • 内生潜变量被外生潜变量解释,有5个待估结构参数(路径系数)。
  • 因此,待估参数\(t=9+5+6+5=25\)个。

测量模型分析阶段

模型拟合情况大致良好,卡方p值为0,卡方自由度比为2.6,接近2,NFI为0.94,CFI为0.96,RMSEA为0.08,SRMR为0.04,可以继续检验MI指数按照验证性因子分析介绍的方式调整测量模型,这里直接进行第二阶段的结构模型估计。

cfa_mod <- '
# measurement model
    CREA =~ 1*CREAT # 由于CREA只有一个测量变量,因此设定因子载荷为1,默认测量变量残差方差为0
    SEFF =~ SEFF1 + SEFF2 + SEFF3 + SEFF4
    PER  =~ PER1  + PER2  + PER3
    SOC  =~ SOC1  + SOC2'

cfa_fit <- cfa(model = cfa_mod, sample.cov = COV, sample.nobs = 250)
summary(cfa_fit, standard=T)
lavaan 0.6-19 ended normally after 63 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        25

  Number of observations                           250

Model Test User Model:
                                                      
  Test statistic                                80.964
  Degrees of freedom                                30
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  CREA =~                                                               
    CREAT             1.000                               4.200    1.000
  SEFF =~                                                               
    SEFF1             1.000                               0.537    0.846
    SEFF2             0.474    0.074    6.421    0.000    0.255    0.417
    SEFF3             0.735    0.091    8.116    0.000    0.395    0.515
    SEFF4             0.834    0.070   11.981    0.000    0.448    0.716
  PER =~                                                                
    PER1              1.000                               2.274    0.828
    PER2              1.009    0.064   15.877    0.000    2.294    0.866
    PER3              0.875    0.062   14.129    0.000    1.989    0.792
  SOC =~                                                                
    SOC1              1.000                               1.478    0.700
    SOC2              1.064    0.149    7.148    0.000    1.573    0.913

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  CREA ~~                                                               
    SEFF              1.861    0.205    9.093    0.000    0.826    0.826
    PER               7.467    0.852    8.761    0.000    0.782    0.782
    SOC               2.575    0.546    4.717    0.000    0.415    0.415
  SEFF ~~                                                               
    PER               0.985    0.121    8.145    0.000    0.807    0.807
    SOC               0.342    0.076    4.485    0.000    0.432    0.432
  PER ~~                                                                
    SOC               1.787    0.350    5.114    0.000    0.532    0.532

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .CREAT             0.000                               0.000    0.000
   .SEFF1             0.114    0.018    6.519    0.000    0.114    0.284
   .SEFF2             0.308    0.028   10.834    0.000    0.308    0.826
   .SEFF3             0.431    0.041   10.582    0.000    0.431    0.734
   .SEFF4             0.191    0.020    9.385    0.000    0.191    0.488
   .PER1              2.365    0.283    8.355    0.000    2.365    0.314
   .PER2              1.758    0.241    7.302    0.000    1.758    0.250
   .PER3              2.354    0.261    9.033    0.000    2.354    0.373
   .SOC1              2.279    0.339    6.714    0.000    2.279    0.511
   .SOC2              0.495    0.311    1.592    0.111    0.495    0.167
    CREA             17.640    1.578   11.180    0.000    1.000    1.000
    SEFF              0.288    0.037    7.721    0.000    1.000    1.000
    PER               5.170    0.667    7.751    0.000    1.000    1.000
    SOC               2.185    0.438    4.992    0.000    1.000    1.000
fitmeasures(cfa_fit)[c('chisq', 'df', 'pvalue', 'nfi', 'nnfi', 'cfi', 'rmsea', 'srmr')] |> round(3)
 chisq     df pvalue    nfi   nnfi    cfi  rmsea   srmr 
80.964 30.000  0.000  0.936  0.937  0.958  0.082  0.042 

结构模型分析阶段

将测量模型与结构模型组合在一起就构成了统合模型。测量模型不变,按照研究假设设定结构模型,进行分析并报告结果。

sem_mod<-'
# 测量模型
    CREA =~ 1*CREAT
    SEFF =~ SEFF1 + SEFF2 + SEFF3 + SEFF4
    PER  =~ PER1  + PER2  + PER3
    SOC  =~ SOC1  + SOC2
# 结构模型
    SEFF ~ a1*PER + c1*SOC
    CREA ~ a2*PER + b1*SEFF + c2*SOC
# 设定外生潜变量之间的协方差
    SOC  ~~ PER 
'
sem_fit <- sem(model = sem_mod, sample.cov = COV, sample.nobs = 250)
summary(sem_fit, standard=T)
lavaan 0.6-19 ended normally after 81 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        25

  Number of observations                           250

Model Test User Model:
                                                      
  Test statistic                                80.964
  Degrees of freedom                                30
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  CREA =~                                                               
    CREAT             1.000                               4.200    1.000
  SEFF =~                                                               
    SEFF1             1.000                               0.537    0.846
    SEFF2             0.474    0.074    6.421    0.000    0.255    0.417
    SEFF3             0.735    0.091    8.116    0.000    0.395    0.515
    SEFF4             0.834    0.070   11.981    0.000    0.448    0.716
  PER =~                                                                
    PER1              1.000                               2.274    0.828
    PER2              1.009    0.064   15.877    0.000    2.294    0.866
    PER3              0.875    0.062   14.129    0.000    1.989    0.792
  SOC =~                                                                
    SOC1              1.000                               1.478    0.700
    SOC2              1.064    0.149    7.148    0.000    1.573    0.913

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  SEFF ~                                                                
    PER       (a1)    0.190    0.019    9.944    0.000    0.805    0.805
    SOC       (c1)    0.001    0.026    0.046    0.964    0.003    0.003
  CREA ~                                                                
    PER       (a2)    0.616    0.189    3.266    0.001    0.334    0.334
    SEFF      (b1)    4.364    0.807    5.407    0.000    0.558    0.558
    SOC       (c2)   -0.010    0.147   -0.065    0.948   -0.003   -0.003

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  PER ~~                                                                
    SOC               1.787    0.350    5.114    0.000    0.532    0.532

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .CREAT             0.000                               0.000    0.000
   .SEFF1             0.114    0.018    6.519    0.000    0.114    0.284
   .SEFF2             0.308    0.028   10.834    0.000    0.308    0.826
   .SEFF3             0.431    0.041   10.582    0.000    0.431    0.734
   .SEFF4             0.191    0.020    9.385    0.000    0.191    0.488
   .PER1              2.365    0.283    8.355    0.000    2.365    0.314
   .PER2              1.758    0.241    7.302    0.000    1.758    0.250
   .PER3              2.354    0.261    9.033    0.000    2.354    0.373
   .SOC1              2.279    0.339    6.714    0.000    2.279    0.511
   .SOC2              0.495    0.311    1.592    0.111    0.495    0.167
   .CREA              4.941    0.600    8.238    0.000    0.280    0.280
   .SEFF              0.100    0.020    4.954    0.000    0.349    0.349
    PER               5.170    0.667    7.751    0.000    1.000    1.000
    SOC               2.185    0.438    4.992    0.000    1.000    1.000

各因子载荷均达到显著性水平,说明测量模型理想;结构模型部分,性格对自我效能感、自我效能感对创新行性格对创新行为的3个回归系数显著,社会化对自我效能感和创新行为的2个回归系数均不显著。两个外生潜变量性格和社会化的协方差和2个方差都是显著的。
模型拟合情况如下,可以看到,模型的拟合程度还是不错的,但仍有修正空间。

fitmeasures(sem_fit)[c('chisq', 'df', 'pvalue', 'nfi', 'nnfi', 'cfi', 'rmsea', 'srmr')] |> round(3) # 查看拟合结果
 chisq     df pvalue    nfi   nnfi    cfi  rmsea   srmr 
80.964 30.000  0.000  0.936  0.937  0.958  0.082  0.042 
semPaths(sem_fit, 
         what = "std", 
         fade = F, 
         rotation = 2,
         layout = "tree2",
         edge.color = "darkgrey",
         esize = 3,
         edge.label.cex = 1.1,
         ask = FALSE)

模型调整

modificationindices(sem_fit, sort. = T, maximum.number = 5)
     lhs op   rhs     mi    epc sepc.lv sepc.all sepc.nox
47   PER =~ SEFF1 13.127  0.154   0.351    0.553    0.553
64 CREAT ~~ SEFF4 13.032  0.329   0.329       NA       NA
34  CREA =~ SEFF4 12.759  0.073   0.308    0.492    0.492
72 SEFF1 ~~ SEFF4 11.869 -0.068  -0.068   -0.459   -0.459
80 SEFF2 ~~  PER1  9.985 -0.196  -0.196   -0.230   -0.230

模型修饰指数(MI)最高的五项推荐了5条修改路径。第一条是外生潜变量性格(PER)影响自我效能的内生测量变量自我肯定(SEFF1)的因子载荷(MI=13.13);第二条是内生测量变量创新行为(CREAT)和压力抗衡(SEFF4)的测量残差的相关性;第三条是内生潜变量创新行为(CREA)影响自我效能的测量变量压力抗衡(SEFF4)的因子载荷(MI=13.03);第四条是测量变量自我肯定(SEFF1)和压力抗衡(SEFF4)的测量误差的相关性;第五条是测量变量(SEFF2)与(PER1)之间的测量残差的相关性。首先模型修正以结构参数和测量因子载荷参数优先,因为这些参数涉及模型的潜变量的测量和研究假设,残差的考虑与观察不到的因素和隐含条件相关,因此不优先考虑对其调整。因此重点关注第一条和第三条建议路径。同时潜变量与测量变量之间的关系,也优先考虑内生潜变量对内生测量变量的影响或外生潜变量对外生测量变量的影响,在测量模型层面考虑内外生变量的交叉影响会使得模型过于复杂,也很难有理论的支撑。因此,选择第三条路径进行修正,这条路径也有比较合理的解释,即创新行为(CREA)影响压力抗衡(SEFF4)的因子载荷,意味当教师表现出创新行为后,可能增强其抗压的信念,因此可以将此参数纳入模型设定中。

mod1_mod <- '
# 测量模型
    CREA =~ CREAT + SEFF4 # 修饰模型,添加CREA影响SEFF4的路径
    SEFF =~ SEFF1 + SEFF2 + SEFF3 + SEFF4
    PER  =~ PER1  + PER2  + PER3
    SOC  =~ SOC1  + SOC2
    CREAT ~~ 0 * CREAT  # 固定内生测量变量CREAT的残差为0
# 结构模型
    SEFF ~ a1*PER + c1*SOC
    CREA ~ a2*PER + b1*SEFF + c2*SOC
# 设定外源潜在变量间的协方差
    SOC  ~~ PER 
'

mod1_fit <- sem(model = mod1_mod, sample.cov = COV, sample.nobs = 250)
summary(mod1_fit, standard=T)
lavaan 0.6-19 ended normally after 94 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        26

  Number of observations                           250

Model Test User Model:
                                                      
  Test statistic                                67.863
  Degrees of freedom                                29
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  CREA =~                                                               
    CREAT             1.000                               4.200    1.000
    SEFF4             0.058    0.013    4.614    0.000    0.243    0.389
  SEFF =~                                                               
    SEFF1             1.000                               0.584    0.921
    SEFF2             0.432    0.069    6.290    0.000    0.253    0.414
    SEFF3             0.665    0.086    7.773    0.000    0.389    0.507
    SEFF4             0.361    0.101    3.589    0.000    0.211    0.337
  PER =~                                                                
    PER1              1.000                               2.280    0.831
    PER2              1.003    0.063   15.965    0.000    2.288    0.864
    PER3              0.872    0.061   14.206    0.000    1.988    0.791
  SOC =~                                                                
    SOC1              1.000                               1.484    0.702
    SOC2              1.056    0.147    7.173    0.000    1.567    0.909

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  SEFF ~                                                                
    PER       (a1)    0.205    0.020   10.479    0.000    0.801    0.801
    SOC       (c1)   -0.017    0.027   -0.618    0.537   -0.043   -0.043
  CREA ~                                                                
    PER       (a2)    0.916    0.190    4.827    0.000    0.497    0.497
    SEFF      (b1)    2.561    0.713    3.590    0.000    0.356    0.356
    SOC       (c2)    0.039    0.154    0.255    0.798    0.014    0.014

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  PER ~~                                                                
    SOC               1.807    0.351    5.145    0.000    0.534    0.534

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .CREAT             0.000                               0.000    0.000
   .SEFF4             0.211    0.020   10.758    0.000    0.211    0.539
   .SEFF1             0.061    0.025    2.483    0.013    0.061    0.151
   .SEFF2             0.309    0.028   10.864    0.000    0.309    0.829
   .SEFF3             0.436    0.041   10.613    0.000    0.436    0.743
   .PER1              2.334    0.279    8.355    0.000    2.334    0.310
   .PER2              1.783    0.240    7.443    0.000    1.783    0.254
   .PER3              2.357    0.260    9.079    0.000    2.357    0.374
   .SOC1              2.261    0.340    6.657    0.000    2.261    0.507
   .SOC2              0.515    0.308    1.672    0.094    0.515    0.173
   .CREA              5.970    0.640    9.330    0.000    0.338    0.338
   .SEFF              0.134    0.029    4.631    0.000    0.393    0.393
    PER               5.200    0.667    7.795    0.000    1.000    1.000
    SOC               2.203    0.439    5.014    0.000    1.000    1.000
fitmeasures(mod1_fit)[c('chisq', 'df', 'pvalue', 'nfi', 'nnfi', 'cfi', 'rmsea', 'srmr')] |> round(3) # 查看拟合结果
 chisq     df pvalue    nfi   nnfi    cfi  rmsea   srmr 
67.863 29.000  0.000  0.946  0.950  0.968  0.073  0.041 

新添加的标准化因子载荷为0.389,达到显著水平。整体模型拟合度也有改善,卡方值为67.86,RMSEA为0.073。再检查MI指数,新的路径建议第四项SEFF3与SEFF4的残差相关还需要添加。其余建议路径都是内生测量变量与外生测量变量残差之间的相关性,建议路径太复杂不考虑。

modificationindices(mod1_fit, sort. = T, maximum.number = 5)
     lhs op   rhs     mi    epc sepc.lv sepc.all sepc.nox
84 SEFF1 ~~  SOC2 10.929 -0.128  -0.128   -0.723   -0.723
86 SEFF2 ~~  PER1 10.650 -0.201  -0.201   -0.237   -0.237
76 SEFF4 ~~  SOC1  9.449 -0.146  -0.146   -0.212   -0.212
72 SEFF4 ~~ SEFF3  8.778  0.060   0.060    0.199    0.199
90 SEFF2 ~~  SOC2  8.058  0.127   0.127    0.319    0.319

添加残差相关路径后,设定模型进行分析。

mod2_mod <- '
# 测量模型
    CREA =~ CREAT + SEFF4 # 修饰模型,添加CREA影响SEFF4的路径
    SEFF =~ SEFF1 + SEFF2 + SEFF3 + SEFF4
    PER  =~ PER1  + PER2  + PER3
    SOC  =~ SOC1  + SOC2
    CREAT ~~ 0 * CREAT 
# 结构模型
    SEFF ~ a1*PER + c1*SOC
    CREA ~ a2*PER + b1*SEFF + c2*SOC
# 设定外源潜在变量间的协方差
    SOC  ~~ PER 
    SEFF3 ~~ SEFF4 # 添加内生测量变量的相关性
# 定义间接效应 (a*b)
    PERindiCREA := a1*b1
    SOCindiCREA := c1*b1
# 定义总效应
    PERtotCREA := PERindiCREA + a2
    SOCtotCREA := SOCindiCREA + c2
'

mod2_fit <- sem(model = mod2_mod, sample.cov = COV, sample.nobs = 250)

fitmeasures(mod2_fit)[c('chisq', 'df', 'pvalue', 'nfi', 'nnfi', 'cfi', 'rmsea', 'srmr')] |> round(3) # 查看拟合结果
 chisq     df pvalue    nfi   nnfi    cfi  rmsea   srmr 
59.089 28.000  0.001  0.953  0.959  0.974  0.067  0.039 
modificationindices(mod2_fit, sort. = T, maximum.number = 5)
     lhs op   rhs     mi    epc sepc.lv sepc.all sepc.nox
90 SEFF2 ~~  PER1 10.595 -0.201  -0.201   -0.236   -0.236
80 SEFF4 ~~  SOC1  9.903 -0.147  -0.147   -0.211   -0.211
88 SEFF1 ~~  SOC2  9.604 -0.123  -0.123   -0.807   -0.807
60   SOC =~ SEFF1  9.189 -0.129  -0.191   -0.301   -0.301
94 SEFF2 ~~  SOC2  8.452  0.130   0.130    0.327    0.327

模型拟合优度有所提升,卡方值减少到59.09,RMSEA下降到0.067。MI指数检验,只剩内生与外生测量变量的相关性路径,不考虑复杂关系,没有需要调整的路径。同时,由于最终模型和原模型有嵌套关系,因此可以进行卡方检验,显示模型具有显著改进,因此模型调整结束。

anova(mod2_fit, sem_fit)

Chi-Squared Difference Test

         Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff Pr(>Chisq)    
mod2_fit 28 7919.1 8014.2 59.089                                          
sem_fit  30 7937.0 8025.0 80.964     21.875 0.19937       2  1.778e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

报告分析结果

  • 报告标准化系数:包括标准化的因子载荷、结构模型的标准化系数等。
summary(mod2_fit, standard=T)
lavaan 0.6-19 ended normally after 235 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        27

  Number of observations                           250

Model Test User Model:
                                                      
  Test statistic                                59.089
  Degrees of freedom                                28
  P-value (Chi-square)                           0.001

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  CREA =~                                                               
    CREAT             1.000                               4.200    1.000
    SEFF4             0.062    0.011    5.502    0.000    0.262    0.420
  SEFF =~                                                               
    SEFF1             1.000                               0.597    0.942
    SEFF2             0.414    0.068    6.122    0.000    0.247    0.405
    SEFF3             0.631    0.085    7.403    0.000    0.377    0.492
    SEFF4             0.311    0.090    3.470    0.001    0.186    0.297
  PER =~                                                                
    PER1              1.000                               2.283    0.832
    PER2              1.001    0.063   15.987    0.000    2.286    0.863
    PER3              0.871    0.061   14.233    0.000    1.988    0.791
  SOC =~                                                                
    SOC1              1.000                               1.482    0.701
    SOC2              1.059    0.148    7.166    0.000    1.569    0.911

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  SEFF ~                                                                
    PER       (a1)    0.209    0.020   10.678    0.000    0.799    0.799
    SOC       (c1)   -0.023    0.027   -0.847    0.397   -0.057   -0.057
  CREA ~                                                                
    PER       (a2)    0.960    0.186    5.148    0.000    0.522    0.522
    SEFF      (b1)    2.301    0.672    3.423    0.001    0.327    0.327
    SOC       (c2)    0.047    0.155    0.306    0.759    0.017    0.017

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  PER ~~                                                                
    SOC               1.805    0.351    5.139    0.000    0.534    0.534
 .SEFF4 ~~                                                              
   .SEFF3             0.060    0.021    2.864    0.004    0.060    0.193

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .CREAT             0.000                               0.000    0.000
   .SEFF4             0.215    0.020   10.911    0.000    0.215    0.552
   .SEFF1             0.046    0.027    1.676    0.094    0.046    0.113
   .SEFF2             0.311    0.029   10.905    0.000    0.311    0.836
   .SEFF3             0.445    0.042   10.669    0.000    0.445    0.758
   .PER1              2.323    0.278    8.348    0.000    2.323    0.308
   .PER2              1.794    0.240    7.490    0.000    1.794    0.256
   .PER3              2.357    0.259    9.089    0.000    2.357    0.374
   .SOC1              2.268    0.340    6.679    0.000    2.268    0.508
   .SOC2              0.508    0.309    1.644    0.100    0.508    0.171
   .CREA              6.082    0.642    9.477    0.000    0.345    0.345
   .SEFF              0.145    0.032    4.555    0.000    0.407    0.407
    PER               5.212    0.667    7.811    0.000    1.000    1.000
    SOC               2.196    0.439    5.007    0.000    1.000    1.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    PERindiCREA       0.481    0.142    3.396    0.001    0.262    0.262
    SOCindiCREA      -0.053    0.064   -0.835    0.404   -0.019   -0.019
    PERtotCREA        1.441    0.123   11.681    0.000    0.783    0.783
    SOCtotCREA       -0.006    0.168   -0.034    0.973   -0.002   -0.002
  • 报告直接效应和间接效应

展示创造性格(PER)和组织社会化(SOC),对于创意教学行为(CREA)的间接效应和总效应量及其统计检验。

summary(mod2_fit, standard = T)$pe |>
  filter(op == ":=") |>
  select(label, est, se, z, pvalue, std.all) |>
  mutate(across(where(is.numeric), ~round(., 3))) |>
  arrange(label) |>
  knitr::kable(caption = "潜在变量路径分析的部分复杂效应量")
潜在变量路径分析的部分复杂效应量
label est se z pvalue std.all
PERindiCREA 0.481 0.142 3.396 0.001 0.262
PERtotCREA 1.441 0.123 11.681 0.000 0.783
SOCindiCREA -0.053 0.064 -0.835 0.404 -0.019
SOCtotCREA -0.006 0.168 -0.034 0.973 -0.002
  • 报告路径图
semPaths(mod2_fit, 
         what = "std", 
         fade = F, # 关闭路径颜色渐变
         rotation = 2,
         layout = "tree2",
         edge.color = "darkgrey",
         esize = 3,
         edge.label.cex = 1.1,
         ask = FALSE)

参考文献:《结构方程与建模的原理与应用》,邱皓政、林碧芳著,中国轻工业出版社,2009.