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

有序Likert数据多组CFA低频类别报错的原因及解决方法

多组有序CFA空类别报错差异原因与修复方案

问题背景

使用Likert量表数据运行心理测量工具的多组CFA,已将数据转换为有序类型,采用WLSMV估计法与theta参数化。

初始CFA模型代码

model_ord <- ' depression =~ f1h09_ordinal+f1h16_ordinal+f1h17_ordinal+f1h18_ordinal+f1h35_ordinal+f1h50_ordinal
          anxiety =~ f1h01_ordinal+f1h12_ordinal+f1h19_ordinal+f1h38_ordinal+f1h45_ordinal+f1h49_ordinal
          somatization =~ f1h02_ordinal+f1h07_ordinal+f1h23_ordinal+f1h29_ordinal+f1h33_ordinal+f1h37_ordinal
          depression~~anxiety
          anxiety~~somatization
          depression~~somatization'

# use the cfa function from the lavaan package to fit a CFA of our model
fit_ord <- cfa(model_ord, data=d_ord, estimator='WLSMV', std.lv=TRUE, parameterization="theta")

初始运行警告

Warning message:
In lav_model_vcov(lavmodel = lavmodel, lavsamplestats = lavsamplestats,  :
  lavaan WARNING:
    The variance-covariance matrix of the estimated parameters (vcov)
    does not appear to be positive definite! The smallest eigenvalue
    (= -1.030933e-16) is smaller than zero. This may be a symptom that
    the model is not identified.

注:该警告为浮点计算精度导致的误报,-1e-16的特征值属于机器误差范围,不代表模型存在识别问题

分组运行报错情况

  1. 按性别分组(分组变量f103)
config_ord <- cfa(model_ord, data=d_ord, estimator='WLSMV', std.lv=TRUE, group="f103", parameterization="theta")

报错信息:

Error in lav_samplestats_step1(Y = Data, wt = wt, ov.names = ov.names,  : 
  lavaan ERROR: some categories of variable `f1h35_ordinal' are empty in group 1; frequencies are [75 15 2 0 0]

模型直接终止运行,无拟合结果返回。

  1. 按伴侣状态分组(分组变量binaryrelationship)
config_ord2 <- cfa(model_ord2, data=d_ord, estimator='WLSMV', std.lv=TRUE, group="binaryrelationship", parameterization="theta")

报错信息:

Error in lav_samplestats_step1(Y = Data, wt = wt, ov.names = ov.names,  : 
  lavaan ERROR: some categories of variable `f1h35_ordinal' are empty in group 1; frequencies are [98 22 4 3 0]

报错后仍返回模型拟合结果。


报错差异原因

两种场景下空类别的数量和分布不同,触发了lavaan不同的校验逻辑:

  • 性别分组场景下,f1h35_ordinal有2个连续的最高类别为空,有效响应类别仅3个,空类别占总类别数的40%,lavaan判定无法估计该变量的阈值参数,直接终止运行。
  • 伴侣状态分组场景下,仅1个最高类别为空,有效响应类别为4个,lavaan的兼容逻辑会自动折叠最高空类别后继续估计,仅输出错误提示但仍返回拟合结果,该差异与lavaan版本的校验规则有关。

修复方案

  • 合并低频率类别:将f1h35_ordinal的最高两个响应类别合并为同一类别,确保所有分组下每个类别的观测数≥5,符合有序CFA的估计要求,是最推荐的处理方案。
  • 剔除问题条目:若该条目对抑郁因子的载荷较低,且分组下响应偏差不具备研究意义,可以直接将f1h35_ordinal从测量模型中剔除,避免空类别干扰。
  • 显式触发自动折叠:在cfa()函数中添加ordered = TRUE, group.equal = c("thresholds")参数,显式指定有序变量阈值跨组约束,触发lavaan的空类别自动折叠逻辑,无需手动合并类别。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:36:03