缘由
统计是生信的基石之一
碎碎念
要爱一个具体的人,不要爱一个抽象的人; 要爱生活,不要爱生活的意义。 ——《卡拉马佐夫兄弟》
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.test6️ 效应量计算(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"
)
bxp4️ 异常值与正态性检验
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.test8️ t 检验(方差齐)
stat.test2 <- genderweight %>%
t_test(weight ~ group, var.equal = TRUE) %>%
add_significance()
stat.test29️ 效应量计算
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")
bxp4️ 计算差值并检测异常
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.test7️ 效应量
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)