多重插补后如何获取McDonald's Omega的合并估计值?
多重插补数据集合并计算McDonald's Omega值的方法
一、现成函数方法(推荐)
直接用semTools包的reliability.mi()函数,它专门适配lavaan.mi生成的多重插补CFA结果,会自动按照Rubin规则合并各插补数据集的Omega估计值,输出合并后的点估计和标准误,完全匹配你需要报告的合并结果。
示例代码:
# 先对插补数据集拟合CFA(imputed_data是mice生成的插补对象) cfa_fit <- cfa.mi( model = "f1 =~ item1 + item2 + item3 + item4", # 替换成你的量表因子模型 data = imputed_data ) # 计算合并后的McDonald's Omega omega_pooled <- reliability.mi(cfa_fit, measures = "omega") print(omega_pooled)
二、手动计算方法(基于Rubin规则)
如果想自己实现合并逻辑,按以下步骤操作:
- 遍历每个插补数据集,单独计算Omega和对应方差
# 初始化存储容器 omega_vals <- numeric(5) # 5是插补数据集数量 var_vals <- numeric(5) # 循环处理每个插补数据集 for (i in 1:5) { # 提取第i个完整插补数据集 dat_i <- complete(imputed_data, action = i) # 拟合单数据集CFA cfa_i <- cfa( model = "f1 =~ item1 + item2 + item3 + item4", data = dat_i ) # 获取Omega和标准误,计算方差 rel_i <- reliability(cfa_i, measures = "omega") omega_vals[i] <- rel_i$omega var_vals[i] <- (rel_i$omega.se)^2 }
- 用Rubin规则合并结果
# 合并后的点估计:各Omega的均值 pooled_omega <- mean(omega_vals) # 内插补方差:各方差的均值 within_var <- mean(var_vals) # 间插补方差:各Omega的方差 between_var <- var(omega_vals) # 总方差(含调整项) total_var <- within_var + between_var + between_var/5 # 合并后的标准误 pooled_se <- sqrt(total_var) # 输出结果 cat("合并后的McDonald's Omega:", pooled_omega, "\n") cat("合并后的标准误:", pooled_se, "\n")
内容的提问来源于stack exchange,提问作者borski56
相关产品推荐
相关产品推荐

