缘由

统计是生信的基石之一

碎碎念

要爱一个具体的人,不要爱一个抽象的人; 要爱生活,不要爱生活的意义。 ——《卡拉马佐夫兄弟》

Ref

T-test in R: The Ultimate Guide - Datanovia

解读

一、加载必要的R包

library(tidyverse)
library(ggpubr)
library(rstatix)

二、单样本 t 检验(One-sample t-test)

我们先从最简单的场景开始:检验某一组样本的均值是否等于某个理论值。

1️导入数据

data(mice, package = "datarium")
head(mice, 3)

mice 数据集包含了实验小鼠的体重。

2️ 查看描述性统计

mice %>% get_summary_stats(weight, type = "mean_sd")

获得均值与标准差。

3️ 可视化与异常值检查

bxp <- ggboxplot(
	mice$weight, width = 0.5, add = c("mean", "jitter"), 
	ylab = "Weight (g)", xlab = FALSE
)
bxp
 
mice %>% identify_outliers(weight)

箱线图帮助我们直观地发现异常值。

4️ 正态性检验

mice %>% shapiro_test(weight)
ggqqplot(mice, x = "weight")

Shapiro-Wilk 检验与 Q-Q 图用于判断数据是否符合正态分布。

5️ 进行单样本 t 检验

假设总体均值为 25 g:

stat.test <- mice %>% t_test(weight ~ 1, mu = 25)
stat.test

6️ 效应量计算(Cohen’s d)

mice %>% cohens_d(weight ~ 1, mu = 25)

Cohen’s d 衡量差异的实际大小。

7️ 可视化结果

bxp + labs(
	subtitle = get_test_label(stat.test, detailed = TRUE)
)

8️ 密度图展示

ggdensity(mice, x = "weight", rug = TRUE, fill = "lightgray") +
	scale_x_continuous(limits = c(15, 27)) +
	stat_central_tendency(type = "mean", color = "red", linetype = "dashed") +
	geom_vline(xintercept = 25, color = "blue", linetype = "dashed") + 
	labs(subtitle = get_test_label(stat.test,  detailed = TRUE))

三、独立样本 t 检验(Independent Samples t-test)

当我们比较两个独立组别(如男女、实验组与对照组)时,使用独立样本 t 检验。

1️导入数据

data("genderweight", package = "datarium")
set.seed(123)
genderweight %>% sample_n_by(group, size = 2)

genderweight 包含不同性别个体的体重。

2️ 查看统计量

genderweight %>%
	group_by(group) %>%
	get_summary_stats(weight, type = "mean_sd")

3️ 箱线图展示

bxp <- ggboxplot(
	genderweight, x = "group", y = "weight", 
	ylab = "Weight", xlab = "Groups", add = "jitter"
)
bxp

4️ 异常值与正态性检验

genderweight %>%
	group_by(group) %>%
	identify_outliers(weight)
 
genderweight %>%
	group_by(group) %>%
	shapiro_test(weight)

5️ Q-Q图验证

ggqqplot(genderweight, x = "weight", facet.by = "group")

6️ 方差齐性检验

genderweight %>% levene_test(weight ~ group)

Levene 检验用来判断两组方差是否相等。

7️ t 检验(方差不齐)

stat.test <- genderweight %>% 
	t_test(weight ~ group) %>%
	add_significance()
stat.test

8️ t 检验(方差齐)

stat.test2 <- genderweight %>%
	t_test(weight ~ group, var.equal = TRUE) %>%
	add_significance()
stat.test2

9️ 效应量计算

genderweight %>%  cohens_d(weight ~ group, var.equal = TRUE)
genderweight %>%  cohens_d(weight ~ group, var.equal = FALSE)

可视化显著性差异

stat.test <- stat.test %>% add_xy_position(x = "group")
bxp + 
	stat_pvalue_manual(stat.test, tip.length = 0) +
	labs(subtitle = get_test_label(stat.test, detailed = TRUE))

四、配对样本 t 检验(Paired Samples t-test)

当数据为同一对象前后测量时(如干预前后体重),使用配对样本 t 检验。

1️ 导入数据

data("mice2", package = "datarium")
head(mice2, 3)

2️ 数据长格式转换

mice2.long <- mice2 %>%
	gather(key = "group", value = "weight", before, after)
head(mice2.long, 3)

3️ 描述性统计与箱线图

mice2.long %>%
	group_by(group) %>%
	get_summary_stats(weight, type = "mean_sd")
 
bxp <- ggpaired(mice2.long, x = "group", y = "weight", 
				order = c("before", "after"),
				ylab = "Weight", xlab = "Groups")
bxp

4️ 计算差值并检测异常

mice2 <- mice2 %>% mutate(differences = before - after)
head(mice2, 3)
 
mice2 %>% identify_outliers(differences)

5️ 正态性检验与 Q-Q 图

mice2 %>% shapiro_test(differences)
ggqqplot(mice2, "differences")

6️ 配对 t 检验

stat.test <- mice2.long  %>% 
	t_test(weight ~ group, paired = TRUE) %>%
	add_significance()
stat.test

7️ 效应量

mice2.long  %>% cohens_d(weight ~ group, paired = TRUE)

8️ 可视化结果

stat.test <- stat.test %>% add_xy_position(x = "group")
bxp + 
	stat_pvalue_manual(stat.test, tip.length = 0) +
	labs(subtitle = get_test_label(stat.test, detailed= TRUE))

五、t 检验类型对比总结

类型使用场景R 代码示例
单样本与固定值比较t_test(weight ~ 1, mu = 25)
独立样本比较两组独立群体t_test(weight ~ group)
配对样本比较同一对象前后t_test(weight ~ group, paired = TRUE)
# 一元 t 检验
mice %>% t_test(weight ~ 1, mu = 25)
# 独立样本 t 检验
genderweight %>% t_test(weight ~ group)
# 配对样本 t 检验
mice2.long %>% t_test(weight ~ group, paired = TRUE)