R语言factoextra包fviz_ellipses与facto_summarize结果不匹配问题
问题1:Age、Time未出现在facto_summarize结果中的原因
你在调用MCA()函数时,通过quanti.sup = 1:2参数将数据集前两列的Age、Time设置为了定量补充变量,这类变量不会参与MCA的核心拟合计算,仅会在结果中额外投影坐标。facto_summarize(res.mca, 'var', axes=1:2)默认仅返回主动参与拟合的分类变量统计结果,自然匹配不到Age、Time两个补充变量。而fviz_ellipses会默认纳入所有类型变量(主动变量+补充变量)的贡献统计,所以你会在图中看到这两个变量的排名。
如果需要提取补充变量的统计结果,调整element参数即可:
- 提取定量补充变量结果:
facto_summarize(res.mca, 'quanti.sup', axes=1:2) - 提取定性补充变量结果:
facto_summarize(res.mca, 'quali.sup', axes=1:2)
执行定量补充变量提取代码后,你就能拿到Age、Time的坐标、贡献度等数据。
问题2:facto_summarize返回类别值而非变量名的调整方法
MCA的计算逻辑是将每个分类变量的每一个水平(类别)作为独立的统计点处理,因此默认返回的name列是变量的水平值而非原始变量名。你可以从MCA结果对象中提取水平和变量的对应关系,拼接回统计结果即可,参考代码如下:
library(dplyr) # 提取主动分类变量统计结果 var_stat <- facto_summarize(res.mca, 'var', axes = 1:2) # 生成「水平-原始变量」映射表 level_var_map <- data.frame( name = rownames(res.mca$var$coord), variable = rep(colnames(res.mca$call$X[, res.mca$call$quali]), times = res.mca$call$mod) ) # 拼接得到带原始变量名的结果 var_stat_with_varname <- left_join(var_stat, level_var_map, by = "name")
后续你可以直接通过variable列筛选特定变量的所有水平统计结果。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

