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

结构方程模型拟合时出现奇异矩阵错误求助

问题描述

此前在R语言中使用lavaan包,通过极大似然法处理缺失值分析结构方程模型时运行完全正常。更换电脑重装R后,执行含missing = "ML"的模型拟合后,调用summary()触发如下奇异矩阵错误:

Error in solve.default(X[[i]], ...) : 
  Lapack routine dgesv: system is exactly singular: U[13,13] = 0

移除missing = "ML"参数采用列表删除法时,模型可正常运行,但会剔除不愿排除的样本,需解决该问题。

报错的方法1(含缺失值极大似然估计)

模型定义:

sem.model <- '# Measurement Model:
              Variable1 =~ Item1 + Item2 + Item3
              Variable2 =~ Item4  + Item5 + Item6
              Variable3 =~ Item7 + Item8 + Item9 + Item10
              Variable4 =~ Item11
              Variable5 =~ Item12

              # Structural Model
              outcomevariable ~ Variable1 + Variable2 + Variable3 + Variable4  + Variable5 + 
                  Item13 + Item14 + Item15 + Item16  + Item17 + Item18'

拟合模型无报错:

sem.model.fit <- sem(model = sem.model,
                     data = dataSRL,
                     estimator = "MLR", 
                     missing = "ML")

调用summary()触发错误:

summary(sem.model.fit,
        fit.measures = TRUE,
        standardized = FALSE,
        rsquare = TRUE, 
        modindices = TRUE)

正常运行的方法2(列表删除法)

模型定义同上,拟合时移除缺失值处理参数:

sem.model.fit <- sem(model = sem.model,
                     data = dataSRL,
                     estimator = "MLR")

调用summary()可正常运行:

summary(sem.model.fit,
        fit.measures = TRUE,
        standardized = FALSE,
        rsquare = TRUE, 
        modindices = TRUE)

原因分析与解决办法

为何方法2可正常运行?

列表删除法会直接移除所有含缺失值的样本,仅保留完全无缺失的数据集。此时计算的协方差/相关矩阵是满秩的,不存在线性依赖问题,因此模型拟合和后续的summary()都能正常执行。而missing = "ML"采用全信息极大似然(FIML)保留所有样本,基于多组缺失模式计算的信息矩阵可能出现线性相关,导致奇异矩阵无法求逆。

解决办法

1. 修复单指标潜变量的识别问题

模型中Variable4 =~ Item11是单指标潜变量,FIML下这种设定极易引发识别问题:

  • 显式固定因子载荷为1,并将误差方差设为0(单指标无需误差项),修改模型代码:
    sem.model <- '# Measurement Model:
                  Variable1 =~ Item1 + Item2 + Item3
                  Variable2 =~ Item4  + Item5 + Item6
                  Variable3 =~ Item7 + Item8 + Item9 + Item10
                  Variable4 =~ 1*Item11  # 固定载荷为1
                  Item11 ~~ 0*Item11     # 固定误差方差为0
                  Variable5 =~ Item12
    
                  # Structural Model
                  outcomevariable ~ Variable1 + Variable2 + Variable3 + Variable4  + Variable5 + 
                      Item13 + Item14 + Item15 + Item16  + Item17 + Item18'
    
  • 或直接用Item11替代Variable4放入结构方程,删除该单指标潜变量。

2. 检查变量间的线性依赖

FIML模式下,部分变量可能在缺失数据的子集中出现完全线性相关:

  • 运行cov(dataSRL, use = "pairwise.complete.obs")查看成对完整样本的协方差矩阵,排查是否存在完全相关的变量。
  • 检查Item13至Item18等直接纳入结构方程的观测变量,是否与某个潜变量的指标存在完全线性关系。

3. 核对lavaan版本差异

重装R后可能安装了不同版本的lavaan,新版本的FIML算法对模型识别的校验更严格:

  • 运行packageVersion("lavaan")查看当前版本,对比此前正常运行的版本。若为版本问题,可降级至旧版本:
    install.packages("devtools")
    devtools::install_version("lavaan", version = "你的旧版本号")
    

4. 强化模型识别约束

显式固定所有潜变量的第一个因子载荷为1,避免默认识别规则在FIML下出现冲突:

sem.model <- '# Measurement Model:
              Variable1 =~ 1*Item1 + Item2 + Item3
              Variable2 =~ 1*Item4  + Item5 + Item6
              Variable3 =~ 1*Item7 + Item8 + Item9 + Item10
              Variable4 =~ 1*Item11
              Item11 ~~ 0*Item11
              Variable5 =~ 1*Item12

              # Structural Model
              outcomevariable ~ Variable1 + Variable2 + Variable3 + Variable4  + Variable5 + 
                  Item13 + Item14 + Item15 + Item16  + Item17 + Item18'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:50:11