« Utiliser R dans la recherche » : différence entre les versions
(57 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{ | <div class="noprint"> | ||
{{tutoriel | |||
|fait_partie_du_cours=Pensée computationnelle avec R | |||
|module_suivant= | |||
|pas_afficher_sous-page=Non | |||
|page_suivante= | |||
|statut=à finaliser | |||
|difficulté=débutant | |||
|cat tutoriels=R | |||
}} | |||
</div> | |||
== Introduction == | == Introduction == | ||
Cet article vise promouvoir l'utilisation de [[R]] dans la recherche en tant qu'outil qui facilite l'adoption de bonnes pratiques pour une Science Ouverte. Nous illustrerons une série d'avantages liés à l'utilisation de [[R]] à la fois au niveau individuel et collectif. Nous fournirons également des ressources pour approfondir le sujet. | Cet article vise à promouvoir l'utilisation de [[R]] dans la recherche en tant qu'outil qui facilite l'adoption de bonnes pratiques pour une Science Ouverte. Nous illustrerons une série d'avantages liés à l'utilisation de [[R]] à la fois au niveau individuel et collectif. Nous fournirons également des ressources pour approfondir le sujet. | ||
Un autre article disponible dans ce wiki aborde l'utilisation de [[R]] dans l'enseignement et la formation : | Un autre article disponible dans ce wiki aborde l'utilisation de [[R]] dans l'enseignement et la formation : | ||
{{ Goblock | [[Utiliser R dans l'enseignement et la formation]] }} | |||
Les deux pages sont liés à [[Pensée computationnelle avec R]], une collection de ressources pour apprendre [[R]] dans le contexte des sciences sociales (voir également [[Pensée computationnelle en sciences sociales]]). | Les deux pages sont liés à [[Pensée computationnelle avec R]], une collection de ressources pour apprendre [[R]] dans le contexte des sciences sociales (voir également [[Pensée computationnelle en sciences sociales]]). | ||
Ligne 15 : | Ligne 24 : | ||
Par souci de brévité, nous allons faire référence ''simplement'' à [[R]] dans l'article, mais en réalité nous nous référons à l'ensemble d'un environnement de travail ''typique'' qui inclut d'autres éléments, comme par exemple [[RStudio]]. Pour plus d'informations sur l'environnement ''typique'', voir : | Par souci de brévité, nous allons faire référence ''simplement'' à [[R]] dans l'article, mais en réalité nous nous référons à l'ensemble d'un environnement de travail ''typique'' qui inclut d'autres éléments, comme par exemple [[RStudio]]. Pour plus d'informations sur l'environnement ''typique'', voir : | ||
{{ Goblock | [[Mise en place d'un environnement de travail avec R]] }} | |||
== Survol de l'utilisation de R dans la recherche == | == Survol de l'utilisation de R dans la recherche == | ||
Ligne 23 : | Ligne 32 : | ||
Il existe différents domaines dans lesquels [[R]] est utilisé dans la recherche. Ces domaines ne sont pas mutuellement exclusifs et, au contraire, s'influencent réciproquement : | Il existe différents domaines dans lesquels [[R]] est utilisé dans la recherche. Ces domaines ne sont pas mutuellement exclusifs et, au contraire, s'influencent réciproquement : | ||
# '''Environnement de travail impliqué dans différents phases de la recherche | # '''Environnement de travail impliqué dans différents phases de la recherche''' | ||
#: Plusieurs chercheurs utilisent [[R]] de manière quotidienne, que se soit pour recueillir, transformer, visualiser ou analyser des données, ou pour créer des reports scientifiques (articles, posts de blog, ...). Cette utilisation est particulièrement propice aux principes de ''Open Science'' relatifs à la réplicabilité computationnelle (également appelée souvent ''reproductibilité'') des analyses statistiques effectuées dans les contributions scientifiques. Le fait que [[R]] soit gratuit, open-source et multi-plateforme le rend une sorte de ''lingua franca'' dans certaines disciplines académiques. | #: Plusieurs chercheurs utilisent [[R]] de manière quotidienne, que se soit pour recueillir, transformer, visualiser ou analyser des données, ou pour créer des reports scientifiques (articles, posts de blog, ...). Cette utilisation est particulièrement propice aux principes de ''Open Science'' relatifs à la réplicabilité computationnelle (également appelée souvent ''reproductibilité'') des analyses statistiques effectuées dans les contributions scientifiques. Le fait que [[R]] soit gratuit, open-source et multi-plateforme le rend une sorte de ''lingua franca'' dans certaines disciplines académiques. | ||
# '''Écosystème de partage de paquets | # '''Écosystème de partage de paquets communs ou spécifiques à des domaines de recherche''' | ||
#: La recherche dans différents domaines, y compris les sciences sociales, repose de plus en plus sur des principes et techniques computationnels. [[R]] représente à cet effet un environnement propice pour créer et partager des paquets à partager entre chercheurs. Ces paquets sont souvent l'objet d'articles dans des revues et comptent par conséquent comme des contributions scientifiques à part entière. | #: La recherche dans différents domaines, y compris les sciences sociales, repose de plus en plus sur des principes et techniques computationnels. [[R]] représente à cet effet un environnement propice pour créer et partager des paquets à partager entre chercheurs. Ces paquets sont souvent l'objet d'articles dans des revues et comptent par conséquent comme des contributions scientifiques à part entière. | ||
# ''' | # '''Véhiculer des concepts ou des bonnes pratiques à travers des tutoriels''' | ||
#: L'une des conséquences du point précédent consiste dans la nécessité de compétences et savoir-faire computationnels croissants. À cet effet, [[R]] représente souvent un | #: L'une des conséquences du point précédent consiste dans la nécessité de compétences et savoir-faire computationnels croissants. À cet effet, [[R]] représente souvent un [[outil cognitif]] pour véhiculer des nouveaux concepts ou des bonnes pratiques en montrant l'application concrète de principes ou méthodologies de recherche. | ||
# '''Simulations et applications interactives''' | # '''Simulations et applications interactives''' | ||
#: [[R]] étant à la base un langage de programmation à part entière, il permet de créer des simulations et applications interactives à utiliser pour des finalités de recherche. Par exemple, à travers la technologie ''[https://shiny.rstudio.com/ Shiny''], il est possible de créer et publier dans le web des applications interactives qui permettent de déterminer l'échantillon nécessaire pour des analyses statistiques, visualiser des jeux de données multidimensionnels, etc. | #: [[R]] étant à la base un langage de programmation à part entière, il permet de créer des simulations et applications interactives à utiliser pour des finalités de recherche. Par exemple, à travers la technologie ''[https://shiny.rstudio.com/ Shiny''], il est possible de créer et publier dans le web des applications interactives qui permettent de déterminer l'échantillon nécessaire pour des analyses statistiques, visualiser des jeux de données multidimensionnels, etc. | ||
Ligne 44 : | Ligne 53 : | ||
* Importation de larges datasets | * Importation de larges datasets | ||
* Importer plusieurs fichiers en même temps | * Importer plusieurs fichiers en même temps | ||
* Récolte des empreintes digitales (e.g. web scraping) | * Récolte des empreintes digitales (e.g. [[web scraping]]) | ||
==== Importation de larges datasets ==== | ==== Importation de larges datasets ==== | ||
Ligne 92 : | Ligne 101 : | ||
Pour une philosophie et des outils pratiques dans le nettoyage des données, voir par exemple : | Pour une philosophie et des outils pratiques dans le nettoyage des données, voir par exemple : | ||
{{ Goblock | [[Introduction à Tidyverse]] }} | |||
=== Visualisation des données === | === Visualisation des données === | ||
Ligne 108 : | Ligne 117 : | ||
* {{ Goblock | [[Visualisation des données avec ggplot2]]}} | * {{ Goblock | [[Visualisation des données avec ggplot2]]}} | ||
=== | === Modélisation des données et analyses statistiques === | ||
Depuis quelques années, les sciences sociales traversent une période de questionnement sur la fiabilité des résultats obtenus à travers des analyses statistiques, un phénomène souvent identifié dans la | Depuis quelques années, les sciences sociales traversent une période de questionnement sur la fiabilité des résultats obtenus à travers des analyses statistiques, un phénomène souvent identifié dans la ''crise de réplicabilité''. En synthétisant au maximum, il y a deux aspects qui ressortent de ce questionnement : | ||
# '''Mauvaise compréhension et usage des tests statistiques''' | # '''Mauvaise compréhension et usage des tests statistiques''' | ||
Ligne 117 : | Ligne 126 : | ||
#: On s'aperçoit que l'analyse statistique des données requiert des compétences généralisées dans les principes computationnels qui sous-tendent ces tests. En termes plus simples, il n'y a pas de relation exclusive entre la discipline académique et le type de test à mener (e.g. Analyse de la variance pour psychology, regression linéaire pour sociologie, etc.). | #: On s'aperçoit que l'analyse statistique des données requiert des compétences généralisées dans les principes computationnels qui sous-tendent ces tests. En termes plus simples, il n'y a pas de relation exclusive entre la discipline académique et le type de test à mener (e.g. Analyse de la variance pour psychology, regression linéaire pour sociologie, etc.). | ||
L'utilisation de [[R]] comme outil pour mener les analyses statistiques dans une recherche présente plusieurs avantages : | L'utilisation de [[R]] comme outil pour mener les analyses statistiques et, plus en général, effectuer la modélisation des données dans une recherche présente plusieurs avantages : | ||
* Les analyses sont transparentes et les résultats peuvent être contrôlés par d'autres chercheurs ou reviewers ''simplement'' en lisant le code des scripts ; | * Les analyses sont transparentes et les résultats peuvent être contrôlés par d'autres chercheurs ou reviewers ''simplement'' en lisant le code des scripts ; | ||
Ligne 126 : | Ligne 135 : | ||
Pour plus d'informations sur le sujet, voir par exemple : | Pour plus d'informations sur le sujet, voir par exemple : | ||
{{ Goblock | [[Introduction à la modélisation des données avec R]] }} | |||
=== Écriture de report scientifique === | === Écriture de report scientifique === | ||
Ligne 135 : | Ligne 144 : | ||
[[R]] permet d'effecteur tous ces aspects dans un flux de travail homogène, sans quitter l'interface de l'environnement de [[R]]. En exploitant le principe de la ''programmation littéraire'' qui consiste à mélanger éléments textuels et computationnels, [[R]] permet de produire plusieurs types de report scientifiques (articles, thèses, diaporama, ...) de manière automatisée et reproductibles par d'autres chercheurs. | [[R]] permet d'effecteur tous ces aspects dans un flux de travail homogène, sans quitter l'interface de l'environnement de [[R]]. En exploitant le principe de la ''programmation littéraire'' qui consiste à mélanger éléments textuels et computationnels, [[R]] permet de produire plusieurs types de report scientifiques (articles, thèses, diaporama, ...) de manière automatisée et reproductibles par d'autres chercheurs. | ||
Des paquets de [[R]] mettent directement à disposition directement des ''templates'' pour certains journaux ou publications scientifiques. Il est par exemple possible de choisir ces ''templates'' en [[RStudio]] (voir image à droite). Voir par exemple : | Des paquets de [[R]] mettent directement à disposition directement des ''templates'' pour certains journaux ou publications scientifiques. Il est par exemple possible de choisir ces ''templates'' en [[RStudio]] (voir image à droite) ou de faciliter la citation de référence académiques. Voir par exemple : | ||
* | * [https://github.com/rstudio/rticles '''rticles'''] | ||
*: Paquet avec des ''templates'' de plusieurs journaux ou conférences académiques. | |||
* [https://github.com/crsh/papaja '''papaja'''] | |||
*: Paquet (encore en phase de développement en septembre 2020) pour la création de reports scientifiques selon les normes et conventions APA (American Psychology Association). | |||
Pour plus d'informations à ce sujet, voir | Pour plus d'informations à ce sujet, voir : | ||
* {{ Goblock | [[Introduction à Rmarkdown]] }} | * {{ Goblock | [[Introduction à Rmarkdown]] }} | ||
* [https://bookdown.org/yihui/rmarkdown/ R Markdown: The Definitive Guide] par Yihui Xie, J. J. Allaire et Garrett Grolemund | |||
* [https://bookdown.org/yihui/rmarkdown-cookbook/ R Markdown Cookbook] par Yihui Xie, Christophe Dervieux et Emily Riederer | |||
=== Communication ''parallèle'' (blog, sites web, ...) === | === Communication ''parallèle'' (blog, sites web, ...) === | ||
Ligne 149 : | Ligne 163 : | ||
À ce propos, l'écosystème de [[R]] met à disposition des paquets qui permettent d'utiliser la même notation syntaxique que pour les articles scientifiques (voir point précédent et [[Introduction à Rmarkdown]]), mais pour créer des blogues ou sites web. Nous signalons à ce propos deux paquets souvent utilisés à cet effet : | À ce propos, l'écosystème de [[R]] met à disposition des paquets qui permettent d'utiliser la même notation syntaxique que pour les articles scientifiques (voir point précédent et [[Introduction à Rmarkdown]]), mais pour créer des blogues ou sites web. Nous signalons à ce propos deux paquets souvent utilisés à cet effet : | ||
* [https://bookdown.org/ Bookdown] | |||
* [https://bookdown.org/yihui/blogdown/ Blogdown] | * [https://bookdown.org/yihui/blogdown/ Blogdown] | ||
* [https://rstudio.github.io/distill/ Distill] | * [https://rstudio.github.io/distill/ Distill] | ||
Ligne 180 : | Ligne 195 : | ||
[https://mran.microsoft.com/ MRAN] est l'acronyme de ''Microsoft R Application Network''. Il s'agit d'un dépôt de paquets de [[R]] maintenu par Microsoft qui vise garantir la réplicabilité des analyses. Pour cette raison, MRAN maintient un vaste archive de ''snapshot'', c'est-à-dire l'état d'un paquet à un moment précis de son histoire, afin que des éventuels changements dans le code des paquets ne modifient pas le résultat de code qui utilise ces paquets, mais qui a été écrit avant ces changements. Pour plus d'informations sur les différentes versions, voir : | [https://mran.microsoft.com/ MRAN] est l'acronyme de ''Microsoft R Application Network''. Il s'agit d'un dépôt de paquets de [[R]] maintenu par Microsoft qui vise garantir la réplicabilité des analyses. Pour cette raison, MRAN maintient un vaste archive de ''snapshot'', c'est-à-dire l'état d'un paquet à un moment précis de son histoire, afin que des éventuels changements dans le code des paquets ne modifient pas le résultat de code qui utilise ces paquets, mais qui a été écrit avant ces changements. Pour plus d'informations sur les différentes versions, voir : | ||
{{ Goblock | [[Versionnage sémantique]] }} | |||
==== GitHub ==== | ==== GitHub ==== | ||
Ligne 198 : | Ligne 213 : | ||
Pour plus d'informations sur la plateforme, voir : | Pour plus d'informations sur la plateforme, voir : | ||
{{ Goblock | [[GitHub]] }} | |||
=== Collections de paquets === | === Collections de paquets === | ||
=== Paquets intégrés avec plateforme de recherche === | En septembre 2020, CRAN proposait plus de 15'000 paquets de [[R]], un chiffre qui a augmenté de manière exponentielle dans les dernières années et qui est très probablement destiné à augmenter encore. Une telle quantité de paquets, d'une part, témoigne de la richesse et activité de l'écosystème [[R]] ; mais de l'autre peut rendre le choix d'un paquet compliqué en raison de l'étendu de l'offre disponible. Dans cette section, nous proposons une liste non exhaustive de sites ou plateformes qui propose des sélections ou mécanismes de recherche de paquets, surtout liés aux pratiques de la recherche. | ||
==== rOpenSci ==== | |||
[https://ropensci.org/ rOpenSci] est une initiative non-profit fondée en 2011 par Karthik Ram, Scott Chamberlain, et Carl Boettiger afin d'encourager "une culture qui valorise la recherche ouverte et reproductible en utilisant des données partagées et des logiciels réutilisables" (notre traduction depuis la page [https://ropensci.org/about/ About] du site). | |||
Le site met à disposition une collection de paquets sélectionnés qui sont en lien avec le ''Open Science'', mais également des tutoriels, des espaces de discussion, et un blog pour informer sur les nouvautés. | |||
{{ Goblock | [https://ropensci.org/ rOpenSci] }} | |||
==== Tidyverse ==== | |||
[[Introduction à Tidyverse|Tidyverse]] est une collection de paquets qui partagent la même philosophie et un syntaxe similaire, visant l'implémentation de bonnes pratiques dans les différents processus impliqués en ''Data Science''. Tidyverse inclut notamment le paquet [[Visualisation des données avec ggplot2|ggplot2]] qui est très utilisé pour la [[visualisation des données]] et qui possède un [https://exts.ggplot2.tidyverse.org/index.html site avec plusieurs extensions du paquet de base]. Pour plus d'informations voir : | |||
{{ Goblock | [[Introduction à Tidyverse]] }} | |||
=== Paquets intégrés avec plateforme ou logiciels === | |||
Étant [[R]] très utilisé dans le cadre de la recherche dans différents domaines et disciplines académiques, il existe plusieurs paquets en relation avec des plateformes en lignes ou des logiciels utilisés dans le même contexte. | |||
À noter que ces paquets demandent parfois d'insérer des données d'accès (utilisateur, password, API key, etc.). '''Il est donc important de faire attention à ne pas partager ensuite les fichiers de script''', par exemple sur des plateformes comme [[GitHub]], sans avoir mis en place des mécanismes de masquage de ces informations. | |||
Nous proposons ici une liste non exhaustive de quelques paquets liés à des plateformes en ligne utilisées dans la recherche : | |||
* [https://docs.ropensci.org/osfr/ '''osfr'''] | |||
*: Paquet qui permet d'interagir avec la plateforme [https://osf.io/ Open Science Framework] (OSF). Le paquet permet de télécharger/téléverser des fichiers depuis différents dépôts des projets de recherche ouverts. | |||
* [https://docs.ropensci.org/qualtRics/ '''qualtRics'''] | |||
*: Paquet en relation avec la plateforme [[Qualtrics]] qui permet de créer des questionnaires/expériences en ligne. | |||
* [https://googledrive.tidyverse.org/ '''Google drive'''] | |||
*: Paquet qui permet d'interagir avec les fichiers disponibles sur Google drive, par exemple pour automatiser l'importation de données. | |||
* [https://crumplab.github.io/jspsychr/articles/jspsychr.html '''jspsychr'''] | |||
*: Paquet qui permet de créer du matériel expérimental (e.g. stimuli) pour la plateforme [https://www.jspsych.org/ jsPsych]. | |||
* [https://docs.ropensci.org/aRxiv/ '''aRxiv'''] | |||
*: Paquet pour automatiser la recherche dans l'archive de ''preprints'' [https://arxiv.org/ arXiv] | |||
=== Citation de R === | |||
Pour connaître comment citer correctement [[R]] dans une contribution scientifique, utiliser la fonction <code>citation()</code> sans argument. En septembre 2020, cette fonction donne le résultat suivant : | |||
<source lang="md"> | |||
To cite R in publications use: | |||
R Core Team (2020). R: A language and environment for statistical | |||
computing. R Foundation for Statistical Computing, Vienna, Austria. URL | |||
https://www.R-project.org/. | |||
A BibTeX entry for LaTeX users is | |||
@Manual{, | |||
title = {R: A Language and Environment for Statistical Computing}, | |||
author = {{R Core Team}}, | |||
organization = {R Foundation for Statistical Computing}, | |||
address = {Vienna, Austria}, | |||
year = {2020}, | |||
url = {https://www.R-project.org/}, | |||
} | |||
We have invested a lot of time and effort in creating R, please cite it when | |||
using it for data analysis. See also ‘citation("pkgname")’ for citing R | |||
packages. | |||
</source> | |||
Le format BibTeX peut être utilisé pour sauvegarder la référence dans des logiciels de gestion de références académiques comme par exemple [[Zotero]]. | |||
=== Citation des paquets === | === Citation des paquets === | ||
== | La citation des paquets [[R]] utilisés dans un projet de recherche est l'une de manière pour garantir à l'écosystème de partage de se maintenir et agrandir dans le temps. La fonction <code>citation("nom du paquet")</code> permet de savoir comment citer correctement un paquet, en utilisant le nom du paquet comme argument. Par exemple : | ||
<source lang="R"> | |||
citation("dplyr") | |||
</source> | |||
Le résultat qui s'affiche à l'écran peut varier selon le paquet, mais en général vous obtenez un texte pour une citation et, souvent, également le format BibTeX. Par exemple, la citation du paquet '''dplyr''' du code précédent donne ce résultat : | |||
<source lang="md"> | |||
To cite package ‘dplyr’ in publications use: | |||
Hadley Wickham, Romain François, Lionel Henry and Kirill Müller (2020). | |||
dplyr: A Grammar of Data Manipulation. R package version 1.0.2. | |||
https://CRAN.R-project.org/package=dplyr | |||
A BibTeX entry for LaTeX users is | |||
@Manual{, | |||
title = {dplyr: A Grammar of Data Manipulation}, | |||
author = {Hadley Wickham and Romain François and Lionel { | |||
Henry} and Kirill Müller}, | |||
year = {2020}, | |||
note = {R package version 1.0.2}, | |||
url = {https://CRAN.R-project.org/package=dplyr}, | |||
} | |||
</source> | |||
== Tutoriels et bonnes pratiques == | |||
[[R]] est de plus en plus utilisé comme [[outil cognitif]] et instrument pour véhiculer des principes et pratiques utiles à la recherche. Il existe désormais des nombreuses contributions scientifiques qui sont entièrement basées, ou du moins accompagnées, par des scripts en R pour présenter des méthodes d'analyses. Ces contributions, originalement limitées à des analyses statistiques, concernent aujourd'hui plusieurs techniques comme par exemple : | |||
* Les analyses textuelles, par exemple le ''topic modeling'' | |||
* Des analyses en réseau | |||
* L'extraction automatisée de données depuis le web | |||
* Des paquets qui facilitent l'exposition correcte de résultats statistiques | |||
* Le traitement de données depuis des instruments de recherche (e.g. données physiologiques, oculométrie, etc.) | |||
* ... | |||
== Simulation et applications interactives == | == Simulation et applications interactives == | ||
Un autre domain dans lequel [[R]] peut être utilisé concerne les simulations et les applications interactives qui peuvent être utilisées à plusieurs finalités : | |||
* Construire des données de synthèse pour simuler la structure des ''vraies'' données qui seront récoltées par la suite ; | |||
* Quantifier des paramètres d'intérêt dans un projet empirique (e.g. taille de l'échantillon, taille de l'effet, ...) ; | |||
* Tester des modèles computationnels | |||
* Simuler des phénomènes | |||
* Mettre à disposition des données avec des modalités interactives pour les explorer | |||
* Recueillir des données pour entraîner ou tester un algorithme génératif | |||
* Etc. | |||
Dans cette section, nous illustrons quelques éléments de base lié d'abord aux simulations et ensuite aux applications interactives. | |||
=== Simulations === | |||
Dans les simulations, on exploite la puissance computationnelle de [[R]] et les différentes fonctions ou paquets qui permettent de simuler des données ou phénomènes. | |||
==== ''Seed'' ==== | |||
[[R]] met à disposition un fonction pour définir un ''seed'' (i.e. un ''grain'') pour que les fonctions basées sur des éléments aléatoires donnent toujours le même résultat. À cet effet, utilisez la fonction <code>set.seed(chiffre)</code>, par exemple : | |||
<source lang="R"> | |||
set.seed(100) | |||
</source> | |||
Si vous appelez cette fonction avec une fonction de génération aléatoire (voir plus bas), vous obtenez toujours les mêmes chiffres ''aléatoires''. Par exemple, vous pouvez utiliser <code>rnorm()</code> qui définit un nombre de chiffres aléatoires tirés d'une distribution normale : | |||
<source lang="R"> | |||
set.seed(100) | |||
rnorm(5, 100, 15) | |||
</source> | |||
Toute personne qui exécute les deux lignes de code en même temps va obtenir le résultat suivant : | |||
<source lang="R"> | |||
[1] 92.46711 101.97297 98.81624 113.30177 101.75457 | |||
</source> | |||
Par conséquent, il est possible de répliquer exactement des simulations basés sur des chiffres ''pseudo''-aléatoires. À cet effet, il est de bonne pratique de placer la fonction <code>set.seed()</code> au début des scripts qui prévoient l'utilisation de chiffres générés aléatoirement. | |||
==== Fonction liées à des distributions ==== | |||
[[R]] met à disposition plusieurs fonctions en relation avec des distributions souvent utilisées dans le contexte des analyses de données en sciences sociales. Ces fonctions, disponibles dans le paquet de base de [[R]], sont formées par un préfixe et l'identifiant de la distribution de référence, par exemple : | |||
* '''d'''''norm'' ou '''d'''''unif'' se réfèrent à la densité respectivement de la distribution normale et uniforme | |||
* '''p'''''pois'' ou '''p'''''chisq'' se réfèrent à la probabilité respectivement de la distribution Poisson et Chi-carré | |||
* '''q'''''binom'' ou '''q'''''exp'' se réfèrent aux quantiles respectivement de la distribution binomiale et exponentielle | |||
* '''r'''''norm'' ou '''r'''''unif'' génèrent des chiffres aléatoires en fonction respectivement de la distribution normale et uniforme | |||
Dans cette section, nous nous intéressons à cette dernière ''famille'' de fonction '''r''' + ''distribution'' qui permet de générer des chiffres sur la base de la distribution de référence. Par exemple : | |||
<source lang="R"> | |||
rnorm(10, mean = 50, sd = 5) | |||
</source> | |||
Cette fonction génère 10 chiffres aléatoires tirés d'une distribution normale caractérisée par une moyenne de 50 et un écart type de 5. Le résultat de cette fonction sera similaire à celui-ci : | |||
<source lang="R"> | |||
[1] 47.51255 50.32265 57.11116 51.39906 56.47860 56.44914 50.84659 48.51602 48.70439 45.62678 | |||
</source> | |||
En revanche, la fonction <code>runif()</code> utilise une distribution uniforme dont il faut définir les limites inférieurs et supérieur : | |||
<source lang="R"> | |||
runif(10, min = 0, max = 100) | |||
</source> | |||
Le résultat de cette instruction sera similaire à celui-ci : | |||
<source lang="R"> | |||
[1] 68.809403 8.343671 12.544272 74.769049 67.116004 3.050132 51.975150 5.059291 99.168717 39.174458 | |||
</source> | |||
Pour mieux apprécier le fonctionnement de ces fonctions, on peut tirer un nombre plus large de chiffres aléatoires et utiliser la fonction <code>hist()</code> pour comparer les deux résultats (voir [[Introduction à la visualisation des données avec R]]) : | |||
<source lang="R"> | |||
# Générer deux vecteurs de chiffres | |||
random_normal <- rnorm(1000, mean = 50, sd = 5) | |||
random_uniform <- runif(1000, min = 0, max = 100) | |||
# Afficher les deux graphiques l'un sur l'autre | |||
par(mfrow = c(2,1)) | |||
# Créer les histogrammes avec la même échelle sur l'axe verticale | |||
hist(random_normal, ylim = c(0, 500)) | |||
hist(random_uniform, ylim = c(0, 500)) | |||
</source> | |||
Le graphique qui s'affiche à la suite de ce script montre bien la différence entre les deux vecteurs générés. Le premier montre des chiffres qui se distribuent de manière spéculaire autour de la moyenne de 50. Le deuxième montre des barres toutes plus ou moins de la même hauteur. | |||
[[Fichier:R rnorm et runif exemple.png|400px|vignette|néant|Comparaison entre les deux vecteurs obtenus avec les fonctions <code>rnorm</code> et <code>runif</code>. ]] | |||
==== Créer des jeux des données fictifs ==== | |||
Les simulations permettent de créer des jeux de données fictifs qui peuvent être utilisés pour tester des analyses statistiques, prévoir la magnitude d'effets ''réalistes'' dans une étude ou expérience, tester un modèle prédictif sur la base de données ''contrôlées'', etc. | |||
La complexité de la simulation est proportionnelle à la complexité du jeu de données envisagé. Dans cette section, nous proposons simplement quelques exemples pour montrer le principe. Nous utiliserons notamment les fonctions de génération aléatoire des distributions vues plus haut dans l'article, ainsi que d'autres fonctions, comme par exemple la fonction <code>sample()</code>, qui s'appliquent par exemple à des variables discrètes. | |||
Les jeux des données les plus simples à créer sont celles dans lesquels : | |||
# Toute observation (i.e. chaque ligne) est indépendante des autres (e.g. deux lignes n'appartiennent pas au même participant) | |||
# Toute variable (i.e. chaque colonne) est (1) créé aléatoirement et (2) est indépendante des autres variables (e.g. le fait d'avoir une certaine valeur dans la variable X n'a aucune influence sur la valeur de la variable Z) | |||
Ce cadre de figure peut être intéressante par exemple pour simuler des jeux des données dans lesquels il n'existe aucune relation entre variables, ce qui pourrait être exploité dans une série de plusieurs simulations pour avoir une idée du taux de ''faux positifs'' qu'on pourrait obtenir (e.g. des erreurs de Type I dans les analyses statistiques fréquentistes). | |||
Voici un exemple de jeu de données qui simule 100 observations avec un plan expérimental caractérisé par : | |||
* Une variable dépendante continue avec moyenne de 100 et écart type de 10 | |||
* Une variable indépendante catégorielle avec deux modalités (Treatment vs. Control) avec la même probabilité d'occurrence (50% vs. 50%) | |||
* Une variable indépendante catégorielle avec trois modalités (Negative vs. Neutral vs. Positive) avec des occurrences différentes (30% Negative, 20% Neutral, et 50% Positive) | |||
* Une variable indépendante continue, avec une moyenne de 10 et un écart type de 5 | |||
<source lang="R"> | |||
# Jeu de données 2 VI cat. + 1 VI cont. et une VD cont. | |||
set.seed(8232) # pour obtenir exactement le même jeu | |||
sim_data <- data.frame( | |||
vd_cont = rnorm(100, 100, 10), | |||
vi_cat_1 = sample(c("Control", "Treatment"), 100, replace = TRUE, prob = c(0.5, 0.5)), | |||
vi_cat_2 = sample(c("Negative", "Neutral", "Positive"), 100, replace = TRUE, prob = c(0.3, 0.2, 0.5)), | |||
vi_cont = rnorm(100, 10, 5) | |||
) | |||
</source> | |||
Vous pouvez observer la répartition dans les variables indépendantes catégorielles avec le code <code>table(sim_data$vi_cat_1, sim_data$vi_cat_2)</code> qui donne le résultat suivant : | |||
<source lang="R"> | |||
Negative Neutral Positive | |||
Control 15 6 27 | |||
Treatment 15 9 28 | |||
</source> | |||
==== Paquets pour simuler des données ==== | |||
Lorsque les simulations deviennent plus complexes, il existe la possibilité d'exploiter des paquets de R qui ont des finalités explicitement liées la simulation des données. Voici quelques exemples de ces paquets : | |||
* [https://debruine.github.io/faux/ faux] : le paquet '''faux''' (DeBruine, 2021) permet de simuler des données de différentes structures, notamment des designs factoriels (e.g. [[Analyse de la variance]]) souvent utilisés en sciences sociales. | |||
* [https://kgoldfeld.github.io/simstudy/index.html simstudy] : le paquet '''simstudy''' Goldfeld & Wujciak-Jens, 2020) permet de créer différents jeu de données à travers la définition de variables. Le résultat sont des jeu de données rectangulaire qui peuvent être utilisées pour différentes techniques de [[Introduction à la modélisation des données avec R|modélisation des données avec R]] | |||
* [https://github.com/tmatta/lsasim lsasim] : le paquet '''lsasim''' (Matta, Rutkowski, Rutkowski, Liaw & Leoncio, 2021) permet de simuler des (larges) jeux des données représentant des questionnaires ou test d'évaluation. | |||
=== Applications interactives === | |||
[[R]] permet de créer des applications interactives en déclenchent de la computation (i.e. du code [[R]]) à travers une interface utilisateur accessible par exemple à travers un navigateur web. De ce fait, il est possible de mettre à disposition des chercheurs des applications spécifiques qui permettent de mener à bien certains types d'opérations (e.g. analyses, extraction de données, ...) sans passer par le scripting et sans avoir à connaitre le langage [[R]]. | |||
La technologie la plus utilisée à cet effet a été s'appelle [https://shiny.rstudio.com/ Shiny] et a été développée par RStdio, PBC, la même compagnie qui développe et maintient l'IDE [[RStudio]] souvent utilisée comme interface de programmation pour [[R]]. | |||
Voici quelques ressources et exemples à propos de Shiny : | |||
* [https://shiny.rstudio.com/ Site officiel sur RStudio] : le site propose également une [https://shiny.rstudio.com/gallery/ gallerie avec des exemples]] dans différents domains | |||
* [https://mastering-shiny.org/ Mastering Shiny] : livre en open access sur le web écrit par Hadley Wickham. Le livre représente une référence complète à différents aspects de Shiny. | |||
* [https://shiny.ieis.tue.nl/anova_power/ ANOVA power] : exemple d'application Shiny développée par Daniel Lakens qui permet de calculer la puissance statistique (e.g. déterminer le nombre de participants pour une étude) pour des plans de recherche utilisant l'[[Analyse de la variance]] comme test statistique | |||
== Contrôle de qualité et fiabilité == | == Contrôle de qualité et fiabilité == | ||
[[R]] est utilisé également pour créer des systèmes automatisés de contrôle de la qualité/fiabilité des résultats disponibles dans des articles de recherche. Il s'avère en effet que plusieurs articles présentent des erreurs dans l'exposition des résultats des tests statistiques qu'on peut identifier directement depuis les chiffres normalement affichés dans un article. Par exemple, des incongruences entre les degrés de liberté d'un test et le design expérimental (e.g. nombre de participants et variable indépendantes) ou encore entre le résultat du test statistique et la p-valuer affichée. | |||
=== statcheck === | |||
[https://mbnuijten.com/statcheck/ statcheck] est un paquet de [[R]] développé par Sacha Epskamp et Michele B. Nuijten qui permet de détecter des erreurs dans l'affichage des résultats des tests statistiques dans des articles. Il a été notamment utilisé dans l'article [https://mbnuijten.files.wordpress.com/2013/08/nuijtenetal_2016_reportingerrorspsychology.pdf ''The prevalence of statistical reporting errors in psychology (1985-2013)''] (Nuijten et al., 2016). | |||
* [https://cran.r-project.org/web/packages/statcheck/index.html Lien au paquet sur CRAN] | |||
* [https://mbnuijten.com/statcheck/quick-install/ Lien à les instructions d'installation] | |||
* [https://rpubs.com/michelenuijten/statcheckmanual Lien au manuel] | |||
== Conclusion == | == Conclusion == | ||
Cette page à proposé un survol des différentes utilisations possibles de [[R]] dans la recherche. Intégrer une langage de programmation ne correspond pas seulement à disposer d'un logiciel puissant et flexible, mais également - et surtout - d'un outil cognitif qui permet de raissoner de manière différente. La puissance combinatoire d'un langage de programmation permet en effet de créer des scénarios dans lesquels l'automatisation des processus peut être adoptée pour différentes finalités. | |||
L'investissement dans la maîtrise d'un langage de programmation comme [[R]], même si intensif et avec une courbe d'apprentissage qui peut commencer à donner ses fruits après un certain temps, est donc repayé par l'élargissement d'options et par la mise en pratique plus rigureuse d'analyse statistiques. | |||
[[Catégorie: R]] |
Dernière version du 30 avril 2023 à 21:27
Introduction
Cet article vise à promouvoir l'utilisation de R dans la recherche en tant qu'outil qui facilite l'adoption de bonnes pratiques pour une Science Ouverte. Nous illustrerons une série d'avantages liés à l'utilisation de R à la fois au niveau individuel et collectif. Nous fournirons également des ressources pour approfondir le sujet.
Un autre article disponible dans ce wiki aborde l'utilisation de R dans l'enseignement et la formation :
Les deux pages sont liés à Pensée computationnelle avec R, une collection de ressources pour apprendre R dans le contexte des sciences sociales (voir également Pensée computationnelle en sciences sociales).
Note sur la référence à R
Par souci de brévité, nous allons faire référence simplement à R dans l'article, mais en réalité nous nous référons à l'ensemble d'un environnement de travail typique qui inclut d'autres éléments, comme par exemple RStudio. Pour plus d'informations sur l'environnement typique, voir :
Survol de l'utilisation de R dans la recherche
Nous proposons d'abord un survol de l'utilisation de R dans la recherche, pour ensuite traiter de manière plus approfondie certains aspects dans le reste de l'article.
Il existe différents domaines dans lesquels R est utilisé dans la recherche. Ces domaines ne sont pas mutuellement exclusifs et, au contraire, s'influencent réciproquement :
- Environnement de travail impliqué dans différents phases de la recherche
- Plusieurs chercheurs utilisent R de manière quotidienne, que se soit pour recueillir, transformer, visualiser ou analyser des données, ou pour créer des reports scientifiques (articles, posts de blog, ...). Cette utilisation est particulièrement propice aux principes de Open Science relatifs à la réplicabilité computationnelle (également appelée souvent reproductibilité) des analyses statistiques effectuées dans les contributions scientifiques. Le fait que R soit gratuit, open-source et multi-plateforme le rend une sorte de lingua franca dans certaines disciplines académiques.
- Écosystème de partage de paquets communs ou spécifiques à des domaines de recherche
- La recherche dans différents domaines, y compris les sciences sociales, repose de plus en plus sur des principes et techniques computationnels. R représente à cet effet un environnement propice pour créer et partager des paquets à partager entre chercheurs. Ces paquets sont souvent l'objet d'articles dans des revues et comptent par conséquent comme des contributions scientifiques à part entière.
- Véhiculer des concepts ou des bonnes pratiques à travers des tutoriels
- L'une des conséquences du point précédent consiste dans la nécessité de compétences et savoir-faire computationnels croissants. À cet effet, R représente souvent un outil cognitif pour véhiculer des nouveaux concepts ou des bonnes pratiques en montrant l'application concrète de principes ou méthodologies de recherche.
- Simulations et applications interactives
- R étant à la base un langage de programmation à part entière, il permet de créer des simulations et applications interactives à utiliser pour des finalités de recherche. Par exemple, à travers la technologie Shiny, il est possible de créer et publier dans le web des applications interactives qui permettent de déterminer l'échantillon nécessaire pour des analyses statistiques, visualiser des jeux de données multidimensionnels, etc.
- Instrument de contrôle de qualité des contributions scientifiques et de démasquage de questionable research practices (pratiques de recherche douteuses)
- Il existe des paquets de R qui permettent d'identifier dans les articles scientifiques des erreurs dans le report de résultats statistiques ou de mettre en question des résultats too good to be true.
Environnement de travail day-to-day
Contrairement à des logiciels exclusivement dédiés aux analyses statistiques comme SPSS, c'est-à-dire impliqué seulement dans un processus spécifique de la recherche, R propose un plus large éventail d'utilisations quotidiennes à différents stades d'une recherche.
Récolte de données digitales
R est souvent utilisé pour la récolte de données digitales. Bien que R permet des importations classiques de données depuis un fichier rectangulaire (organisés en lignes et colonnes) depuis différents formats, l'utilisation de R devient plus intéressantes dans les cadres suivants :
- Importation de larges datasets
- Importer plusieurs fichiers en même temps
- Récolte des empreintes digitales (e.g. web scraping)
Importation de larges datasets
Des datasets de large proportion sont de plus en plus utilisés dans les recherches en sciences sociales. Une vision globale de ces datasets est souvent inutile et risque de surcharger des interfaces graphiques de type spreadsheet qui ne sont pas conçues pour afficher des milliers de lignes ou centaines de colonnes. R permet d'importer rapidement et stocker en mémoire des larges datasets depuis différents formats libres ou propriétaires, sans nécessairement les affichés en entier et avec la possibilité de les interroger ponctuellement pour récupérer exclusivement les informations pertinentes.
Pour plus d'informations sur l'importation des données voir :
Importer plusieurs fichiers en même temps
Un autre avantage de R dans le day-to-day de la recherche consiste à pouvoir importer plusieurs fichiers en même temps sans avoir à les coller manuellement en amont. En tant que langage de programmation, en effet, R peut avoir accès à vos fichiers de manière systématique, ce qui lui permet notamment de lire le contenu d'un dossier. Il est par conséquent possible de lancer un script qui :
- Identifie le dossier spécifique dans lequel se trouvent les fichiers séparés
- Filtre les fichiers à importer, par exemple par rapport à une extension spécifique (e.g. .csv)
- Applique de manière itérative la procédure d'importation à chaque fichier singulièrement
- Combine toutes les informations dans un unique dataset
Encore une fois, R permet de faire cette opération de manière rapide et de pouvoir la répliquer sur demande à chaque exécution du code. De cette manière, même si entre temps certains des fichiers ont été ajoutés ou modifiés, le même script pourra prendre en compte les changements automatiquement.
Récolte des empreintes digitales
Les empreintes digitales, ou digital footprints en anglais, sont de plus en plus utilisées dans la recherche en sciences sociales. Ces données, représentées par des traces que les utilisateurs disséminent dans les différents environnements en ligne (sites, réseaux sociaux, forum, ...), peuvent atteindre des volumes qui nécessitent une extraction automatisée.
En tant que langage de programmation, R permet de planifier l'extraction de données depuis différentes sources. Une technique d'extraction appelé web scraping, en particulier, permet de récupérer directement des données depuis des sources web non structurées. Il existe des paquets pour effectuer du web scraping en général ou ciblés sur certaines sources spécifiques (e.g. Twitter, Wikipedia, ...). Pour plus d'informations voir :
Nettoyage et exploration des données
Le nettoyage de données, souvent appelé depuis l'anglais Data wrangling, consiste à transformer des données brutes dans des formats plus propices à des processus ultérieurs, comme par exemple la visualisation ou l'analyse des données. Ce processus est souvent accompagné par la nécessité d'explorer et mieux connaître le dataset, par exemple à la recherche d'éventuels erreurs de mesure ou transcription. R met à disposition des fonctionnalités out of the box ou des paquets qui permettent des opérations à plusieurs niveaux, comme par exemple :
- Appliquer différents filtres pour exclure/inclure seulement une partie des données
- Agréger les données dans des indices à travers des mécanismes de groupement
- Utiliser les expressions régulières pour identifier des patterns dans les données et appliquer des modifications (e.g. extraire seulement les chiffres depuis une suite alphanumérique, etc.)
- Passer d'un format large à un format long des données (e.g. plusieurs lignes pour le même participant)
- etc.
Le grand avantage de R consiste à pouvoir formaliser ces opérations dans le code, ce qui est utile pour deux raisons :
- Le processus est automatisé, ce qui limite le risque d'erreurs dans un nettoyage à la main
- Le processus est transparent, donc il peut être répliqué à plusieurs reprises ou testé par d'autres personnes
Pour une philosophie et des outils pratiques dans le nettoyage des données, voir par exemple :
Visualisation des données
Avec la complexification des datasets (voir plus haut), la visualisation des données devient un instrument de plus en plus utile pour deux raisons :
- Créer des visualisations exploratoires
- Ce type de visualisation permet aux chercheurs de mieux comprendre leurs propres données (ou les donnée d'autres chercheurs) à travers la reconnaissance de patterns dans des représentions graphiques complexes ;
- Créer des visualisations communicationnelles
- Une fois que les chercheurs ont compris la valeur de leurs propres données (à travers des visualisations exploratoires ou des analyses statistiques), il est important de pouvoir transmettre ces informations aux autres chercheurs à travers des visualisations qui permettent de saisir le message véhiculé de la manière la plus immédiate possible. Parfois, pour obtenir ce résultat, les visualisations graphiques classiques (e.g. graphiques statiques en deux dimensions qu'on voit dans les articles papier) ne sont pas suffisantes et il faut utiliser des visualisations dynamiques.
R met à disposition des instruments très puissants que ce soit pour des représentations graphiques statiques ou dynamiques. Voir par exemple à ce sujet :
Modélisation des données et analyses statistiques
Depuis quelques années, les sciences sociales traversent une période de questionnement sur la fiabilité des résultats obtenus à travers des analyses statistiques, un phénomène souvent identifié dans la crise de réplicabilité. En synthétisant au maximum, il y a deux aspects qui ressortent de ce questionnement :
- Mauvaise compréhension et usage des tests statistiques
- Souvent les tests statistiques sont exécutés de manière mécanique, en répliquant des opérations apprises ou copiées depuis des pratiques dominantes dans la discipline de référence.
- Intégration de principe computationnel holistiques
- On s'aperçoit que l'analyse statistique des données requiert des compétences généralisées dans les principes computationnels qui sous-tendent ces tests. En termes plus simples, il n'y a pas de relation exclusive entre la discipline académique et le type de test à mener (e.g. Analyse de la variance pour psychology, regression linéaire pour sociologie, etc.).
L'utilisation de R comme outil pour mener les analyses statistiques et, plus en général, effectuer la modélisation des données dans une recherche présente plusieurs avantages :
- Les analyses sont transparentes et les résultats peuvent être contrôlés par d'autres chercheurs ou reviewers simplement en lisant le code des scripts ;
- Les paquets qui permettent de mener des analyses statistiques (simples ou complexes) sont open-source et par conséquent la transparence s'applique également à un niveau supérieur : ces paquets eux-mêmes peuvent être contrôlés par plusieurs chercheurs ;
- Les chercheurs peuvent créer en amont le script pour traiter les données (e.g. en utilisant des données simulées) et pré-enregistrer l'analyse. Ce processus augmente la fiabilité des résultats obtenus en écartant la possibilité que l'analyse soit manipulée en fonction des données à disposition (e.g. pour chercher d'atteindre un seuil de significativité) ;
- Des nouvelles techniques d'analyse, souvent basées sur des modèles computationnels complexes, peuvent être mises à disposition de manière rapide, ce qui permet une adoption et amélioration de ces techniques plus rapide comparé à des logiciels propriétaires qui dépendent des mises à jour du concepteur.
Pour plus d'informations sur le sujet, voir par exemple :
Écriture de report scientifique
Les articles scientifiques empiriques ou basées sur des simulations ressemblent de plus en plus à des logiciels qui combine des parties computationnelles et des éléments textuels et graphiques. D'ailleurs, l'écriture d'un article scientifique suit souvent des processus itératifs communs à la programmation et au développement. Souvent, les chercheurs doivent intégrer plusieurs outils différents pour compléter le produit final : un logiciel pour recueillir et modifier les données ; un logiciel pour mener les analyses ; un logiciel pour créer ou adapter les représentations graphiques ; et un logiciel pour écrire le texte et agencer les résultats et représentations graphiques.
R permet d'effecteur tous ces aspects dans un flux de travail homogène, sans quitter l'interface de l'environnement de R. En exploitant le principe de la programmation littéraire qui consiste à mélanger éléments textuels et computationnels, R permet de produire plusieurs types de report scientifiques (articles, thèses, diaporama, ...) de manière automatisée et reproductibles par d'autres chercheurs.
Des paquets de R mettent directement à disposition directement des templates pour certains journaux ou publications scientifiques. Il est par exemple possible de choisir ces templates en RStudio (voir image à droite) ou de faciliter la citation de référence académiques. Voir par exemple :
- rticles
- Paquet avec des templates de plusieurs journaux ou conférences académiques.
- papaja
- Paquet (encore en phase de développement en septembre 2020) pour la création de reports scientifiques selon les normes et conventions APA (American Psychology Association).
Pour plus d'informations à ce sujet, voir :
- R Markdown: The Definitive Guide par Yihui Xie, J. J. Allaire et Garrett Grolemund
- R Markdown Cookbook par Yihui Xie, Christophe Dervieux et Emily Riederer
Communication parallèle (blog, sites web, ...)
De plus en plus de chercheurs utilisent des canaux de communication moins formels par rapport aux publications peer-reviewd, comme par exemple des blogs personnels ou des sites web de l'unité de recherche. Même sans la nécessité des aspects formels des publications scientifiques, il est souvent utile de pouvoir bénéficier également dans cette communication parallèle de certains éléments comme les citations, les graphiques, les résultats d'analyses, etc.
À ce propos, l'écosystème de R met à disposition des paquets qui permettent d'utiliser la même notation syntaxique que pour les articles scientifiques (voir point précédent et Introduction à Rmarkdown), mais pour créer des blogues ou sites web. Nous signalons à ce propos deux paquets souvent utilisés à cet effet :
Écosystème de partage
Un vaste écosystème de ressources s'est construit autour de R pendant les dernières années. Ces ressources sont représentées principalement par des paquets (voir Introduction conceptuelle à R). Ces paquets, néanmoins, ne se composent pas seulement de code informatique, mais incluent souvent aussi les éléments suivants :
- De la documentation, y compris des exemples d'utilisation concrète
- Des jeux de données à des finalités explicatives, de recherche, pour des simulations, etc.
- Des templates pour favoriser la mise en page et la communication (voir section précédente)
- Du support pour les personnes avec des difficultés ou qui veulent signaler des problèmes
- De la collaboration, car souvent un paquet est maintenu par plusieurs personnes en même temps
- Des synergies avec d'autres paquets ou même d'autres outils ou langages de programmation
- Etc.
Dans cette section, nous proposons d'abord une liste non exhaustive des endroits dans lesquels vous pouvez trouver des paquets de R, ainsi que les raisons de cette modalité de publication. Deuxièmement, nous proposons une liste de sites qui regroupent des paquets selon des critères sémantiques. Ensuite, nous illustrons quelques paquets qui s’intègrent avec des plateformes de partage souvent utilisées dans la recherche. Enfin, nous attirons l'attention sur l'importance de citer les paquets utilisés, ainsi que des manières pour le faire, et sur les bénéfices de produire et partager ses propres paquets.
Dépôts de paquets
Il existe différents endroits qui permet de télécharger ou téléverser des paquets à partager. Chaque endroit n'a pas les mêmes finalités et les mêmes assurances sur la qualité et fiabilité (i.e. sécurité) du code.
CRAN
CRAN est l'acronyme de Comprehensive R Archive Network et représente le dépôt officiel des paquets R. Il est maintenu par des volontaires et par la R Foundation. La publication des paquets sur cet archive doit suivre des critères bien spécifiques, présenté dans une policy.
Les paquets partagés à travers CRAN sont considéré fiables et d'intérêt général pour la communauté de R au sens large.
MRAN
MRAN est l'acronyme de Microsoft R Application Network. Il s'agit d'un dépôt de paquets de R maintenu par Microsoft qui vise garantir la réplicabilité des analyses. Pour cette raison, MRAN maintient un vaste archive de snapshot, c'est-à-dire l'état d'un paquet à un moment précis de son histoire, afin que des éventuels changements dans le code des paquets ne modifient pas le résultat de code qui utilise ces paquets, mais qui a été écrit avant ces changements. Pour plus d'informations sur les différentes versions, voir :
GitHub
GitHub est une plateforme en ligne liée principalement à la programmation et le développement informatique, mais qui est de plus en plus utilisée également dans le milieu académique. Sur GitHub se trouvent de millions de projets qui varient entre des petits projets personnels à des collaborations entre géants du milieu technologique.
Certains paquets de R sont souvent disponibles à travers GitHub surtout dans ces cadres de figure :
- Le paquet est en développement et il n'a pas encore atteint la maturité nécessaire pour être publié sur CRAN ;
- Vous voulez télécharger la toute nouvelle version d'un paquet disponible sur CRAN, mais qui est encore a une version précédente pour des raisons de stabilité ;
- Le paquet a une finalité très spécifique qui n'est pas d'intérêt pour la communauté de R au sens large, et donc ne trouve pas sa place sur CRAN ;
- Le paquet appartient à une institution ou laboratoire qui le met à disposition publiquement, mais qui n'a pas l'intérêt (ou le temps) de le publier et maintenir sur CRAN ;
- Le paquet n'est pas disponible publiquement (il se trouve dans un dépôt privé de GitHub).
Pour plus d'informations sur la plateforme, voir :
Collections de paquets
En septembre 2020, CRAN proposait plus de 15'000 paquets de R, un chiffre qui a augmenté de manière exponentielle dans les dernières années et qui est très probablement destiné à augmenter encore. Une telle quantité de paquets, d'une part, témoigne de la richesse et activité de l'écosystème R ; mais de l'autre peut rendre le choix d'un paquet compliqué en raison de l'étendu de l'offre disponible. Dans cette section, nous proposons une liste non exhaustive de sites ou plateformes qui propose des sélections ou mécanismes de recherche de paquets, surtout liés aux pratiques de la recherche.
rOpenSci
rOpenSci est une initiative non-profit fondée en 2011 par Karthik Ram, Scott Chamberlain, et Carl Boettiger afin d'encourager "une culture qui valorise la recherche ouverte et reproductible en utilisant des données partagées et des logiciels réutilisables" (notre traduction depuis la page About du site).
Le site met à disposition une collection de paquets sélectionnés qui sont en lien avec le Open Science, mais également des tutoriels, des espaces de discussion, et un blog pour informer sur les nouvautés.
Tidyverse
Tidyverse est une collection de paquets qui partagent la même philosophie et un syntaxe similaire, visant l'implémentation de bonnes pratiques dans les différents processus impliqués en Data Science. Tidyverse inclut notamment le paquet ggplot2 qui est très utilisé pour la visualisation des données et qui possède un site avec plusieurs extensions du paquet de base. Pour plus d'informations voir :
Paquets intégrés avec plateforme ou logiciels
Étant R très utilisé dans le cadre de la recherche dans différents domaines et disciplines académiques, il existe plusieurs paquets en relation avec des plateformes en lignes ou des logiciels utilisés dans le même contexte.
À noter que ces paquets demandent parfois d'insérer des données d'accès (utilisateur, password, API key, etc.). Il est donc important de faire attention à ne pas partager ensuite les fichiers de script, par exemple sur des plateformes comme GitHub, sans avoir mis en place des mécanismes de masquage de ces informations.
Nous proposons ici une liste non exhaustive de quelques paquets liés à des plateformes en ligne utilisées dans la recherche :
- osfr
- Paquet qui permet d'interagir avec la plateforme Open Science Framework (OSF). Le paquet permet de télécharger/téléverser des fichiers depuis différents dépôts des projets de recherche ouverts.
- qualtRics
- Paquet en relation avec la plateforme Qualtrics qui permet de créer des questionnaires/expériences en ligne.
- Google drive
- Paquet qui permet d'interagir avec les fichiers disponibles sur Google drive, par exemple pour automatiser l'importation de données.
- jspsychr
- Paquet qui permet de créer du matériel expérimental (e.g. stimuli) pour la plateforme jsPsych.
- aRxiv
- Paquet pour automatiser la recherche dans l'archive de preprints arXiv
Citation de R
Pour connaître comment citer correctement R dans une contribution scientifique, utiliser la fonction citation()
sans argument. En septembre 2020, cette fonction donne le résultat suivant :
To cite R in publications use:
R Core Team (2020). R: A language and environment for statistical
computing. R Foundation for Statistical Computing, Vienna, Austria. URL
https://www.R-project.org/.
A BibTeX entry for LaTeX users is
@Manual{,
title = {R: A Language and Environment for Statistical Computing},
author = {{R Core Team}},
organization = {R Foundation for Statistical Computing},
address = {Vienna, Austria},
year = {2020},
url = {https://www.R-project.org/},
}
We have invested a lot of time and effort in creating R, please cite it when
using it for data analysis. See also ‘citation("pkgname")’ for citing R
packages.
Le format BibTeX peut être utilisé pour sauvegarder la référence dans des logiciels de gestion de références académiques comme par exemple Zotero.
Citation des paquets
La citation des paquets R utilisés dans un projet de recherche est l'une de manière pour garantir à l'écosystème de partage de se maintenir et agrandir dans le temps. La fonction citation("nom du paquet")
permet de savoir comment citer correctement un paquet, en utilisant le nom du paquet comme argument. Par exemple :
citation("dplyr")
Le résultat qui s'affiche à l'écran peut varier selon le paquet, mais en général vous obtenez un texte pour une citation et, souvent, également le format BibTeX. Par exemple, la citation du paquet dplyr du code précédent donne ce résultat :
To cite package ‘dplyr’ in publications use:
Hadley Wickham, Romain François, Lionel Henry and Kirill Müller (2020).
dplyr: A Grammar of Data Manipulation. R package version 1.0.2.
https://CRAN.R-project.org/package=dplyr
A BibTeX entry for LaTeX users is
@Manual{,
title = {dplyr: A Grammar of Data Manipulation},
author = {Hadley Wickham and Romain François and Lionel {
Henry} and Kirill Müller},
year = {2020},
note = {R package version 1.0.2},
url = {https://CRAN.R-project.org/package=dplyr},
}
Tutoriels et bonnes pratiques
R est de plus en plus utilisé comme outil cognitif et instrument pour véhiculer des principes et pratiques utiles à la recherche. Il existe désormais des nombreuses contributions scientifiques qui sont entièrement basées, ou du moins accompagnées, par des scripts en R pour présenter des méthodes d'analyses. Ces contributions, originalement limitées à des analyses statistiques, concernent aujourd'hui plusieurs techniques comme par exemple :
- Les analyses textuelles, par exemple le topic modeling
- Des analyses en réseau
- L'extraction automatisée de données depuis le web
- Des paquets qui facilitent l'exposition correcte de résultats statistiques
- Le traitement de données depuis des instruments de recherche (e.g. données physiologiques, oculométrie, etc.)
- ...
Simulation et applications interactives
Un autre domain dans lequel R peut être utilisé concerne les simulations et les applications interactives qui peuvent être utilisées à plusieurs finalités :
- Construire des données de synthèse pour simuler la structure des vraies données qui seront récoltées par la suite ;
- Quantifier des paramètres d'intérêt dans un projet empirique (e.g. taille de l'échantillon, taille de l'effet, ...) ;
- Tester des modèles computationnels
- Simuler des phénomènes
- Mettre à disposition des données avec des modalités interactives pour les explorer
- Recueillir des données pour entraîner ou tester un algorithme génératif
- Etc.
Dans cette section, nous illustrons quelques éléments de base lié d'abord aux simulations et ensuite aux applications interactives.
Simulations
Dans les simulations, on exploite la puissance computationnelle de R et les différentes fonctions ou paquets qui permettent de simuler des données ou phénomènes.
Seed
R met à disposition un fonction pour définir un seed (i.e. un grain) pour que les fonctions basées sur des éléments aléatoires donnent toujours le même résultat. À cet effet, utilisez la fonction set.seed(chiffre)
, par exemple :
set.seed(100)
Si vous appelez cette fonction avec une fonction de génération aléatoire (voir plus bas), vous obtenez toujours les mêmes chiffres aléatoires. Par exemple, vous pouvez utiliser rnorm()
qui définit un nombre de chiffres aléatoires tirés d'une distribution normale :
set.seed(100)
rnorm(5, 100, 15)
Toute personne qui exécute les deux lignes de code en même temps va obtenir le résultat suivant :
[1] 92.46711 101.97297 98.81624 113.30177 101.75457
Par conséquent, il est possible de répliquer exactement des simulations basés sur des chiffres pseudo-aléatoires. À cet effet, il est de bonne pratique de placer la fonction set.seed()
au début des scripts qui prévoient l'utilisation de chiffres générés aléatoirement.
Fonction liées à des distributions
R met à disposition plusieurs fonctions en relation avec des distributions souvent utilisées dans le contexte des analyses de données en sciences sociales. Ces fonctions, disponibles dans le paquet de base de R, sont formées par un préfixe et l'identifiant de la distribution de référence, par exemple :
- dnorm ou dunif se réfèrent à la densité respectivement de la distribution normale et uniforme
- ppois ou pchisq se réfèrent à la probabilité respectivement de la distribution Poisson et Chi-carré
- qbinom ou qexp se réfèrent aux quantiles respectivement de la distribution binomiale et exponentielle
- rnorm ou runif génèrent des chiffres aléatoires en fonction respectivement de la distribution normale et uniforme
Dans cette section, nous nous intéressons à cette dernière famille de fonction r + distribution qui permet de générer des chiffres sur la base de la distribution de référence. Par exemple :
rnorm(10, mean = 50, sd = 5)
Cette fonction génère 10 chiffres aléatoires tirés d'une distribution normale caractérisée par une moyenne de 50 et un écart type de 5. Le résultat de cette fonction sera similaire à celui-ci :
[1] 47.51255 50.32265 57.11116 51.39906 56.47860 56.44914 50.84659 48.51602 48.70439 45.62678
En revanche, la fonction runif()
utilise une distribution uniforme dont il faut définir les limites inférieurs et supérieur :
runif(10, min = 0, max = 100)
Le résultat de cette instruction sera similaire à celui-ci :
[1] 68.809403 8.343671 12.544272 74.769049 67.116004 3.050132 51.975150 5.059291 99.168717 39.174458
Pour mieux apprécier le fonctionnement de ces fonctions, on peut tirer un nombre plus large de chiffres aléatoires et utiliser la fonction hist()
pour comparer les deux résultats (voir Introduction à la visualisation des données avec R) :
# Générer deux vecteurs de chiffres
random_normal <- rnorm(1000, mean = 50, sd = 5)
random_uniform <- runif(1000, min = 0, max = 100)
# Afficher les deux graphiques l'un sur l'autre
par(mfrow = c(2,1))
# Créer les histogrammes avec la même échelle sur l'axe verticale
hist(random_normal, ylim = c(0, 500))
hist(random_uniform, ylim = c(0, 500))
Le graphique qui s'affiche à la suite de ce script montre bien la différence entre les deux vecteurs générés. Le premier montre des chiffres qui se distribuent de manière spéculaire autour de la moyenne de 50. Le deuxième montre des barres toutes plus ou moins de la même hauteur.
Créer des jeux des données fictifs
Les simulations permettent de créer des jeux de données fictifs qui peuvent être utilisés pour tester des analyses statistiques, prévoir la magnitude d'effets réalistes dans une étude ou expérience, tester un modèle prédictif sur la base de données contrôlées, etc.
La complexité de la simulation est proportionnelle à la complexité du jeu de données envisagé. Dans cette section, nous proposons simplement quelques exemples pour montrer le principe. Nous utiliserons notamment les fonctions de génération aléatoire des distributions vues plus haut dans l'article, ainsi que d'autres fonctions, comme par exemple la fonction sample()
, qui s'appliquent par exemple à des variables discrètes.
Les jeux des données les plus simples à créer sont celles dans lesquels :
- Toute observation (i.e. chaque ligne) est indépendante des autres (e.g. deux lignes n'appartiennent pas au même participant)
- Toute variable (i.e. chaque colonne) est (1) créé aléatoirement et (2) est indépendante des autres variables (e.g. le fait d'avoir une certaine valeur dans la variable X n'a aucune influence sur la valeur de la variable Z)
Ce cadre de figure peut être intéressante par exemple pour simuler des jeux des données dans lesquels il n'existe aucune relation entre variables, ce qui pourrait être exploité dans une série de plusieurs simulations pour avoir une idée du taux de faux positifs qu'on pourrait obtenir (e.g. des erreurs de Type I dans les analyses statistiques fréquentistes).
Voici un exemple de jeu de données qui simule 100 observations avec un plan expérimental caractérisé par :
- Une variable dépendante continue avec moyenne de 100 et écart type de 10
- Une variable indépendante catégorielle avec deux modalités (Treatment vs. Control) avec la même probabilité d'occurrence (50% vs. 50%)
- Une variable indépendante catégorielle avec trois modalités (Negative vs. Neutral vs. Positive) avec des occurrences différentes (30% Negative, 20% Neutral, et 50% Positive)
- Une variable indépendante continue, avec une moyenne de 10 et un écart type de 5
# Jeu de données 2 VI cat. + 1 VI cont. et une VD cont.
set.seed(8232) # pour obtenir exactement le même jeu
sim_data <- data.frame(
vd_cont = rnorm(100, 100, 10),
vi_cat_1 = sample(c("Control", "Treatment"), 100, replace = TRUE, prob = c(0.5, 0.5)),
vi_cat_2 = sample(c("Negative", "Neutral", "Positive"), 100, replace = TRUE, prob = c(0.3, 0.2, 0.5)),
vi_cont = rnorm(100, 10, 5)
)
Vous pouvez observer la répartition dans les variables indépendantes catégorielles avec le code table(sim_data$vi_cat_1, sim_data$vi_cat_2)
qui donne le résultat suivant :
Negative Neutral Positive
Control 15 6 27
Treatment 15 9 28
Paquets pour simuler des données
Lorsque les simulations deviennent plus complexes, il existe la possibilité d'exploiter des paquets de R qui ont des finalités explicitement liées la simulation des données. Voici quelques exemples de ces paquets :
- faux : le paquet faux (DeBruine, 2021) permet de simuler des données de différentes structures, notamment des designs factoriels (e.g. Analyse de la variance) souvent utilisés en sciences sociales.
- simstudy : le paquet simstudy Goldfeld & Wujciak-Jens, 2020) permet de créer différents jeu de données à travers la définition de variables. Le résultat sont des jeu de données rectangulaire qui peuvent être utilisées pour différentes techniques de modélisation des données avec R
- lsasim : le paquet lsasim (Matta, Rutkowski, Rutkowski, Liaw & Leoncio, 2021) permet de simuler des (larges) jeux des données représentant des questionnaires ou test d'évaluation.
Applications interactives
R permet de créer des applications interactives en déclenchent de la computation (i.e. du code R) à travers une interface utilisateur accessible par exemple à travers un navigateur web. De ce fait, il est possible de mettre à disposition des chercheurs des applications spécifiques qui permettent de mener à bien certains types d'opérations (e.g. analyses, extraction de données, ...) sans passer par le scripting et sans avoir à connaitre le langage R.
La technologie la plus utilisée à cet effet a été s'appelle Shiny et a été développée par RStdio, PBC, la même compagnie qui développe et maintient l'IDE RStudio souvent utilisée comme interface de programmation pour R.
Voici quelques ressources et exemples à propos de Shiny :
- Site officiel sur RStudio : le site propose également une gallerie avec des exemples] dans différents domains
- Mastering Shiny : livre en open access sur le web écrit par Hadley Wickham. Le livre représente une référence complète à différents aspects de Shiny.
- ANOVA power : exemple d'application Shiny développée par Daniel Lakens qui permet de calculer la puissance statistique (e.g. déterminer le nombre de participants pour une étude) pour des plans de recherche utilisant l'Analyse de la variance comme test statistique
Contrôle de qualité et fiabilité
R est utilisé également pour créer des systèmes automatisés de contrôle de la qualité/fiabilité des résultats disponibles dans des articles de recherche. Il s'avère en effet que plusieurs articles présentent des erreurs dans l'exposition des résultats des tests statistiques qu'on peut identifier directement depuis les chiffres normalement affichés dans un article. Par exemple, des incongruences entre les degrés de liberté d'un test et le design expérimental (e.g. nombre de participants et variable indépendantes) ou encore entre le résultat du test statistique et la p-valuer affichée.
statcheck
statcheck est un paquet de R développé par Sacha Epskamp et Michele B. Nuijten qui permet de détecter des erreurs dans l'affichage des résultats des tests statistiques dans des articles. Il a été notamment utilisé dans l'article The prevalence of statistical reporting errors in psychology (1985-2013) (Nuijten et al., 2016).
Conclusion
Cette page à proposé un survol des différentes utilisations possibles de R dans la recherche. Intégrer une langage de programmation ne correspond pas seulement à disposer d'un logiciel puissant et flexible, mais également - et surtout - d'un outil cognitif qui permet de raissoner de manière différente. La puissance combinatoire d'un langage de programmation permet en effet de créer des scénarios dans lesquels l'automatisation des processus peut être adoptée pour différentes finalités.
L'investissement dans la maîtrise d'un langage de programmation comme R, même si intensif et avec une courbe d'apprentissage qui peut commencer à donner ses fruits après un certain temps, est donc repayé par l'élargissement d'options et par la mise en pratique plus rigureuse d'analyse statistiques.