R语言~T检验
文章目录
- 引入:
- 分解理解:
- 注意
- 修改(4缸 vs 6缸车)
- 方法1:筛选数据
- 方法2:使用subset参数
- 方法3:直接向量比较
- 结果差异
- 验证示例
- t检验详解及R语言实现
- 什么是t检验?
- t检验的三种主要类型
- 1. 单样本t检验
- 2. 独立样本t检验
- 3. 配对样本t检验
- 实际案例:mtcars数据集分析
- 案例1:不同气缸数的油耗比较
- 案例2:自动挡 vs 手动挡的油耗
- t检验的假设条件
- 非参数替代方法
- 结果解释要点
- 注意事项
引入:
t.test(mpg ~ I(cyl == 4), data = mtcars)
分解理解:
-
I(cyl == 4)- 创建一个逻辑向量:4缸车为
TRUE,其他为FALSE - 在mtcars中:4缸车 vs (6缸车 + 8缸车)
- 创建一个逻辑向量:4缸车为
-
mpg ~ I(cyl == 4)- 公式形式:将mpg按上述分组进行比较
-
实际比较的是:
- 组1:4缸车 (TRUE)
- 组2:6缸车 + 8缸车 (FALSE)
注意
这不是真正的"4缸 vs 6缸车"比较,因为:
- 包含了8缸车在第二组中
- 实际上比较的是"4缸车 vs 非4缸车"
修改(4缸 vs 6缸车)
方法1:筛选数据
# 只保留4缸和6缸车
data_46 <- mtcars[mtcars$cyl %in% c(4, 6), ]
t.test(mpg ~ cyl, data = data_46)
方法2:使用subset参数
t.test(mpg ~ cyl, data = mtcars, subset = cyl %in% c(4, 6))
方法3:直接向量比较
mpg_4 <- mtcars$mpg[mtcars$cyl == 4]
mpg_6 <- mtcars$mpg[mtcars$cyl == 6]
t.test(mpg_4, mpg_6)
结果差异
- 原代码:比较4缸车 vs (6缸+8缸车),两组样本量差异大
- 修改后代码:只比较4缸车 vs 6缸车,结果更准确
验证示例
# 查看各组数量
table(mtcars$cyl)
# 4 6 8
# 11 7 14 # 原代码的分组
table(I(mtcars$cyl == 4))
# FALSE TRUE
# 21 11 # 修改后的分组(只包含4和6缸)
table(mtcars$cyl[mtcars$cyl %in% c(4,6)])
# 4 6
# 11 7
t检验详解及R语言实现
什么是t检验?
t检验是一种统计假设检验方法,用于比较两个群体的均值是否存在显著差异。它基于t分布,适用于小样本情况。
t检验的三种主要类型
1. 单样本t检验
检验单个样本的均值是否与已知的总体均值有显著差异。
R语言代码:
# 生成示例数据
set.seed(123)
sample_data <- rnorm(30, mean = 100, sd = 15)# 单样本t检验:检验均值是否为100
t.test(sample_data, mu = 100)# 检验均值是否为105
t.test(sample_data, mu = 105)# 获取详细结果
result <- t.test(sample_data, mu = 100)
cat("t值:", result$statistic, "\n")
cat("p值:", result$p.value, "\n")
cat("置信区间:", result$conf.int, "\n")
cat("样本均值:", result$estimate, "\n")
2. 独立样本t检验
比较两个独立样本的均值是否有显著差异。
R语言代码:
# 生成两个独立样本
set.seed(123)
group1 <- rnorm(25, mean = 50, sd = 10)
group2 <- rnorm(30, mean = 55, sd = 10)# 基本独立样本t检验
t.test(group1, group2)# 假设方差相等
t.test(group1, group2, var.equal = TRUE)# 单侧检验(检验group1是否小于group2)
t.test(group1, group2, alternative = "less")# 使用数据框格式
data <- data.frame(value = c(group1, group2),group = rep(c("A", "B"), c(25, 30))
)
t.test(value ~ group, data = data)
3. 配对样本t检验
比较同一组受试者在两种不同条件下的差异。
R语言代码:
# 生成配对数据(如治疗前后)
set.seed(123)
before <- rnorm(20, mean = 70, sd = 8)
after <- before + rnorm(20, mean = 5, sd = 3) # 治疗后有所改善# 配对t检验
t.test(before, after, paired = TRUE)# 另一种写法:直接检验差值
difference <- after - before
t.test(difference, mu = 0)# 可视化配对数据
plot(1:20, before, type = "b", col = "red", ylim = c(60, 85),xlab = "受试者", ylab = "测量值", main = "治疗前后对比")
lines(1:20, after, type = "b", col = "blue")
legend("topright", legend = c("治疗前", "治疗后"), col = c("red", "blue"), lty = 1)
实际案例:mtcars数据集分析
案例1:不同气缸数的油耗比较
# 4缸 vs 8缸车的mpg比较
data_48 <- mtcars[mtcars$cyl %in% c(4, 8), ]
t.test(mpg ~ cyl, data = data_48)# 可视化
boxplot(mpg ~ cyl, data = data_48, main = "不同气缸数的油耗比较",xlab = "气缸数", ylab = "MPG")
案例2:自动挡 vs 手动挡的油耗
# 按变速箱类型分组
t.test(mpg ~ am, data = mtcars)# 添加分组标签
mtcars$transmission <- ifelse(mtcars$am == 0, "自动", "手动")
boxplot(mpg ~ transmission, data = mtcars,main = "变速箱类型对油耗的影响",xlab = "变速箱类型", ylab = "MPG")
t检验的假设条件
- 正态性:数据应近似正态分布
- 独立性:观测值之间相互独立
- 方差齐性:两独立样本的方差应相等(可使用方差齐性检验)
检验假设条件的R代码:
# 正态性检验
shapiro.test(mtcars$mpg)# 方差齐性检验
var.test(mpg ~ cyl, data = data_48)# 当方差不等时使用Welch校正
t.test(mpg ~ cyl, data = data_48, var.equal = FALSE)
非参数替代方法
当数据不满足t检验假设时,可以使用非参数检验:
# Wilcoxon秩和检验(Mann-Whitney U检验)
wilcox.test(mpg ~ cyl, data = data_48)# 配对样本的Wilcoxon符号秩检验
wilcox.test(before, after, paired = TRUE)
结果解释要点
- p值 < 0.05:拒绝原假设,认为均值存在显著差异
- 置信区间:如果不包含0,说明差异显著
- 效应量:衡量差异的大小程度
# 计算效应量(Cohen's d)
library(effectsize)
cohens_d(mpg ~ cyl, data = data_48)
注意事项
- 多重比较问题:进行多个检验时需要校正p值
- 样本量:小样本时检验效能较低
- 异常值:对异常值敏感,需要检查数据
- 实际意义:统计显著不等于实际重要
t检验是统计分析中的基础工具,正确理解和应用t检验对于数据分析和科学研究至关重要。
