我将R代码嵌入到演示中。所需的包是lavaan,lme4和RStan。
我喜欢将大多数统计方法理解为回归模型。这样,很容易理解大量技术背后的主张。这是一种适用于SEM和IRT模型的方法。在这里,我将重点关注验证性因子分析(CFA),因此我将首先从一个易于适用于任何多级回归软件的模型开发CFA:
-
-
-
-
- dat.l <- tidyr::gather(dat, item, score, x1:x9)
- dat.l$item.no <- as.integer(gsub("x", "", dat.l$item))
-
- library(lme4)
-
- lmer(score ~ 0 + factor(item.no) + (1 | ID), dat.l, REML = FALSE)
-
- # Random effects:
- # Groups Name Std.Dev.
- # ID (Intercept) 0.5758
- # Residual 0.9694
- # Number of obs: 2709, groups: ID, 301
上面适用于ML而不是REML的模型与一维CFA相同,。 使用:
λ = α √ α 2 + σ 2= 0.5758 √ 0.5758 2 + 0.9694 2= 0.5107λ=αα2+σ2=0.57580.57582+0.96942=0.5107
请注意,在lavaan语法中,因子被标准化为使用的方差为1 std.lv = TRUE。
- parameterEstimates(sem(
- "F1 =~ a * x1 + a * x2 + a * x3 + a * x4 + a * x5 + a * x6 + a * x7 + a * x8 + a * x9\n
- x5 ~~ f * x5\nx6 ~~ f * x6\nx7 ~~ f * x7\nx8 ~~ f * x8\nx9 ~~ f * x9",
- dat, std.lv = TRUE
- ), standardized = TRUE)[c(1:2, 10:11), c(1:5, 12)]
-
- # lhs op rhs label est std.all
- # 1 F1 =~ x1 a 0.576 0.511
- # 2 F1 =~ x2 a 0.576 0.511
- # 10 x1 ~~ x1 f 0.940 0.739
- # 11 x2 ~~ x2 f 0.940 0.739
让我们扩展模型以包括多个因素。为了包括多个因子,我们以长格式创建一个指标列,用于唯一标识项目所属的因子。
-
- dat.l$Fs <- ((dat.l$item.no - 1) %/% 3) + 1
-
- lmer(score ~ 0 + factor(item) + (0