如何计算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
相关产品推荐
相关产品推荐

