lavaan::cfa稳健估计器不收敛及数据类型判定咨询
处理包含724名被试的HEXACO人格测试清洁数据集,执行验证性因子分析(CFA)时发现数据严重违反多元正态性(HZ = 1.000,p < 0.001),标准CFA方法不适用。目前使用R的lavaan::cfa(),设置estimator = "MLR"但模型收敛不稳定,希望明确两个核心问题。
数据详情
- 回答量表范围为-5到5(共11个类别)
- 已移除极端反应风格被试(超过50%答案处于量表极端值或中点)
核心问题
- 数据违反多元正态性时,MLR是否是CFA的最佳估计器,或有更好替代方案?
- -5到5的量表应视为连续型还是有序型处理?
模型信息
模型调用代码
first_order_fit <- cfa(first_order_model, data = final_model_data, estimator = "MLR", verbose = TRUE)
模型语法
first_order_model <- ' a_flexibility =~ Q239 + Q274 + Q262 + Q183 a_forgiveness =~ Q200 + Q271 + Q264 + Q222 a_gentleness =~ Q238 + Q244 + Q272 + Q247 a_patience =~ Q282 + Q253 + Q234 + Q226 c_diligence =~ Q267 + Q233 + Q195 + Q193 c_organization =~ Q260 + Q189 + Q275 + Q228 c_perfectionism =~ Q249 + Q210 + Q263 + Q216 + Q214 c_prudence =~ Q265 + Q270 + Q254 + Q259 e_anxiety =~ Q185 + Q202 + Q208 + Q243 + Q261 e_dependence =~ Q273 + Q236 + Q279 + Q211 + Q204 e_fearfulness =~ Q217 + Q221 + Q213 + Q205 e_sentimentality =~ Q229 + Q251 + Q237 + Q209 h_fairness =~ Q277 + Q192 + Q219 + Q203 h_greed_avoidance =~ Q188 + Q215 + Q255 + Q231 h_modesty =~ Q266 + Q206 + Q258 + Q207 h_sincerity =~ Q199 + Q223 + Q225 + Q240 o_aesthetic_appreciation =~ Q196 + Q268 + Q281 o_creativity =~ Q212 + Q191 + Q194 + Q242 + Q256 o_inquisitivness =~ Q278 + Q246 + Q280 + Q186 o_unconventionality =~ Q227 + Q235 + Q250 + Q201 x_livelyness =~ Q220 + Q252 + Q276 + Q230 x_sociability =~ Q218 + Q224 + Q241 + Q232 x_social_boldness =~ Q184 + Q197 + Q190 + Q187 + Q245 x_social_self_esteem =~ Q198 + Q269 + Q248 + Q257 '
模型说明
- 未指定初始值
- 未固定任何协方差
收敛状态
运行结果显示:
convergence status (0=ok): 0
nlminb message says: relative convergence (4)
number of iterations: 2493
number of function evaluations [objective, gradient]: 3300 2494
lavoptim ... done.
lavimplied ... done.
lavloglik ... done.
lavbaseline ...
模型虽显示收敛状态为0,但提示相对收敛,迭代次数较多,存在不稳定迹象。
样本数据生成代码
set.seed(123) n_participants <- 200 n_questions <- 100 sample_data <- data.frame( matrix( sample(-5:5, n_participants * n_questions, replace = TRUE), nrow = n_participants, ncol = n_questions ) ) colnames(sample_data) <- paste0("Q", 183:282)
多元正态性检验代码
# Mardia检验 mvn_result <- mvn(data = sample_data, mvnTest = "mardia", multivariatePlot = "qq") # HZ检验 mvn_result_hz <- mvn(data = final_model_data, mvnTest = "hz")
关于估计器选择:MLR是否最优?
MLR是处理非正态连续数据的常用稳健估计器,通过Satorra-Bentler校正标准误和拟合指数,在非正态场景下表现优于普通ML。但也有合适的替代方案:
- WLSMV:若将数据视为有序分类,加权最小二乘均值和方差调整估计器是更适配的选择,专门针对有序数据设计,能避免连续近似带来的偏差。
- Bootstrap:可搭配任何估计器使用,通过重复抽样获取稳健标准误和置信区间,724的样本量足够支撑该方法,能有效应对非正态问题。
模型收敛不稳定优先排查设定问题:检查是否存在负方差、因子间协方差过高、载荷不合理等情况;也可尝试指定初始值,或先验证单个因子再逐步整合模型,而非直接更换估计器。
关于数据类型:连续还是有序?
-5到5的11类别量表属于宽范围有序分类数据,两种处理方式各有依据:
- 视为连续:当类别数≥5时,部分研究认为可近似连续处理,若数据分布均匀,MLR能接受这种近似。但如果存在地板/天花板效应、类别分布极度不均,会引入误差。
- 视为有序:严格来说,量表数据本质是有序分类,WLSMV能准确处理这类数据,更符合数据本质。对于人格测试的因子结构验证,推荐优先按有序数据处理,还可能改善模型收敛性。
若当前MLR模型收敛不佳,可尝试在cfa()中添加ordered = TRUE参数,切换为WLSMV估计器重新运行。
内容的提问来源于stack exchange,提问作者Boxingday115

