R:Wilcoxon秩和检验
Wilcoxon秩和检验,也被称为Mann-Whitney U检验,是一种非参数统计检验方法,用于比较两组独立样本的中位数是否显著不同。这个检验适用于以下情况:
-
数据分布不满足正态分布假设:与某些参数统计检验(如t检验)不同,Wilcoxon秩和检验不要求数据满足正态分布假设。因此,它适用于那些数据分布不明确或偏离正态分布的情况。
-
方差齐性假设不成立:与一些其他统计检验(如方差分析)不同,Wilcoxon秩和检验也不要求样本的方差相等。
-
两组数据是独立的:这个检验通常用于比较两组不相关的样本,例如,两组不同的治疗组的病人数据。
具体的Wilcoxon秩和检验步骤如下:
-
将两组数据合并并按大小顺序排列,同时记录每个数据的来源组。
-
为每个数据点分配一个秩次,这些秩次是数据在合并数据中的相对大小顺序。如果有秩次相同的数据,则取其平均秩。
-
对于每组数据,计算其秩和,即将该组数据中的所有秩次相加。
-
比较两个秩和(通常称为U1和U2),并使用统计方法来评估它们是否显著不同。这个统计检验的结果会产生一个p值,该p值表示两组数据中的中位数是否存在显著差异。
如果p值小于显著性水平(通常设置为0.05),则可以拒绝原假设,认为两组数据的中位数存在显著差异。如果p值大于显著性水平,则不能拒绝原假设,即无法确定两组数据的中位数是否显著不同。
Wilcoxon秩和检验是一种有力的工具,适用于分析非正态分布的数据,特别是在小样本情况下。它被广泛用于生物统计学、社会科学、医学研究和其他领域的数据分析中。
# 设置工作目录到指定路径
setwd("C:\\Users\\Administrator\\Desktop")
# 加载doBy库,它提供了许多数据分析功能
library(doBy)
# 从文件'otu_table2.txt'中读取基因数据
gene <- read.table('otu_table2.txt', sep = '\t', row.names = 1, header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
# 从文件'metadata3-1.txt'中读取样本分组数据
group <- read.table('metadata3-1.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
# 初始化一个空的结果数据框
result <- NULL
# 遍历gene数据框的每一行
for (n in 1:nrow(gene)) {
# 从gene数据框提取第n行的数据并转置,以获得gene_n
gene_n <- data.frame(t(gene[n,]))
# 获取基因的名称(列名)
gene_id <- names(gene_n)[1]
names(gene_n)[1] <- 'gene'
# 添加样本名称列
gene_n$sample <- rownames(gene_n)
# 将gene_n与group数据框合并,基于sample列
gene_n <- merge(gene_n, group, by = 'sample', all.x = TRUE)
# 将group列转换为因子类型
gene_n$group <- factor(gene_n$group)
# 使用Wilcoxon检验测试基因的表达差异
p_value <- wilcox.test(gene~group, gene_n)$p.value
# 如果p值不是NA且小于0.05,则继续进行统计
if (!is.na(p_value) & p_value < 0.05) {
# 使用summaryBy函数计算每个组的基因表达均值和中值
stat <- summaryBy(gene~group, gene_n, FUN = c(mean, median))
# 将统计结果添加到结果数据框
result <- rbind(result, c(gene_id, as.character(stat[1,1]), stat[1,2], stat[1,3], as.character(stat[2,1]), stat[2,2], stat[2,3], p_value))
}
}
# 将result转换为数据框并命名其列
result <- data.frame(result)
names(result) <- c('gene_id', 'group1', 'mean1', 'median1', 'group2', 'mean2', 'median2', 'p_value')
# 使用BH方法进行p值校正
result$p_adjust <- p.adjust(result$p_value, method = 'BH')
# 将结果数据框保存到文件'table.l5.relative-SE.wilcox.txt'
write.table(result, 'table.l5.relative-SE.wilcox.txt', sep = '\t', row.names = FALSE, quote = FALSE)
上面的代码输出的文件只保留显著相关,如果不想只保留显著相关,可以试试下面的代码
setwd("C:\\Users\\Administrator\\Desktop")
library(doBy)
gene <- read.table('otu_table2.txt', sep = '\t', row.names = 1, header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
group <- read.table('metadata3-1.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
# 初始化结果数据框
result <- data.frame(
gene_id = rownames(gene),
group1 = NA,
mean1 = NA,
median1 = NA,
group2 = NA,
mean2 = NA,
median2 = NA,
p_value = NA,
stringsAsFactors = FALSE
)
for (n in 1:nrow(gene)) {
gene_n <- data.frame(t(gene[n,]))
gene_id <- names(gene_n)[1]
names(gene_n)[1] <- 'gene'
gene_n$sample <- rownames(gene_n)
gene_n <- merge(gene_n, group, by = 'sample', all.x = TRUE)
gene_n$group <- factor(gene_n$group)
p_value <- wilcox.test(gene~group, gene_n)$p.value
stat <- summaryBy(gene~group, gene_n, FUN = c(mean, median))
result[n, ] <- c(gene_id, as.character(stat[1,1]), stat[1,2], stat[1,3], as.character(stat[2,1]), stat[2,2], stat[2,3], p_value)
}
result$p_adjust <- p.adjust(result$p_value, method = 'BH')
write.table(result, 'table.l5.relative-SE.wilcox.txt', sep = '\t', row.names = FALSE, quote = FALSE)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)