如何通过代码提取lavaan模型中的CFI、TLI等拟合指标值?
提取lavaan中CFA拟合指标的方法
最推荐的方法:用fitMeasures()函数
lavaan专门提供了fitMeasures()函数来提取各类拟合指标,比从summary对象里手动查找路径更可靠,批量处理也更方便。
基础提取代码
# 先拟合CFA模型(替换成你的实际数据集) model <- 'y =~ x1 + x2 + x3' fit <- cfa(model, data = your_data) # 提取你需要的拟合指标 target_indices <- fitMeasures(fit, c("pvalue", "cfi", "tli", "rmsea", "srmr")) # 转成数据框,方便后续导出LaTeX fit_result_df <- as.data.frame(t(target_indices))
如果需要RMSEA的置信区间和对应的p值,直接在指标列表里补充即可:
target_indices <- fitMeasures(fit, c("pvalue", "cfi", "tli", "rmsea", "rmsea.lower", "rmsea.upper", "rmsea.pvalue", "srmr"))
从summary对象提取的方法
如果坚持用你原有的summary对象,这些指标的提取路径如下(注意修正你原代码中fit_os_bi的笔误,应该是拟合后的fit对象):
# 生成包含拟合指标的summary sum <- summary(fit, fit.measures=TRUE, standardized=TRUE) # 逐个提取指标 p_val <- sum$test$standard$pvalue cfi_val <- sum$fit.measures["cfi"] tli_val <- sum$fit.measures["tli"] rmsea_val <- sum$fit.measures["rmsea"] srmr_val <- sum$fit.measures["srmr"] # RMSEA置信区间和对应p值 rmsea_lower <- sum$fit.measures["rmsea.lower"] rmsea_upper <- sum$fit.measures["rmsea.upper"] rmsea_p <- sum$fit.measures["rmsea.pvalue"]
批量运行CFA并汇总结果
如果要批量处理多个模型,可以用lapply()实现:
library(lavaan) library(dplyr) # 把所有待拟合的模型存入列表 models <- list( 单因子3项模型 = 'y =~ x1 + x2 + x3', 单因子4项模型 = 'y =~ x1 + x2 + x3 + x4', 双因子模型 = 'y1 =~ x1 + x2; y2 =~ x3 + x4' ) # 批量拟合模型并提取指标 batch_results <- lapply(models, function(mod) { fit <- cfa(mod, data = your_data) fitMeasures(fit, c("pvalue", "cfi", "tli", "rmsea", "srmr")) }) # 转换为规整的数据框 batch_result_df <- bind_rows(batch_results, .id = "模型名称")
得到数据框后,用kableExtra或xtable包就能直接导出符合要求的LaTeX表格。
内容的提问来源于stack exchange,提问作者ColdBrew
相关产品推荐
相关产品推荐

