Comparing the Wilcoxon-Mann-Whitney to alternative statistical tests

In this document, we show that the Wilcoxon-Mann-Whitney test is comparable or superior to alternative methods.

Two alternative methods could be compared with the Wilcoxon-Mann-Whitney (WMW) test proposed by BioQC: the Kolmogorov-Smirnov (KS) test, and the Student’s t-test, or more particularly, the Welch’s test which does not assume equal sample number or equal variance, which is appropriate in the setting of gene expression studies.

  1. It is documented in statistics literature that the WMW test offers a higher power than the Kolmogorov-Smirnov test1,2.
  2. Compared with parameterized test methods such as the t-test, the WMW test is (a) resistance to monotone transformation, (b) suffers less from outliers, and (c) provides higher efficiency when many genes are profiled and the distribution of gene expression deviates from the normal distribution, which are important criteria in genome-wide expression data.

Based on these considerations, BioQC implements a computationally efficient version of the WMW test. In order not to confuse end-users, no alternative methods are implemented.

Nevertheless, in order to demonstrate the power of WMW test in comparison with the KS-test or the t-test, we performed the sensitivity benchmark described in the simulation studies, for the two alternative tests respectively.

**Figure 1:** Sensitivity benchmark. Expression levels of genes in the ovary signature are dedicately sampled randomly from normal distributions with different mean values. The lines show the enrichment score for the Wilcoxon-Mann-Whitney test, the t-test and the Kolmogorov-Smirnov test respectively. In the right panel, outliers were added by adding a random value to 1% of the simulated genes.

Figure 1: Sensitivity benchmark. Expression levels of genes in the ovary signature are dedicately sampled randomly from normal distributions with different mean values. The lines show the enrichment score for the Wilcoxon-Mann-Whitney test, the t-test and the Kolmogorov-Smirnov test respectively. In the right panel, outliers were added by adding a random value to 1% of the simulated genes.

As expected, the results suggest, that both the KS-test and the WMW-test are robust to noise, while the performance of the t-test drops significantly on noisy data. Additionally, the WMW-test appears to be superior to the KS-test for low expression differences.

Computational Performance

Since the KS-test is so slow, we did not replicate the sensitivity benchmark from the simulation studies using the enrichment score rank. While it takes BioQC about 3 seconds on a single thread to test all 155 signatures, it already takes the KS-test about 2 seconds to test a single signature.

##       test replications elapsed relative
## 2  runKS()            5   8.132    1.000
## 1 runWMW()            5  14.358    1.766

R Session Info

sessionInfo()
## R version 4.4.1 (2024-06-14)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: Etc/UTC
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats4    stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] ggplot2_3.5.1         plyr_1.8.9            reshape2_1.4.4       
##  [4] hgu133plus2.db_3.13.0 rbenchmark_1.0.0      gplots_3.2.0         
##  [7] gridExtra_2.3         latticeExtra_0.6-30   lattice_0.22-6       
## [10] org.Hs.eg.db_3.20.0   AnnotationDbi_1.69.0  IRanges_2.39.2       
## [13] S4Vectors_0.43.2      testthat_3.2.1.1      limma_3.61.12        
## [16] RColorBrewer_1.1-3    BioQC_1.35.0          Biobase_2.65.1       
## [19] BiocGenerics_0.51.3   knitr_1.48            rmarkdown_2.28       
## 
## loaded via a namespace (and not attached):
##  [1] farver_2.1.2            blob_1.2.4              Biostrings_2.73.2      
##  [4] bitops_1.0-9            fastmap_1.2.0           digest_0.6.37          
##  [7] lifecycle_1.0.4         statmod_1.5.0           KEGGREST_1.45.1        
## [10] RSQLite_2.3.7           magrittr_2.0.3          compiler_4.4.1         
## [13] rlang_1.1.4             sass_0.4.9              tools_4.4.1            
## [16] utf8_1.2.4              yaml_2.3.10             labeling_0.4.3         
## [19] interp_1.1-6            bit_4.5.0               pkgload_1.4.0          
## [22] KernSmooth_2.23-24      withr_3.0.2             sys_3.4.3              
## [25] desc_1.4.3              grid_4.4.1              fansi_1.0.6            
## [28] caTools_1.18.3          colorspace_2.1-1        edgeR_4.3.21           
## [31] scales_1.3.0            gtools_3.9.5            cli_3.6.3              
## [34] crayon_1.5.3            httr_1.4.7              DBI_1.2.3              
## [37] cachem_1.1.0            stringr_1.5.1           zlibbioc_1.51.2        
## [40] XVector_0.45.0          vctrs_0.6.5             jsonlite_1.8.9         
## [43] bit64_4.5.2             jpeg_0.1-10             maketools_1.3.1        
## [46] locfit_1.5-9.10         jquerylib_0.1.4         glue_1.8.0             
## [49] stringi_1.8.4           gtable_0.3.6            GenomeInfoDb_1.41.2    
## [52] deldir_2.0-4            UCSC.utils_1.1.0        munsell_0.5.1          
## [55] tibble_3.2.1            pillar_1.9.0            htmltools_0.5.8.1      
## [58] brio_1.1.5              GenomeInfoDbData_1.2.13 R6_2.5.1               
## [61] rprojroot_2.0.4         evaluate_1.0.1          highr_0.11             
## [64] png_0.1-8               memoise_2.0.1           bslib_0.8.0            
## [67] Rcpp_1.0.13             xfun_0.48               buildtools_1.0.0       
## [70] pkgconfig_2.0.3

References


  1. Irizarry, Rafael A., et al. “Gene set enrichment analysis made simple.”Statistical methods in medical research 18.6 (2009): 565-575.↩︎

  2. Filion, Guillaume J. “The signed Kolmogorov-Smirnov test: why it should not be used.” GigaScience 4.1 (2015): 1.↩︎