lavaan 错误 - 未计算标准误差 - R

问题描述 投票:0回答:2

我已经创建了一份调查问卷。该问卷由四个子量表组成,测量我感兴趣的变量的 4 个不同组成部分。每个分量表由3个项目组成。每个项目都是 6 分制(那么每个项目的回答都在 1 到 6 之间)。

这是我的数据示例,每一行都是一个主题:

> dput(DF[1:10, 7:18 ]) 
structure(list(I1 = c(3, 6, 6, 4, 5, 5, 3, 3, 5, 4), I2 = c(3, 
5, 5, 6, 4, 5, 2, 5, 5, 4), I3 = c(1, 4, 2, 3, 3, 4, 4, 1, 5, 
2), I4 = c(5, 6, 6, 6, 5, 6, 6, 6, 6, 6), I5 = c(5, 6, 5, 5, 
6, 6, 5, 6, 5, 5), I6 = c(4, 6, 6, 6, 5, 5, 6, 4, 5, 4), I7 = c(3, 
6, 5, 6, 4, 4, 3, 5, 3, 4), I8 = c(4, 6, 5, 5, 4, 4, 3, 5, 3, 
5), I9 = c(4, 6, 4, 4, 5, 5, 5, 4, 4, 3), I10 = c(2, 4, 5, 6, 
3, 2, 4, 1, 2, 4), I11 = c(3, 3, 4, 6, 4, 6, 5, 5, 2, 3), I12 = c(3, 
6, 6, 6, 5, 4, 4, 4, 5, 5)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))

217 名参与者填写了此调查问卷(无缺失值),我想测试我的数据是否支持 CFA 的模型。

这是我的代码:

library(lavaan)

model <- "
Factor1 =~ I1 + I2 + I3
Factor2 =~ I4 + I5 + I6
Factor3 =~ I7 + I8 + I9
Factor4 =~ I10 + I11 + I12
"

fit <- cfa(model, data = DF)
summary(fit, fit.measures = TRUE, standardized = TRUE)

但是当我运行它时,出现以下错误,我不明白为什么。 这是错误消息:

lavaan 警告:优化器警告尚未找到解决方案 找到了!
lavaan 警告:优化器警告尚未找到解决方案 找到了!
拉万警告: 无法计算标准误差!信息矩阵可以 不被颠倒。这可能是模型不正确的症状 已识别。
lavaan 警告:一些估计的 ov 方差为负
lavaan 警告:潜在变量的协方差矩阵
不是正定的; 使用 lavInspect(fit, "cov.lv") 进行调查。

这是我对 lavInspect 的了解:

> lavInspect(fit, "cov.lv")
        Factr1   Factr2   Factr3   Factr4  
Factor1 7797.062                           
Factor2    0.248    0.451                  
Factor3    0.215    0.182    0.289         
Factor4   -0.254   -0.159    0.280 9883.238

知道因子 1 和因子 4 的巨大 cov 可以通过 lavaan 显示的 I1 (-7795.413) 和 I10 (-9881.204) 的非常高的方差来解释,但如果我直接向 R 询问 var(DF$I1) 和 var (DF$I10),结果很不一样。

Variances:
                   Estimate   Std.Err  z-value  P(>|z|)   Std.lv   Std.all 
   .I1             -7795.413       NA                   -7795.413 -4729.827
   .I2                 1.684       NA                       1.684     1.000
   .I3                 1.535       NA                       1.535     1.000
   .I4                 0.807       NA                       0.807     0.641
   .I6                 1.859       NA                       1.859     0.884
   .I7                 1.370       NA                       1.370     0.826
   .I8                 1.201       NA                       1.201     0.832
   .I9                 1.681       NA                       1.681     0.950
   .I10            -9881.204       NA                   -9881.204 -4859.350
   .I11                2.215       NA                       2.215     1.000
   .I12                0.784       NA                       0.784     1.000


> var(DF$I1)
[1] 1.683052
> var(DF$I10)
[1] 1.966163



 

有人知道为什么它不起作用吗?是因为我的模型与我的数据不够拟合吗?

提前谢谢您!

r r-lavaan
2个回答
1
投票

看看这个lavaan讨论。因子方差数以千计,而其他因子方差小于 1 往往会给估计过程带来问题。

我假设某些变量(尤其是因子 1 和 4 的变量)范围从 1 到 50,而其他变量的范围可能从 1 到 5。如果是这种情况,我建议您先将变量转换为相同的边距到 CFA 估计,例如,

vars <- c("I1", "I2", "I3", "I10", "I11", "I12")
DF[, vars] <- DF[, vars] / 10

0
投票

这可能是与将因子的第一个项目的加载固定为

1
相关的问题,而这些项目的加载应比其他项目的加载小。如果是这样,可以通过在
std.lv = TRUE
函数中添加
cfa()
来解决。此设置将因子方差设置为 1,而不是第一个项目的加载(更明智的默认值,IMO)。

即将运行模型的行更改为:

fit <- cfa(model, data = DF, std.lv = TRUE)

(如果没有看到

summary()
的输出,我无法确定这是问题所在,但这两个有问题的项目都是各自因素的第一个)。

另请注意,摘要中带有

.
的方差是残差方差(即,删除与因子相关的方差后剩下的方差)。因此,它们不应该与项目的方差相同。

© www.soinside.com 2019 - 2024. All rights reserved.