两组间差异的非参数检验之wilcox秩和检验在R中实现

在进行两组数据间的差异分析时,我们通常会想到使用t检验。但若数据不满足执行t检验的参数假设(例如数据分布不符合正态性,变量在本质上就严重偏倚或呈现有序关系),无法使用t检验分析时,可以考虑使用非参数的方法来完成。
就两组数据的比较而言,wilcox秩和检验(或称Mann-Whitney U检验)是常见的非参数检验方法之一。本文简介怎样在R中进行wilcox秩和检验,以实现两组间非参数差异分析。

wide_data=read.csv('wide_data.txt',sep = " ")

shannon_2 shannon_3
9.716 10.025
9.615 9.811
9.611 9.808
9.797 9.686
9.745 9.802
9.605 9.748
9.406 9.806
9.732 9.799


wilcox_test <- wilcox.test(wide_data$shannon_2,wide_data$shannon_3)#宽数据数据形式
wilcox_test
## 
##  Wilcoxon rank sum test
## 
## data:  wide_data$shannon_2 and wide_data$shannon_3
## W = 5, p-value = 0.002953
## alternative hypothesis: true location shift is not equal to 0
wilcox_test$p.value
## [1] 0.002952603

注意
虽然wilcox检测不需要考虑方差齐性,但是作为非参数检测,其计算出的P值较t.test.偏大,有时候t.test很显著,但是wilcox检测可能不显著,使用时候要注意!此外,wilcox检测比较适合重复很多的样本,比如10个以上的,这样检测效果比较准确!

For循环批量计算p值,这里只考虑了两组生物学重复的

> data=read.csv('total.csv')
> data#查看数据
  WT WT.1 Mut Mut.1
1 12   13  23    22
2 12   14  33    32
3 15   13  40    39
4 21   23  23    22
> p_value=c() #设置一个空数组用于储存p值
> for (i in 1:nrow(data))
+ {
+   data_new<-melt(data[i,])
+   data_new$variable=as.factor(data_new$variable)
+   
+   data_new$variable<-c("WT","WT","Mu","Mu")
+   P=wilcox.test(value~variable,data_new)
+   p_value[i]=P$p.value
+   p_value[i]<- round(p_value[i],3) #设置小数点位数
+ }
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
No id variables; using all as measure variables
Warning message:
In wilcox.test.default(x = 23:22, y = c(21L, 23L)) :
  无法精確計算带连结的p值
> data<-data.frame(data,p_value) #添加p值到数据最后一列
> data
  WT WT.1 Mut Mut.1 p_value
1 12   13  23    22   0.333
2 12   14  33    32   0.333
3 15   13  40    39   0.333
4 21   23  23    22   1.000
>

转载本文请联系原作者获取授权,同时请注明本文来自刘尧科学网博客。
链接地址:http://blog.sciencenet.cn/blog-3406804-1172341.html

你可能感兴趣的:(两组间差异的非参数检验之wilcox秩和检验在R中实现)