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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:45:42