R中使用soc.ca包做MCA仅纳入变量1值的报错解决
soc.ca包MCA分析报错修复+仅保留1值参与分析方案
报错翻译
Error in rowSums(ind.reduced[, varlist.long.red == unique(varlist)[i]]) :
'x'必须是至少二维的数组
问题根源
passive参数类型不匹配:你用options(passive=0)传入的是数值型0,但之前把变量转成了水平为字符型"0"的因子,参数和因子水平类型不一致,导致内部数组处理时维度异常。attach()函数容易引发环境变量冲突,没必要使用。
修正代码
# 安装并加载soc.ca包 if (!require(soc.ca)) {install.packages("soc.ca")} library(soc.ca) # 批量将所有变量转为因子,水平设为字符型的"0"和"1" data_spss[] <- lapply(data_spss, function(col) factor(col, levels = c("0", "1"))) # 执行MCA:直接指定passive为"0",匹配因子水平 result <- soc.mca( active = data_spss, sup = NULL, identifier = NULL, passive = "0", # 这里用字符型,和因子水平对应 weight = NULL, Moschidis = FALSE, detailed.results = FALSE ) # 绘图:此时只有变量的1值会显示,所有样本都保留 plot(result)
核心说明
- 用
lapply批量处理因子比循环更高效简洁。 - 设置
passive="0"后,变量的0值会被当作被动类别:不参与MCA的计算过程,也不会出现在可视化图中,但所有样本都会被保留用于分析,完全符合你的需求。
内容的提问来源于stack exchange,提问作者DrMaxKeck
相关产品推荐
相关产品推荐

