从0开始学习R语言--Day21--Kruskal-Wallis检验与Friedman检验

Kruskal-Wallis检验

Kruskal-Wallis检验一般用于比较常见的比较三个群体的水平,比如我们有一班、二班、三班的语文成绩,我们将三个班的学生成绩混合在一起进行排名,也就是我们平时所说的级排名。进一步通过计算班级的平均级排名来判断班级之间的班级水平,这个方法要求数据之间要独立分布,即不要有类似三个班之间会有互相辅导的情况,不互相影响。

Friedman检验

Friedman检验同样用于检验水平,但比较倾向于检验不同时期的水平,比如有甲乙丙三人的期中、期末、模拟考成绩,假设只看成绩来判断,分别用成绩计算每个学生自己三个时期成绩排名(纵向对比,排名在学生个人内部),并计算每个时期的学生平均排名,就可以得到在每个时期学生的水平是否有进步。注意,这里很容易有个误区是理解为进行学生之间的对比,那样得到的是哪个学生更厉害,我们需要观察不是与外界比较,而是自己与自己对比。

分别举一个例子来说明:

library(dplyr)

# 生成数据:3个班级的成绩
classes <- data.frame(
  class = rep(c("A", "B", "C"), each = 3),
  score = c(78, 85, 90, 55, 68, 72, 92, 88, 95)
)

# 查看全局排名(验证!)
classes$global_rank <- rank(classes$score)  # 55排1,68排2,...,95排9

# 计算各班平均排名
classes %>%
  group_by(class) %>%
  summarise(mean_rank = mean(global_rank))

# 运行Kruskal-Wallis检验
kruskal.test(score ~ class, data = classes)

# 生成数据:3个学生的3次考试成绩
students <- data.frame(
  student = rep(1:3, each = 3),
  exam = rep(c("期中", "期末", "模拟考"), times = 3),
  score = c(80, 85, 78, 70, 72, 68, 90, 88, 92)
)

# 查看每个学生的内部排名(验证!)

students %>%
  group_by(student) %>%
  mutate(rank = rank(score))  # 学生甲:期末(1), 期中(2), 模拟考(3)

# 运行Friedman检验
friedman.test(score ~ exam | student, data = students)

输出:

	Kruskal-Wallis rank sum test

data:  score by class
Kruskal-Wallis chi-squared = 6.4889, df = 2, p-value = 0.03899

	Friedman rank sum test

data:  score and exam and student
Friedman chi-squared = 0.66667, df = 2, p-value = 0.7165

从结果可以看到Kruskal-Wallis的p值小于0.05,结果有一定的可信度,3个班级的数学成绩分布存在显著差异(至少有一个班级与其他不同);而Friedman的p值大于0.05,所以同一批学生在3次考试(期中、期末、模拟考)中的成绩变化没有差异。

### 如何在 R 语言中实现 Kruskal-Wallis 检验 #### 函数说明 `kruskal.test()` 是 R 中 `stats` 包提供的一个函数,用于执行 Kruskal-Wallis 秩和检验。该检验是非参数统计方法的一种,旨在比较多个独立样本的中位数是否相等[^2]。 #### 原假设备择假设 - **原假设 (H₀)**:多个组的中位数相等。 - **备择假设 (H₁)**:至少有一组的中位数其他组不同[^3]。 #### 数据准备 为了演示如何使用 `kruskal.test()` 进行 Kruskal-Wallis 检验,考虑如下数据集: ```r df <- data.frame( group = rep(c('A', 'B', 'C'), each = 10), height = c(7, 14, 14, 13, 12, 9, 6, 14, 12, 8, 15, 17, 13, 15, 15, 13, 9, 12, 10, 8, 6, 8, 8, 9, 5, 14, 13, 8, 10, 9) ) head(df) # 查看前六行数据 ``` 这段代码创建了一个名为 `df` 的数据框,包含了来自三个不同肥料组 (`group`) 下植物的高度测量值 (`height`)。每组有十个观测值[^5]。 #### 执行 Kruskal-Wallis 检验 接下来展示如何调用 `kruskal.test()` 来测试这三组之间的高度是否有显著差异: ```r result <- kruskal.test(height ~ group, data = df) print(result) ``` 上述命令通过指定公式 `height ~ group` 和提供给定的数据帧 `data=df` 调用了 Kruskal-Wallis 测试。最终的结果被存储到变量 `result` 并打印出来显示 p-value 及其他信息[^1]。 #### 解读结果 输出通常会给出卡方统计量(Chi-squared statistic)、自由度(degrees of freedom)以及 P 值(p-value)。如果 P 值小于设定的显著水平(通常是 0.05),则拒绝原假设,认为各组间的中位数存在显著差异;反之,则无法拒绝原假设,即没有足够的证据表明这些组之间存在明显区别[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值