如何在rstatix的t检验结果中添加Cohen's d值?
问题描述
我正在用rstatix包对数据集做多组t检验,效果不错,但还需要给每个检验结果加上Cohen's d值。rstatix虽然有计算Cohen's d的函数,但这个函数需要原始数据集,而不是t_test生成的结果表。以下是我用iris数据集的代码和当前输出,请问怎么在现有结果里添加Cohen's d列?
library(tidyverse) library(rstatix) iris %>% t_test(Petal.Width ~ Species, paired = FALSE, var.equal = FALSE)
当前输出:
# A tibble: 3 × 10 .y. group1 group2 n1 n2 statistic df p p.adj p.adj.signif * <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <chr> 1 Petal.Width setosa versicolor 50 50 -34.1 74.8 2.72e-47 5.44e-47 **** 2 Petal.Width setosa virginica 50 50 -42.8 63.1 2.44e-48 7.32e-48 **** 3 Petal.Width versicolor virginica 50 50 -14.6 89.0 2.11e-25 2.11e-25 ****
解决方案
你可以通过以下方式将Cohen's d值合并到t检验结果中,注意要保证cohens_d()的参数和t_test()完全一致(比如var.equal、paired),这样效应量才对应你的检验类型:
方法1:分步计算后合并(清晰易读)
先分别计算t检验结果和Cohen's d,再通过分组列合并:
library(tidyverse) library(rstatix) # 计算t检验结果 t_res <- iris %>% t_test(Petal.Width ~ Species, paired = FALSE, var.equal = FALSE) # 计算Cohen's d,只保留需要的列 d_res <- iris %>% cohens_d(Petal.Width ~ Species, paired = FALSE, var.equal = FALSE) %>% select(group1, group2, cohens_d) # 合并两个结果表 combined_res <- t_res %>% left_join(d_res, by = c("group1", "group2")) # 查看最终结果 combined_res
方法2:管道流一次性处理(简洁)
如果想在同一个管道里完成所有操作,可以用列表打包两种结果后合并:
library(tidyverse) library(rstatix) iris %>% { list( t_test = t_test(., Petal.Width ~ Species, paired = FALSE, var.equal = FALSE), cohens_d = cohens_d(., Petal.Width ~ Species, paired = FALSE, var.equal = FALSE) %>% select(cohens_d) ) } %>% bind_cols()
两种方法最终都会得到包含cohens_d列的结果表,新增列会显示每组对比的效应量数值。
内容的提问来源于stack exchange,提问作者Firona
相关产品推荐
相关产品推荐

