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

在RStudio中编码多选项问题以适配多重对应分析(MCA)

多选项问题适配多重对应分析(MCA)的编码方案

场景一:单一选项数据修改为多选后的编码

先修正指定受试者的选项为多选格式,再转换为MCA所需的二元(0/1)编码结构:

# 加载工具包
library(tidyr)
library(dplyr)

# 原始数据框
s = data.frame(subjects = 1:12,
               Why_are_you_not_happy = c(1,2,4,5,1,2,4,3,2,1,3,4))

# 更新指定受试者的多选选项(用逗号分隔字符串表示多选)
s <- s %>%
  mutate(Why_are_you_not_happy = case_when(
    subjects == 3 ~ "1,2,5",
    subjects == 7 ~ "3,4",
    subjects == 10 ~ "1,5",
    TRUE ~ as.character(Why_are_you_not_happy)
  ))

# 转换为MCA兼容的二元编码:每个选项对应一列,选中为1,未选中为0
s_mca <- s %>%
  separate_rows(Why_are_you_not_happy, sep = ",") %>%
  mutate(value = 1) %>%
  pivot_wider(names_from = Why_are_you_not_happy, 
              values_from = value, 
              values_fill = 0) %>%
  rename_with(~paste0("Why_", .x), -subjects) # 重命名避免纯数字列名

关键步骤说明

  • 用case_when统一将选项转为字符串格式,适配多选场景
  • separate_rows把每行的多选选项拆分为独立行
  • pivot_wider将长格式数据转成宽格式,自动填充未选中选项为0
  • 重命名选项列,避免纯数字列名引发的语法问题

场景二:已有逗号分隔多选数据的编码

针对现有包含两个多选项问题的数据,直接批量转换为二元编码后执行MCA:

# 加载工具包
library(tidyr)
library(dplyr)
library(FactoMineR)

# 原始数据框
df <- data.frame(subjects = 1:12,
                 Why_are_you_not_happy = 
                   c(1,2,"1,2,5",5,1,2,"3,4",3,2,"1,5",3,4),
                 why_are_you_sad = 
                   c("1,2,3",1,2,3,"4,5,3",2,1,4,3,1,1,1) )

# 定义批量转换函数:单多选项列转二元编码
multichoice_to_binary <- function(data, col_name) {
  data %>%
    select(subjects, all_of(col_name)) %>%
    separate_rows(all_of(col_name), sep = ",") %>%
    mutate(value = 1) %>%
    pivot_wider(names_from = all_of(col_name), 
                values_from = value, 
                values_fill = 0) %>%
    rename_with(~paste0(col_name, "_", .x), -subjects)
}

# 分别处理两个多选项问题
happy_binary <- multichoice_to_binary(df, "Why_are_you_not_happy")
sad_binary <- multichoice_to_binary(df, "why_are_you_sad")

# 合并编码结果
df_mca <- happy_binary %>%
  inner_join(sad_binary, by = "subjects")

# 执行多重对应分析(将subjects设为补充变量,不参与维度计算)
mca_result <- MCA(df_mca, quali.sup = 1, graph = TRUE)

关键步骤说明

  • 封装multichoice_to_binary函数,实现多选项列的批量编码
  • 合并两个问题的编码结果,完整保留每个受试者的选项状态
  • 使用FactoMineR的MCA函数执行分析,通过quali.sup标记不参与计算的受试者ID列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:15:25