基于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 + x2
                  f1 ~ f2 + f3
                  f2 ~ f3 + x1 + x2
             
             # 定义潜变量
             f1 =~ y1 + y2 + y3
             f2 =~ y4 + y5 + y6
             f3 =~ y7 + y8 + y9 + y10

             # 方差和协方差
             y1 ~~ y1
             y1 ~~ y2
             f1 ~~ f2
          
             # 截距项
             y1 ~ 1
             f1 ~ 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 + x3
              textual =~ x4 + x5 + x6
              speed   =~ 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                           301

  Estimator                                         ML
  Minimum Function Test Statistic               85.306
  Degrees of freedom                                24
  P-value (Chi-square)                           0.000

#参数fit.measure = TRUE会显示下面从model test baseline model到SRMR的部分
Model test baseline model:

  Minimum Function Test Statistic              918.852
  Degrees of freedom                                36
  P-value                                        0.000

User model versus baseline model:

  Comparative Fit Index (CFI)                    0.931
  Tucker-Lewis Index (TLI)                       0.896

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3737.745
  Loglikelihood unrestricted model (H1)      -3695.092

  Number of free parameters                         21
  Akaike (AIC)                                7517.490
  Bayesian (BIC)                              7595.339
  Sample-size adjusted Bayesian (BIC)         7528.739

Root Mean Square Error of Approximation:

  RMSEA                                          0.092
  90 Percent Confidence Interval          0.071  0.114
  P-value RMSEA <= 0.05                          0.001

Standardized Root Mean Square Residual:

  SRMR                                           0.065

#以下是参数估计部分
Parameter Estimates:

  Information                                 Expected
  Standard Errors                             Standard

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  visual =~                                           
    x1                1.000                           
    x2                0.554    0.100    5.554    0.000
    x3                0.729    0.109    6.685    0.000
  textual =~                                          
    x4                1.000                           
    x5                1.113    0.065   17.014    0.000
    x6                0.926    0.055   16.703    0.000
  speed =~                                            
    x7                1.000                           
    x8                1.180    0.165    7.152    0.000
    x9                1.082    0.151    7.155    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)
  visual ~~                                           
    textual           0.408    0.074    5.552    0.000
    speed             0.262    0.056    4.660    0.000
  textual ~~                                          
    speed             0.173    0.049    3.518    0.000

Variances:
                   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.000
    visual            0.809    0.145    5.564    0.000
    textual           0.979    0.112    8.737    0.000
    speed             0.384    0.086    4.451    0.000

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


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

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

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

变量 含义 变量 含义
ind60 1960年的非民主情况 y5 1965年专家对出版物自由的评价
dem60 1960年的民主情况 y6 1965年的反对党派自由
dem65 1965年的民主情况 y7 1965年选举的公平性
y1 1960年专家对出版物自由的评价 y8 1965年选举产生的立法机关效率
y2 1960年的反对党派自由 x1 1960年每单位资本GNP
y3 1960年选举的公平性 x2 1960年每单位资本的物质能量消费
y4 1960年选举产生的立法机关效率 x3 1960年工业劳动力占比

模型如下:

model <- '# measurement model 测量模型
          ind60 =~ x1 + x2 + x3
          dem60 =~ y1 + y2 + y3 + y4
          dem65 =~ y5 + y6 + y7 + y8
          
          # regressions 回归
          dem60 ~ ind60
          dem65 ~ ind60 + dem60
          
          # residual correlations 残余相关
          y1 ~~ y5
          y2 ~~ y4 + y6
          y3 ~~ y7
          y4 ~~ y8
          y6 ~~ y8'

# 拟合SEM
fit <- sem(model, data = PoliticalDemocracy)

# 提取结果
summary(fit, standardized = TRUE)  

#与上例不同,这里我们忽略了参数fit.measure = TRUE,用standardized = TRUE来标准化参数值)

结果如下:

lavaan (0.5-23.1097) con
  • 30
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值