R 中带有 lavaan 的 SEM,指定具有相关子尺度的模型的问题警告:无法计算标准错误

问题描述

我目前正在 Lavaan 中运行 SEM 分析,但遇到了一些问题。在运行完整的 sem 之前,我打算运行一个 CFA 来复制我正在使用的这个措施完成的心理测试。该测量有 24 个项目,它们构成 5 个子量表(潜在变量),这些子量表又加载到总的“高阶”因子上。我尝试以两种不同的方式估计这个模型:(1)一个五因子模型(没有高阶因子),其中所有 5 个子量表都允许相关;(2)一个具有 TOTAL 潜在变量的高阶模型最多 5 个量表。

一个模型有五个相关的潜在因素(FNR、FOB...FAA),方差固定为 1。该模型无误差地收敛并拟合数据。只要我不指定构成 FTOTAL 潜在变量的子量表(FNR、FOB ..)是相关的,第二个模型也有效。但是,如果我指定这些子量表是相关的(#Residual correlations 部分),模型仍然运行但给我错误“lavaan 警告:无法计算标准错误!信息矩阵无法反转。这可能是一个症状型号未确定。”如果我从模型 2 中删除残差相关性,则模型运行时不会出错。两者的 R 代码如下:


Model1 <- "
  #Measurements model
  FNR =~ FNR1 + FNR2 + FNR3 +FNR4 +FNR5
  
  FOB =~ FOB1 + FOB2 +FOB3 +FOB4
  
  FDS =~ FDS1 +FDS2 +FDS3 + FDS4 + FDS5
  
  FNJ =~ FNJ1 + FNJ2 + FNJ3 +FNJ4 + FNJ5
  
  FAA =~ FAA1 + FAA2 +FAA3 + FAA4 +FAA5
  

  #Residual correlations
 FAA ~~ FNJ + FOB + FDS + FNR
 FNR ~~ FNJ + FOB+ FDS
 FNJ ~~ FOB + FDS
 FOB ~~ FDS 

"
fit5factor <- sem(Model1,data=SEMDATA,std.lv=TRUE)


Model2 <- "
#Measurements model
  FNR =~ FNR1 + FNR2 + FNR3 +FNR4 +FNR5
  
  FOB =~ FOB1 + FOB2 +FOB3 +FOB4
  
  FDS =~ FDS1 +FDS2 +FDS3 + FDS4 + FDS5
  
  FNJ =~ FNJ1 + FNJ2 + FNJ3 +FNJ4 + FNJ5
  
  FAA =~ FAA1 + FAA2 +FAA3 + FAA4 +FAA5
  

  FTOTAL =~ FNR + FOB + FDS + FNJ+ FAA 
 

#Residual correlations
 FAA ~~ FNJ + FOB + FDS + FNR
 FNR ~~ FNJ + FOB+ FDS
 FNJ ~~ FOB + FDS
 FOB ~~ FDS 
"

fitTotal <- sem(Model2,std.lv=TRUE)

这是我第一次使用 SEM,我不确定我做错了什么。指定这些构成 FTOTAL 潜在变量的子量表允许相关是否不合适?我从文献中了解到,这是应该如何指定第二个模型(五个因素相关),因为在第一个模型中五个方面是相关的。然而,也许事实并非如此,我应该在没有相关性的情况下运行模型 2,但我想了解这样做的理由,以及为什么这不合适。

在此先感谢大家的帮助。

解决方法

您不需要指定一阶因子之间的相关性。 lavaan 的默认选项会将它们关联起来。如果不想关联它们,您可以使用 orthogonal=T 函数内的 cfa()


Model1 <- "
  #Measurements model
  FNR =~ FNR1 + FNR2 + FNR3 +FNR4 +FNR5
  
  FOB =~ FOB1 + FOB2 +FOB3 +FOB4
  
  FDS =~ FDS1 +FDS2 +FDS3 + FDS4 + FDS5
  
  FNJ =~ FNJ1 + FNJ2 + FNJ3 +FNJ4 + FNJ5
  
  FAA =~ FAA1 + FAA2 +FAA3 + FAA4 +FAA5
"
fit5factor <- sem(Model1,data=SEMDATA,std.lv=TRUE)

关于层次结构,一阶因素之间没有相关性,因为它们上有相同的潜在(即二阶)负载:

Model2 <- "
#Measurements model
  FNR =~ FNR1 + FNR2 + FNR3 +FNR4 +FNR5
  
  FOB =~ FOB1 + FOB2 +FOB3 +FOB4
  
  FDS =~ FDS1 +FDS2 +FDS3 + FDS4 + FDS5
  
  FNJ =~ FNJ1 + FNJ2 + FNJ3 +FNJ4 + FNJ5
  
  FAA =~ FAA1 + FAA2 +FAA3 + FAA4 +FAA5
  
  FTOTAL =~ FNR + FOB + FDS + FNJ+ FAA 
"

fitTotal <- sem(Model2,std.lv=TRUE)

如果它解决了您的问题,请将其标记为已解决。