基于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

相关文章

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.