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

如何用tidyverse为每个特征与分组变量做Spearman相关性分析?

解决方案

你的问题核心在于分组变量car_group是分类类型,而Spearman相关性分析要求两个输入变量都是数值型。另外你原代码的nest逻辑有误,应该按特征分组后再嵌套数据。下面是两种可行的实现方法:

方法一:修正你的原代码逻辑

library(tidyverse)
library(broom)

data %>%
  # 将分类分组变量转为数值型(A→1,B→2)
  mutate(car_group_num = as.integer(factor(car_group))) %>%
  # 把特征列转为长格式
  pivot_longer(!c(car_group, car_group_num), names_to = 'Feature', values_to = 'value') %>%
  # 按特征分组后嵌套数据
  group_by(Feature) %>%
  nest() %>%
  # 对每个嵌套数据集做Spearman相关性分析
  mutate(
    fit = map(data, ~cor.test(.x$value, .x$car_group_num, method = 'spearman')),
    tidied = map(fit, tidy)
  ) %>%
  # 展开结果
  unnest(tidied) %>%
  # 可选:保留核心结果列
  select(Feature, estimate, p.value, method)

方法二:直接遍历特征列(更简洁)

不需要转长格式,直接用map_dfr遍历所有特征列,逐个与编码后的分组变量做相关性分析:

library(tidyverse)
library(broom)

# 先编码分组变量为数值型
data$car_group_num <- as.integer(factor(data$car_group))

# 遍历所有特征列(排除最后一列原分组变量)
map_dfr(names(data)[1:(ncol(data)-1)], function(col) {
  cor_result <- cor.test(data[[col]], data$car_group_num, method = 'spearman')
  tidy(cor_result) %>%
    mutate(Feature = col) %>%
    select(Feature, estimate, p.value, method)
})

关键说明

  • 分类变量转数值:用as.integer(factor(car_group))将A/B转为1/2,Spearman相关性基于秩次计算,这种编码方式不会影响结果的合理性。
  • 原代码nest(Feature)错误:必须先按Feature分组,再嵌套对应的数据行,这样每个嵌套数据集才对应一个特征的所有观测值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:30:06