如何在R中绘制CFA模型的标准化载荷(Std.all)而非估计载荷?
如何绘制CFA模型的标准化因子载荷(Std.all)
在用lavaan拟合验证性因子分析(CFA)模型后,我们能通过summary(cfa_mod, standardized = TRUE)看到包含Std.all列的标准化因子载荷,但lavaanPlot默认显示的是未标准化的Estimate列估计值,这里提供两种解决方法:
方法一:lavaanPlot手动传入标准化载荷
lavaanPlot没有直接调用Std.all的参数,但可以手动提取标准化载荷后通过custom_coefs参数传入:
- 用
parameterEstimates()提取模型的标准化估计值 - 筛选出因子载荷(
op为=~)的行 - 整理成
custom_coefs需要的列表格式
完整代码示例:
# 加载所需包 library(dplyr) library(lavaan) library(lavaanPlot) # 生成可重复的模拟数据 set.seed(123) var1 <- rnorm(10, 5, 1) var2 <- rnorm(10, 5, 1) var3 <- rnorm(10, 5, 1) df <- tibble(var1, var2, var3) # 定义并拟合CFA模型 latent_var <- "latent_var =~ var1 + var2 + var3" cfa_mod <- cfa(latent_var, df) # 提取标准化因子载荷并整理格式 std_loadings <- parameterEstimates(cfa_mod, standardized = TRUE) %>% filter(op == "=~") %>% mutate(path = paste(lhs, "->", rhs)) %>% select(path, Std.all) custom_coefs <- setNames(std_loadings$Std.all, std_loadings$path) # 绘制带标准化载荷的模型图 lavaanPlot(model = cfa_mod, coefs = FALSE, custom_coefs = custom_coefs)
方法二:用semPlot直接绘制标准化载荷
semPlot是SEM绘图的专用包,支持直接指定显示Std.all值,操作更简便:
# 加载包 library(semPlot) # 绘制标准化载荷的CFA模型 semPaths(cfa_mod, whatLabels = "std", # 明确指定显示标准化载荷(Std.all) style = "lisrel", # 可选绘图风格,也可使用"ram" edge.label.cex = 1, # 调整载荷标签大小 layout = "tree") # 设置布局为树形结构
内容的提问来源于stack exchange,提问作者dalexco
相关产品推荐
相关产品推荐

