基于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语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根