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

如何计算Dunnett检验与Steel检验的效应量?(基于R语言)

Dunnett检验与Steel检验的效应量计算

一、Dunnett检验(参数法)的效应量计算

Dunnett检验是基于方差分析的参数型多重比较,常用效应量包括标准化均数差(Cohen's d)和η²(Eta Squared)。

1. 标准化均数差(Cohen's d)

针对每个处理组与对照组的两两比较,计算均数差除以合并标准差,反映组间差异的标准化程度。

R代码实现:

library(dplyr)

# 提取各组均值、标准差、样本量
group_stats <- th2 %>%
  group_by(Group) %>%
  summarise(mean_y = mean(y),
            sd_y = sd(y),
            n = n())

# 提取对照组(A组)统计量
control_stats <- group_stats %>% filter(Group == "A")

# 计算每个处理组与对照组的Cohen's d
effect_dunnett <- group_stats %>%
  filter(Group != "A") %>%
  mutate(
    pooled_sd = sqrt(
      ((n-1)*sd_y^2 + (control_stats$n-1)*control_stats$sd_y^2) / (n + control_stats$n - 2)
    ),
    cohens_d = (mean_y - control_stats$mean_y) / pooled_sd
  ) %>%
  select(Group, mean_y, sd_y, n, cohens_d)

print(effect_dunnett)

2. η²(Eta Squared)

反映整体组间变异占总变异的比例,用于衡量所有组(含对照组)的整体效应大小。

R代码实现:

# 拟合方差分析模型
aov_model <- aov(y ~ Group, data = th2)
aov_summary <- summary(aov_model)

# 计算η²
ss_between <- aov_summary[[1]][["Sum Sq"]][1]
ss_total <- ss_between + aov_summary[[1]][["Sum Sq"]][2]
eta_squared <- ss_between / ss_total

cat("Dunnett检验对应的整体η²:", round(eta_squared, 3), "\n")

二、Steel检验(非参数法)的效应量计算

Steel检验是针对对照组的非参数型多重比较,常用效应量包括Cliff's Delta和Kruskal-Wallis η²。

1. Cliff's Delta

衡量两个组秩分布的重叠程度,取值范围为[-1,1],绝对值越大表示组间差异越显著,适合两两非参数比较。

R代码实现:

library(effsize)
library(purrr)
library(dplyr)

# 提取对照组(A组)数据
control_y <- th2 %>% filter(Group == "A") %>% pull(y)

# 逐个计算处理组与对照组的Cliff's Delta
effect_steel <- map_dfr(
  .x = setdiff(unique(th2$Group), "A"),
  .f = function(g) {
    treatment_y <- th2 %>% filter(Group == g) %>% pull(y)
    delta_result <- cliff.delta(treatment_y, control_y)
    tibble(Group = g, cliffs_delta = delta_result$estimate, p_value = delta_result$p.value)
  }
)

print(effect_steel)

2. Kruskal-Wallis η²(整体效应量)

反映所有组(含对照组)的整体非参数效应大小,基于Kruskal-Wallis检验统计量计算。

R代码实现:

# 执行Kruskal-Wallis检验
kw_test <- kruskal.test(y ~ Group, data = th2)
H_stat <- kw_test$statistic
group_count <- length(unique(th2$Group))
total_n <- nrow(th2)

# 计算η²
kw_eta_squared <- (H_stat - group_count + 1) / (total_n - group_count)

cat("Steel检验对应的整体η²:", round(kw_eta_squared, 3), "\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:43:21