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

FactoMineR中FAMD分析定性变量绘图异常问题咨询

FAMD分析问题解答

问题背景

数据集包含25个记录身体部位荧光有无的二元定性变量、6个定量变量,以及性别、属、深度等补充变量,在运行FAMD时遇到两个问题:

  • 用na.omit()移除缺失值后,绘制定性变量二维图时显示无法解释的小数,而非类别标签
  • 用missMDA::imputeFAMD()处理缺失值后,绘图中类别重复出现,且带有_0和_1后缀

1. 明显错误识别

第一个问题的根源

二元定性变量可能被误识别为数值型,或者部分变量因缺失值移除后只剩单一水平(比如所有样本的某部位荧光都是0),导致FAMD将其当作定量变量处理,绘图时显示数值而非类别标签。

第二个问题的根源

手动将imputeFAMD()生成的tab.disj(定性变量的虚拟编码矩阵)传入FAMD()时,原始数据集的定性变量仍会被FAMD自动重新编码,导致同一类别被两次编码,出现重复标签。


2. 类别重复带_0/_1后缀的原因

imputeFAMD()的tab.disj已经是定性变量的虚拟变量编码结果,而FAMD()默认会对输入数据中的所有定性变量再次生成虚拟变量。同时传入原始数据集和tab.disj,会让FAMD同时处理两组编码后的变量,最终绘图时就会出现同一类别重复显示(一组是原始类别名,另一组是虚拟变量的_0/_1后缀名)。


3. 对整体分析的影响

这种重复编码会导致定性变量的权重被错误放大,干扰维度的解释性,降低分析结果的可靠性;同时重复的标签会让可视化结果混乱,无法准确解读变量间的关系。


4. 数据集是否适合FAMD

完全适合!FAMD的核心就是处理混合定性与定量变量的数据集,你的数据包含二元定性(荧光有无)、多分类定性(属、性别)和定量变量(深度、荧光强度),正好匹配FAMD的适用场景,能有效整合两类变量的信息进行降维分析。


解决方案

针对“绘图显示小数”问题

  1. 确保二元变量为因子类型:检查并转换所有二元定性变量为factor,避免被当作数值处理:
# 替换为你的二元变量列名列表
binary_vars <- c("frontal_dorsal", "frontal_ventral", "mesogastric", ...)
fluo_famd1[binary_vars] <- lapply(fluo_famd1[binary_vars], as.factor)
  1. 移除无信息的单一水平变量:如果某定性变量所有样本的取值都相同(比如ps4全为0),这类变量对分析无贡献,可提前移除:
# 筛选出多水平的定性变量
qual_vars <- sapply(fluo_famd1, is.factor)
single_level <- sapply(fluo_famd1[, qual_vars], function(x) length(levels(x)) == 1)
fluo_famd1 <- fluo_famd1[, !single_level]
  1. 重新运行FAMD并绘图:
res.famd1 <- FAMD(fluo_famd1, sup.var=c(1,2,28,35), graph=FALSE, ncp=5)
fviz_famd_var(res.famd1, "quali.var")

针对“类别重复”问题

无需手动传入tab.disj,直接使用imputeFAMD()返回的插补后完整数据集运行FAMD即可:

library(missMDA)
library(FactoMineR)
library(factoextra)

# 缺失值插补
res.impute <- imputeFAMD(fluo_famd2, ncp=3)

# 使用插补后的完整数据集运行FAMD
res.famd2 <- FAMD(res.impute$completeObs, sup.var=c(1,2,28), graph=FALSE, ncp=5)

# 绘制定性变量图
fviz_famd_var(res.famd2, "quali.var")

内容的提问来源于stack exchange,提问作者Susanne Bähr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:54:41