lundi 3 novembre 2014

Imposer les axes d'un plot sur R avec la commande axis()

Il est parfois utile de pouvoir imposer les valeurs des axes à R.
Pour cela, il faut appeler le plot de la manière habituelle, avec axes=False avant de créer les axes

#Quelques valeurs pour le plot
a=c(32,40,43,46,47)
b=c(-0.25,0.27,0.52,0.85,0.75)

#Plot des valeurs sans les axes
plot(b~a,axes=F,xlab="Nom de l'axe 1",ylab="Nom de l'axe 2")

#Ajout des axes avec les valeurs exactes de a et de b
axis(1, a)
axis(2, b)

Noter que l'on peut choisir d'autres valeurs en créant d'autres vecteurs, la commande seq() est pratique pour cela.


#On replote pour l'exemple, on ajoute l'axe 2 comme précédemment
plot(b~a,axes=F,xlab="Nom de l'axe 1",ylab="Nom de l'axe 2")
axis(2, b)

#Puis on affiche pour l'axe 1 les valeurs comprises entre 32 et 47 avec un pas de 1 : seq(from = 32, to = 47, by = 1)
axis(1, seq(32,47,1))

Pour plus de détails sur l'option seq(), il suffit de consulter l'aide comme d'habitude en tapant dans R:

?seq

vendredi 18 juillet 2014

Tests par permutation sous R

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.