从0开始学习R语言--Day40--Kruskal-Wallis检验

我们在处理小样本的数据时,常常会遇到一种问题便是,由于样本的数据量很少,到底是该手动对比以便更灵活地控制变量,还是用excel、status或R中的方法对其进行操作呢。事实上,有时候数据少并不意味着对比的工作量就少了,因为在对比时,即使是最小的两两对比,就算是5组也需要10次对比,这还是不出错的情况,且我们还需要一个对数据整体上的评估。

而选择Kruskal-Wallis检验不仅可以有效地规避由于离散值带来的问题,还能解决样本过少,不符合正态假设,统计不稳定的假设难以得出评估的问题。

以下是一个例子:

R 复制代码
# 生成模拟数据集
set.seed(123)
group1 <- rnorm(30, mean = 50, sd = 10)
group2 <- rnorm(30, mean = 55, sd = 12)
group3 <- rnorm(30, mean = 65, sd = 15)
group4 <- rlnorm(30, meanlog = 3, sdlog = 0.5) # 非正态分布数据

# 创建数据框
data <- data.frame(
  value = c(group1, group2, group3, group4),
  group = factor(rep(c("A", "B", "C", "D"), each = 30)))

# 查看数据摘要
summary(data)

# 绘制箱线图
boxplot(value ~ group, data = data, 
        main = "各组数据分布比较",
        xlab = "组别", ylab = "测量值")

# 执行Kruskal-Wallis检验
kruskal_result <- kruskal.test(value ~ group, data = data)
print(kruskal_result)

# 如果总体检验显著,可以进行事后两两比较
if(kruskal_result$p.value < 0.05) {
  # 使用Dunn检验进行事后比较
  if(!require(dunn.test)) install.packages("dunn.test")
  library(dunn.test)
  
  dunn_result <- dunn.test(data$value, data$group, method = "bonferroni")
  print(dunn_result)
  
  # 或者使用pairwise.wilcox.test
  pairwise_result <- pairwise.wilcox.test(data$value, data$group, 
                                          p.adjust.method = "BH")
  print(pairwise_result)
}

输出:

R 复制代码
	Pairwise comparisons using Wilcoxon rank sum exact test 

data:  data$value and data$group 

  A       B       C      
B 0.0067  -       -      
C 1.8e-06 0.0067  -      
D 7.3e-12 2.3e-13 3.8e-14

P value adjustment method: BH 

从结果来看,每组比较都是比较显著,差异最大的是CD组,从整体来看,D组和其他组的差异较大。

相关推荐
APIshop6 小时前
Java爬虫1688详情api接口实战解析
java·开发语言·爬虫
hssfscv6 小时前
Javaweb 学习笔记——html+css
前端·笔记·学习
Mr.Jessy6 小时前
JavaScript高级:深浅拷贝、异常处理、防抖及节流
开发语言·前端·javascript·学习
bing.shao6 小时前
Golang 高并发秒杀系统踩坑
开发语言·后端·golang
liwulin05066 小时前
【PYTHON-YOLOV8N】关于YOLO的推理训练图片的尺寸
开发语言·python·yolo
博客胡7 小时前
Python-fastAPI的学习与使用
学习·fastapi·ai编程
HyperAI超神经7 小时前
【Triton 教程】triton_language.load
人工智能·学习·大语言模型·cpu·gpu·编程语言·triton
lsx2024067 小时前
C语言中的强制类型转换
开发语言
coderHing[专注前端]7 小时前
告别 try/catch 地狱:用三元组重新定义 JavaScript 错误处理
开发语言·前端·javascript·react.js·前端框架·ecmascript
知识分享小能手7 小时前
Ubuntu入门学习教程,从入门到精通,Linux操作系统概述(1)
linux·学习·ubuntu