Lorsque des effectifs statistiques sont suffisants et suivent une loi normale, on peut utiliser des tests dits "paramétriques" comme le test de Student (t.test()).
Lorsque les effectifs sont insuffisants ou ne suivent pas de loi normale, il est possible d'utiliser des tests dits "non paramétriques". Cependant, il existe également des biais et des conditions liés à ces tests statistiques. En effet, s'il existe des données qui ont la même valeur dans le jeu de données, ces valeurs sont ex aequo lors de l'analyse réalisée par les tests de Mann-Whitney-U-Test (wilcox.test(x;y;paired=false)) et de Wilcoxon (wilcox.test(x;y;paired=true)). L'impact de ces ex aequo sur la valeur statistique peut être assez importante pour modifier la p-value et mener à une mauvaise conclusion.
De même, pour effectuer ces tests, même s'il n'est pas nécessaires que les distributions soient normales, il faut qu'elles soient similaires entre les deux distributions comparées.
Que faire alors lorsque l'on a un nombre trop important d'ex aequo et que les jeux de données ont des distributions différentes? R contient des packages permettant de réaliser des tests de permutations. Ces fonctions effectuent des rééchantillonnages (9999 par défaut) selon une Méthode de Monte-Carlo pour tester l'égalité de deux (ou k) distributions.
La fonction perm.test() du package exactRankTests permettait de réaliser très simplement ce test, cependant ce package n'est plus mis à jour. Il a été remplacé par la librairie coin et par la fonction oneway_test() qui s'utilise ainsi (pour deux échantillons):
# pour charger la librairie, il vous faudra peut-être l'installer avant dans R
library(coin)
# vos valeurs du premier échantillon (remplacez rnorm() par vos données, par exemple
c("valeur1","valeur2",...,"valeurN"))
testgroup=rnorm(20,7,0.5)
# vos valeurs du deuxième échantillon (remplacez rnorm() par vos données)
controlgroup=rnorm(20,4,2)
# un objet regroupant les valeurs de x et y
list = c(testgroup,controlgroup)
# pour créer autant de labels "A" qu'il y a de valeurs dans x, et autant de labels "B" qu'il y a de valeurs dans y
noms = factor(rep(c("A", "B"), c(length(testgroup), length(controlgroup))))
# pour effectuer le test, R compare les deux échantillons en rattachant chaque donnée de "list" à A ou B en fonction de ce qui est contenu dans "noms"
boxplot(list~noms)
oneway_test(list ~ noms)
Vous trouverez des compléments d'information
ici, en anglais.