带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
相关产品推荐
相关产品推荐

