0

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

第一个模型有五个相关的潜在因子(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, data=SEMDATA, std.lv=TRUE)

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

提前感谢大家的帮助。

4

1 回答 1

0

您不需要指定一阶因子之间的相关性。的默认选项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, data=SEMDATA, std.lv=TRUE)

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

于 2021-03-19T11:17:05.843 回答