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

带p值的多列Pearson相关分析及分组代码问题求助

分组计算多列Pearson相关系数问题解答

一、correlate()的p值获取与标红含义

  • 获取p值:原代码仅输出相关系数,添加p = TRUE参数即可同时返回p值,修改后代码:
df %>%
  select_if(is.numeric) %>%
  group_by(year) %>%
  group_map(~ correlate(.x, method = "pearson", p = TRUE))

执行后结果会新增p值列,完整保留相关分析的统计量。

  • 标红系数的含义:标红的是显著性水平α=0.05下的显著相关系数。correlate()默认会将p<0.05的系数在控制台输出时标记为红色,用于快速识别显著关联,这是rstatix包的默认可视化输出规则。

二、分组分析的错误修正

1. 分组变量找不到的报错原因

使用select_if(is.numeric)会过滤掉字符型分组变量trainingsmodus,导致group_by()无法定位该列。解决核心是保留分组变量,仅过滤出需要计算相关的数值列。

2. 分组结果一致的问题根源

你修改后的代码中,cor_test调用的是全局数据集df而非分组后的子集.x,导致每次分组计算都用了完整数据集,结果自然完全相同。

3. 修正后的示例代码

基于你的测试数据,正确的分组计算代码如下:

方法1:用correlate()输出矩阵格式结果(带p值)

df <- data.frame(year = c("lorem", "ipsum", "lorem", "ipsum"),    
                 var1 = 4:7,
                 var2 = 5:8,
                 var3 = 6:9,
                 var4 = 7:10)

library(rstatix)
library(dplyr)

df %>%
  group_by(year) %>%
  group_map(~ .x %>%
              select(where(is.numeric)) %>%  # 仅对分组子集选择数值列
              correlate(method = "pearson", p = TRUE)) %>%
  set_names(unique(df$year))  # 给每个分组结果命名,便于区分

方法2:用cor_test()输出tidy格式结果(每行一对变量)

df %>%
  group_by(year) %>%
  group_map(~ .x %>%
              cor_test(vars = starts_with("var"), 
                       vars2 = starts_with("var"),
                       method = "pearson") %>%
              filter(is.finite(statistic))) %>%
  bind_rows(.id = "year")  # 合并所有分组结果,新增year列标记分组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:05:24