Maintenant que vous utilisez R régulièrement, je suis certaine que vous avez remarqué que, parfois, R vous parle. Lorsque vous faites quelque chose d’erroné, R répond avec un message écrit en rouge dans la console.
Combien d’entre vous lisent réellement ces messages d’erreur? Si vous prenez le temps de les lire attentivement, vous verrez qu’ils vous informent du problème survenu. Prenons cet exemple:
> sum(c('1','3','4','4'))
Error in sum(c("1", "3", "4", "4")) :
invalid 'type' (character) of argument
R vous indique quelle expression a causé l’erreur avant de vous fournir une explication. Dans cet exemple, le type de l’argument, plus précisément le type caractère, est invalide. Vous ne pouvez pas faire la somme d’une liste de caractères.
Remarquez le mot-clé « Error » au début du message. Quand R rencontre une erreur, le code n’est pas exécuté. C’est plutôt difficile à ignorer! Vous êtes obligé de corriger l’expression fautive!
Toutefois, vous rencontrerez parfois des messages d’avertissement, « Warnings ». Ces messages ne sont pas liés à des erreurs critiques et dans ces cas-là, le code est exécuté même si quelque chose est incorrect.
> mean(c('1','3','4','4'))
[1] NA
Warning message:
In mean.default(c("1", "3", "4", "4")) :
argument is not numeric or logical: returning NA
Encore une fois, combien d’entre vous lisent réellement les messages d’avertissements? C’est tentant de les trouver dérangeant et de les ignorer. Particulièrement lorsqu’ils sont nombreux. En effet, quand il y a 50 avertissements ou plus, R ne les affiche pas directement. Il affiche plutôt un message vous avisant qu’il y avait des avertissements et vous suggère d’utiliser la commande/fonction warnings()
pour les afficher.
Il est alors important de les consulter pour décider s’il faut corriger ou non le code qui les a causés. Si vous ne le faites pas, vous ne saurez pas si le résultat retourné est bon ou pas.
Laissez-moi vous présentez un cas auquel j’ai été confrontée plusieurs fois cet été. Quand vous voulez comparez deux groupes (deux vecteurs de données) et que vous ne pouvez dire si les données proviennent de population à distribution normale, l’utilisation d’un test statistique non paramétrique est approprié. Le test de la somme des rangs de Wilcoxon (aussi connu comme le test U de Mann-Withney ou test de Wilcoxon-Mann-Whitney) permet de savoir si deux vecteurs d’observations indépendantes proviennent ou non de la même distribution. Ce test se base sur l’ordonnancement des valeurs des deux vecteurs : si les deux vecteurs proviennent de la même distribution, aucun motif ne sera observable. Par contre, s’ils proviennent de deux distributions différentes, un motif sera perceptible.
Observations du groupe A: | 4 | 8 | 9 | 10 | 5 | 11 |
Observations du groupe B: | 1 | 3 | 5 | 8 | 6 | 9 |
Les valeurs sont ordonnées et un rang leur est attribué. La moyenne du rang est utilisée lorsque l’on se retrouve avec des doublons. La somme des rangs est ensuite effectuée.
Groupe : | B | B | A | B | A | B | A | B | B | A | A | A |
Observations : | 1 | 3 | 4 | 5 | 5 | 6 | 8 | 8 | 9 | 9 | 10 | 11 |
Rang : | 1 | 2 | 3 | 4.5 | 4.5 | 6 | 7.5 | 7.5 | 9.5 | 9.5 | 11 | 12 |
wA = 3+4.5+7.5+9.5+11+12 = 47.5
wB = 1+2+4.5+6+7.5+9.5 = 30.5
Ces valeurs sont ensuite utilisées pour évaluer si l’hypothèse nulle est vraie ou fausse.
Dans R, la fonction wilcox.test()
retourne le résultat suivant:
Wilcoxon rank sum test with continuity correction
data: x and y
W = 26.5, p-value = 0.1978
alternative hypothesis: true location shift is not equal to 0
Warning message:
In wilcox.test.default(x, y) : cannot compute exact p-value with ties
On obtient une p-value, mais elle est dérivée d’une approximation normale. Avec un nombre peu élevé de données par groupe, cela peut mener à des estimations douteuses. Qu’à cela ne tienne, vous avez été avertis![/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]
Tellement vrai que je suis un adepte de la conversion des warnings en erreur.
En C++: -Werror et -Wpedantic en tout temps!
En R (si j’en faisais) j’ajouterais: options(warn=2)
Il y a des inconvénients, mais si peu comparé aux avantages…sujet à débat!