使用lavaan构建精神病态双因子模型收敛失败问题求解
双因子正交模型收敛问题解决方案
问题背景
构建精神病态(psychopathy)双因子模型,其中全局因子为精神病态,剩余3个为对应子类型因子,已对所有因子设置正交约束,运行模型时出现收敛失败问题。
现有运行代码
BifactorModel <- ' # 全局因子 psychopathyBi =~ YPIS_1 + YPIS_2 + YPIS_3 + YPIS_4 + YPIS_5 + YPIS_6 + YPIS_7 + YPIS_8 + YPIS_9 +YPIS_10 + YPIS_11 + YPIS_12 + YPIS_13 + YPIS_14 + YPIS_15 + YPIS_16 + YPIS_17 + YPIS_18 # 子因子1 GMbi =~ YPIS_4 + YPIS_5 + YPIS_8 + YPIS_9 + YPIS_14 + YPIS_16 # 子因子2 CUbi =~ YPIS_3 + YPIS_6 + YPIS_10 + YPIS_15 + YPIS_17 + YPIS_18 # 子因子3 DIbi =~ YPIS_1 + YPIS_2 + YPIS_7 + YPIS_11 + YPIS_12 + YPIS_13 # 正交约束 psychopathyBi ~~ 0*GMbi psychopathyBi ~~ 0*CUbi psychopathyBi ~~ 0*DIbi GMbi ~~ 0*CUbi GMbi ~~ 0*DIbi CUbi ~~ 0*DIbi ' # 拟合双因子模型 bifactorFit <- cfa(BifactorModel, data = YPIS_Data) # 获取拟合结果摘要 summary(bifactorFit, fit.measures = TRUE, standardized = TRUE)
报错信息
lavaan 0.6-9 did NOT end normally after 862 iterations
预期模型结构

可行解决建议
- 调高迭代次数上限:lavaan默认迭代次数上限较低,可通过control参数调整上限,避免迭代未完成就提前终止,修改拟合代码为:
bifactorFit <- cfa(BifactorModel, data = YPIS_Data, control = list(max.iter = 5000)) - 更换更适配的估计器:如果YPIS题项为李克特类有序分类数据,可换用对分类数据适配性更好、收敛性更强的估计器,如ULSMV;如果是连续数据可换用稳健ML估计器,示例代码:
# 连续数据用稳健ML bifactorFit <- cfa(BifactorModel, data = YPIS_Data, estimator = "MLR", control = list(max.iter = 5000)) # 有序分类数据用ULSMV bifactorFit <- cfa(BifactorModel, data = YPIS_Data, estimator = "ULSMV", ordered = TRUE, control = list(max.iter = 5000)) - 优化初始值设置:默认初始值不合理也会导致收敛慢,可添加
start = "simple"参数使用简单结构初始值启动迭代:bifactorFit <- cfa(BifactorModel, data = YPIS_Data, start = "simple", control = list(max.iter = 5000)) - 排查数据质量:先检查数据缺失率,若存在大量缺失可换用FIML缺失值处理方法;排查题项极端值、严重偏态问题,极端偏态的题项可考虑先做转换再建模。
- 验证模型设定合理性:先分别拟合单因子模型、一阶三因子相关模型,确认基础模型拟合符合预期后再运行双因子模型;若基础模型拟合就很差,说明当前因子结构不符合数据特征,需要先调整题项或因子结构。
- 约束适配性校验:如果调整参数后依然不收敛,可先暂时放开子因子间的正交约束拟合模型,若放开后可收敛,说明预设的全正交假设和现有数据特征冲突,需要重新验证因子正交的理论假设是否成立。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

