You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lavaan的CFA分析中提取测量误差得分

实现逻辑

你需要的个体层面单题测量误差得分,本质是CFA模型的观测级残差,不需要特殊的小众方法,常规CFA框架下即可计算,你提到的等载荷约束属于平行测量的模型设定,不会改变残差的提取逻辑。
核心逻辑是:单题观测得分 = 截距 + 因子载荷 * 对应潜变量得分 + 测量误差,反过来做减法就能得到每个样本对应单题的误差值,和提取因子得分的逻辑完全匹配。

操作步骤
  • 第一步:拟合约束后的CFA模型
    按照研究设定给3个潜变量匹配对应题项,将同一潜变量下的因子载荷设置为相等约束,待模型收敛、拟合指标符合要求后,导出两个核心结果:① 每个样本的潜变量因子得分(主流CFA工具都自带该输出功能);② 每个题项对应的非标准化因子载荷、题项截距(开启均值结构即可输出)。
  • 第二步:计算单题的潜变量预测值
    对每一道题,用「题项截距 + 对应非标准化载荷 * 样本对应潜变量得分」的公式,算出该样本在这道题上由潜变量解释的预测得分。
  • 第三步:计算测量误差得分
    用样本在该题上的原始观测得分,减去上一步得到的潜变量预测得分,得到的残差就是你需要的每个数据点对应题项的测量误差得分。
R语言lavaan包实现示例
library(lavaan)

# 定义带等载荷约束的3因子CFA模型,示例为每个因子对应3个题项,可根据实际题量调整
# 模型语法说明:固定每个因子第一个题项载荷为1做尺度锚定,用equal()约束同一因子下其余载荷与第一个载荷相等
cfa_model <- '
  f1 =~ c(1,NA,NA)*x1 + equal("f1=~x1")*x2 + equal("f1=~x1")*x3
  f2 =~ c(1,NA,NA)*x4 + equal("f2=~x4")*x5 + equal("f2=~x4")*x6
  f3 =~ c(1,NA,NA)*x7 + equal("f3=~x7")*x8 + equal("f3=~x7")*x9
'

# 拟合模型,开启均值结构输出截距
fit <- cfa(cfa_model, data = your_dataset, meanstructure = TRUE)

# 提取因子得分合并到原数据集
factor_scores <- lavPredict(fit)
data_res <- cbind(your_dataset, factor_scores)

# 提取非标准化载荷、截距的估计值
par_table <- parameterEstimates(fit, standardized = FALSE)
loading_val <- par_table[par_table$op == "=~", c("rhs", "lhs", "est")]
intercept_val <- par_table[par_table$op == "~1", c("rhs", "est")]

# 逐题计算测量误差,以x1为例,其余题项按相同逻辑替换变量名即可
data_res$e_x1 <- data_res$x1 - (
  intercept_val[intercept_val$rhs == "x1", "est"] + 
  loading_val[loading_val$rhs == "x1", "est"] * data_res[, loading_val[loading_val$rhs == "x1", "lhs"]]
)

注意:如果模型未设置均值结构,可先将所有题项做中心化处理,省略截距项直接用「载荷*因子得分」计算预测值,再用中心化后的题项得分减去预测值,得到的误差得分和带均值结构的计算结果完全等价。

内容的提问来源于stack exchange,提问作者BrentHendrickx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:06:18