R语言执行CFA时提示估计参数方差协方差矩阵非正定如何解决
假阳性警告排查
你遇到的最小负特征值仅为-9.174795e-17,属于双精度浮点运算的常规误差范围,远小于真实非正定问题的判定临界值(通常以特征值小于-1e-5为判定标准),且你已经排查无Heywood case(负方差、因子相关系数大于1),大概率为假阳性警告。可先运行summary(first.fit, fit.measures = TRUE)查看拟合指标,若拟合参数符合预期、参数标准误无异常偏大,可直接保留现有结果。
模型与样本量适配优化
你当前设置6因子66题,有效样本量仅200,有序CFA默认的WLSMV估计对样本量要求较高(通常建议每题项对应5-10个样本),模型复杂度过高容易引发数值稳定性问题,可做如下调整:
- 剔除标准化载荷低于0.5的题项,减少待估参数数量
- 对题项数量过多的因子做打包处理(item parceling),可采用随机打包、因子分析打包等方式,每个因子保留3-4个题项包,大幅降低模型复杂度
- 调整估计方法,在
cfa()函数中添加参数estimator = "MLR",改用稳健极大似然估计,该方法对小样本、非正态数据的耐受性更强
模型定义校验
- 检查所有题项是否仅加载到单个因子上,无重复定义、拼写错误的问题,可运行
lavInspect(first.fit, "parameters")导出所有待估参数核对 - 尝试取消
std.lv = T设置,改用默认的首题载荷固定为1的因子尺度标定方式,部分小样本场景下std.lv = T的标定逻辑更容易触发数值稳定性问题
因子结构合理性验证
如果上述操作后警告仍存在,可拆分一半样本做探索性因子分析(EFA),验证6因子结构是否符合数据本身的特征,若存在两个因子的相关系数持续高于0.85,可考虑合并高相关因子,降低模型冗余度。
内容的提问来源于stack exchange,提问作者ZXX
相关产品推荐
相关产品推荐

