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

Lavaan模型估计失败求助:sem()运行报错原因排查

关于lavaan包sem()函数模型估计失败的问题排查

问题描述

使用lavaan包的sem()函数时,最初仅用少量潜变量和单一回归模型可正常运行,后续新增变量后模型运行失败;即使移除新增变量,仍出现如下报错:

Warning message:
lavaan->lav_lavaan_step11_estoptim():  
Model estimation FAILED! Returning starting values

数据样例

dput(head(data2))
structure(list(everlied = c(0, 0, 0, 0, 0, 0), Buswebsite = c(3, 
1, 4, 1, 3, 3), BusFacebookpage = c(3, 2, 4, 2, 3, 3), 
periodicals = c(3, 2, 4, 3, 3, 3), internetsearch = c(3, 4, 4, 2, 
4, 4), googlebuslisting = c(3, 5, 5, 3, 3, 3), 
internetdiscussforum = c(3, 3, 4, 4, 3, 4), consumerratingssite = 
c(3,4, 5, 2, 4, 4), friends = c(5, 4, 5, 3, 4, 5), family = c(5, 
5, 5, NA, 4, 5), doctors = c(4, 4, 5, 3, 4, 4), politicians = 
c(3,1, 1, 3, 1, 1), salespeople = c(3, 2, 1, 3, 2, 1), like = 
c(3, 2, 2, 3, 2, 1), newimmigrants = c(3, 3, 2, 2, 3, 1),
businessowners = c(3, 2, 2, 3, 3, 1), celebrities = c(3, 3, 1, 2, 
3, 1), commercialactors = c(3, 2, 1, 2, 3, 1), religious = c(4,
4, 4, 2, 4, 1), socmediainfluencers = c(3, 3, 1, 4, 3, 1), 
teachers = c(4, 4, 4, 3, 4, 1), gender = c(0, 0, 0, 1, 0, 0), age = 
c(5, 5, 3, 3, 3, 2), education = c(4, 2, 3, 4, 5, 3), income = 
c(3, 2, 2, 2, 3, 4), region = c(3, 3, 7, 7, 3, 7)), row.names = 
c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))

模型设置与代码

观测因变量like为有序分类(Likert量表),人口统计学变量为分类变量,其余变量也为有序分类。模型代码如下:

model <- '
person  =~ family + friends
demographic =~ age + gender + income + education + region 
instit =~ doctors+politicians+religious+businessowners
soc =~ salespeople + celebrities + commercialactors + socmediainfluencers + newimmigrants
info =~ Buswebsite + BusFacebookpage + periodicals + internetsearch + googlebuslisting + internetdiscussforum + consumerratingssite
like ~ person + demographic + instit + soc + info 
'
model_out <- sem(model, data=dat2)

可能的原因及解决办法

  • 潜变量测量模型合理性问题

    • demographic潜变量存在逻辑错误:age、gender、income等人口统计学变量是直接观测的显变量,并非潜变量的指标,强行打包会导致测量模型无法识别或拟合极差。这是核心问题之一,即使移除后续新增变量,这个结构错误依然会导致模型失败。建议直接将这些变量作为显变量放入回归方程,而非构建潜变量。
    • 检查其他潜变量的指标相关性:比如instit、soc的指标是否属于同一构念,可先计算指标间的相关矩阵,若相关性极低,说明潜变量结构不成立,需调整指标或删除该潜变量。
  • 变量类型与估计方法不匹配

    • 所有有序分类变量未指定正确的处理方式:默认sem()使用连续变量的ML估计,不适合Likert量表数据。需指定estimator = "WLSMV"(适合有序分类数据的加权最小二乘法),同时设置ordered = c("Buswebsite", "BusFacebookpage", ..., "like")(列出所有有序变量),或直接用ordered = TRUE标记所有变量为有序(如果全部都是的话)。
  • 模型识别与收敛问题

    • 尝试调整优化器参数:默认优化器可能无法处理复杂模型,可设置optim.method = "BFGS"或iter.max = 1000增加迭代次数,给优化过程更多收敛空间。
    • 确认潜变量识别:lavaan默认固定第一个指标载荷为1来识别潜变量,若存在异常,可手动固定载荷或潜变量方差(比如person =~ 1*family + friends)。
  • 数据问题

    • 处理缺失值:样本中存在NA,可先用na.omit(dat2)删除缺失值测试,或针对有序变量使用missing = "pairwise"结合WLSMV估计。
    • 检查类别频数:比如region的类别7,若整体样本中该类别频数极低,会导致协方差矩阵奇异,需合并类别或剔除对应样本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:59:56