Références

Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, Winston Chang, and Richard Iannone. 2022. Rmarkdown: Dynamic Documents for r.
R Core Team. 2021. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.

  1. Il existe tout de même des outils plus pointus pour obtenir de l’aide sur le logiciel R comme rseek.org, rdocumentation.org ou rdrr.io. Rien ne sert de chercher ’R’ dans Google.↩︎

  2. Dans R, une formule permet de spécifier les variables avec lesquelles on souhaite travailler, et leur rôle. Par exemple ici, la variable x sur l’axe des abscisses et la variable y sur l’axe des ordonnées.↩︎

  3. Pour les proportions (prop) ou les pourcentages (perc) (valeurs bornées entre 0 et 1 ou 0 et 100%) la transformation arc-sinus est souvent utilisée : \(prop′ = \arcsin \sqrt{prop}\) ou \(perc′ = \arcsin \sqrt{perc / 100}\).↩︎

  4. La distribution des données en statistique se réfère à la fréquence avec laquelle les différentes valeurs d’une variable s’observent.↩︎

  5. Une variable numérique est découpée en classes en spécifiant différents intervalles, et ensuite en dénombrant le nombre de fois que les observations rentrent dans ces classes.↩︎

  6. Les modes d’un histogramme correspondent à des classes plus abondantes localement, c’est-à-dire que les classes à gauche et à droite du mode comptent moins d’occurrences que lui.↩︎

  7. Un histogramme est dit symétrique lorsque son profil à gauche est identique ou très similaire à son profil à droite autour d’un mode.↩︎

  8. Une variable sera considérée comme qualitative ou facteur, si elle possède moins d’une dizaine de niveaux pour fixer les idées, mais il n’existe pas de limite stricte entre une variable numérique quantitative et facteur qualitative, en réalité. C’est à votre appréciation, mais aussi en fonction du contexte.↩︎

  9. Attention : le jeu de donnée iris est un grand classique dans R, mais lorsqu’il est chargé à l’aide de la fonction read() du package data.io, le nom de ses variables est modifié pour suivre la convention “snake-case” qui veut que seules des lettres minuscules soient utilisées et que les mots soient séparés par un trait souligné _. Ainsi, dans le jeu de données d’origine, les variables sont nommées Petal.Length ou Species. Ici, ces mêmes variables se nomment petal_length et species.↩︎

  10. Astuce proposée ici.↩︎

  11. L’opération effectuée pour passer d’un histogramme à une courbe de densité consiste effectivement à lisser les pics plus ou moins fortement dans l’histogramme de départ.↩︎

  12. Notez que, lorsque la coupure tombe entre deux observations, une valeur intermédiaire est utilisée. Ici par exemple, le premier quartile est entre 53 et 55, donc, il vaut 54. Le troisième quartile se situe entre 78 et 82. Il vaut donc 80.↩︎

  13. Il est possible de modifier la transparence des points et/ou de les déplacer légèrement vers la gauche ou vers la droite de manière aléatoire pour résoudre le problème de chevauchement des points sur un graphique en nuage de points univarié.↩︎

  14. La fonction give_n() est une fonction personnalisée que nous avons écrite nous-même. Elle positionne du texte y= 10% plus haut que le max(x), et ce texte est length(x), la longueur du vecteur qui correspond au nombre d’observations pour x (xétant utilisé en interne par le moteur graphique). Il est possible, et même assez facile, dans R d’écrire ses propres fonctions. Néanmoins cela dépasse du cadre du cours pour l’instant. Pour utiliser give_n() dans vos documents R Markdown, copiez simplement sa définition dans un chunk avant de l’utiliser comme c’est fait ici. Elle est aussi réutilisable plus loin dans le même R Markdown, une fois qu’elle est définie.↩︎

  15. Notez que plusieurs thèmes existent dans ggplot2. Il est facile d’en changer et de les personnaliser… mais c’est toujours appréciable d’avoir un rendu impeccable dès le premier essai.↩︎

  16. Étant donné l’abondante littérature écrite sur {ggplot2}, il est utile de pouvoir convertir des exemples {ggplot2} en graphiques chart(), si vous êtes convaincu par cette nouvelle interface.↩︎

  17. R permet également d’interroger des bases de données spécialisées, mais nous n’aborderons ce sujet spécifique qu’au cours de Science des Données Biologique 5 en Master 2.↩︎

  18. Si vous devez aussi accéder à vos données à partir d’autres langages comme Python, Java ou C++, utilisez un format commun reconnu par les différents logiciels. Le CSV fonctionne généralement bien, mais des formats binaires plus performants sont également disponibles. Parmi ces formats “inter-langages”, gardez un œil sur Apache Arrow très prometteur et avec une version pour R qui sera disponible prochainement.↩︎

  19. Notez que ceci ne constitue pas un échantillonnage correct par rapport à la population générale du Hainaut pour plusieurs raisons. (1) toutes les tranches d’âges ne sont échantillonnées de manière équivalente pour les raisons évoquées, (2) des liens génétiques existent au sein des familles, ce qui résulte en une non indépendance des observations entre elles, et (3) seule une sous-population constituée de personnes fréquentant l’université et de leur entourage a été échantillonnée. Cependant, dans le cadre de l’exercice, nous accepterons ces biais, tout en étant conscients qu’ils existent.↩︎

  20. Voyez ?select_helpers pour une panoplie de fonctions supplémentaires qui permettent une sélection “intelligente” des variables.↩︎

  21. L’ordre alphabétique qui fait également intervenir les caractères accentués diffère en fonction de la configuration du système (langue). L’état du système tel que vu par R pour le tri alphabétique est obtenu par Sys.getlocale("LC_COLLATE"). Dans la SciViews Box, ceci est toujours "en_US.UTF-8", ceci afin de rendre le traitement reproductible d’un PC à l’autre, qu’il soit en anglais, français, espagnol, chinois, ou n’importe quelle autre langue.↩︎

  22. Le lecteur intéressé pourra lire les différents articles suivants : more pipes in R, y compris les liens qui s’y trouvent, permet de se faire une idée de la diversité des opérateurs de chaînage dans R et de leur historique. Dot pipe présente l’opérateur %.>% du package {wrapr} très proche du nôtre et in praise of syntactic sugar explique ses avantages. Nous partageons l’idée que le “pipe de base” ne devrait pas modifier l’instruction de droite contrairement à ce que fait %>% de {magrittr}, et notre opérateur %>.% va en outre plus loin encore que %.>% dans la facilité de débogage du code chaîne.↩︎

  23. Le chaînage n’est cependant pas forcément plus facile à déboguer que la version avec variables intermédiaires. Le package {flow} propose la fonction debug_flow() à appeler directement après un plantage pour inspecter la dernière instruction qui a causé l’erreur, voir ?debug_flow.↩︎

  24. Utilisez cette option avec parcimonie : il vaut toujours mieux représenter un tableau comme … un tableau plutôt que comme une figure !↩︎

  25. Notez également que passer d’un tableau cas par variables à un tableau des fréquences d’occurrences se fait à l’aide de count().↩︎

  26. Une infection nosocomiale est une infection contractée dans un hôpital.↩︎

  27. En Europe, les données numériques concernant les personnes sont soumises à des règles strictes édictées dans le Règlement Général pour la Protection des Données ou RGPD en abrégé, en vigueur depuis le 25 mai 2018. Vous devez vous assurer de respecter ce règlement lors de la collecte et de l’utilisation de données relatives à des personnes. Pour les autres type de données, le droit d’auteur ou des copyrights peuvent aussi limiter votre champ d’action. Renseignez-vous !↩︎

  28. Les analyses métagénomiques coûtent très cher. Il est souvent impossible de faire des réplicats. Un seul échantillon d’ADN a donc été séquencé ici pour chaque communauté.↩︎

  29. Notez malgré tout que, à condition de bien en comprendre les implications, le format complémentaire peut se justifier dans une publication pour y présenter un tableau le plus lisible possible, ce qui est le cas ici. Mais pour les analyses, c’est le format qui correspond à un tableau cas par variables qui doit être utilisé.↩︎

  30. Plus la densité de probabilité est élevée, plus les évènements dans cette région du graphique sont probables.↩︎

  31. Si vous utilisez set.seed() prenez soin de spécifier toujours une valeur différente prise au hasard comme argument de la fonction !↩︎

  32. Le factoriel d’un nombre \(n\), noté \(n!\) est \(1 \times 2 \times 3 \times ... \times n\), avec \(0! = 1\).↩︎

  33. Comme il y a la même proportion d’hommes et de femmes porteurs, nous avons 1/20 des hommes et 1/20 des femmes qui sont porteurs. Nous formons des couples au hasard en piochant un homme dans la population masculine et une femme dans la population féminine de manière indépendante. Dans ce cas, nous obtenons un couple double porteur à une fréquence de 1/20 * 1/20 = 1/400.↩︎

  34. Sur 400 couples, 399 ont une probabilité d’engendrer des enfants sains (porteurs hétérozygotes ou non porteurs confondus) de 100%. A cela il faut ajouter un couple sur 400 qui aura une probabilité de 75% de faire des enfants non atteints car non homozygotes.↩︎

  35. Faites également le calcul manuellement à la calculatrice pour vérifier que vous avez bien compris.↩︎

  36. Les fonctions qui permettent les calculs relatifs à la distribution \(\chi^2\) dans R sont <x>chisq(), et les snippets correspondants dans la SciViews Box sont disponibles à partir de .ic. Leur utilisation est similaire à celle des distributions vues au module 7.↩︎

  37. Attention ! Vous devez fixer la taille de l’échantillon dès le départ a priori. Vous ne pouvez pas accumuler des données jusqu’à obtenir un rejet de \(H_0\), sans quoi votre analyse sera biaisée.↩︎

  38. Pour le lecteur plus avancé, il s’agit en fait de la droite de régression ajustée dans le nuage de points.↩︎

  39. Vous pouvez activer les sous-titres en anglais via la barre de boutons en bas de la vidéo pour vous aider à comprendre l’histoire.↩︎

  40. L’équation proposée est, en fait, valable pour un échantillon, et est calculé comme tel par R à l’aide des fonctions sd() pour l’écart type ou var() pour la variance. Pour la population ou pour un échantillon de taille très grande, voire infinie, nous pourrions plutôt diviser par \(n\) au lieu de \(n - 1\), … mais puisque \(n\) est très grand, cela ne change pas grand chose au final.↩︎

  41. Notez que les lettres latines sont utilisées pour se référer aux variables et aux descripteurs statistiques telle que la moyenne pour l’échantillon, alors que les paramètres équivalents de la population, qui sont inconnus, sont représentés par des lettres grecques en statistiques.↩︎

  42. Nous utilisons pour se faire une boucle for dans R qui réitère un calcul sur chaque élément d’un vecteur, ici, une séquence 1, 2, 3, …, 10000 obtenue à l’aide de l’instruction 1:10000.↩︎

  43. Il existe des tests pour le vérifier, comme le test de Bartlett, mais ce n’est pas le propos ici.↩︎

  44. Pouvez-vous expliquer pourquoi ? Réfléchissez, c’est assez évident.↩︎

  45. Dans le cas d’un test de Wilcoxon apparié, on a \(H_0: mediane_x = mediane_y\).↩︎

  46. Attention ! vous savez bien que c’est plus compliqué que cela. D’une part, le risque de se tromper est probablement différent si on rejette \(H_0\) (\(\alpha\)) ou non (\(\beta\)), et ces risques sont encore à moduler en fonction de la probabilité a priori, un cas similaire au dépistage d’une maladie plus ou moins rare, rappelez-vous, au module 7.↩︎

  47. Dans R, vous pouvez utiliser choose(n, j) pour calculer le coefficient binomial. Donc votre calcul du risque de se tromper au moins une fois dans un ensemble de n tests dont le risque individuel est r sera 1 - (1 - r)^choose(n, 2).↩︎

  48. Les fonctions qui permettent les calculs relatifs à la distribution F dans R sont <x>f(), et les snippets correspondants dans la SciViews Box sont disponibles à partir de .if. Leur utilisation est similaire à celle des distributions vues au module 7.↩︎

  49. Un snippet dédié est disponible dans le menu hypothesis tests: means à partir de .hm.↩︎

  50. Nous ne détaillons pas le calcul du test de Tukey ici, mais vous pouvez aller voir ici.↩︎

  51. Notez que si vous incluez le tableau de l’ANOVA dans votre rapport ou dans une publication, il n’est pas nécessaire de répéter les résultats des tests entre parenthèses. Vous pouvez juste vous référer au tableau en question.↩︎

  52. De plus, nous avons ici un plan balancé puisque le nombre de répliquas pour chaque niveau est le même. C’est une situation optimale qu’il faut toujours chercher à atteindre pour une ANOVA, même si un nombre différent d’observations par niveau est également accepté.↩︎

  53. La variable Sample valant G ou H ne sera pas utilisée ici. En fait, au départ, les initiateurs de l’expérience ont fait croire aux laboratoires qu’il s’agissait de deux échantillons différents alors que c’est le même en réalité.↩︎

  54. Notez toutefois qu’il est conseillé de manière générale de ne pas utiliser les valeurs p du tout, mais de privilégier d’autres approches comme le rapport de la log-vraissemblance entre modèles, voir ici, mais cela sort du cadre de ce cours.↩︎

  55. Historiquement, ce langage s’appelait S à l’origine dans les années 1970 alors qu’il a été inventé par John Chambers et ses collègues aux laboratoires Bell. R est une implémentation open source de S écrite dans les années 1990 par Ross Ihaka et Robert Gentleman. Ensuite R a pris de l’importance à tel point qu’on parle maintenant du langage R (sachant bien qu’il s’agit d’un dialecte du langage S).↩︎

  56. Cette évaluation particulière s’appelle le “tidyeval”. Son explication est hors de propos dans cette introduction à la science des données mais si vous êtes curieux, vous pouvez toujours lire ceci.↩︎

  57. Ici, nous croisons les X et les Y, et extrayons la diagonale de ce tableau qui correspond aux coefficients entre X1 et Y1, entre X2 et Y2, entre X3 et Y3 et entre X4 et Y4, respectivement.↩︎

  58. Vous pouvez activer les sous-titres en anglais via la barre de boutons en bas de la vidéo.↩︎

  59. Toutes nos présentations dans le cadre du cours sont au format R Markdown/Beamer avec un template UMONS/SDD fortement personnalisé.↩︎

  60. Le Mac définit ses raccourcis claviers différemment du PC. Outre l’inversion de l’utilisation des touches Ctrl et Command, le Mac possède deux touches Alt, une à gauche et une à droite. Le PC a, par contre, deux touches correspondantes, mais celle de droite est nommée Alt Gr. Ces touches jouent des rôles différents : raccourcis claviers pour Alt et accès aux touches de niveau 3 et 4 pour Alt Gr. Pour les utilisateurs Mac, notez que vos deux touches Alt ont des rôles différents dans la SciViews Box comme pour un clavier PC.↩︎

  61. Le presse-papier est synchronisé entre les deux machines pour le texte qui y est copié, mais à condition d’avoir installé la bonne version de VirtualBox.↩︎

  62. N’éditer jamais à la main un fichier .Rproj. Laisser RStudio s’en occuper tout seul.↩︎

  63. Les systèmes d’édition professionnels dissocient en effet le fond de la forme : vous rédiger d’abord le contenu, et ensuite, vous indiquer le style à lui appliquer.↩︎