在进行两组数据间的差异分析时,我们通常会想到使用t检验。但若数据不满足执行t检验的参数假设(例如数据分布不符合正态性,变量在本质上就严重偏倚或呈现有序关系),无法使用t检验分析时,可以考虑使用非参数的方法来完成。
就两组数据的比较而言,wilcox秩和检验(或称Mann-Whitney U检验)是常见的非参数检验方法之一。本文简介怎样在R中进行wilcox秩和检验,以实现两组间非参数差异分析。
已知group3的shannon指数数据分布并不符合正态性,此时,若我们想比较group2和group3的shannon指数间是否存在显著差异,就不适合使用t检验(暂且不考虑对数据进行合理的转化后是否会满足t检验的参数假设),可采用非参数的方法(本文中介绍使用wilcox秩和检验)去实现。
数据预处理及正态性假设检验
首先将上述两个数据表读入R中,并合并在一起,以及数据的正态分布检验。
library(reshape2)
#读入文件,合并分组信息,数据重排
alpha <- read.table('alpha.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
group <- read.table('group.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
alpha <- melt(merge(alpha, group, by = 'sample'), id = c('sample', 'group'))
#选择要比较的分组(此处查看 group2 与 group3 在 shannon 指数上是否存在显著差异)
shannon_23 <- subset(alpha, variable == 'shannon' & group %in% c('2', '3'))
shannon_23$group <- factor(shannon_23$group)
head(shannon_23, 10)
tapply(shannon_23$value, shannon_23$group, shapiro.test)
$`2`
Shapiro-Wilk normality test
data: X[[i]]
W = 0.89411, p-value = 0.2554
$`3`
Shapiro-Wilk normality test
data: X[[i]]
W = 0.78386, p-value = 0.01918
通过Shapiro-Wilk检验得知数据分布不满足正态性。这里p值小于0.05表明数据违背了正态性分布的零假设。
wilcox秩和检验
不符合正态性前提的数据,无法应用t检验去比较差异。我们考虑使用非参数的方法作为替代,对于两组数据的比较,可使用wilcox秩和检验。类似于t检验,根据样本间是否独立,分为wilcox秩和检验以及wilcox符号秩和检验。
wilcox秩和检验
##wilcox 秩和检验,我们执行了一个双侧检验 样本间相互独立
wilcox_test <- wilcox.test(value~group, shannon_23, paired = FALSE, alternative = 'two.sided')
wilcox_test
wilcox_test$p.value
0.002952603
由于p值(约为0.003)小于0.05,即拒绝了原假设(原假设两组间没有差异),group2和group3的shannon指数间存在显著不同。
##wilcox 符号秩和检验,我们执行了一个双侧检验 样本间并非相互独立
wilcox_test <- wilcox.test(value~group, shannon_23, paired = TRUE, alternative = 'two.sided')
wilcox_test
wilcox_test$p.value
0.0390625
根据p值(0.039,低于0.05)可知group2和group3的shannon指数间存在显著不同。
可视化展示
考虑作图将两组差异进行可视化展示。例如,一个简单的箱线图示例。
#作图示例
#boxplot() 箱线图
boxplot(value~group, data = shannon_23, col = c('blue', 'orange'), ylab = 'Shannon', xlab = 'Group', main = 'wilcox test: p-value = 0.00295')