You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

lavaan中cfa()梯度非零收敛警告的含义及解决方法咨询

Lavaan CFA梯度未收敛警告的原因与解决办法

问题背景

运行验证性因子分析(CFA)时弹出梯度未收敛警告,此前相同代码运行正常,样本量N=327。

警告信息

lavaan WARNING:
the optimizer (NLMINB) claimed the model converged, but not all
elements of the gradient are (near) zero; the optimizer may not
have found a local solution use check.gradient = FALSE to skip
this check

模型代码

comp_model <- '
LC =~ LC_1 + LC_2 + LC_3 + LC_4 + LC_5 + LC_6 + LC_7 + LC_8 + LC_9 + LC_10 + LC_11 + LC_12 + LC_13 + LC_14 + LC_15 + LC_16 + LC_17 + LC_18 + LC_19 + LC_20 + LC_21 + LC_22 + LC_23 + LC_24 + LC_25 + LC_26 + LC_27 + LC_28 + LC_29 + LC_30 + LC_31 + LC_32 + LC_33 + LC_34 + LC_35 + LC_36 + LC_37 + LC_38 + LC_39 + LC_40 + LC_41 + LC_42 + LC_43 + LC_44 + LC_45 + LC_46 + LC_47 + LC_48 + LC_49 + LC_50 + LC_51 + LC_52 + LC_53 + LC_54 + LC_55 + LC_56 + LC_57 + LC_58 + LC_59 + LC_60 + LC_61
MTL =~ MTL_1 + MTL_2 + MTL_3 + MTL_4 + MTL_5 + MTL_6 + MTL_7 + MTL_8 + MTL_9 + MTL_10
WB =~ WB_E_1 + WB_E_2 + WB_E_3 + WB_S_1 + WB_S_2 + WB_S_3 + WB_S_4 + WB_S_5 + WB_P_1 + WB_P_2 + WB_P_3 + WB_P_4 + WB_P_5 + WB_P_6
Coping =~ Coping_A_1 + Coping_A_2 + Coping_A_3 + Coping_A_4 + Coping_A_5 + Coping_A_6 + Coping_A_7 + Coping_A_8 + Coping_A_9 + Coping_A_10 + Coping_A_11 + Coping_A_12 + Coping_A_13 + Coping_A_14 + Coping_PR_1 + Coping_PR_2 + Coping_PR_3 + Coping_PR_4 + Coping_PR_5 + Coping_PR_6 + Coping_PR_7 + Coping_PR_8 + Coping_PR_9 + Coping_PR_10 + Coping_PR_11 + Coping_PR_12 + Coping_APS_1 + Coping_APS_2 + Coping_APS_3 + Coping_APS_4 + Coping_APS_5 + Coping_APS_6 + Coping_APS_7 + Coping_APS_8 + Coping_APS_9 + Coping_APS_10
ENG =~ ENG_1 + ENG_2 + ENG_3 + ENG_4 + ENG_5 + ENG_6 + ENG_7 + ENG_8 + ENG_9
PsyCap =~ ENG_10 + ENG_11 + ENG_12 + ENG_13 + ENG_14 + ENG_15 + ENG_16 + ENG_17 + ENG_18 + ENG_19
E =~ Trait_1_E + Trait_6_E_rev
A =~ Trait_2_A_rev + Trait_7_A
C =~ Trait_3_C + Trait_8_C_rev
ES =~ Trait_4_ES_rev + Trait_9_ES
O =~ Trait_5_O + Trait_10_O_rev
' 

拟合代码

lavaan::cfa(model = comp_model, 
                data = CFA_data,   
                std.lv = F)

输出摘要(开头部分)

lavaan 0.6-12 did NOT end normally after 296 iterations
** WARNING ** Estimates below are most likely unreliable

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                       355

  Number of observations                           327


Parameter Estimates:

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

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper   Std.lv  Std.all
  LC =~                                                                                   
    LC_1              1.000                               1.000    1.000    0.215    0.342
    LC_2              1.234       NA                         NA       NA    0.265    0.460
    LC_3              1.304       NA                         NA       NA    0.280    0.484
    LC_4              1.417       NA                         NA       NA    0.304    0.427
    LC_5              1.294       NA                         NA       NA    0.278    0.427
    LC_6              1.250       NA                         NA       NA    0.268    0.465

核心原因

  1. 参数-样本量失衡:模型有355个参数,样本量仅327,参数数量接近甚至超过样本量,导致估计自由度不足,优化器无法找到稳定的收敛点。
  2. 潜变量指标数量极端:
    • LC因子有61个指标,Coping因子有40个,过多指标会导致载荷估计冗余,增加优化难度;
    • E/A/C/ES/O等因子仅2个指标,虽满足最低识别要求,但参数估计稳定性差,容易与其他因子的参数优化产生冲突。
  3. 数据或环境变化:此前运行正常可能是使用了不同数据集,当前数据可能存在极端值、缺失值分布变化,或者lavaan版本、R环境更新导致优化逻辑微调,引发收敛问题。

解决办法

1. 精简模型结构(最关键)

  • 缩减多指标因子:对LC、Coping这类超大因子先做探索性因子分析(EFA),筛选载荷低于0.4的指标删除,或合并高度相关的指标,将每个潜变量的指标数控制在10-15个以内,甚至更少。
  • 调整双指标因子:E/A/C/ES/O仅2个指标,要么增加对应维度的测量题项,要么直接将这些变量作为显变量纳入模型,减少潜变量参数数量。

2. 优化拟合参数

  • 更换优化器:改用BFGS优化器,它在处理复杂模型时比NLMINB更稳健:
    lavaan::cfa(model = comp_model, 
                data = CFA_data,   
                std.lv = F,
                optimizer = "BFGS")
    
  • 增加迭代次数:给优化器更多收敛空间:
    lavaan::cfa(model = comp_model, 
                data = CFA_data,   
                std.lv = F,
                iter.max = 1000)
    
  • 临时关闭梯度检查:仅作为排查手段,不能作为最终解决方案:
    lavaan::cfa(model = comp_model, 
                data = CFA_data,   
                std.lv = F,
                check.gradient = FALSE)
    

3. 数据预处理

  • 清理极端值与缺失值:用boxplot()或outlierTest()识别极端值并处理,缺失值采用多重插补(如mice包)或删除法(确保样本量仍足够)。
  • 标准化显变量:对所有观测变量做标准化处理,帮助优化器更快找到稳定解:
    CFA_data <- scale(CFA_data)
    

4. 分步建模验证

先拟合单个潜变量的子模型,确认每个子模型收敛稳定后,再逐步合并成完整模型,定位可能引发问题的模块。

内容的提问来源于stack exchange,提问作者Ana C. Ruiz Pardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:27:45