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

如何在lavaan中纳入潜因子残差/扰动项?

潜变量visual的残差方差计算问题

示例代码

library(lavaan)
model <- '
#latent variable definition
visual =~ x1 + x2 + x3

#regressions
visual ~ x4
visual ~ x5
visual ~ x6

#(co)variances
visual ~~ visual
'

fit <- sem(model, data = HolzingerSwineford1939)
summary(fit)
inspect(fit,"estimates")

问题描述

我认为visual的方差并未完全被x4、x5和x6解释,因此希望纳入潜因子残差(扰动项)来代表visual的剩余方差。

我尝试加入visual ~~ visual来设置潜变量的残差方差,但确信这仅代表方差而非残差方差,属于冗余代码。

在summary(fit)输出的“variances:”项下,visual的估计值为0.608;移除visual ~~ visual后,数值完全一致。

在inspect(fit,"estimates")输出的“$psi”项下,visual自身交叉项的数值同样为0.608;移除冗余代码后结果仍相同。

我认为这两个数值是visual的总方差估计值,而非残差方差。那么如何获取visual的残差方差估计值?

lavaan教程提到“残差方差会自动添加”,但我认为这可能仅针对观测变量,而非潜变量。

解答

在lavaan的结构方程模型中,当潜变量作为回归因变量(比如你模型里的visual ~ x4 + x5 + x6)时,模型默认会为这个潜变量添加残差方差——你看到的$psi里的visual ~~ visual估计值,本身就是残差方差,并非总方差。

所谓的“总方差”由两部分构成:预测变量(x4、x5、x6)解释的方差,加上这个残差方差。可以手动验证:

  1. 用parameterEstimates(fit)提取visual ~ x4、visual ~ x5、visual ~ x6的回归系数,记为b4、b5、b6;
  2. 用cov(HolzingerSwineford1939[, c("x4","x5","x6")])获取三个预测变量的协方差矩阵;
  3. 计算预测变量解释的方差:b4²*var(x4) + b5²*var(x5) + b6²*var(x6) + 2*b4*b5*cov(x4,x5) + 2*b4*b6*cov(x4,x6) + 2*b5*b6*cov(x5,x6);
  4. 将解释方差加上$psi中的0.608,得到的就是visual的总方差。

另外你加入的visual ~~ visual确实是冗余代码,因为潜变量作为回归因变量时,lavaan会自动为其设定自由估计的残差方差,手动添加不会改变模型结构,所以移除后结果完全一致。

如果要直接提取残差方差,除了用inspect(fit, "estimates")$psi,还可以用parameterEstimates(fit)筛选出lhs=="visual" & rhs=="visual" & op=="~~"的行,对应的est值就是残差方差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:52:49