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

如何计算双因子模型的Omega值?附lavaan代码及psych包报错求助

解决psych::omega函数报错“Error in m$n.obs : $ operator is invalid for atomic vectors”

这个错误的核心原因是你传入omega()的对象不符合要求(通常是原子向量而非数据框/矩阵),结合你的双因子模型和数据情况,给出以下具体解决方案:

1. 传入处理好缺失值的原始数据

omega()可以直接接受原始数据框,但需明确处理缺失值。你的样本量300,适合用成对删除或列表删除:

# 方案1:列表删除(移除含缺失值的观测)
dataset_clean <- na.omit(dataset)

# 按你的双因子结构定义因子组
factor_groups <- list(
  g = c("DTW_1", "DTW_2", "DTW_3", "DTW_6", "DTW_7", "DTW_8", "DTW_9", "DTW_10", 
        "DTW_11", "DTW_12", "DTW_13", "DTW_14", "DTW_15", "DTW_16", "DTW_17", 
        "DTW_18", "DTW_19", "DTW_20", "DTW_21", "DTW_22"),
  n = c("DTW_1", "DTW_2", "DTW_3", "DTW_4", "DTW_5", "DTW_6"),
  m = c("DTW_7", "DTW_8", "DTW_9", "DTW_10"),
  s = c("DTW_17", "DTW_19", "DTW_21")
)

# 运行omega,和lavaan保持正交设置
omega_result <- omega(dataset_clean,
                     factors = factor_groups,
                     orthogonal = TRUE,
                     missing = "pairwise") # 若用未清理的数据,指定成对处理缺失值

2. 传入协方差矩阵+样本量

如果需要基于协方差矩阵计算(适合缺失值较多的情况):

# 计算成对删除缺失值的协方差矩阵
cov_mat <- cov(dataset, use = "pairwise.complete.obs")
# 获取有效样本量(列表删除后的样本数)
n_obs <- sum(complete.cases(dataset))

# 运行omega
omega_result <- omega(cov_mat,
                     n.obs = n_obs,
                     factors = factor_groups,
                     orthogonal = TRUE)

3. 排查变量与输入问题

  • 禁止传入lavaan拟合对象:omega()不支持直接读取lavaan::cfa()的返回结果fit_bif,必须传入原始数据/协方差矩阵。
  • 检查变量名一致性:确保factor_groups中的变量名与数据集中的完全一致(大小写、拼写无误差),否则会返回空的原子向量触发错误。
  • 排除无效项目:检查每个项目的变异度,用apply(dataset, 2, sd)查看标准差,移除变异为0的项目(全同值项目会导致协方差矩阵异常)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:53:18