我创建了一个问卷。该问卷由四个子量表组成,测量我感兴趣的变量的四个不同组成部分。每个子量表包含三个项目。每个项目是一个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警告:无法计算标准误差!信息矩阵无法求逆。这可能是模型未被识别的症状。 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的巨大协方差可以通过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
有人知道为什么它不能工作吗?是因为我的模型不够适合我的数据吗?
提前感谢!
lavInspect(fit, "cov.lv")
吗?输出是什么?你能展示一下数据吗? - Tomcor(DF)
(实际上,您可以提供协方差矩阵而不是原始数据)?例如,在样本数据中,I11
和I12
显示负相关性。此外,我认为估计顺序的人为因素导致I1
和I10
具有较大的负值;如果您在相应因素的第一位放置另一个项目,则我怀疑这些值将大部分为负。然而,这个问题可能更适合在stats.stackexchange上解决。 - Tom