基于R语言的结构方程:lavaan简明教程 [中文翻译版]

2023-11-22 00:50

本文主要是介绍基于R语言的结构方程:lavaan简明教程 [中文翻译版],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

lavaan简明教程 [中文翻译版]

译者注:此文档原作者为比利时Ghent大学的Yves Rosseel博士,lavaan亦为其开发,完全开源、免费。我在学习的时候顺手翻译了一下,向Yves的开源精神致敬。此翻译因偷懒部分删减,但也有增加,有错误请留言

「转载请注明出处」


目录

lavaan简明教程 [中文翻译版]
目录
摘要

  1. 在开始之前
  2. 安装lavaan包
  3. 模型语法
  4. 例1:验证性因子分析(CFA)
  5. 例2:结构方程(SEM)
  6. 更多关于语法的内容
    6.1 固定参数
    6.2 初值
    6.3 参数标签
    6.4 修改器
    6.5 简单相等约束
    6.6 非线性相等和不相等约束
  7. 引入平均值
  8. 结构方程的多组分析
    8.1 在部分组中固定参数
    8.2 约束一个参数使其在各组中相等
    8.3 约束一组参数使其在各组中相等
    8.4 测量不变性
  9. 增长曲线模型
  10. 使用分类变量
  11. 将协方差矩阵作为输入
  12. 估计方法,标准误差和缺失值
    12.1 估计方法
    12.2 最大似然估计
    12.3 缺失值
  13. 间接效应和中介分析
  14. 修正指标
  15. 从拟合方程中提取信息

摘要

此教程首先介绍lavaan的基本组成部分:模型语法,拟合方程(CFA, SEM和growth),用来呈现结果的主要函数(summary, coef, fitted, inspect);
然后提供两个实例;
最后再讨论一些重要话题:均值结构模型(meanstructures),多组模型(multiple groups),增长曲线模型(growth curve models),中介分析(mediation analysis),分类数据(categorial data)等。


1. 在开始之前

在开始之前,有以下几点需要注意:

  • lavaan包需要安装 3.0.0或更新版本的R。
  • lavaan包仍处于未完成阶段,目前尚未实现的功能有:对多层数据的支持,对离散潜变量的支持,贝叶斯估计。
  • 虽然目前是测试版,但是结果精确,语法成熟,可以放心使用。
  • lavaan包对R语言预备知识要求很低。
  • 此教程不等于参考手册,相关文档正在准备。
  • lavaan包是完全免费开源的软件,不做任何承诺。
  • 发现bug,到 https://groups.google.com/d/forum/lavaan/ 加组沟通。

2. 安装lavaan包

启动R,并输入:

install.packages("lavaan", dependencies = TRUE)  # 安装lavaan包
library(lavaan)   # 载入lavaan包

出现以下提示,表示载入成功。
1402874-20180518081113264-208633271.png


3. 模型语法

lavaan包的核心是描述整个模型的“模型语法”。这部分简单介绍语法,更多细节在接下来的示例中可见。

R环境下的回归方程有如下形式:

y ~ x1 + x2 + x3 + x4  # ~左边为因变量y

在lavaan中,一个典型模型是一个回归方程组,其中可以包含潜变量,例如:

y ~ f1 + f2 + x1 + x2
f1 ~ f2 + f3
f2 ~ f3 + x1 + x2

我们必须通过指示符=~(measured by)来“定义”潜变量。例如,通过以下方式来定义潜变量f1, f2和f3:

f1 =~ y1 + y2 + y3
f2 =~ y4 + y5 + y6
f3 =~ y7 + y8 + y9 + y10

方差和协方差表示如下:

y1 ~~ y1 # 方差
y1 ~~ y2 # 协方差
f1 ~~ f2 # 协方差

只有截距项的回归方程表达如下:

y1 ~ 1
f1 ~ 1

以上4种公式种类(~, ~~, =~, ~ 1)组合成完整的模型语法,用单引号表示如下:

myModel <- ' # 主要回归方程y1 + y2 ~ f1 + f2 + x1 + x2f1 ~ f2 + f3f2 ~ f3 + x1 + x2# 定义潜变量f1 =~ y1 + y2 + y3f2 =~ y4 + y5 + y6f3 =~ y7 + y8 + y9 + y10# 方差和协方差y1 ~~ y1y1 ~~ y2f1 ~~ f2# 截距项y1 ~ 1f1 ~ 1

如果模型很长,可以将模型(单引号之间的内容)储存入myModel.lav的txt文档中,用以下命令读取:

myModel <- readLines("/mydirectory/myModel.lav")  # 这里需要绝对路径

4. 例1:验证性因子分析(CFA)

lavaan包提供了一个内置数据集叫做HolzingerSwineford,输入以下命令查看数据集描述:

?HolzingerSwineford

数据形式是这样的:
1402874-20180518081144152-892235219.png

