我已经创建了一份调查问卷。该问卷由四个子量表组成,测量我感兴趣的变量的 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
有人知道为什么它不起作用吗?是因为我的模型与我的数据不够拟合吗?
提前谢谢您!
看看这个lavaan讨论。因子方差数以千计,而其他因子方差小于 1 往往会给估计过程带来问题。
我假设某些变量(尤其是因子 1 和 4 的变量)范围从 1 到 50,而其他变量的范围可能从 1 到 5。如果是这种情况,我建议您先将变量转换为相同的边距到 CFA 估计,例如,
vars <- c("I1", "I2", "I3", "I10", "I11", "I12")
DF[, vars] <- DF[, vars] / 10
这可能是与将因子的第一个项目的加载固定为
1
相关的问题,而这些项目的加载应比其他项目的加载小远。如果是这样,可以通过在 std.lv = TRUE
函数中添加 cfa()
来解决。此设置将因子方差设置为 1,而不是第一个项目的加载(更明智的默认值,IMO)。
即将运行模型的行更改为:
fit <- cfa(model, data = DF, std.lv = TRUE)
(如果没有看到
summary()
的输出,我无法确定这是问题所在,但这两个有问题的项目都是各自因素的第一个)。
另请注意,摘要中带有
.
的方差是残差方差(即,删除与因子相关的方差后剩下的方差)。因此,它们不应该与项目的方差相同。