在CFA(Lavaan)中提取观测指标的残差方差
提取CFA观测指标的残差方差
在lavaan中,有两种便捷的方法可以提取观测指标的残差方差,以下结合你的现有代码给出具体实现:
你的现有代码回顾
library(lavaan) library(dplyr) data(HolzingerSwineford1939) # 构建并拟合测量模型 Mes.Mod = ' visual =~ x1 + x2 + x3 textual =~ x4 + x5 + x6' mod_cfa = cfa(Mes.Mod, data = HolzingerSwineford1939) # 提取因子得分至主数据集 idx = lavInspect(mod_cfa, "case.idx") fscores = lavPredict(mod_cfa) for(fs in colnames(fscores)) { HolzingerSwineford1939[idx, fs] <- fscores[,fs] }
方法1:提取残差方差矩阵(仅数值)
使用lavInspect()函数的"residual.var"参数,直接获取观测变量的残差方差矩阵,对角线上的数值即为对应观测指标的残差方差:
# 提取残差方差矩阵 resid_var_matrix <- lavInspect(mod_cfa, "residual.var") # 转换为易读的数据框格式 resid_var_df <- data.frame( 观测变量 = rownames(resid_var_matrix), 残差方差 = diag(resid_var_matrix) ) print(resid_var_df)
方法2:提取带统计检验的残差方差
使用parameterEstimates()函数获取所有模型参数的估计结果,筛选出变量自身协方差(即残差方差)的条目,同时附带标准误、p值等统计信息:
# 获取全部模型参数估计 all_params <- parameterEstimates(mod_cfa) # 筛选残差方差项(op为~~且lhs等于rhs) resid_var_stats <- all_params[all_params$op == "~~" & all_params$lhs == all_params$rhs, ] # 整理为清晰的输出格式 resid_var_stats <- resid_var_stats[, c("lhs", "est", "se", "z", "pvalue")] colnames(resid_var_stats) <- c("观测变量", "残差方差估计值", "标准误", "z值", "p值") print(resid_var_stats)
说明
- 方法1适合快速获取残差方差的数值结果;
- 方法2适合需要对残差方差进行统计推断的场景,能查看估计值的显著性。
内容的提问来源于stack exchange,提问作者Minnesooota12
相关产品推荐
相关产品推荐

