R语言中bart_spher()、KMO()及eigen(cor())报错问题咨询
问题分析与解决方案
eigen(cor())本身不存在列数限制,你的问题核心原因是数据中存在5个标准差为0的变量——这和你收到的5条标准差警告完全对应。
报错原因拆解
- 当变量的标准差为0时(所有观测值完全相同),计算相关系数矩阵
cor()时,由于相关系数公式的分母是变量标准差,会直接导致相关矩阵中出现NA或Inf值,进而触发eigen()的报错:Error in eigen(cor(Factors)) : infinite or missing values in 'x'。 bart_spher()和KMO()的计算依赖有效的非奇异相关矩阵,因此会返回NA。- 前113列能正常运行,说明这部分变量不存在标准差为0或完全线性相关的问题。
解决步骤
- 定位异常变量:运行以下代码找出标准差为0的列索引:
zero_sd_cols <- which(apply(Factors, 2, sd) == 0) - 清理数据:直接删除这些无变异的变量,因为它们对因子分析没有任何贡献,只会干扰矩阵计算:
cleaned_Factors <- Factors[, -zero_sd_cols] - 重新验证:对清理后的矩阵重新运行
bart_spher()、KMO()和eigen(cor()),即可正常输出结果。
额外提醒
如果后续仍出现类似报错,还需检查是否存在完全线性相关的变量(比如变量A是变量B的线性组合),这类变量也会导致相关矩阵奇异。可以用caret包的findLinearCombos()函数检测:
library(caret) linear_combos <- findLinearCombos(cleaned_Factors)
找到后删除冗余变量即可。
内容的提问来源于stack exchange,提问作者eb1064
相关产品推荐
相关产品推荐

