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

使用lavaan调用summary()请求rsquare时出现‘行名含缺失值’错误

解决lavaan中summary()与R²计算时的行名缺失报错问题

问题背景

使用lavaan对大规模、含缺失值的杂乱数据集做回归分析(用FIML处理缺失),parameterEstimates()和standardizedSolution()的结果已通过SPSS、lm()交叉验证确认正确,但调用summary()或parameterEstimates(rsquare = TRUE)时持续触发报错:

error in data.frame(lhs = NAMES, op = rep("r2", nel(, rhs = NAMES, block = block, : row names contain missing values.

手动检查数据集行名无缺失,但小数据集(如作业示例、500条子样本)下lavaan功能正常。


可能的报错原因

  1. 变量名存在异常字符:变量名含空白、全角符号、隐形控制字符(如非打印Unicode字符),lavaan在生成R²结果数据框时,这类字符会导致行名处理逻辑异常,即使表面上行名无缺失。
  2. 极端缺失模式变量干扰:数据集中存在完全缺失(缺失率100%)或近乎完全缺失的变量,FIML处理这类变量时,内部计算生成的临时标识可能出现隐性缺失,触发报错。
  3. 重复变量名:存在重名变量,lavaan在生成R²条目时无法生成唯一行名,导致行名逻辑冲突。

解决办法

1. 清理变量名

  • 检查变量名中的异常字符:用stringi::stri_escape_unicode(names(your_data))显示所有隐形字符,定位问题变量。
  • 批量标准化变量名:
    # 生成合法、唯一的变量名,自动替换特殊字符和重复名
    names(your_data) <- make.names(names(your_data), unique = TRUE)
    
    之后重新拟合模型,再尝试调用报错的函数。

2. 排查并移除极端缺失变量

  • 计算各变量缺失比例:
    miss_prop <- colMeans(is.na(your_data))
    # 查看缺失比例超过99%的变量
    print(names(miss_prop)[miss_prop > 0.99])
    
  • 删除完全缺失或近乎完全缺失的变量:
    your_data_clean <- your_data[, miss_prop < 0.99]
    
    用清理后的数据集重新拟合模型。

3. 手动计算R²(临时替代方案)

如果上述方法暂时无效,可绕过lavaan的内置R²计算,用标准化系数手动计算:

# 提取标准化回归系数
std_results <- standardizedSolution(your_fit)
reg_coefs <- std_results[std_results$op == "~", "est.std"]
# 计算R²(单因变量回归场景)
r2_value <- sum(reg_coefs^2)

4. 尝试lavaan开发版

正式版可能存在边缘场景的bug,安装开发版修复:

# 先安装devtools(若未安装)
install.packages("devtools")
# 安装lavaan开发版
devtools::install_github("yrosseel/lavaan")

重启R后重新拟合模型测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:07:10