此数据集包含了来自两个学校的七、八年级孩子的智力能力测验分数。在我们的版本里,只包含原有26个测试中的9个,这9个测试分数作为9个测量变量分别对应3个潜变量:

  • 视觉因子(visual)对应x1,x2,x3
  • 文本因子(textual)对应x4,x5,x6
  • 速度因子(speed)对应x7,x8,x9

模型如下图所示:
1402874-20180518081155792-1662753592.png

建立模型代码如下:

HS.model <- ' visual  =~ x1 + x2 + x3textual =~ x4 + x5 + x6speed   =~ x7 + x8 + x9'
# 然后拟合cfa函数,第一个参数是模型,第二个参数是数据集
fit <- cfa(HS.model, data = HolzingerSwineford1939)
# 再通过summary函数给出结果
summary(fit, fit.measure = TRUE)

结果展示如下:

# 前6行为头部,包含版本号,收敛情况,迭代次数,观测数,用来计算参数的估计量,模型检验统计量,自由度和相关的p值
lavaan (0.5-23.1097) converged normally after  35 iterations Number of observations                           301Estimator                                         MLMinimum Function Test Statistic               85.306Degrees of freedom                                24P-value (Chi-square)                           0.000#参数fit.measure = TRUE会显示下面从model test baseline model到SRMR的部分
Model test baseline model:Minimum Function Test Statistic              918.852Degrees of freedom                                36P-value                                        0.000User model versus baseline model:Comparative Fit Index (CFI)                    0.931Tucker-Lewis Index (TLI)                       0.896Loglikelihood and Information Criteria:Loglikelihood user model (H0)              -3737.745Loglikelihood unrestricted model (H1)      -3695.092Number of free parameters                         21Akaike (AIC)                                7517.490Bayesian (BIC)                              7595.339Sample-size adjusted Bayesian (BIC)         7528.739Root Mean Square Error of Approximation:RMSEA                                          0.09290 Percent Confidence Interval          0.071  0.114P-value RMSEA <= 0.05                          0.001Standardized Root Mean Square Residual:SRMR                                           0.065#以下是参数估计部分
Parameter Estimates:Information                                 ExpectedStandard Errors                             StandardLatent Variables:Estimate  Std.Err  z-value  P(>|z|)visual =~                                           x1                1.000                           x2                0.554    0.100    5.554    0.000x3                0.729    0.109    6.685    0.000textual =~                                          x4                1.000                           x5                1.113    0.065   17.014    0.000x6                0.926    0.055   16.703    0.000speed =~                                            x7                1.000                           x8                1.180    0.165    7.152    0.000x9                1.082    0.151    7.155    0.000Covariances:Estimate  Std.Err  z-value  P(>|z|)visual ~~                                           textual           0.408    0.074    5.552    0.000speed             0.262    0.056    4.660    0.000textual ~~                                          speed             0.173    0.049    3.518    0.000Variances:Estimate  Std.Err  z-value  P(>|z|).x1                0.549    0.114    4.833    0.000.x2                1.134    0.102   11.146    0.000.x3                0.844    0.091    9.317    0.000.x4                0.371    0.048    7.779    0.000.x5                0.446    0.058    7.642    0.000.x6                0.356    0.043    8.277    0.000.x7                0.799    0.081    9.823    0.000.x8                0.488    0.074    6.573    0.000.x9                0.566    0.071    8.003    0.000visual            0.809    0.145    5.564    0.000textual           0.979    0.112    8.737    0.000speed             0.384    0.086    4.451    0.000

例1是一个定义模型、拟合模型、提取结果的过程。


5. 例2:结构方程(SEM)

例2中我们使用名为PoliticalDemocracy的数据集,图示如下:
1402874-20180518081259294-1899486761.png

数据形式大致如下(只显示前三行):
1402874-20180518081309018-2064416653.png

变量含义变量含义
ind601960年的非民主情况y51965年专家对出版物自由的评价
dem601960年的民主情况y61965年的反对党派自由
dem651965年的民主情况y71965年选举的公平性
y11960年专家对出版物自由的评价y81965年选举产生的立法机关效率
y21960年的反对党派自由x11960年每单位资本GNP
y31960年选举的公平性x21960年每单位资本的物质能量消费
y41960年选举产生的立法机关效率x31960年工业劳动力占比

模型如下:

model <- '# measurement model 测量模型ind60 =~ x1 + x2 + x3dem60 =~ y1 + y2 + y3 + y4dem65 =~ y5 + y6 + y7 + y8# regressions 回归dem60 ~ ind60dem65 ~ ind60 + dem60# residual correlations 残余相关y1 ~~ y5y2 ~~ y4 + y6y3 ~~ y7y4 ~~ y8y6 ~~ y8'# 拟合SEM
fit <- sem(model, data = PoliticalDemocracy)# 提取结果
summary(fit, standardized = TRUE)  #与上例不同,这里我们忽略了参数fit.measure = TRUE,用standardized = TRUE来标准化参数值)

结果如下:

lavaan (0.5-23.1097) converged norma

这篇关于基于R语言的结构方程:lavaan简明教程 [中文翻译版]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406272

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配