R 语言基于 lavaan 包实现结构方程模型 (SEM) 从环境配置到建模绘图全流程实战

R 语言基于 lavaan 包实现结构方程模型 (SEM) 从环境配置到建模绘图全流程实战

文章目录

  1. 前言
  2. R+RStudio 开发环境部署步骤
  3. SEM 所需依赖包一键安装配置代码
  4. 验证性因子分析 CFA 实战代码
  5. 完整结构方程 SEM 建模实战(测量模型 + 结构模型)
  6. 模型结果解析与拟合指标判断标准
  7. semPlot 绘制标准化路径图代码
  8. 结果导出 CSV 代码
  9. 常见报错解决方案
  10. 参考资料 & 官方学习链接

正文内容

一、前言

结构方程模型 SEM 广泛应用于社科、心理学、经管、临床医学的问卷数据分析,可同时完成潜变量验证(CFA)与变量间路径效应检验。R 语言中lavaan是目前学术界使用最广泛的 SEM 工具包,语法简洁、适配 CFA、SEM、中介调节、多群组分析等场景。本文从零搭建运行环境,附带全套可直接复制运行代码,新手跟着操作即可一次跑通 SEM 模型。

二、开发环境安装配置

2.1 安装 R 主程序

官方下载地址:https://cran.r-project.org/

  • Windows:Download R for Windows→base 安装;
  • Mac:Download R for macOS 下载对应系统版本安装。
2.2 安装 RStudio 编辑器(推荐)

RStudio 是 R 可视化 IDE,方便代码编写、看图、查看结果:下载地址:https://posit.co/download/rstudio-desktop/

安装顺序:​先装 R,再装 RStudio​,默认路径下一步即可,无需额外环境变量配置。

三、依赖包一键配置代码

打开 RStudio,新建 R 脚本,复制下方代码运行,首次运行自动安装依赖,后续使用仅加载包即可。

运行

R 复制代码
# 清空工作环境
rm(list = ls())
# 批量安装SEM所需工具包(仅首次运行)
install.packages(c("lavaan","semPlot","tidyverse"))
# 载入包(每次分析前执行)
library(lavaan)    # SEM建模核心包
library(semPlot)   # SEM路径图绘制
library(tidyverse) # 数据预处理

出现DONE字段代表包安装成功。

四、案例数据源说明

采用 lavaan 内置经典数据集HolzingerSwineford1939,经典智力测验数据,无需导入本地 Excel,直接调用数据:

运行

R 复制代码
# 读取内置数据
data(HolzingerSwineford1939)
dat <- HolzingerSwineford1939
# 预览前5行数据
head(dat)

数据集包含 3 个潜变量:视觉能力 visual (x1-x3)、语言能力 textual (x4-x6)、反应速度 speed (x7-x9),结果变量数学能力 math。

五、实操 1:验证性因子分析 CFA(测量模型)

CFA 用于检验量表维度结构、因子载荷,只定义潜变量与观测指标,无潜变量间路径。

运行

R 复制代码
# CFA模型语法:=~ 代表潜变量由多个观测题项组成
cfa_model <- '
visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
'
# 拟合CFA模型
fit_cfa <- cfa(cfa_model,data = dat,std.lv = TRUE)
# 输出结果:标准化系数+拟合指标+R方
summary(fit_cfa,standardized = TRUE,fit.measures = TRUE,rsquare = TRUE)

六、实操 2:全结构方程模型 SEM(测量 + 结构模型)

~代表回归路径,实现自变量潜变量预测因变量潜变量,完整 SEM 代码:

运行

R 复制代码
# 定义完整SEM模型
sem_model <- '
# 测量模型:潜变量-观测指标
visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
math =~ x10 + x11 + x12
# 结构模型:自变量影响因变量
math ~ visual + textual + speed
'
# 模型拟合 std.lv=TRUE 潜变量标准化
fit_sem <- sem(sem_model,data = dat,std.lv = TRUE)
# 输出详细结果
summary(fit_sem,standardized = TRUE,fit.measures = TRUE,rsquare = TRUE)

七、模型拟合指标评判标准

表格

拟合指标 合格阈值 优秀阈值
CFI/TLI >0.90 >0.95
RMSEA <0.08 <0.05
SRMR <0.08 <0.05

八、semPlot 绘制标准化 SEM 路径图

运行

R 复制代码
# 绘制标准化路径图
semPaths(fit_sem,
         what = "std",         # 展示标准化路径系数
         layout = "tree",      # 树形布局
         edge.label.cex = 0.8, # 标签字体大小
         nodeLabels = c("视觉能力","语言能力","反应速度","数学成绩"),
         residuals = FALSE)    # 隐藏残差项

运行后 RStudio 绘图面板自动生成 SEM 路径图,可直接导出 PNG 用于论文。

九、参数结果导出本地 CSV

运行

R 复制代码
# 提取全部参数(载荷、路径系数、标准误)
result_df <- parameterEstimates(fit_sem,standardized = TRUE)
# 保存到当前工作目录
write.csv(result_df,"SEM分析结果.csv",row.names = F,fileEncoding = "UTF-8")

十、常见报错与解决方案

  1. 报错:package xxx is not available
    网络源异常,切换国内 CRAN 镜像后重装:

运行

R 复制代码
chooseCRANmirror(graphics=F,ind=1)
install.packages("lavaan")
  1. 报错:there is no package called 'semPlot'
    单独安装缺失包:install.packages("semPlot")
    1. semPaths 无法出图

      精简绘图代码:

运行

R 复制代码
semPaths(fit_sem,what="std",layout="tree",residuals=F)

十一、参考资料 & 官方链接

  1. lavaan 官方主页:https://lavaan.ugent.be/
  2. lavaan 官方英文教程:https://lavaan.ugent.be/tutorial.html
  3. CRAN-lavaan 官方手册:https://cran.r-project.org/web/packages/lavaan/lavaan.pdf
  4. semPlot 包文档:https://cran.r-project.org/web/packages/semPlot/index.html

十二、文末小结

  1. SEM 分析流程:环境安装→包配置→模型书写→模型拟合→拟合度检验→画图→结果导出;
  2. lavaan 核心语法:=~定义测量模型,~定义结构回归路径;
  3. 替换 dat 为自己的 Excel 问卷数据,即可实现自定义量表 SEM 分析。
相关推荐
这是个栗子12 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
凤凰院凶涛QAQ12 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
研☆香12 小时前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript
右耳朵猫AI13 小时前
PHP周刊2026W28 | 安全更新、Laravel 13.18、Twig 3.28
开发语言·php·laravel
second6013 小时前
第一部分:快速上手 —— 建立 C++ 基本语法与编程范式
开发语言·c++
郝学胜-神的一滴13 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
bksczm13 小时前
linux之线程概念和控制
linux·开发语言·c++
JackieZhengChina14 小时前
零依赖轻量级JS悬浮提示插件title2tip-js的使用教程
开发语言·javascript·ecmascript
hehelm14 小时前
Linux网络编程—TCP字典翻译系统
linux·开发语言·网络·c++·tcp/ip
李永奉15 小时前
杰理可视化SDK开发-【BUG】配置“TWS两边同时按消息使能”功能后,按键单击功能无效失灵
开发语言·单片机·嵌入式硬件·物联网·bug