{"id":4800,"date":"2026-10-14T18:01:18","date_gmt":"2026-10-14T18:01:18","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-calculer-statistiques-descriptives-par-groupe-dans-r\/"},"modified":"2026-10-14T18:01:18","modified_gmt":"2026-10-14T18:01:18","slug":"comment-calculer-statistiques-descriptives-par-groupe-dans-r","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-calculer-statistiques-descriptives-par-groupe-dans-r","title":{"rendered":"Comment calculer des statistiques descriptives par groupe dans R"},"content":{"rendered":"<p>L&rsquo;exploration empirique des ph\u00e9nom\u00e8nes psychologiques, cognitifs et comportementaux repose sur une pr\u00e9misse m\u00e9thodologique cardinale : la d\u00e9composition de la variabilit\u00e9 interindividuelle et intergroupe. Dans le cadre de protocoles exp\u00e9rimentaux ou quasi-exp\u00e9rimentaux, qu&rsquo;il s&rsquo;agisse d&rsquo;\u00e9valuer l&rsquo;efficacit\u00e9 diff\u00e9rentielle d&rsquo;une psychoth\u00e9rapie cognitive et comportementale face \u00e0 un groupe t\u00e9moin sur liste d&rsquo;attente, ou d&rsquo;examiner l&rsquo;impact de l&rsquo;\u00e2ge sur l&#8217;empan mn\u00e9sique, la simple analyse agr\u00e9g\u00e9e d&rsquo;un \u00e9chantillon global s&rsquo;av\u00e8re non seulement insuffisante, mais souvent trompeuse. La stratification des donn\u00e9es constitue l&rsquo;\u00e9tape liminaire incontournable permettant au chercheur de contextualiser les scores psychom\u00e9triques, de v\u00e9rifier les postulats de distribution et d&rsquo;extraire des indicateurs synth\u00e9tiques repr\u00e9sentatifs de chaque sous-population d&rsquo;int\u00e9r\u00eat.<\/p>\n<p>Le langage de programmation <a rel=\"noopener noreferrer\" href=\"https:\/\/www.r-project.org\/\">R<\/a> s&rsquo;est impos\u00e9 au fil des d\u00e9cennies comme la lingua franca de la bio-statistique et de la mod\u00e9lisation psychom\u00e9trique contemporaine. Gr\u00e2ce \u00e0 son \u00e9cosyst\u00e8me modulaire et \u00e0 sa nature open-source, R offre une flexibilit\u00e9 sans \u00e9gale pour manipuler, r\u00e9sumer et mod\u00e9liser des jeux de donn\u00e9es complexes. Toutefois, face \u00e0 la multiplicit\u00e9 des paradigmes d&rsquo;\u00e9criture \u2014 depuis les fonctions canoniques issues du syst\u00e8me fondamental de R (Base R) jusqu&rsquo;aux syntaxes d\u00e9claratives et \u00e9l\u00e9gantes incarn\u00e9es par le m\u00e9ta-package <a rel=\"noopener noreferrer\" href=\"https:\/\/www.tidyverse.org\/\">Tidyverse<\/a> \u2014, les praticiens de la recherche en psychologie se heurtent fr\u00e9quemment \u00e0 des dilemmes d&rsquo;impl\u00e9mentation. Choisir le bon idiome programmatique, garantir l&rsquo;exactitude des estimateurs de dispersion et assurer une reproductibilit\u00e9 computationnelle sans faille repr\u00e9sentent des comp\u00e9tences fondamentales dans le paysage scientifique moderne.<\/p>\n<p>Ce guide exhaustif a pour vocation de formaliser de mani\u00e8re approfondie les techniques de calcul et d&rsquo;interpr\u00e9tation des statistiques descriptives par groupe dans R. Con\u00e7u sp\u00e9cifiquement pour r\u00e9pondre aux exigences m\u00e9thodologiques de la recherche acad\u00e9mique en psychologie et dans les sciences du comportement, cet article d\u00e9taille chaque \u00e9tape du processus d&rsquo;agr\u00e9gation. Du diagnostic distributionnel pr\u00e9alable aux exigences \u00e9ditoriales strictes de la 7e \u00e9dition de l&rsquo;American Psychological Association (APA), nous explorerons pas \u00e0 pas les paradigmes algorithmiques, la gestion des donn\u00e9es manquantes, le traitement des plans factoriels crois\u00e9s ainsi que l&rsquo;automatisation vectorielle \u00e0 grande \u00e9chelle.<\/p>\n<h2>1. Introduction \u00e0 l&rsquo;analyse descriptive stratifi\u00e9e en sciences psychologiques avec R<\/h2>\n<h3>1.1 N\u00e9cessit\u00e9 \u00e9pist\u00e9mologique de la comparaison intergroupe en psychologie<\/h3>\n<p>Dans l&rsquo;architecture de la recherche en sciences psychologiques, la stratification des observations constitue bien plus qu&rsquo;une simple commodit\u00e9 technique : elle repr\u00e9sente le socle \u00e9pist\u00e9mologique sur lequel s&rsquo;\u00e9rige la d\u00e9couverte de r\u00e9gularit\u00e9s comportementales. D\u00e8s lors que l&rsquo;on s&rsquo;int\u00e9resse \u00e0 la psychopathologie, \u00e0 la psychologie du d\u00e9veloppement ou \u00e0 la neuropsychologie, l&rsquo;h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 intrins\u00e8que des cohortes humaines interdit toute agr\u00e9gation monolithique. Comparer un groupe clinique souffrant de trouble d\u00e9pressif majeur \u00e0 un \u00e9chantillon t\u00e9moin sain impose de calculer des m\u00e9triques distinctes pour chaque modalit\u00e9 de la variable ind\u00e9pendante cat\u00e9gorielle. Si l&rsquo;on amalgamait ces populations au sein d&rsquo;un estimateur unique de tendance centrale, on commettrait un biais d&rsquo;agr\u00e9gation majeur, masquant d&rsquo;\u00e9ventuels effets de masquage ou le paradoxe de Simpson, o\u00f9 la tendance observ\u00e9e au niveau global contredit les r\u00e9alit\u00e9s sous-jacentes des strates.<\/p>\n<p>L&rsquo;\u00e9valuation rigoureuse de l&rsquo;impact des interventions th\u00e9rapeutiques et des manipulations exp\u00e9rimentales en laboratoire repose sur cette m\u00eame logique de contraste. Qu&rsquo;il s&rsquo;agisse d&rsquo;administrer une t\u00e2che de temps de r\u00e9action s\u00e9lectif sous diff\u00e9rentes conditions de stress induit, ou de mesurer la r\u00e9duction de l&rsquo;\u00e9vitement phobique apr\u00e8s une d\u00e9sensibilisation par r\u00e9alit\u00e9 virtuelle, le chercheur doit isoler l&rsquo;effet du traitement par rapport aux fluctuations r\u00e9siduelles. La stratification permet d&rsquo;isoler la variance intergroupe (variance syst\u00e9matique imputable \u00e0 l&rsquo;intervention) de la variance intragroupe (variance non expliqu\u00e9e ou erreur de mesure). Avant m\u00eame d&rsquo;ex\u00e9cuter le moindre test d&rsquo;hypoth\u00e8se nulle \u2014 tel qu&rsquo;un test t de Student ou une analyse de variance \u2014, la fid\u00e9lit\u00e9 et la pr\u00e9cision des mesures agr\u00e9g\u00e9es doivent faire l&rsquo;objet d&rsquo;un examen minutieux afin d&rsquo;\u00e9viter d&rsquo;alimenter les mod\u00e8les inf\u00e9rentiels avec des r\u00e9sum\u00e9s d\u00e9grad\u00e9s ou corrompus.<\/p>\n<p>Enfin, la production de r\u00e9sum\u00e9s statistiques par groupe r\u00e9pond \u00e0 une contrainte institutionnelle et normative imp\u00e9rieuse formalis\u00e9e par l&rsquo;<a rel=\"noopener noreferrer\" href=\"https:\/\/apastyle.apa.org\/\">American Psychological Association<\/a>. Les normes de publication prescrites par l&rsquo;APA (7e \u00e9dition) exigent que tout compte-rendu d&rsquo;exp\u00e9rience fournisse explicitement la taille effective des groupes (<em>n<\/em>), les estimations de position (moyenne <em>M<\/em>, m\u00e9diane <em>Mdn<\/em>) ainsi que les estimateurs de variabilit\u00e9 (\u00e9cart-type <em>SD<\/em>, intervalle de confiance <em>IC<\/em>). L&rsquo;absence de ces param\u00e8tres descriptifs d\u00e9sagr\u00e9g\u00e9s invalide la publication scientifique en privant les pairs de la possibilit\u00e9 de v\u00e9rifier la plausibilit\u00e9 des r\u00e9sultats, de calculer des tailles d&rsquo;effet standardis\u00e9es (d de Cohen, g de Hedges) et de compiler ult\u00e9rieurement ces donn\u00e9es au sein de m\u00e9ta-analyses quantitatives.<\/p>\n<h3>1.2 Pr\u00e9sentation de l&rsquo;environnement R pour le traitement des donn\u00e9es empiriques<\/h3>\n<p>L&rsquo;environnement R se distingue des logiciels statistiques commerciaux \u00e0 interface graphique par son architecture fond\u00e9e sur la programmation fonctionnelle orient\u00e9e donn\u00e9es. Con\u00e7u originellement par Ross Ihaka et Robert Gentleman comme une impl\u00e9mentation libre du langage S de John Chambers, R excelle dans la manipulation des matrices, des vecteurs atomiques et des structures tabulaires h\u00e9t\u00e9rog\u00e8nes nomm\u00e9es data frames. Cette structure de donn\u00e9es intrins\u00e8que est parfaitement align\u00e9e avec la structure matricielle standard des inventaires psychom\u00e9triques, o\u00f9 chaque ligne mod\u00e9lise un participant unique et chaque colonne enregistre une variable d&rsquo;identification, une condition exp\u00e9rimentale ou un score d&rsquo;item issu d&rsquo;une \u00e9chelle psychologique.<\/p>\n<p>Au sein de cet \u00e9cosyst\u00e8me, deux grands paradigmes computationnels coexistent pour le traitement des donn\u00e9es : l&rsquo;approche historique dite Base R et le cadre m\u00e9thodologique moderne port\u00e9 par le Tidyverse, conceptualis\u00e9 par Hadley Wickham. L&rsquo;approche Base R privil\u00e9gie la stabilit\u00e9 temporelle absolue, garantissant que des scripts r\u00e9dig\u00e9s il y a deux d\u00e9cennies continuent de s&rsquo;ex\u00e9cuter fid\u00e8lement sans alt\u00e9ration logicielle. Elle mobilise des fonctions natives hautement optimis\u00e9es en C et Fortran, exploitant des syntaxes d&rsquo;indexation vectorielle et matricielle parfois compactes mais occasionnellement cryptiques. \u00c0 l&rsquo;oppos\u00e9, le Tidyverse s&rsquo;articule autour d&rsquo;une grammaire de manipulation de donn\u00e9es explicite et coh\u00e9rente, o\u00f9 chaque verbe op\u00e9rationnel correspond \u00e0 une \u00e9tape conceptuelle de transformation, facilitant la relecture collaborative et la maintenance des cha\u00eenes de traitement.<\/p>\n<p>La sup\u00e9riorit\u00e9 \u00e9pist\u00e9mique de l&rsquo;environnement R sur les solutions ferm\u00e9es (telles que SPSS, SAS ou Statistica) r\u00e9side dans sa tra\u00e7abilit\u00e9 computationnelle int\u00e9grale. Dans un contexte de crise de la reproductibilit\u00e9 scientifique en psychologie, le script R agit comme un carnet de laboratoire num\u00e9rique exhaustif. Chaque d\u00e9cision de filtrage d&rsquo;un participant aberrant, chaque imputation de donn\u00e9e lacunaire et chaque calcul de score composite par sous-groupe y est codifi\u00e9 de fa\u00e7on d\u00e9terministe. Cette reproductibilit\u00e9 algorithmique garantit qu&rsquo;un r\u00e9analyste externe peut, \u00e0 partir des donn\u00e9es brutes num\u00e9ris\u00e9es, r\u00e9g\u00e9n\u00e9rer \u00e0 l&rsquo;identique l&rsquo;ensemble des tables de statistiques descriptives sans ambigu\u00eft\u00e9 sur les choix proc\u00e9duraux op\u00e9r\u00e9s.<\/p>\n<h3>1.3 Aper\u00e7u des strat\u00e9gies d&rsquo;agr\u00e9gation et objectifs du tutoriel<\/h3>\n<p>L&rsquo;agr\u00e9gation de donn\u00e9es consiste \u00e0 r\u00e9duire une s\u00e9rie d&rsquo;observations individuelles en un nombre restreint de m\u00e9tadonn\u00e9es r\u00e9sum\u00e9es, conditionnellement aux niveaux d&rsquo;une ou plusieurs variables de d\u00e9coupage. Pour mener \u00e0 bien cette op\u00e9ration, le praticien dispose sous R d&rsquo;un spectre m\u00e9thodologique vari\u00e9. D&rsquo;une part, les fonctions d&rsquo;application vectorielle classiques, incarn\u00e9es principalement par la fonction <code>tapply()<\/code>, d\u00e9coupent un vecteur de donn\u00e9es atomiques selon un facteur d&rsquo;indexation pour lui appliquer un op\u00e9rateur statistique donn\u00e9. Cette strat\u00e9gie se distingue par son ex\u00e9cution sans d\u00e9pendance logicielle externe et sa redoutable concision syntaxique pour des agr\u00e9gations univari\u00e9es.<\/p>\n<p>D&rsquo;autre part, la syntaxe d\u00e9clarative d\u00e9ploy\u00e9e au sein du package <code>dplyr<\/code> r\u00e9volutionne cette logique en articulant les fonctions <code>group_by()<\/code> et <code>summarize()<\/code>. Ce paradigme con\u00e7oit la stratification non pas comme une s\u00e9rie d&rsquo;extractions vectorielles d\u00e9connect\u00e9es, mais comme une transformation globale et ordonn\u00e9e d&rsquo;un tableau de donn\u00e9es structur\u00e9. Le flux de travail s&rsquo;organise alors selon un pipeline continu, transformant un tableau brut de micro-donn\u00e9es comportementales en une table de synth\u00e8se rectangulaire propre, directement compatible avec les exigences des logiciels de typographie scientifique ou les modules de visualisation graphique.<\/p>\n<p>Le pr\u00e9sent tutoriel se propose de formaliser ces d\u00e9marches au travers d&rsquo;une progression didactique rigoureuse. Nous d\u00e9buterons par la clarification th\u00e9orique des indicateurs de position, de dispersion et de forme requis pour caract\u00e9riser des variables psychom\u00e9triques. Nous poursuivrons par la manipulation pratique d&rsquo;un jeu de donn\u00e9es simulant un essai cognitif randomis\u00e9, en comparant syst\u00e9matiquement les performances, la syntaxe et la lisibilit\u00e9 des approches Base R et Tidyverse. Nous aborderons ensuite les probl\u00e9matiques complexes du terrain : gestion des valeurs manquantes, d\u00e9s\u00e9quilibres d&rsquo;effectifs dans les plans factoriels crois\u00e9s, m\u00e9triques robustes face aux d\u00e9rives distributionnelles, automatisation multi-colonnes, alternatives \u00e0 haute performance et restitution finale au format APA.<\/p>\n<h2>2. Fondements conceptuels des mesures de tendance centrale et de dispersion par strate<\/h2>\n<h3>2.1 Indicateurs param\u00e9triques de centralit\u00e9 et d&rsquo;h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9<\/h3>\n<p>L&rsquo;analyse param\u00e9trique de la tendance centrale repose sur l&rsquo;hypoth\u00e8se sous-jacente que les observations observ\u00e9es gravitent de mani\u00e8re sym\u00e9trique autour d&rsquo;une valeur fondamentale id\u00e9ale. L&rsquo;indicateur universellement sollicit\u00e9 demeure la moyenne arithm\u00e9tique d&rsquo;\u00e9chantillon, not\u00e9e <em>M<\/em> ou <span class=\"arabpsy-math-inline\" data-latex=\"\\bar{x}\">$\\bar{x}$<\/span>, d\u00e9finie comme la somme des scores individuels divis\u00e9e par l&rsquo;effectif total du sous-groupe :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\bar{x} = \\frac{1}{n}\\sum_{i=1}^{n} x_i\">$$\\bar{x} = \\frac{1}{n}\\sum_{i=1}^{n} x_i$$<\/span><\/p>\n<p>En termes physiques et g\u00e9om\u00e9triques, la moyenne arithm\u00e9tique repr\u00e9sente le centre de gravit\u00e9 exact de la distribution empirique au sein de la strate consid\u00e9r\u00e9e. Elle minimise la somme des carr\u00e9s des \u00e9carts de chaque observation par rapport \u00e0 elle-m\u00eame, conf\u00e9rant \u00e0 cet estimateur une propri\u00e9t\u00e9 math\u00e9matique remarquable d&rsquo;efficacit\u00e9 lorsque la distribution parentale est normale.<\/p>\n<p>Toutefois, caract\u00e9riser un groupe exp\u00e9rimental uniquement par sa moyenne rel\u00e8ve d&rsquo;une illusion r\u00e9ductrice. Deux cohortes d&rsquo;individus peuvent pr\u00e9senter une moyenne rigoureusement identique de 100 \u00e0 un sous-test d&rsquo;efficience cognitive tout en manifestant des profils d&rsquo;h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 radicalement divergents. L&rsquo;estimation de la variabilit\u00e9 intragroupe est mesur\u00e9e param\u00e9triquement par la variance d&rsquo;\u00e9chantillon (<span class=\"arabpsy-math-inline\" data-latex=\"s^2\">$s^2$<\/span>) et son corollaire standardis\u00e9, l&rsquo;\u00e9cart-type d&rsquo;\u00e9chantillon (<span class=\"arabpsy-math-inline\" data-latex=\"s\">$s$<\/span> ou <em>SD<\/em>), calcul\u00e9 avec la correction de Bessel au d\u00e9nominateur (<span class=\"arabpsy-math-inline\" data-latex=\"n - 1\">$n &#8211; 1$<\/span>) afin de garantir un estimateur sans biais de la variance populationnelle :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"s = \\sqrt{\\frac{1}{n - 1}\\sum_{i=1}^{n}(x_i - \\bar{x})^2}\">$$s = \\sqrt{\\frac{1}{n &#8211; 1}\\sum_{i=1}^{n}(x_i &#8211; \\bar{x})^2}$$<\/span><\/p>\n<p>L&rsquo;\u00e9cart-type s&rsquo;exprime dans la m\u00eame unit\u00e9 m\u00e9trique que la variable psychologique originale, ce qui facilite son interpr\u00e9tation clinique directe. La validit\u00e9 inf\u00e9rentielle et descriptive de ces deux estimateurs param\u00e9triques est subordonn\u00e9e au postulat de normalit\u00e9 gaussienne. Lorsque les donn\u00e9es psychologiques s&rsquo;\u00e9cartent sensiblement de cette forme en cloche sym\u00e9trique, la moyenne et l&rsquo;\u00e9cart-type perdent leur repr\u00e9sentativit\u00e9, se trouvant artificiellement tir\u00e9s par les valeurs extr\u00eames et d\u00e9formant la r\u00e9alit\u00e9 empirique du sous-groupe \u00e9tudi\u00e9.<\/p>\n<h3>2.2 Indicateurs non param\u00e9triques et d&rsquo;ordre<\/h3>\n<p>Face \u00e0 des scores psychologiques pr\u00e9sentant des asym\u00e9tries prononc\u00e9es ou mesur\u00e9s sur des \u00e9chelles ordinales \u2014 telles que les \u00e9chelles d&rsquo;attitudes de Likert \u00e0 5 ou 7 points \u2014, le recours aux statistiques non param\u00e9triques fond\u00e9es sur l&rsquo;ordre s&rsquo;impose d&rsquo;un point de vue psychom\u00e9trique. L&rsquo;indicateur central par excellence est la m\u00e9diane empirique (<span class=\"arabpsy-math-inline\" data-latex=\"Mdn\">$Mdn$<\/span>), d\u00e9finie comme le point de coupure statistique divisant la distribution ordonn\u00e9e des participants en deux moiti\u00e9s \u00e9quiprobables : 50 % des individus pr\u00e9sentent un score inf\u00e9rieur ou \u00e9gal \u00e0 la m\u00e9diane, et 50 % pr\u00e9sentent un score sup\u00e9rieur ou \u00e9gal. Contrairement \u00e0 la moyenne, la m\u00e9diane jouit d&rsquo;un point de rupture \u00e9lev\u00e9 (50 %), signifiant que pr\u00e8s de la moiti\u00e9 des observations d&rsquo;un sous-groupe peuvent \u00eatre contamin\u00e9es par des valeurs aberrantes sans que la m\u00e9diane ne devienne infinie.<\/p>\n<p>Pour mesurer la dispersion au sein d&rsquo;une approche d&rsquo;ordre, on d\u00e9compose la distribution selon ses quantiles, et plus sp\u00e9cifiquement ses quartiles. Le premier quartile (<span class=\"arabpsy-math-inline\" data-latex=\"Q_1\">$Q_1$<\/span> ou 25e centile) d\u00e9limite les 25 % des scores les plus faibles, tandis que le troisi\u00e8me quartile (<span class=\"arabpsy-math-inline\" data-latex=\"Q_3\">$Q_3$<\/span> ou 75e centile) marque le seuil en dessous duquel se situent 75 % des participants. L&rsquo;\u00e9cart interquartile, d\u00e9sign\u00e9 par l&rsquo;acronyme anglophone IQR (<em>Interquartile Range<\/em>), mesure l&rsquo;\u00e9tendue occup\u00e9e par les 50 % centraux de l&rsquo;\u00e9chantillon :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"IQR = Q_3 - Q_1\">$$IQR = Q_3 &#8211; Q_1$$<\/span><\/p>\n<p>L&rsquo;IQR offre une m\u00e9trique d&rsquo;h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 robuste et insensible aux queues de distribution \u00e9paisses. Dans l&rsquo;exploration des donn\u00e9es de questionnaires subjectifs ou de mesures d&rsquo;inventaires de personnalit\u00e9 o\u00f9 les participants \u00e9vitent fr\u00e9quemment les r\u00e9ponses neutres ou manifestent un biais de d\u00e9sirabilit\u00e9 sociale, la conjonction de la m\u00e9diane et de l&rsquo;\u00e9cart interquartile restitue fid\u00e8lement la tendance dominante du groupe sans \u00eatre alt\u00e9r\u00e9e par la non-lin\u00e9arit\u00e9 des intervalles de l&rsquo;\u00e9chelle d&rsquo;\u00e9valuation.<\/p>\n<h3>2.3 Indices de forme et d\u00e9tection des asym\u00e9tries de distribution<\/h3>\n<p>L&rsquo;examen des statistiques descriptives par strate ne saurait s&rsquo;achever sans l&rsquo;\u00e9valuation approfondie de la morphologie distributionnelle. Deux moments d&rsquo;ordre sup\u00e9rieur fournissent des informations critiques sur la nature des scores : le coefficient d&rsquo;asym\u00e9trie (<em>skewness<\/em>) et le coefficient d&rsquo;aplatissement (<em>kurtosis<\/em>). Le coefficient d&rsquo;asym\u00e9trie mesure le degr\u00e9 d&rsquo;asym\u00e9trie d&rsquo;une distribution empirique autour de sa moyenne. Une valeur proche de z\u00e9ro indique une sym\u00e9trie parfaite. Une asym\u00e9trie positive (<span class=\"arabpsy-math-inline\" data-latex=\"skewness &gt; 0\">$skewness > 0$<\/span>) signale un \u00e9tirement prononc\u00e9 de la queue de distribution vers la droite (ph\u00e9nom\u00e8ne typique observ\u00e9 dans les chronom\u00e9tries cognitives et les temps de r\u00e9action, o\u00f9 une majorit\u00e9 de r\u00e9ponses rapides coexiste avec quelques latences extr\u00eamement longues). \u00c0 l&rsquo;inverse, une asym\u00e9trie n\u00e9gative ($skewness < 0$) traduit un plafonnement des scores, fr\u00e9quent lors d'\u00e9preuves cognitives trop faciles induisant un effet de plafond.<\/p>\n<p>Le coefficient d&rsquo;aplatissement \u00e9value pour sa part l&rsquo;\u00e9paisseur des queues de distribution et la pro\u00e9minence du pic central comparativement \u00e0 une loi normale de r\u00e9f\u00e9rence. Selon la formulation de Pearson (ou le kurtosis exc\u00e9dentaire, centr\u00e9 sur z\u00e9ro pour une gaussienne parfaite), une distribution dite leptocurtique (<span class=\"arabpsy-math-inline\" data-latex=\"kurtosis &gt; 0\">$kurtosis > 0$<\/span>) pr\u00e9sente des queues lourdes et une forte concentration centrale, sugg\u00e9rant une propension accrue \u00e0 g\u00e9n\u00e9rer des valeurs atypiques \u00e9loign\u00e9es. Une distribution platycurtique ($kurtosis < 0$) pr\u00e9sente au contraire des queues minces et une dispersion aplatie uniforme.<\/p>\n<p>L&rsquo;analyse de ces indices au sein de chaque groupe exp\u00e9rimental oriente de fa\u00e7on d\u00e9terminante le choix subs\u00e9quent des m\u00e9triques de synth\u00e8se. La d\u00e9tection d&rsquo;une d\u00e9rive asym\u00e9trique s\u00e9v\u00e8re au sein d&rsquo;une strate exp\u00e9rimentale avertit le statisticien qu&rsquo;un r\u00e9sum\u00e9 fond\u00e9 purement sur la moyenne et l&rsquo;\u00e9cart-type travestira la structure des donn\u00e9es. D\u00e8s lors, le reporting conjoint de la moyenne, de la m\u00e9diane, de l&rsquo;\u00e9cart-type, de l&rsquo;IQR et des coefficients de forme devient une obligation m\u00e9thodologique pour garantir la transparence empirique du protocole de recherche.<\/p>\n<h2>3. Structuration et nettoyage des donn\u00e9es psychologiques pr\u00e9alables \u00e0 l&rsquo;agr\u00e9gation<\/h2>\n<h3>3.1 V\u00e9rification des structures de donn\u00e9es (Data Frame et Tibble)<\/h3>\n<p>Avant d&rsquo;engager la moindre op\u00e9ration de calcul statistique, l&rsquo;analyste doit imp\u00e9rativement auditer la structure formelle de ses conteneurs de donn\u00e9es dans l&rsquo;environnement R. Les donn\u00e9es issues d&rsquo;exp\u00e9riences psychologiques sont conventionnellement h\u00e9berg\u00e9es au sein d&rsquo;un <code>data.frame<\/code> standard ou de son extension moderne, le <code>tibble<\/code> (sp\u00e9cifique au Tidyverse). L&rsquo;erreur la plus pr\u00e9judiciable consisterait \u00e0 tenter d&rsquo;agr\u00e9ger des scores cognitifs enregistr\u00e9s sous forme de cha\u00eenes de caract\u00e8res (<em>character<\/em>) r\u00e9sultant d&rsquo;une importation mal configur\u00e9e d&rsquo;un fichier CSV ou d&rsquo;un encodage textuel erron\u00e9 des valeurs d\u00e9cimales (par exemple, la pr\u00e9sence de virgules au lieu de points d\u00e9cimaux).<\/p>\n<p>Les variables d\u00e9pendantes quantitatives doivent imp\u00e9rativement \u00eatre typ\u00e9es sous forme de vecteurs num\u00e9riques (<code>numeric<\/code> ou <code>double<\/code>), tandis que les variables ind\u00e9pendantes destin\u00e9es au d\u00e9coupage exp\u00e9rimental doivent \u00eatre coerc\u00e9es en facteurs (<code>factor<\/code>). Les facteurs constituent une classe d&rsquo;objets fondamentale sous R : ils associent des codes entiers internes sous-jacents \u00e0 des \u00e9tiquettes s\u00e9mantiques textuelles (les niveaux ou <em>levels<\/em>). L&rsquo;attribution explicite du statut de facteur emp\u00eache R de traiter une condition exp\u00e9rimentale cod\u00e9e num\u00e9riquement (ex. 1 pour le groupe contr\u00f4le, 2 pour le traitement A, 3 pour le traitement B) comme un continuum arithm\u00e9tique continu.<\/p>\n<p>L&rsquo;inspection initiale s&rsquo;op\u00e8re canoniquement par l&rsquo;appel aux fonctions diagnostiques <code>str()<\/code> en Base R, ou <code>glimpse()<\/code> dans l&rsquo;\u00e9cosyst\u00e8me Tidyverse. Ces commandes r\u00e9v\u00e8lent instantan\u00e9ment le nombre total de lignes, d&rsquo;identifiants uniques, la nature typologique de chaque colonne ainsi qu&rsquo;un aper\u00e7u des premi\u00e8res entr\u00e9es. Parall\u00e8lement, l&rsquo;ex\u00e9cution pr\u00e9liminaire de <code>summary()<\/code> sur la structure compl\u00e8te met en lumi\u00e8re les aberrations d&rsquo;encodage imm\u00e9diates, telles que des scores minimaux n\u00e9gatifs impossibles sur une \u00e9chelle d&rsquo;anxi\u00e9t\u00e9 de Hamilton ou des valeurs maximales exc\u00e9dant les bornes psychom\u00e9triques th\u00e9oriques d&rsquo;une \u00e9preuve d&rsquo;efficience intellectuelle.<\/p>\n<h3>3.2 Cr\u00e9ation d&rsquo;un jeu de donn\u00e9es exp\u00e9rimental repr\u00e9sentatif<\/h3>\n<p>Afin d&rsquo;ancrer les d\u00e9monstrations de ce tutoriel dans un cadre empirique r\u00e9aliste et imm\u00e9diatement reproductible, concevons un jeu de donn\u00e9es simulant une cohorte clinique en neuropsychologie. Supposons une \u00e9tude \u00e9valuant l&rsquo;efficacit\u00e9 d&rsquo;une nouvelle th\u00e9rapie cognitive informatis\u00e9e destin\u00e9e \u00e0 des patients souffrant de troubles de l&rsquo;attention avec ou sans hyperactivit\u00e9 (TDAH). Trois groupes de traitement sont compar\u00e9s : un groupe \u00ab T\u00e9moin \u00bb (placebo sur liste d&rsquo;attente), un groupe \u00ab Th\u00e9rapie Standard \u00bb et un groupe \u00ab Th\u00e9rapie Informatis\u00e9e \u00bb. Les participants sont par ailleurs stratifi\u00e9s selon leur tranche d&rsquo;\u00e2ge (\u00ab Jeune Adulte \u00bb, \u00ab Adulte \u00bb) et font l&rsquo;objet d&rsquo;une mesure de l&rsquo;anxi\u00e9t\u00e9 pr\u00e9-test, d&rsquo;un score de flexibilit\u00e9 cognitive post-test, et d&rsquo;un temps de r\u00e9action moyen informatis\u00e9 (en millisecondes).<\/p>\n<p>Nous introduisons d\u00e9lib\u00e9r\u00e9ment une asym\u00e9trie de distribution sur la variable des temps de r\u00e9action afin de simuler la d\u00e9rive chronom\u00e9trique naturelle observ\u00e9e en neuropsychologie, ainsi que quelques valeurs lacunaires refl\u00e9tant l&rsquo;attrition exp\u00e9rimentale ou des d\u00e9faillances de capteurs comportementaux :<\/p>\n<p>Dans un script R, l&rsquo;initialisation de ce protocole s&rsquo;effectue au moyen de la fonction <code>set.seed()<\/code>, garantissant la r\u00e9plicabilit\u00e9 absolue des nombres pseudo-al\u00e9atoires g\u00e9n\u00e9r\u00e9s :<\/p>\n<pre><code># Fixation du g\u00e9n\u00e9rateur pseudo-al\u00e9atoire pour reproductibilit\u00e9\nset.seed(42)\n\nn_participants &lt;- 180\n\n# Simulation du tableau exp\u00e9rimental\ndonnees_psy &lt;- data.frame(\n  id = paste0(\"SUBJ_\", sprintf(\"%03d\", 1:n_participants)),\n  groupe = factor(\n    sample(c(\"Controle\", \"Therapie_Standard\", \"Therapie_Informatisee\"), \n           size = n_participants, replace = TRUE),\n    levels = c(\"Controle\", \"Therapie_Standard\", \"Therapie_Informatisee\")\n  ),\n  tranche_age = factor(\n    sample(c(\"Jeune_Adulte\", \"Adulte\"), \n           size = n_participants, replace = TRUE),\n    levels = c(\"Jeune_Adulte\", \"Adulte\")\n  ),\n  anxiete_pre = round(rnorm(n_participants, mean = 45, sd = 8), 1),\n  flexibilite_post = round(rnorm(n_participants, mean = 65, sd = 12) + \n                     ifelse(runif(n_participants) &gt; 0.5, 5, -2), 1),\n  temps_reaction_ms = round(rlnorm(n_participants, meanlog = 6.2, sdlog = 0.35))\n)\n\n# Injection de valeurs manquantes (NA) pour le r\u00e9alisme clinique\ndonnees_psy$flexibilite_post[sample(1:n_participants, 8)] &lt;- NA\ndonnees_psy$temps_reaction_ms[sample(1:n_participants, 5)] &lt;- NA\n<\/code><\/pre>\n<p>L&rsquo;int\u00e9grit\u00e9 de cette structure peut \u00eatre valid\u00e9e par une table de contingence croisant les effectifs via la commande <code>table(donnees_psy<span class=\"arabpsy-math-inline\" data-latex=\"groupe, donnees_psy\">$groupe, donnees_psy$<\/span>tranche_age)<\/code>. Cet examen pr\u00e9liminaire confirme que chaque strate d&rsquo;\u00e9chantillonnage dispose d&rsquo;un contingent d&rsquo;observations suffisant pour soutenir le calcul des estimateurs statistiques pr\u00e9vus.<\/p>\n<h3>3.3 Normalisation des libell\u00e9s et gestion de la coh\u00e9rence interne<\/h3>\n<p>L&rsquo;exp\u00e9rience de terrain d\u00e9montre que la qualit\u00e9 de l&rsquo;agr\u00e9gation finale d\u00e9pend \u00e9troitement de la rigueur de la normalisation textuelle pr\u00e9alable. Des discordances apparemment anodines dans la casse typographique, telles que la coexistence involontaire des cha\u00eenes \u00ab Controle \u00bb, \u00ab controle \u00bb et \u00ab Contr\u00f4le \u00bb dans une colonne d&rsquo;affectation, conduiraient in\u00e9vitablement les moteurs de calcul de R \u00e0 fragmenter l&rsquo;\u00e9chantillon en trois sous-groupes parasites au lieu de la modalit\u00e9 conceptuelle unique souhait\u00e9e.<\/p>\n<p>Il est donc imp\u00e9ratif de recoder syst\u00e9matiquement les modalit\u00e9s des variables cat\u00e9gorielles afin de nettoyer toute pollution syntaxique. Cela s&rsquo;op\u00e8re soit via les fonctions vectorielles de manipulation de cha\u00eenes comme <code>trimws()<\/code> (pour supprimer les espaces insidieux en t\u00eate et en queue de cha\u00eene) et <code>gsub()<\/code> en Base R, soit par le biais des outils sp\u00e9cialis\u00e9s du package <a rel=\"noopener noreferrer\" href=\"https:\/\/forcats.tidyverse.org\/\">forcats<\/a> (int\u00e9gr\u00e9 au Tidyverse) avec des fonctions telles que <code>fct_recode()<\/code> ou <code>fct_collapse()<\/code>.<\/p>\n<p>Parall\u00e8lement, la coh\u00e9rence du format tabulaire doit \u00eatre scrupuleusement pr\u00e9serv\u00e9e. L&rsquo;analyse par groupe sous R exige fondamentalement que les donn\u00e9es r\u00e9pondent aux canons du format long (\u00ab tidy data \u00bb), o\u00f9 chaque ligne correspond strictement \u00e0 une unit\u00e9 exp\u00e9rimentale unique dans un \u00e9tat de mesure donn\u00e9, et chaque colonne \u00e0 une variable distincte. Si les donn\u00e9es se pr\u00e9sentaient initialement sous un format large inappropri\u00e9 (par exemple avec des colonnes s\u00e9par\u00e9es intitul\u00e9es \u00ab Temps_Reaction_Controle \u00bb et \u00ab Temps_Reaction_Traitement \u00bb), une restructuration via <code>tidyr::pivot_longer()<\/code> constituerait un pr\u00e9requis incontournable pour permettre l&rsquo;indexation dynamique par facteur.<\/p>\n<h2>4. M\u00e9thode 1 : Calcul des statistiques de groupe avec tapply() en Base R<\/h2>\n<h3>4.1 Syntaxe formelle et m\u00e9canisme d&rsquo;\u00e9valuation de tapply()<\/h3>\n<p>Au sein du syst\u00e8me Base R, la fonction canonique d&rsquo;agr\u00e9gation univari\u00e9e par strate est <code>tapply()<\/code>. Issue de la v\u00e9n\u00e9rable famille des fonctions <code>*apply<\/code>, <code>tapply()<\/code> applique une fonction scalaire ou vectorielle sur les cellules d&rsquo;un tableau d\u00e9coup\u00e9 par un ou plusieurs facteurs de groupement. Sa signature canonique s&rsquo;\u00e9nonce comme suit :<\/p>\n<pre><code>tapply(X, INDEX, FUN, ..., default = NA, simplify = TRUE)\n<\/code><\/pre>\n<p>Dans cette architecture, <code>X<\/code> repr\u00e9sente imp\u00e9rativement un vecteur atomique continu contenant la variable d\u00e9pendante \u00e0 analyser (par exemple, les scores psychom\u00e9triques). L&rsquo;argument <code>INDEX<\/code> accueille un facteur ou une liste de facteurs d\u00e9finissant les sous-groupes ou conditions exp\u00e9rimentales. Enfin, <code>FUN<\/code> d\u00e9signe le pointeur de fonction \u00e0 appliquer successivement sur chaque strate extraite. Les arguments additionnels sp\u00e9cifi\u00e9s dans <code>...<\/code> sont transmis directement \u00e0 la fonction ex\u00e9cut\u00e9e (tels que <code>na.rm = TRUE<\/code>).<\/p>\n<p>Le flux d&rsquo;ex\u00e9cution interne de <code>tapply()<\/code> op\u00e8re selon le paradigme g\u00e9n\u00e9rique <em>Split-Apply-Combine<\/em> conceptualis\u00e9 par Wickham. Le moteur R fractionne initialement le vecteur <code>X<\/code> en autant de sous-vecteurs isol\u00e9s qu&rsquo;il existe de niveaux uniques dans le facteur <code>INDEX<\/code>. Dans un second temps, il applique de mani\u00e8re s\u00e9quentielle la fonction sp\u00e9cifi\u00e9e \u00e0 chaque sous-vecteur. Enfin, il recombine les scalaires ou vecteurs r\u00e9sultants en une structure de dimension compacte. Lorsque l&rsquo;argument <code>simplify = TRUE<\/code> est actif (valeur par d\u00e9faut) et que la fonction renvoie un scalaire unitaire par strate, <code>tapply()<\/code> produit un vecteur nomm\u00e9 ou une matrice \u00e9l\u00e9gante \u00e0 une ou plusieurs dimensions, facilitant une consultation imm\u00e9diate dans la console R.<\/p>\n<h3>4.2 Application de summary() au sein de tapply()<\/h3>\n<p>L&rsquo;une des associations les plus productives de l&rsquo;environnement de base r\u00e9side dans l&rsquo;appel conjoint de la fonction g\u00e9n\u00e9rique <code>summary()<\/code> au sein de <code>tapply()<\/code>. La fonction <code>summary()<\/code> appliqu\u00e9e \u00e0 un vecteur num\u00e9rique extrait en une seule passe six m\u00e9triques fondamentales : le minimum absolu, le premier quartile (<span class=\"arabpsy-math-inline\" data-latex=\"Q_1\">$Q_1$<\/span>), la m\u00e9diane empirique, la moyenne arithm\u00e9tique, le troisi\u00e8me quartile (<span class=\"arabpsy-math-inline\" data-latex=\"Q_3\">$Q_3$<\/span>) et le maximum absolu, compl\u00e9t\u00e9s par le d\u00e9compte des valeurs manquantes le cas \u00e9ch\u00e9ant.<\/p>\n<p>Consid\u00e9rons l&rsquo;\u00e9valuation des scores de flexibilit\u00e9 cognitive selon nos trois groupes exp\u00e9rimentaux :<\/p>\n<pre><code># Extraction instantan\u00e9e du r\u00e9sum\u00e9 \u00e0 six chiffres par groupe\nresume_flexibilite &lt;- tapply(\n  donnees_psy$flexibilite_post, \n  donnees_psy$groupe, \n  summary\n)\n\n# Affichage du r\u00e9sultat\nprint(resume_flexibilite)\n<\/code><\/pre>\n<p>L&rsquo;objet r\u00e9sultant <code>resume_flexibilite<\/code> prend ici la forme structurelle d&rsquo;une liste nomm\u00e9e o\u00f9 chaque \u00e9l\u00e9ment correspond \u00e0 une modalit\u00e9 du facteur (\u00ab Controle \u00bb, \u00ab Therapie_Standard \u00bb, \u00ab Therapie_Informatisee \u00bb). Chaque compartiment de la liste contient le vecteur tabulaire retourn\u00e9 par <code>summary()<\/code>. Cette pr\u00e9sentation textuelle s&rsquo;av\u00e8re particuli\u00e8rement commode pour une exploration exploratoire rapide en cours d&rsquo;exp\u00e9rimentation.<\/p>\n<p>N\u00e9anmoins, cette approche r\u00e9v\u00e8le rapidement ses limites intrins\u00e8ques d\u00e8s lors que le chercheur souhaite exporter ces r\u00e9sultats vers un document de traitement de texte ou un logiciel d&rsquo;\u00e9dition scientifique. La structure en liste h\u00e9t\u00e9rog\u00e8ne ne se convertit pas spontan\u00e9ment en une matrice de donn\u00e9es tabulaire rectangulaire sans n\u00e9cessiter des op\u00e9rations fastidieuses de coercition \u00e0 l&rsquo;aide de fonctions complexes telles que <code>do.call(rbind, resume_flexibilite)<\/code>. C&rsquo;est pourquoi, bien qu&rsquo;excellente pour un examen terminal \u00e0 l&rsquo;\u00e9cran, elle requiert des am\u00e9nagements pour des flux de travail industrialis\u00e9s.<\/p>\n<h3>4.3 Application de fonctions personnalis\u00e9es avec tapply()<\/h3>\n<p>La modularit\u00e9 de <code>tapply()<\/code> s&rsquo;exprime pleinement \u00e0 travers l&rsquo;impl\u00e9mentation de fonctions anonymes ou personnalis\u00e9es pour calculer des indices statistiques sur mesure. Dans les publications neuropsychologiques, l&rsquo;affichage de l&rsquo;erreur standard de la moyenne (SEM, <em>Standard Error of the Mean<\/em>) est couramment exig\u00e9 aux c\u00f4t\u00e9s de la moyenne, car elle quantifie la pr\u00e9cision avec laquelle la moyenne d&rsquo;\u00e9chantillon estime la moyenne de la population parente :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"SEM = \\frac{s}{\\sqrt{n}}\">$$SEM = \\frac{s}{\\sqrt{n}}$$<\/span><\/p>\n<p>Nous pouvons encapsuler ce calcul directement dans un appel <code>tapply()<\/code> en veillant \u00e0 soustraire les donn\u00e9es lacunaires dans le calcul de la taille d&rsquo;\u00e9chantillon effectif :<\/p>\n<pre><code># Calcul de l'erreur standard de la moyenne par groupe\nsem_par_groupe &lt;- tapply(\n  donnees_psy$flexibilite_post, \n  donnees_psy$groupe, \n  function(x) {\n    x_propre &lt;- x[!is.na(x)]\n    sd(x_propre) \/ sqrt(length(x_propre))\n  }\n)\nprint(sem_par_groupe)\n<\/code><\/pre>\n<p>Pour condenser simultan\u00e9ment la moyenne et l&rsquo;\u00e9cart-type au sein d&rsquo;une sortie matricielle \u00e9l\u00e9gante, on configure la fonction anonyme pour qu&rsquo;elle renvoie un vecteur nomm\u00e9 \u00e0 deux dimensions. L&rsquo;activation du param\u00e8tre de simplification vectorielle rassemble automatiquement les donn\u00e9es en une matrice bidimensionnelle pr\u00eate \u00e0 l&rsquo;impression :<\/p>\n<pre><code># Synth\u00e8se conjointe Moyenne et SD sous forme matricielle\nsynthese_base &lt;- tapply(\n  donnees_psy$flexibilite_post, \n  donnees_psy$groupe, \n  function(x) {\n    c(Moyenne = mean(x, na.rm = TRUE), \n      Ecart_Type = sd(x, na.rm = TRUE))\n  }\n)\n\n# Coercition matricielle pour mise en forme\ntableau_synthese_base &lt;- do.call(rbind, synthese_base)\nprint(tableau_synthese_base)\n<\/code><\/pre>\n<p>Cette technique consolide l&rsquo;autonomie du chercheur sous Base R, d\u00e9montrant qu&rsquo;aucune biblioth\u00e8que tierce n&rsquo;est strictement indispensable pour extraire des bilans psychom\u00e9triques rigoureux.<\/p>\n<h2>5. M\u00e9thode 2 : Agr\u00e9gation moderne avec dplyr (group_by et summarize)<\/h2>\n<h3>5.1 Principes de la grammaire de manipulation de donn\u00e9es<\/h3>\n<p>Le package <code>dplyr<\/code>, composant pivot de l&rsquo;\u00e9cosyst\u00e8me Tidyverse, r\u00e9invente la manipulation de donn\u00e9es en la formalisant autour d&rsquo;une alg\u00e8bre relationnelle et d&rsquo;une grammaire orient\u00e9e verbes d&rsquo;action. Dans ce paradigme, la stratification ne repose plus sur l&rsquo;extraction fragment\u00e9e de vecteurs isol\u00e9s, mais sur l&rsquo;alt\u00e9ration fonctionnelle des m\u00e9tadonn\u00e9es du tableau de donn\u00e9es tout entier via la fonction <code>group_by()<\/code>.<\/p>\n<p>L&rsquo;appel \u00e0 <code>group_by()<\/code> n&rsquo;alt\u00e8re en rien l&rsquo;aspect visuel des donn\u00e9es brutes ni le contenu mat\u00e9riel des cellules. Il attribue au conteneur une classe sous-jacente de type <code>grouped_df<\/code> et lui greffe un index d&rsquo;attribut interne identifiant les masques d&rsquo;indices de chaque strate. D\u00e8s cet instant, toute op\u00e9ration ult\u00e9rieure ex\u00e9cut\u00e9e sur ce tableau group\u00e9 sera \u00e9valu\u00e9e de mani\u00e8re contextuelle et confin\u00e9e au sein de chaque strate, comme si une boucle it\u00e9rative implicite s&rsquo;ex\u00e9cutait en arri\u00e8re-plan sur les diff\u00e9rents sous-ensembles.<\/p>\n<p>L&rsquo;articulation syntaxique moderne s&rsquo;appuie d\u00e9sormais de fa\u00e7on pr\u00e9f\u00e9rentielle sur l&rsquo;op\u00e9rateur de tuyauterie natif <code>|&gt;<\/code> (introduit nativement dans R 4.1+) ou sur son pr\u00e9d\u00e9cesseur historique, le pipe <code>%&gt;%<\/code> issu du package <code>magrittr<\/code>. Cet op\u00e9rateur redirige la structure de donn\u00e9es issue de l&rsquo;expression pr\u00e9c\u00e9dente en tant que premier argument formel de la fonction suivante. L&rsquo;association de <code>group_by()<\/code> avec le verbe r\u00e9ducteur <code>summarize()<\/code> (ou <code>summarise()<\/code>) mat\u00e9rialise l&rsquo;op\u00e9ration d&rsquo;agr\u00e9gation statistique : <code>summarize()<\/code> contracte chaque groupe en une rang\u00e9e unique en calculant les fonctions scalaires d&rsquo;int\u00e9r\u00eat.<\/p>\n<h3>5.2 Calcul exhaustif des statistiques descriptives dans une table unique<\/h3>\n<p>La puissance du bin\u00f4me <code>group_by()<\/code> et <code>summarize()<\/code> \u00e9clate dans sa capacit\u00e9 \u00e0 assembler, au sein d&rsquo;une s\u00e9quence descriptive unifi\u00e9e, l&rsquo;ensemble des indicateurs param\u00e9triques, non param\u00e9triques et d&rsquo;effectifs r\u00e9clam\u00e9s par les comit\u00e9s de lecture scientifique. Contrairement \u00e0 Base R, les colonnes r\u00e9sultantes sont instantan\u00e9ment nomm\u00e9es, typ\u00e9es et align\u00e9es dans un tableau rectangulaire directement exploitable.<\/p>\n<p>Consid\u00e9rons l&rsquo;\u00e9valuation compl\u00e8te de la variable de flexibilit\u00e9 cognitive post-interventionnelle :<\/p>\n<pre><code>library(dplyr)\n\n# Pipeline complet de statistiques descriptives par groupe\nsynthese_complete_dplyr &lt;- donnees_psy |&gt;\n  group_by(groupe) |&gt;\n  summarize(\n    N_Total = n(),\n    N_Valide = sum(!is.na(flexibilite_post)),\n    Moyenne = mean(flexibilite_post, na.rm = TRUE),\n    Ecart_Type = sd(flexibilite_post, na.rm = TRUE),\n    Erreur_Standard = sd(flexibilite_post, na.rm = TRUE) \/ sqrt(sum(!is.na(flexibilite_post))),\n    Mediane = median(flexibilite_post, na.rm = TRUE),\n    IQR = IQR(flexibilite_post, na.rm = TRUE),\n    Min = min(flexibilite_post, na.rm = TRUE),\n    Max = max(flexibilite_post, na.rm = TRUE),\n    .groups = \"drop\"\n  )\n\nprint(synthese_complete_dplyr)\n<\/code><\/pre>\n<p>Dans ce pipeline \u00e9l\u00e9gant, <code>n()<\/code> calcule dynamiquement l&rsquo;effectif brut allou\u00e9 \u00e0 chaque condition exp\u00e9rimentale, tandis que <code>sum(!is.na(...))<\/code> quantifie l&rsquo;effectif valide r\u00e9ellement pris en compte dans le calcul des estimateurs num\u00e9riques. Chaque transformation g\u00e9n\u00e8re une nouvelle variable clairement \u00e9tiquet\u00e9e, respectant scrupuleusement la typologie des variables num\u00e9riques sans n\u00e9cessiter de transformations matricielles post-hoc fastidieuses.<\/p>\n<h3>5.3 D\u00e9gritage et gestion explicite des m\u00e9tadonn\u00e9es de groupement<\/h3>\n<p>L&rsquo;utilisation de structures group\u00e9es sous <code>dplyr<\/code> impose une vigilance m\u00e9thodologique capitale quant \u00e0 la persistance des m\u00e9tadonn\u00e9es de groupement. Historiquement, apr\u00e8s l&rsquo;application de <code>summarize()<\/code> sur un tableau group\u00e9 par plusieurs facteurs hi\u00e9rarchiques, <code>dplyr<\/code> conservait le dernier niveau de regroupement actif. Ce comportement implicite g\u00e9n\u00e9rait occasionnellement des anomalies lors des \u00e9tapes d&rsquo;analyse ult\u00e9rieures, par exemple lors d&rsquo;un calcul de score centr\u00e9-r\u00e9duit qui continuait de s&rsquo;op\u00e9rer par sous-groupe au lieu de porter sur l&rsquo;\u00e9chantillon global.<\/p>\n<p>Il est d\u00e9sormais fortement pr\u00e9conis\u00e9 de sp\u00e9cifier explicitement la clause de d\u00e9groupement via l&rsquo;argument formel <code>.groups = \"drop\"<\/code> directement au sein de l&rsquo;instruction <code>summarize()<\/code>, comme illustr\u00e9 dans l&rsquo;exemple pr\u00e9c\u00e9dent. Cette mention dissout instantan\u00e9ment tous les attributs de masquage d\u00e8s que la table synth\u00e9tique est assembl\u00e9e, restaurant un objet <code>tibble<\/code> d\u00e9sencadr\u00e9 et neutre.<\/p>\n<p>Alternativement, si l&rsquo;on a omis de renseigner cet argument, l&rsquo;application du verbe <code>ungroup()<\/code> en terminaison de cha\u00eene garantit une s\u00e9curit\u00e9 programmatique \u00e9quivalente :<\/p>\n<pre><code># D\u00e9gritage explicite en fin de s\u00e9quence\ntableau_securise &lt;- donnees_psy |&gt;\n  group_by(groupe) |&gt;\n  summarize(Moyenne = mean(flexibilite_post, na.rm = TRUE)) |&gt;\n  ungroup()\n<\/code><\/pre>\n<p>Sur le plan des performances et de l&rsquo;architecture logicielle, le d\u00e9groupement pr\u00e9vient les fuites de m\u00e9moire vive et \u00e9vite les recalculs de masques lors de l&rsquo;application r\u00e9p\u00e9t\u00e9e d&rsquo;op\u00e9rations d&rsquo;agr\u00e9gation sur de massives bases de donn\u00e9es psychom\u00e9triques nationales ou \u00e9pid\u00e9miologiques comportant des centaines de milliers de lignes.<\/p>\n<h2>6. Gestion des valeurs manquantes (NA) lors du calcul par strate<\/h2>\n<h3>6.1 \u00c9tiologie et impact des donn\u00e9es manquantes en psychologie<\/h3>\n<p>Dans la recherche comportementale, la survenue de donn\u00e9es manquantes (not\u00e9es <code>NA<\/code> pour <em>Not Available<\/em> dans l&rsquo;\u00e9cosyst\u00e8me R) constitue la r\u00e8gle empirique plut\u00f4t que l&rsquo;exception. Leurs origines sont plurielles : d\u00e9crochage d&rsquo;un patient au fil d&rsquo;une th\u00e9rapie longitudinale, refus d\u00e9lib\u00e9r\u00e9 de r\u00e9pondre \u00e0 une question intrusive d&rsquo;un inventaire de traumatismes pr\u00e9coces, artefacts cin\u00e9matiques invalidant l&rsquo;enregistrement d&rsquo;une r\u00e9ponse motrice sur \u00e9cran tactile ou dysfonctionnement occasionnel des syst\u00e8mes d&rsquo;acquisition informatis\u00e9s.<\/p>\n<p>Sur le plan m\u00e9thodologique, Donald Rubin et Roderick Little classifient ces incompl\u00e9tudes selon trois m\u00e9canismes distincts : les donn\u00e9es manquantes compl\u00e8tement au hasard (MCAR, <em>Missing Completely at Random<\/em>), les donn\u00e9es manquantes au hasard conditionnel (MAR, <em>Missing at Random<\/em>) et les donn\u00e9es manquantes non al\u00e9atoires (MNAR, <em>Missing Not at Random<\/em>). Lorsque des donn\u00e9es manquent selon un sch\u00e9ma MNAR \u2014 par exemple si les participants manifestant les niveaux d&rsquo;anxi\u00e9t\u00e9 les plus intol\u00e9rables omettent syst\u00e9matiquement de valider leur score post-test \u2014, l&rsquo;exclusion na\u00efve de ces sujets entra\u00eene un biais d&rsquo;\u00e9chantillonnage substantiel qui distord lourdement les statistiques descriptives de position au sein des strates cliniques.<\/p>\n<p>Par conception et souci de s\u00e9curit\u00e9 arithm\u00e9tique, le langage R adopte une posture de pr\u00e9caution radicale : toute op\u00e9ration math\u00e9matique \u00e9l\u00e9mentaire appliqu\u00e9e \u00e0 un vecteur comprenant au moins une valeur <code>NA<\/code> renvoie in\u00e9luctablement <code>NA<\/code> en sortie. Ainsi, l&rsquo;instruction <code>mean(c(12, 15, NA, 18))<\/code> produira invariablement la r\u00e9ponse <code>NA<\/code>. Ce comportement par d\u00e9faut \u00e9vite au chercheur d&rsquo;ignorer accidentellement l&rsquo;existence de valeurs lacunaires au sein de ses groupes exp\u00e9rimentaux, mais impose une gestion technique rigoureuse lors de l&rsquo;agr\u00e9gation statistique.<\/p>\n<h3>6.2 Impl\u00e9mentation du param\u00e8tre na.rm = TRUE<\/h3>\n<p>La m\u00e9thode usuelle pour contourner cette neutralisation des calculs r\u00e9side dans l&rsquo;adjonction explicite de l&rsquo;argument formel <code>na.rm = TRUE<\/code> (ou <code>na.omit = TRUE<\/code> selon les fonctions sp\u00e9cifiques) au sein des op\u00e9rateurs scalaires de centralit\u00e9 et de dispersion de R tels que <code>mean()<\/code>, <code>sd()<\/code>, <code>median()<\/code>, <code>var()<\/code>, <code>min()<\/code>, <code>max()<\/code> ou <code>IQR()<\/code>. Cet argument ordonne \u00e0 l&rsquo;interpr\u00e9teur de purger temporairement les valeurs non renseign\u00e9es avant d&rsquo;\u00e9valuer la somme et les effectifs au d\u00e9nominateur.<\/p>\n<p>Dans un pipeline de traitement <code>dplyr<\/code>, cet argument doit \u00eatre r\u00e9pliqu\u00e9 avec discipline dans chaque expression m\u00e9trique :<\/p>\n<pre><code># Stratification avec purge locale des valeurs non renseign\u00e9es\ndonnees_psy |&gt;\n  group_by(groupe) |&gt;\n  summarize(\n    Moyenne_TR = mean(temps_reaction_ms, na.rm = TRUE),\n    SD_TR = sd(temps_reaction_ms, na.rm = TRUE),\n    Attrition_NA = sum(is.na(temps_reaction_ms)),\n    Taux_Perte_Pct = round((sum(is.na(temps_reaction_ms)) \/ n()) * 100, 2),\n    .groups = \"drop\"\n  )\n<\/code><\/pre>\n<p>La m\u00eame pr\u00e9caution s&rsquo;applique rigoureusement aux fonctions personnalis\u00e9es int\u00e9gr\u00e9es dans les appels Base R via <code>tapply()<\/code>. Omettre <code>na.rm = TRUE<\/code> dans l&rsquo;instruction <code>tapply(donnees_psy<span class=\"arabpsy-math-inline\" data-latex=\"temps_reaction_ms, donnees_psy\">$temps_reaction_ms, donnees_psy$<\/span>groupe, mean)<\/code> renverrait une valeur ind\u00e9termin\u00e9e <code>NA<\/code> pour toute condition exp\u00e9rimentale comportant au moins une donn\u00e9e manquante, paralysant l&rsquo;ensemble de la restitution tabulaire du protocole de recherche.<\/p>\n<h3>6.3 Strat\u00e9gies avanc\u00e9es d&rsquo;exclusion et imputation locale<\/h3>\n<p>L&rsquo;utilisation indistincte de l&rsquo;argument <code>na.rm = TRUE<\/code> correspond m\u00e9thodologiquement \u00e0 une analyse des cas disponibles (dite <em>pairwise deletion<\/em>). Cette strat\u00e9gie implique que la taille de l&rsquo;\u00e9chantillon analys\u00e9 peut varier d&rsquo;une variable \u00e0 l&rsquo;autre au sein de la m\u00eame table descriptive : un participant peut \u00eatre conserv\u00e9 pour le calcul de l&rsquo;anxi\u00e9t\u00e9 pr\u00e9-test tout en \u00e9tant \u00e9vinc\u00e9 du calcul de la flexibilit\u00e9 cognitive post-test. Cette fluctuation de l&rsquo;effectif sous-jacent complique l&rsquo;interpr\u00e9tation crois\u00e9e des grandeurs statistiques et les calculs ult\u00e9rieurs de matrices de covariance inter-\u00e9chelles.<\/p>\n<p>\u00c0 l&rsquo;inverse, l&rsquo;exclusion compl\u00e8te au niveau de l&rsquo;observation (<em>listwise deletion<\/em>), accessible au moyen de la fonction <code>na.omit()<\/code> ou <code>tidyr::drop_na()<\/code>, expulse de l&rsquo;analyse tout participant pr\u00e9sentant au moins une omission sur l&rsquo;ensemble du profil d&rsquo;\u00e9valuation :<\/p>\n<pre><code># Suppression rigoureuse de toute observation incompl\u00e8te\ndonnees_completes &lt;- donnees_psy |&gt;\n  tidyr::drop_na(flexibilite_post, temps_reaction_ms)\n<\/code><\/pre>\n<p>Bien que cette suppression assure une parfaite coh\u00e9rence des effectifs d&rsquo;un indicateur \u00e0 l&rsquo;autre, elle induit une r\u00e9duction drastique de la puissance statistique globale de la cohorte et majore le risque d&rsquo;introduire des distorsions d&rsquo;\u00e9chantillonnage n\u1ebfu le m\u00e9canisme d&rsquo;omission s&rsquo;av\u00e8re \u00eatre MAR ou MNAR. Dans les protocoles complexes, les chercheurs avertis se tourneront vers des techniques d&rsquo;imputation multiple par \u00e9quations cha\u00een\u00e9es (via des packages tels que <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=mice\">mice<\/a>) pr\u00e9alablement \u00e0 l&rsquo;agr\u00e9gation, pr\u00e9servant ainsi la structure de variance-covariance empirique sans tronquer artificiellement la variabilit\u00e9 des groupes.<\/p>\n<h2>7. Agr\u00e9gation factorielle crois\u00e9e : interactions et multi-groupement<\/h2>\n<h3>7.1 Croisement de multiples facteurs exp\u00e9rimentaux<\/h3>\n<p>La recherche empirique contemporaine en psychologie d\u00e9passe largement les designs exp\u00e9rimentaux univari\u00e9s \u00e9l\u00e9mentaires. L&rsquo;exploration de la complexit\u00e9 humaine exige fr\u00e9quemment la mise en \u0153uvre de plans factoriels crois\u00e9s complets (de type <span class=\"arabpsy-math-inline\" data-latex=\"2 \\times 3\">$2 \\times 3$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"3 \\times 4\">$3 \\times 4$<\/span>, etc.), au sein desquels les chercheurs scrutent l&rsquo;interaction entre un statut clinique diagnostique et une variable environnementale, ou entre le type d&rsquo;intervention psychologique et la classe d\u00e9mographique des participants. Dans notre simulation, le croisement des facteurs <code>groupe<\/code> (3 modalit\u00e9s) et <code>tranche_age<\/code> (2 modalit\u00e9s) g\u00e9n\u00e8re ainsi une grille d&rsquo;analyse d\u00e9compos\u00e9e en 6 sous-cellules distinctes.<\/p>\n<p>L&rsquo;approche Tidyverse traite cette complexit\u00e9 dimensionnelle avec une limpidit\u00e9 d\u00e9concertante en acceptant une succession d&rsquo;identifiants factoriels au sein de l&rsquo;instruction <code>group_by()<\/code> :<\/p>\n<pre><code># Agr\u00e9gation sur plan factoriel crois\u00e9 3 x 2\nsynthese_croisee &lt;- donnees_psy |&gt;\n  group_by(groupe, tranche_age) |&gt;\n  summarize(\n    N = n(),\n    Moyenne_Flex = mean(flexibilite_post, na.rm = TRUE),\n    SD_Flex = sd(flexibilite_post, na.rm = TRUE),\n    .groups = \"drop\"\n  )\n\nprint(synthese_croisee)\n<\/code><\/pre>\n<p>Sous Base R, l&rsquo;ex\u00e9cution \u00e9quivalente mobilise <code>tapply()<\/code> en lui passant une liste de facteurs au param\u00e8tre <code>INDEX<\/code>. Le r\u00e9sultat s&rsquo;organise naturellement sous la forme d&rsquo;une matrice bidimensionnelle rectangulaire refl\u00e9tant fid\u00e8lement le plan factoriel crois\u00e9, o\u00f9 les lignes repr\u00e9sentent les niveaux du premier facteur et les colonnes ceux du second :<\/p>\n<pre><code># Approche Base R sur facteurs crois\u00e9s\nmatrice_croisee_base &lt;- tapply(\n  donnees_psy$flexibilite_post, \n  list(donnees_psy<span class=\"arabpsy-math-inline\" data-latex=\"groupe, donnees_psy\">$groupe, donnees_psy$<\/span>tranche_age), \n  mean, \n  na.rm = TRUE\n)\n\nprint(matrice_croisee_base)\n<\/code><\/pre>\n<p>Cette repr\u00e9sentation matricielle directe offre une lisibilit\u00e9 clinique imm\u00e9diate pour v\u00e9rifier visuellement d&rsquo;\u00e9ventuelles interactions ordinales ou crois\u00e9es entre la condition th\u00e9rapeutique et la tranche d&rsquo;\u00e2ge des sujets.<\/p>\n<h3>7.2 Analyse des cellules d\u00e9s\u00e9quilibr\u00e9es et effectifs r\u00e9duits<\/h3>\n<p>En pratique clinique ou sur le terrain organisationnel, la parfaite \u00e9quir\u00e9partition des participants \u00e0 travers toutes les cellules factorielles repr\u00e9sente une situation id\u00e9ale rarement observ\u00e9e. La randomisation peut g\u00e9n\u00e9rer des fluctuations d&rsquo;\u00e9chantillonnage stochastiques, certaines pathologies \u00e9tant de surcro\u00eet nettement plus pr\u00e9valentes dans certaines tranches d&rsquo;\u00e2ge. Le rep\u00e9rage des cellules d\u00e9s\u00e9quilibr\u00e9es ou sous-repr\u00e9sent\u00e9es repr\u00e9sente un imp\u00e9ratif m\u00e9thodologique d&rsquo;une gravit\u00e9 capitale.<\/p>\n<p>L&rsquo;exploitation de la fonction <code>n()<\/code> au sein de <code>summarize()<\/code>, coupl\u00e9e \u00e0 un filtrage conditionnel, permet de diagnostiquer d&rsquo;\u00e9ventuelles fragilit\u00e9s de puissance au sein du tableau exp\u00e9rimental :<\/p>\n<pre><code># D\u00e9tection des sous-groupes \u00e0 effectifs fragiles (n &lt; 15)\ncellules_critiques &lt;- donnees_psy |&gt;\n  group_by(groupe, tranche_age) |&gt;\n  summarize(Effectif = n(), .groups = \"drop\") |&gt;\n  filter(Effectif &lt; 15)\n\nif (nrow(cellules_critiques) &gt; 0) {\n  warning(\"Attention : des cellules factorielles pr\u00e9sentent des effectifs restreints.\")\n  print(cellules_critiques)\n}\n<\/code><\/pre>\n<p>Lorsqu&rsquo;une cellule factorielle ne comprend qu&rsquo;un effectif tr\u00e8s faible ($n < 10$), l'estimateur de l'\u00e9cart-type devient instable et affiche un intervalle de confiance extr\u00eamement large. L'analyste doit en \u00eatre imm\u00e9diatement inform\u00e9, car cette instabilit\u00e9 locale compromet la v\u00e9rification des hypoth\u00e8ses d'homoscedasticit\u00e9 (homog\u00e9n\u00e9it\u00e9 des variances) requises lors des tests param\u00e9triques subs\u00e9quents et signale la pr\u00e9sence de cellules \u00e0 risque statistique \u00e9lev\u00e9.<\/p>\n<h3>7.3 Restructuration tabulaire pour lecture multidimensionnelle<\/h3>\n<p>Bien que le format vertical g\u00e9n\u00e9r\u00e9 par <code>summarize()<\/code> r\u00e9ponde rigoureusement aux crit\u00e8res du format long pour les cha\u00eenes de traitement num\u00e9riques, sa lecture cognitive directe au sein d&rsquo;un rapport de synth\u00e8se s&rsquo;av\u00e8re ardue. Pour pr\u00e9senter des r\u00e9sultats factoriels crois\u00e9s dans des rapports destin\u00e9s \u00e0 des praticiens cliniciens, il est souvent pr\u00e9f\u00e9rable de r\u00e9organiser les descripteurs sous forme de tableau \u00e0 double entr\u00e9e ou matrice de contingence enrichie.<\/p>\n<p>La fonction <code>pivot_wider()<\/code> du package <a rel=\"noopener noreferrer\" href=\"https:\/\/tidyr.tidyverse.org\/\">tidyr<\/a> op\u00e8re cette transition g\u00e9om\u00e9trique avec pr\u00e9cision, en \u00e9talant les modalit\u00e9s de l&rsquo;un des facteurs horizontalement sur les colonnes du document :<\/p>\n<pre><code>library(tidyr)\n\n# Restructuration tabulaire au format large publiable\ntableau_croise_large &lt;- donnees_psy |&gt;\n  group_by(groupe, tranche_age) |&gt;\n  summarize(\n    M_SD = sprintf(\"%.2f (%.2f)\", \n                   mean(flexibilite_post, na.rm = TRUE), \n                   sd(flexibilite_post, na.rm = TRUE)),\n    .groups = \"drop\"\n  ) |&gt;\n  pivot_wider(\n    names_from = tranche_age, \n    values_from = M_SD\n  )\n\nprint(tableau_croise_large)\n<\/code><\/pre>\n<p>Ce formatage produit une table o\u00f9 chaque intersection pr\u00e9sente la moyenne accompagn\u00e9e de son \u00e9cart-type entre parenth\u00e8ses, synth\u00e9tisant l&rsquo;int\u00e9gralit\u00e9 du design exp\u00e9rimental bidirectionnel dans une disposition visuelle \u00e9l\u00e9gante et imm\u00e9diatement intelligible pour un coll\u00e8ge d&rsquo;experts ou un comit\u00e9 de lecture clinique.<\/p>\n<h2>8. Statistiques descriptives robustes pour distributions non gaussiennes<\/h2>\n<h3>8.1 Limites de la moyenne classique face aux profils asym\u00e9triques<\/h3>\n<p>L&rsquo;adh\u00e9sion dogmatique aux statistiques param\u00e9triques classiques expose le chercheur en sciences comportementales \u00e0 des conclusions fragiles ou erron\u00e9es d\u00e8s lors que les donn\u00e9es s&rsquo;\u00e9cartent du mod\u00e8le gaussien th\u00e9orique. Dans les mesures de chronom\u00e9trie cognitive, d&rsquo;oculom\u00e9trie ou d&rsquo;\u00e9valuation de la latence motrice, les distributions empiriques sont syst\u00e9matiquement marqu\u00e9es par une asym\u00e9trie positive \u00e9tir\u00e9e. Quelques participants distraits ou manifestant un blocage ex\u00e9cutif passager peuvent enregistrer des temps de r\u00e9action quatre \u00e0 cinq fois sup\u00e9rieurs \u00e0 la moyenne g\u00e9n\u00e9rale du groupe.<\/p>\n<p>Dans un tel contexte, la moyenne arithm\u00e9tique subit l&rsquo;influence disproportionn\u00e9e de ces valeurs atypiques. L&rsquo;\u00e9cart-type se trouve corr\u00e9lativement gonfl\u00e9 de mani\u00e8re artificielle par la mise au carr\u00e9 des \u00e9carts extr\u00eames, masquant la coh\u00e9sion comportementale r\u00e9elle de la majorit\u00e9 de la cohorte. Face \u00e0 ces architectures distributionnelles asym\u00e9triques, l&rsquo;adoption d&rsquo;estimateurs robustes \u2014 caract\u00e9ris\u00e9s par un point de rupture \u00e9lev\u00e9 et une insensibilit\u00e9 prouv\u00e9e aux d\u00e9rives des queues de distribution \u2014 s&rsquo;impose d&rsquo;un point de vue psychom\u00e9trique et m\u00e9thodologique.<\/p>\n<h3>8.2 Moyennes tronqu\u00e9es (trimmed means) et winsoris\u00e9es par groupe<\/h3>\n<p>La moyenne tronqu\u00e9e (<em>trimmed mean<\/em>) constitue un compromis d&rsquo;une redoutable efficacit\u00e9 statistique entre la moyenne arithm\u00e9tique et la m\u00e9diane ordinale. Le principe consiste \u00e0 \u00e9liminer une proportion sym\u00e9trique <span class=\"arabpsy-math-inline\" data-latex=\"\\alpha\">$\\alpha$<\/span> pr\u00e9d\u00e9finie (conventionnellement 10 % ou 20 %) des valeurs les plus basses et les plus hautes de la distribution avant d&rsquo;\u00e9valuer la moyenne des observations restantes. Une moyenne tronqu\u00e9e \u00e0 20 % exclut les 20 % inf\u00e9rieurs et les 20 % sup\u00e9rieurs, calculant la centralit\u00e9 sur les 60 % d&rsquo;individus centraux.<\/p>\n<p>Le langage R int\u00e8gre cette capacit\u00e9 directement dans sa fonction <code>mean()<\/code> au travers de l&rsquo;argument formel <code>trim<\/code>, qui s&rsquo;int\u00e8gre naturellement dans les pipelines <code>dplyr<\/code> :<\/p>\n<pre><code># Calcul de la moyenne tronqu\u00e9e \u00e0 20% sur les temps de r\u00e9action\ndonnees_psy |&gt;\n  group_by(groupe) |&gt;\n  summarize(\n    Moyenne_Standard = mean(temps_reaction_ms, na.rm = TRUE),\n    Moyenne_Tronquee_20 = mean(temps_reaction_ms, trim = 0.20, na.rm = TRUE),\n    Mediane = median(temps_reaction_ms, na.rm = TRUE),\n    .groups = \"drop\"\n  )\n<\/code><\/pre>\n<p>Une alternative robuste tout aussi reconnue est la moyenne winsoris\u00e9e (accessible via des extensions comme le package <code>psych<\/code> avec <code>winsor()<\/code>), o\u00f9 les observations extr\u00eames ne sont pas purement supprim\u00e9es mais \u00e9cras\u00e9es et remplac\u00e9es par la valeur du centile d&rsquo;amputation correspondant. Cela conserve l&rsquo;effectif nominal de l&rsquo;\u00e9chantillon tout en annihilant l&rsquo;effet de levier des scores atypiques sur la synth\u00e8se finale de l&rsquo;\u00e9chantillon exp\u00e9rimental.<\/p>\n<h3>8.3 M\u00e9diane des \u00e9carts absolus (MAD) et estimateurs d&rsquo;\u00e9chelle<\/h3>\n<p>Pour mesurer la dispersion robuste sans subir la vuln\u00e9rabilit\u00e9 de l&rsquo;\u00e9cart-type usuel, le statisticien privil\u00e9gie la m\u00e9diane des \u00e9carts absolus par rapport \u00e0 la m\u00e9diane (MAD, <em>Median Absolute Deviation<\/em>). Formellement, elle se d\u00e9finit comme la m\u00e9diane des \u00e9carts en valeur absolue s\u00e9parant chaque observation individuelle de la m\u00e9diane globale du groupe :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"MAD = \\text{m\u00e9diane}(|x_i - \\text{m\u00e9diane}(X)|)\">$$MAD = \\text{m\u00e9diane}(|x_i &#8211; \\text{m\u00e9diane}(X)|)$$<\/span><\/p>\n<p>Afin de rendre cet estimateur directement comparable \u00e0 l&rsquo;\u00e9cart-type classique sous l&rsquo;hypoth\u00e8se d&rsquo;une distribution normale sous-jacente, R multiplie par d\u00e9faut cette grandeur par une constante de normalisation universelle \u00e9gale \u00e0 $1.4826$ :<\/p>\n<pre><code># Calcul de l'\u00e9cart-type robuste (MAD normalis\u00e9e) par condition\ndonnees_psy |&gt;\n  group_by(groupe) |&gt;\n  summarize(\n    SD_Classique = sd(temps_reaction_ms, na.rm = TRUE),\n    MAD_Robuste = mad(temps_reaction_ms, constant = 1.4826, na.rm = TRUE),\n    .groups = \"drop\"\n  )\n<\/code><\/pre>\n<p>La comparaison num\u00e9rique entre le <code>SD_Classique<\/code> et la <code>MAD_Robuste<\/code> sert fr\u00e9quemment d&rsquo;indicateur heuristique imm\u00e9diat de la pr\u00e9sence de pollution par valeurs extr\u00eames au sein d&rsquo;une strate psychom\u00e9trique. D\u00e8s lors qu&rsquo;un \u00e9cart-type classique surpasse consid\u00e9rablement la MAD, le chercheur dispose d&rsquo;une alerte quantitative objective d\u00e9montrant que l&rsquo;estimation de la dispersion est gouvern\u00e9e par quelques profils atypiques isol\u00e9s plut\u00f4t que par la variabilit\u00e9 intrins\u00e8que de la cohorte g\u00e9n\u00e9rale.<\/p>\n<h2>9. Automatisation multi-variables : r\u00e9sumer plusieurs mesures simultan\u00e9ment<\/h2>\n<h3>9.1 Exploitation de la fonction across() dans dplyr<\/h3>\n<p>L&rsquo;administration de protocoles en psychom\u00e9trie d\u00e9bouche rarement sur l&rsquo;acquisition d&rsquo;une variable continue isol\u00e9e. Le chercheur recueille typiquement des batteries psychologiques \u00e9tendues, comprenant une douzaine de sous-\u00e9chelles, des questionnaires multidimensionnels (ex. le Big Five pour la personnalit\u00e9) ou des panels chronom\u00e9triques multiples. Dupliquer manuellement les lignes de syntaxe pour chaque variable au sein de <code>summarize()<\/code> repr\u00e9senterait une pratique inefficace, source d&rsquo;erreurs typographiques et de redondance inutile.<\/p>\n<p>Depuis la version 1.0 de <code>dplyr<\/code>, l&rsquo;automatisation multi-colonnes s&rsquo;op\u00e8re par le biais de l&rsquo;op\u00e9rateur d&rsquo;envergure <code>across()<\/code>. Cette instruction permet d&rsquo;appliquer simultan\u00e9ment un vecteur ou une liste de fonctions sur un ensemble de variables s\u00e9lectionn\u00e9es dynamiquement \u00e0 l&rsquo;aide de s\u00e9lecteurs contextuels puissants tels que <code>where(is.numeric)<\/code>, <code>starts_with()<\/code>, <code>ends_with()<\/code> ou <code>contains()<\/code> :<\/p>\n<pre><code># Agr\u00e9gation automatique de l'ensemble des mesures num\u00e9riques\nsynthese_multivariate &lt;- donnees_psy |&gt;\n  group_by(groupe) |&gt;\n  summarize(\n    across(\n      .cols = where(is.numeric),\n      .fns = list(\n        M = (x) mean(x, na.rm = TRUE),\n        SD = (x) sd(x, na.rm = TRUE)\n      )\n    ),\n    .groups = \"drop\"\n  )\n\nprint(synthese_multivariate)\n<\/code><\/pre>\n<p>L&rsquo;utilisation de la syntaxe de fonction anonyme concise <code>(x)<\/code> (disponible depuis R 4.0+) garantit une formulation l\u00e9g\u00e8re, \u00e9valuant s\u00e9quentiellement la moyenne et l&rsquo;\u00e9cart-type sur l&rsquo;anxi\u00e9t\u00e9 pr\u00e9-test, la flexibilit\u00e9 cognitive post-test et les temps de r\u00e9action, sans jamais d\u00e9doubler le code source.<\/p>\n<h3>9.2 Gestion des suffixes et harmonisation des identifiants de colonnes<\/h3>\n<p>L&rsquo;ex\u00e9cution de fonctions multiples sur un panel \u00e9largi de variables g\u00e9n\u00e8re spontan\u00e9ment une prolif\u00e9ration de nouvelles colonnes dans la table finale d&rsquo;agr\u00e9gation. Si la nomenclature n&rsquo;est pas rigoureusement canalis\u00e9e d\u00e8s la conception de la requ\u00eate, les colonnes r\u00e9sultantes risquent de porter des libell\u00e9s ambigus g\u00eanant les jointures ou les visualisations ult\u00e9rieures.<\/p>\n<p>Le param\u00e8tre formel <code>.names<\/code> au sein de <code>across()<\/code> permet un contr\u00f4le typographique absolu sur la cha\u00eene textuelle g\u00e9n\u00e9r\u00e9e, gr\u00e2ce \u00e0 l&rsquo;injection de m\u00e9ta-variables symboliques de remplacement telles que <code>{.col}<\/code> (le nom original de la colonne trait\u00e9e) et <code>{.fn}<\/code> (le libell\u00e9 textuel de la fonction statistique appliqu\u00e9e) :<\/p>\n<pre><code># Contr\u00f4le de la nomenclature et standardisation acad\u00e9mique\ndonnees_psy |&gt;\n  group_by(groupe) |&gt;\n  summarize(\n    across(\n      .cols = c(flexibilite_post, temps_reaction_ms),\n      .fns = list(Moy = (x) mean(x, na.rm = TRUE), EcartType = (x) sd(x, na.rm = TRUE)),\n      .names = \"Stat_{.fn}_{.col}\"\n    ),\n    .groups = \"drop\"\n  )\n<\/code><\/pre>\n<p>Cette standardisation nomenclaturelle rigoureuse pr\u00e9vient toute collision de noms et garantit que les pipelines automatis\u00e9s de reporting ou les scripts de mise en page graphique puissent imm\u00e9diatement localiser et apparier les m\u00e9triques descriptives \u00e0 l&rsquo;aide d&rsquo;expressions r\u00e9guli\u00e8res \u00e9l\u00e9mentaires.<\/p>\n<h3>9.3 It\u00e9ration fonctionnelle avec le package purrr<\/h3>\n<p>Pour des structures analytiques plus modulaires ou des jeux de donn\u00e9es hautement hi\u00e9rarchis\u00e9s \u2014 tels que des donn\u00e9es longitudinales issues d&rsquo;\u00e9valuations \u00e9cologiques momentan\u00e9es (ESM) o\u00f9 chaque individu g\u00e9n\u00e8re des s\u00e9ries temporelles continues \u2014, l&rsquo;approche fonctionnelle articul\u00e9e autour du package <a rel=\"noopener noreferrer\" href=\"https:\/\/purrr.tidyverse.org\/\">purrr<\/a> offre une scalabilit\u00e9 sup\u00e9rieure.<\/p>\n<p>Le paradigme consiste \u00e0 fragmenter le jeu de donn\u00e9es d&rsquo;origine en une liste de sous-tableaux disjoints \u00e0 l&rsquo;aide de la commande <code>split()<\/code>, puis \u00e0 it\u00e9rer sur chaque sous-tableau via la fonction <code>map_dfr()<\/code> pour en extraire des bilans statistiques personnalis\u00e9s encapsul\u00e9s sous forme d&rsquo;un conteneur rectangulaire unique :<\/p>\n<pre><code>library(purrr)\n\n# D\u00e9coupage fonctionnel et synth\u00e8se modulaire via purrr\nsynthese_purrr &lt;- donnees_psy |&gt;\n  split(~ groupe) |&gt;\n  map_dfr(function(sous_groupe) {\n    tibble(\n      Groupe = unique(sous_groupe$groupe),\n      N_Sujets = nrow(sous_groupe),\n      Flex_M = mean(sous_groupe$flexibilite_post, na.rm = TRUE),\n      Flex_SD = sd(sous_groupe$flexibilite_post, na.rm = TRUE),\n      TR_Mediane = median(sous_groupe$temps_reaction_ms, na.rm = TRUE),\n      TR_MAD = mad(sous_groupe$temps_reaction_ms, na.rm = TRUE)\n    )\n  })\n\nprint(synthese_purrr)\n<\/code><\/pre>\n<p>Ce patron de conception algorithmique s&rsquo;av\u00e8re particuli\u00e8rement pertinent lorsqu&rsquo;il s&rsquo;agit d&rsquo;int\u00e9grer des calculs complexes non vectoris\u00e9s, tels que le r\u00e9\u00e9chantillonnage par bootstrap de l&rsquo;intervalle de confiance de la m\u00e9diane au sein de chaque strate clinique ind\u00e9pendante.<\/p>\n<h2>10. Alternatives sp\u00e9cialis\u00e9es : aggregate(), data.table et psych::describeBy()<\/h2>\n<h3>10.1 L&rsquo;approche historique avec aggregate()<\/h3>\n<p>Outre <code>tapply()<\/code>, le syst\u00e8me fondamental Base R propose une fonction historique \u00e0 l&rsquo;architecture \u00e9l\u00e9gante : <code>aggregate()<\/code>. Son principal avantage conceptuel r\u00e9side dans sa prise en charge native de la notation par formule statistique (l&rsquo;op\u00e9rateur tilde <code>~<\/code>), famili\u00e8re aux chercheurs accoutum\u00e9s \u00e0 la mod\u00e9lisation sous <code>lm()<\/code> ou <code>aov()<\/code> :<\/p>\n<pre><code># Agr\u00e9gation sous Base R via la syntaxe par formule\nsynthese_aggregate &lt;- aggregate(\n  flexibilite_post ~ groupe + tranche_age, \n  data = donnees_psy, \n  FUN = function(x) c(Moyenne = mean(x), Ecart_Type = sd(x))\n)\n\nprint(synthese_aggregate)\n<\/code><\/pre>\n<p>La fonction <code>aggregate()<\/code> accepte \u00e9galement l&rsquo;encapsulation de multiples variables d\u00e9pendantes sur le flanc gauche de la formule en les combinant via l&rsquo;op\u00e9rateur de liaison matricielle <code>cbind()<\/code> (par exemple <code>cbind(flexibilite_post, temps_reaction_ms) ~ groupe<\/code>). Bien que cette approche soit remarquablement lisible et totalement affranchie de toute d\u00e9pendance logicielle tierce, les structures retourn\u00e9es par <code>aggregate()<\/code> lorsqu&rsquo;on applique des fonctions vectorielles multiples prennent la forme troublante d&rsquo;une matrice imbriqu\u00e9e \u00e0 l&rsquo;int\u00e9rieur d&rsquo;une colonne de data frame, rendant sa manipulation subs\u00e9quente parfois complexe pour les analystes peu familiaris\u00e9s avec les sp\u00e9cificit\u00e9s de Base R.<\/p>\n<h3>10.2 Traitement \u00e0 haute performance avec data.table<\/h3>\n<p>D\u00e8s lors que la recherche comportementale aborde des champs computationnels massifs \u2014 tels que l&rsquo;analyse des traces d&rsquo;activit\u00e9 sur smartphone \u00e0 la milliseconde, les bases \u00e9pid\u00e9miologiques de registres psychiatriques nationaux de plusieurs millions de lignes ou la neuro-imagerie computationnelle \u2014, la vitesse d&rsquo;ex\u00e9cution et l&rsquo;optimisation de la m\u00e9moire vive deviennent des imp\u00e9ratifs absolus. Le package <a rel=\"noopener noreferrer\" href=\"https:\/\/rdatatable.gitlab.io\/data.table\/\">data.table<\/a>, con\u00e7u par Matt Dowle, constitue le nec plus ultra de la haute performance sous R.<\/p>\n<p>Reposant sur une syntaxe compacte de la forme g\u00e9n\u00e9rale <code>DT[i, j, by]<\/code> (signifiant conceptuellement : filtrer sur les lignes <code>i<\/code>, calculer ou s\u00e9lectionner les m\u00e9triques <code>j<\/code>, conditionnellement aux groupes <code>by<\/code>), <code>data.table<\/code> op\u00e8re ses calculs par r\u00e9f\u00e9rence en m\u00e9moire directe, \u00e9radiquant les copies interm\u00e9diaires co\u00fbteuses :<\/p>\n<pre><code>library(data.table)\n\n# Coercition de la structure en data.table\ndt_psy &lt;- as.data.table(donnees_psy)\n\n# Calcul ultra-rapide par groupe avec data.table\nsynthese_dt &lt;- dt_psy[\n  !is.na(flexibilite_post), \n  .(\n    N_Effectif = .N,\n    Moyenne_Flex = mean(flexibilite_post),\n    SD_Flex = sd(flexibilite_post),\n    Mediane_TR = median(temps_reaction_ms, na.rm = TRUE)\n  ), \n  by = .(groupe)\n]\n\nprint(synthese_dt)\n<\/code><\/pre>\n<p>Sur des bases de donn\u00e9es massives, les benchmarks de calcul confirment que <code>data.table<\/code> surpasse en vitesse d&rsquo;ex\u00e9cution <code>dplyr<\/code> et <code>aggregate()<\/code> d&rsquo;un facteur de 5 \u00e0 50, se posant en outil incontournable pour l&rsquo;exploration de donn\u00e9es m\u00e9gadimensionnelles en neurosciences cognitives.<\/p>\n<h3>10.3 Le package psych et la fonction d&rsquo;excellence describeBy()<\/h3>\n<p>Pour le praticien ou l&rsquo;enseignant-chercheur en sciences psychologiques ne souhaitant pas coder manuellement chaque m\u00e9trique statistique, William Revelle a d\u00e9velopp\u00e9 au sein du package sp\u00e9cialis\u00e9 <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=psych\">psych<\/a> un v\u00e9ritable joyau m\u00e9thodologique : la fonction <code>describeBy()<\/code>.<\/p>\n<p>Cette fonction g\u00e9n\u00e8re instantan\u00e9ment l&rsquo;int\u00e9gralit\u00e9 du profil psychom\u00e9trique descriptif standard pour chaque groupe exp\u00e9rimental : effectif valide (<span class=\"arabpsy-math-inline\" data-latex=\"n\">$n$<\/span>), moyenne arithm\u00e9tique (<span class=\"arabpsy-math-inline\" data-latex=\"mean\">$mean$<\/span>), \u00e9cart-type (<span class=\"arabpsy-math-inline\" data-latex=\"sd\">$sd$<\/span>), m\u00e9diane (<span class=\"arabpsy-math-inline\" data-latex=\"median\">$median$<\/span>), moyenne tronqu\u00e9e \u00e0 10 % (<span class=\"arabpsy-math-inline\" data-latex=\"trimmed\">$trimmed$<\/span>), m\u00e9diane des \u00e9carts absolus (<span class=\"arabpsy-math-inline\" data-latex=\"mad\">$mad$<\/span>), minimum (<span class=\"arabpsy-math-inline\" data-latex=\"min\">$min$<\/span>), maximum (<span class=\"arabpsy-math-inline\" data-latex=\"max\">$max$<\/span>), \u00e9tendue (<span class=\"arabpsy-math-inline\" data-latex=\"range\">$range$<\/span>), asym\u00e9trie (<span class=\"arabpsy-math-inline\" data-latex=\"skew\">$skew$<\/span>), aplatissement (<span class=\"arabpsy-math-inline\" data-latex=\"kurtosis\">$kurtosis$<\/span>) et erreur standard (<span class=\"arabpsy-math-inline\" data-latex=\"se\">$se$<\/span>) :<\/p>\n<pre><code>library(psych)\n\n# G\u00e9n\u00e9ration instantan\u00e9e du bilan psychom\u00e9trique complet\nbilan_psych &lt;- describeBy(\n  x = flexibilite_post ~ groupe, \n  data = donnees_psy, \n  mat = TRUE,      # Restitution directe sous forme de matrice tabulaire\n  digits = 2       # Arrondi d\u00e9cimal acad\u00e9mique standard\n)\n\nprint(bilan_psych)\n<\/code><\/pre>\n<p>La configuration de l&rsquo;argument formel <code>mat = TRUE<\/code> constitue une bonne pratique cruciale : elle ordonne la conversion imm\u00e9diate de la sortie en une matrice de donn\u00e9es tabulaire rectangulaire pr\u00eate \u00e0 \u00eatre export\u00e9e, \u00e9vitant l&rsquo;affichage textuel segment\u00e9 par d\u00e9faut. <code>describeBy()<\/code> repr\u00e9sente indiscutablement l&rsquo;outil le plus complet, le plus robuste et le plus ergonomique pour le reporting pr\u00e9liminaire en psychom\u00e9trie empirique.<\/p>\n<h2>11. Traduction visuelle et validation graphique des statistiques descriptives<\/h2>\n<h3>11.1 Repr\u00e9sentation conjointe de la tendance centrale et de l&rsquo;incertitude<\/h3>\n<p>L&rsquo;inspection purement num\u00e9rique des statistiques descriptives doit imp\u00e9rativement \u00eatre consolid\u00e9e par une transcription graphique des grandeurs estim\u00e9es. Dans la tradition scientifique de la psychologie, la repr\u00e9sentation conjointe de la tendance centrale (moyenne) et de son incertitude statistique (\u00e9cart-type ou intervalle de confiance \u00e0 95 %) a historiquement pris la forme de diagrammes en barres surmont\u00e9s de barres d&rsquo;erreur.<\/p>\n<p>Bien que couramment employ\u00e9e, la litt\u00e9rature m\u00e9thodologique contemporaine (notamment les travaux de Weissgerber et al., 2015) d\u00e9nonce vigoureusement ces diagrammes dits \u00ab dynamite plots \u00bb. En masquant l&rsquo;int\u00e9gralit\u00e9 des observations sous un bloc opaque monochrome et en ne laissant visible que la barre d&rsquo;erreur unilat\u00e9rale sup\u00e9rieure, ils cr\u00e9ent une illusion visuelle de pl\u00e9nitude tout en dissimulant les anomalies distributionnelles, la bimodalit\u00e9 sous-jacente ou les asym\u00e9tries s\u00e9v\u00e8res. N\u00e9anmoins, lorsque la clart\u00e9 l&rsquo;impose, la biblioth\u00e8que graphique <a rel=\"noopener noreferrer\" href=\"https:\/\/ggplot2.tidyverse.org\/\">ggplot2<\/a> permet une \u00e9valuation graphique directe par groupe au moyen de l&rsquo;op\u00e9rateur dynamique <code>stat_summary()<\/code> sans calcul tabulaire interm\u00e9diaire :<\/p>\n<pre><code>library(ggplot2)\n\n# Graphique de moyennes avec barres d'erreur bas\u00e9es sur l'\u00e9cart-type\nggplot(donnees_psy, aes(x = groupe, y = flexibilite_post, fill = groupe)) +\n  stat_summary(fun = mean, geom = \"bar\", alpha = 0.7, width = 0.5) +\n  stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1), \n               geom = \"errorbar\", width = 0.2) +\n  theme_classic() +\n  labs(\n    title = \"Flexibilit\u00e9 Cognitive Moyenne par Condition Th\u00e9rapeutique\",\n    subtitle = \"Les barres d'erreur repr\u00e9sentent \u00b1 1 \u00c9cart-Type\",\n    x = \"Condition Exp\u00e9rimentale\",\n    y = \"Score de Flexibilit\u00e9\"\n  ) +\n  theme(legend.position = \"none\")\n<\/code><\/pre>\n<p>Cette visualisation synth\u00e9tique doit toutefois \u00eatre r\u00e9serv\u00e9e aux distributions dont la stricte normalit\u00e9 unimodale a \u00e9t\u00e9 pr\u00e9alablement attest\u00e9e par les m\u00e9triques de forme.<\/p>\n<h3>11.2 Visualisation de l&rsquo;int\u00e9gralit\u00e9 des distributions par groupe<\/h3>\n<p>Pour honorer les exigences \u00e9thiques et scientifiques de transparence visuelle des donn\u00e9es (<em>Open Science Framework<\/em>), la communaut\u00e9 internationale encourage d\u00e9sormais l&rsquo;usage de repr\u00e9sentations d\u00e9voilant la granularit\u00e9 empirique compl\u00e8te de l&rsquo;\u00e9chantillon. Le couplage conceptuel d&rsquo;un diagramme en bo\u00eete (<em>boxplot<\/em>), d&rsquo;un diagramme en violon (<em>violin plot<\/em>) et d&rsquo;un nuage de points dispers\u00e9s (<em>jittering<\/em>) concr\u00e9tise cet id\u00e9al m\u00e9thodologique.<\/p>\n<p>Le diagramme en bo\u00eete illustre rigoureusement les m\u00e9triques d&rsquo;ordre : la ligne centrale \u00e9paisse encode la m\u00e9diane empirique, le corps rectangulaire mat\u00e9rialise l&rsquo;intervalle interquartile (<span class=\"arabpsy-math-inline\" data-latex=\"Q_1\">$Q_1$<\/span> \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"Q_3\">$Q_3$<\/span>), et les moustaches projettent la dispersion jusqu&rsquo;\u00e0 1,5 fois l&rsquo;IQR, isolant visuellement toute valeur aberrante potentielle au-del\u00e0. Le violon renseigne quant \u00e0 lui sur la densit\u00e9 de probabilit\u00e9 continue estim\u00e9e par noyau (<em>kernel density<\/em>) :<\/p>\n<pre><code># Graphique hybride complet : Violon + Bo\u00eete + Points bruts\nggplot(donnees_psy, aes(x = groupe, y = temps_reaction_ms, fill = groupe)) +\n  geom_violin(alpha = 0.3, trim = FALSE, color = NA) +\n  geom_boxplot(width = 0.2, outlier.shape = NA, alpha = 0.7) +\n  geom_jitter(width = 0.15, alpha = 0.5, size = 1.5, color = \"black\") +\n  theme_minimal() +\n  labs(\n    title = \"Distribution des Temps de R\u00e9action par Groupe Exp\u00e9rimental\",\n    x = \"Condition\",\n    y = \"Temps de R\u00e9action (ms)\"\n  ) +\n  theme(legend.position = \"none\")\n<\/code><\/pre>\n<p>Ce type de restitution graphique disqualifie toute falsification par masquage, permettant au reviewer de v\u00e9rifier en un coup d&rsquo;\u0153il l&rsquo;absence de bimodalit\u00e9 cach\u00e9e, de constater la dispersion effective des points et d&rsquo;appr\u00e9cier la pertinence clinique de l&rsquo;indicateur d&rsquo;ordre m\u00e9dian par rapport \u00e0 l&rsquo;\u00e9talement r\u00e9el des chronom\u00e9tries individuelles.<\/p>\n<h3>11.3 Diagnostics graphiques des asym\u00e9tries intragroupes<\/h3>\n<p>La fid\u00e9lit\u00e9 des statistiques descriptives calcul\u00e9es par groupe peut enfin \u00eatre audit\u00e9e visuellement \u00e0 travers des outils diagnostiques sp\u00e9cialis\u00e9s. La cartographie des densit\u00e9s stratifi\u00e9es par facettes (via <code>facet_wrap<\/code> sous <code>ggplot2<\/code>) permet de confronter le trac\u00e9 empirique de chaque strate \u00e0 une courbe gaussienne id\u00e9ale th\u00e9orique :<\/p>\n<pre><code># Tra\u00e7age des densit\u00e9s empiriques avec facettage par groupe\nggplot(donnees_psy, aes(x = temps_reaction_ms)) +\n  geom_density(fill = \"steelblue\", alpha = 0.4) +\n  facet_wrap(~ groupe) +\n  theme_bw() +\n  labs(\n    title = \"Contr\u00f4le Morphologique des Densit\u00e9s de Temps de R\u00e9action\",\n    x = \"Temps de R\u00e9action (ms)\",\n    y = \"Densit\u00e9 de Probabilit\u00e9\"\n  )\n<\/code><\/pre>\n<p>Parall\u00e8lement, la production de graphiques quantile-quantile (Q-Q plots) stratifi\u00e9s permet de tester formellement l&rsquo;alignement des quantiles empiriques intragroupes sur les quantiles th\u00e9oriques d&rsquo;une loi normale univari\u00e9e au moyen de <code>geom_qq()<\/code> et <code>geom_qq_line()<\/code>. Tout d\u00e9crochement syst\u00e9matique en forme de S ou de banane confirme la pr\u00e9sence d&rsquo;une asym\u00e9trie ou d&rsquo;une leptocurticit\u00e9 majeure, validant r\u00e9troactivement la d\u00e9cision de recourir aux m\u00e9dianes, aux moyennes tronqu\u00e9es et aux MAD calcul\u00e9es lors des \u00e9tapes tabulaires ant\u00e9rieures.<\/p>\n<h2>12. Restitution acad\u00e9mique, conformit\u00e9 APA et reproductibilit\u00e9 scientifique<\/h2>\n<h3>12.1 Mise en forme des tables selon les directives de l&rsquo;APA (7e \u00e9dition)<\/h3>\n<p>L&rsquo;\u00e9tape conclusive du traitement descriptif des donn\u00e9es consiste \u00e0 convertir la table num\u00e9rique brute en un tableau acad\u00e9mique formel, irr\u00e9prochable sur le plan typographique et rigoureusement conforme aux directives \u00e9ditoriales de l&rsquo;APA (7e \u00e9dition). Les normes APA prohibent formellement l&rsquo;usage des grilles quadrill\u00e9es compl\u00e8tes : aucun trait vertical ne doit figurer dans le tableau final, seules trois lignes horizontales principales \u00e9tant tol\u00e9r\u00e9es (au-dessus et en dessous de l&rsquo;en-t\u00eate de colonnes, et une ligne terminale en cl\u00f4ture de tableau).<\/p>\n<p>Par ailleurs, la typographie conventionnelle exige que les abr\u00e9viations statistiques d&rsquo;\u00e9chantillon soient compos\u00e9es en italique : <em>n<\/em> pour la taille de sous-groupe, <em>M<\/em> pour la moyenne arithm\u00e9tique, <em>SD<\/em> pour l&rsquo;\u00e9cart-type, <em>Mdn<\/em> pour la m\u00e9diane et <em>IC<\/em> pour l&rsquo;intervalle de confiance. L&rsquo;arrondi acad\u00e9mique standard se calibre strictement \u00e0 deux d\u00e9cimales significatives. Le package <a rel=\"noopener noreferrer\" href=\"https:\/\/gt.rstudio.com\/\">gt<\/a> excelle dans la concr\u00e9tisation de cette mise en page professionnelle pour des exports directs vers Word, PDF ou HTML :<\/p>\n<pre><code>library(gt)\n\n# \u00c9laboration d'une table descriptive strictement conforme aux normes APA 7\ntable_apa &lt;- synthese_complete_dplyr |&gt;\n  select(groupe, N_Valide, Moyenne, Ecart_Type, Mediane, IQR) |&gt;\n  gt() |&gt;\n  tab_header(\n    title = \"Tableau 1\",\n    subtitle = \"Statistiques descriptives de la flexibilit\u00e9 cognitive selon la condition exp\u00e9rimentale\"\n  ) |&gt;\n  cols_label(\n    groupe = \"Condition\",\n    N_Valide = html(\"&lt;em&gt;n&lt;\/em&gt;\"),\n    Moyenne = html(\"&lt;em&gt;M&lt;\/em&gt;\"),\n    Ecart_Type = html(\"&lt;em&gt;SD&lt;\/em&gt;\"),\n    Mediane = html(\"&lt;em&gt;Mdn&lt;\/em&gt;\"),\n    IQR = html(\"&lt;em&gt;IQR&lt;\/em&gt;\")\n  ) |&gt;\n  fmt_number(\n    columns = c(Moyenne, Ecart_Type, Mediane, IQR),\n    decimals = 2\n  ) |&gt;\n  tab_options(\n    table.border.top.style = \"solid\",\n    table.border.top.width = px(2),\n    table.border.top.color = \"black\",\n    table.border.bottom.style = \"solid\",\n    table.border.bottom.width = px(2),\n    table.border.bottom.color = \"black\",\n    column_labels.border.bottom.style = \"solid\",\n    column_labels.border.bottom.width = px(1),\n    column_labels.border.bottom.color = \"black\",\n    table_body.hlines.style = \"none\", # Suppression des lignes horizontales internes\n    table_body.vlines.style = \"none\"  # Proscription absolue des lignes verticales\n  )\n\nprint(table_apa)\n<\/code><\/pre>\n<p>Des alternatives logicielles telles que <code>kableExtra<\/code> (pour les environnements LaTeX) ou <a rel=\"noopener noreferrer\" href=\"https:\/\/davidgohel.github.io\/flextable\/\">flextable<\/a> (pour l&rsquo;\u00e9cosyst\u00e8me Microsoft Office Word) permettent de transposer ce tableau de m\u00e9triques stratifi\u00e9es directement dans vos manuscrits sans n\u00e9cessiter la moindre retouche manuelle.<\/p>\n<h3>12.2 Standardisation des flux de travail sous R Markdown et Quarto<\/h3>\n<p>L&rsquo;int\u00e9gration de la cha\u00eene d&rsquo;agr\u00e9gation descriptive au sein d&rsquo;un document computationnel unifi\u00e9 g\u00e9r\u00e9 par <a rel=\"noopener noreferrer\" href=\"https:\/\/quarto.org\/\">Quarto<\/a> ou <a rel=\"noopener noreferrer\" href=\"https:\/\/rmarkdown.rstudio.com\/\">R Markdown<\/a> mat\u00e9rialise l&rsquo;aboutissement de la d\u00e9marche de science ouverte et reproductible. Dans cette architecture, le texte narratif de l&rsquo;article scientifique et les blocs d&rsquo;instructions R (<em>code chunks<\/em>) coexistent au sein d&rsquo;un m\u00eame document source dynamique portant l&rsquo;extension <code>.qmd<\/code> ou <code>.Rmd<\/code>.<\/p>\n<p>Cette imbrication \u00e9radique radicalement l&rsquo;erreur humaine la plus fr\u00e9quente en publication biom\u00e9dicale et psychologique : l&rsquo;erreur de recopie manuelle lors du copier-coller des chiffres depuis la console statistique vers le traitement de texte. En utilisant le m\u00e9canisme du code dynamique en ligne (<em>inline R code<\/em>), le chercheur formule directement son compte-rendu textuel :<\/p>\n<p>\u00ab Le groupe ayant b\u00e9n\u00e9fici\u00e9 de la th\u00e9rapie informatis\u00e9e a manifest\u00e9 un niveau de flexibilit\u00e9 cognitive moyen sup\u00e9rieur (<em>M<\/em> = `r round(mean(groupe_info$flexibilite_post, na.rm=TRUE), 2)`, <em>SD<\/em> = `r round(sd(groupe_info$flexibilite_post, na.rm=TRUE), 2)`) comparativement au groupe t\u00e9moin (<em>M<\/em> = `r round(mean(groupe_ctrl$flexibilite_post, na.rm=TRUE), 2)`, <em>SD<\/em> = `r round(sd(groupe_ctrl$flexibilite_post, na.rm=TRUE), 2)`). \u00bb<\/p>\n<p>D\u00e8s lors qu&rsquo;un participant additionnel est recrut\u00e9 ou qu&rsquo;un artefact d&rsquo;encodage est rectifi\u00e9 dans la base de donn\u00e9es brute, la simple r\u00e9\u00e9valuation globale du document (<em>Render<\/em> ou <em>Knit<\/em>) r\u00e9actualise instantan\u00e9ment l&rsquo;int\u00e9gralit\u00e9 des nombres cit\u00e9s dans le texte, les tables de synth\u00e8se APA et les graphiques de distribution associ\u00e9s, garantissant une synchronisation math\u00e9matique permanente.<\/p>\n<h3>12.3 Synth\u00e8se proc\u00e9durale et arbre de d\u00e9cision m\u00e9thodologique<\/h3>\n<p>Pour clore ce trait\u00e9 exhaustif de l&rsquo;agr\u00e9gation stratifi\u00e9e sous R, il convient de synth\u00e9tiser les arbitrages proc\u00e9duraux sous la forme d&rsquo;un protocole d\u00e9cisionnel clair. Face \u00e0 une base de donn\u00e9es de recherche empirique, le choix de l&rsquo;idiome computationnel et des m\u00e9triques \u00e0 mobiliser s&rsquo;articule autour de trois crit\u00e8res fondamentaux : le volume d&rsquo;\u00e9chantillonnage, la forme de la distribution sous-jacente et la finalit\u00e9 applicative de la restitution.<\/p>\n<p>Lorsque l&rsquo;objectif r\u00e9side dans l&rsquo;exploration vectorielle rapide au sein de la console R ou dans la maintenance de scripts p\u00e9rennes sans aucune d\u00e9pendance logicielle, les op\u00e9rateurs fondamentaux de Base R, \u00e0 l&rsquo;image de <code>tapply()<\/code> et <code>aggregate()<\/code>, demeurent d&rsquo;une efficacit\u00e9 incontestable. D\u00e8s lors que l&rsquo;on manipule des questionnaires multidimensionnels requ\u00e9rant le traitement conjoint de multiples colonnes et la construction de pipelines lisibles pr\u00eats pour la publication, l&rsquo;\u00e9cosyst\u00e8me Tidyverse articul\u00e9 autour de <code>dplyr::group_by()<\/code>, <code>summarize()<\/code> et <code>across()<\/code> s&rsquo;impose comme la solution de r\u00e9f\u00e9rence mondiale. Enfin, face \u00e0 des volum\u00e9tries massives exc\u00e9dant plusieurs millions d&rsquo;enregistrements, la syntaxe optimis\u00e9e de <code>data.table<\/code> assure un avantage algorithmique d\u00e9cisif.<\/p>\n<p>Sur le versant purement m\u00e9thodologique, la vigilance s&rsquo;impose : tout reporting descriptive par strate doit d\u00e9buter par l&rsquo;audit syst\u00e9matique du taux d&rsquo;attrition et de valeurs manquantes (<code>sum(is.na(x))<\/code>), suivi de l&rsquo;inspection conjointe de la moyenne arithm\u00e9tique et de l&rsquo;\u00e9cart-type si les donn\u00e9es \u00e9pousent une forme sym\u00e9trique normale, ou de la m\u00e9diane, de l&rsquo;\u00e9cart interquartile (<code>IQR<\/code>) et de l&rsquo;\u00e9cart-type robuste (<code>mad()<\/code>) si la distribution trahit une asym\u00e9trie ou une pollution par scores atypiques. Solidement arm\u00e9 de ces m\u00e9triques et de leurs traductions graphiques, l&rsquo;analyste peut alors s&rsquo;engager avec confiance dans l&rsquo;\u00e9tape subs\u00e9quente de la mod\u00e9lisation statistique inf\u00e9rentielle \u2014 qu&rsquo;il s&rsquo;agisse d&rsquo;analyses de variance univari\u00e9es, de mod\u00e8les de r\u00e9gression lin\u00e9aire hi\u00e9rarchique ou de mod\u00e9lisations par \u00e9quations structurelles.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>American Psychological Association. (2020). <em>Publication manual of the American Psychological Association<\/em> (7th ed.). American Psychological Association. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1037\/0000165-000\">https:\/\/doi.org\/10.1037\/0000165-000<\/a><\/li>\n<li>Chambers, J. M. (2016). <em>Extending R<\/em>. CRC Press. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1201\/9781315381305\">https:\/\/doi.org\/10.1201\/9781315381305<\/a><\/li>\n<li>Dowle, M., &amp; Srinivasan, A. (2023). <em>data.table: Extension of `data.frame`<\/em> (Version 1.14.8) [Logiciel informatique]. <a rel=\"noopener noreferrer\" href=\"https:\/\/CRAN.R-project.org\/package=data.table\">https:\/\/CRAN.R-project.org\/package=data.table<\/a><\/li>\n<li>Little, R. J. A., &amp; Rubin, D. B. (2019). <em>Statistical analysis with missing data<\/em> (3rd ed.). John Wiley &amp; Sons. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1002\/9781119482260\">https:\/\/doi.org\/10.1002\/9781119482260<\/a><\/li>\n<li>R Core Team. (2023). <em>R: A language and environment for statistical computing<\/em>. R Foundation for Statistical Computing. <a rel=\"noopener noreferrer\" href=\"https:\/\/www.R-project.org\/\">https:\/\/www.R-project.org\/<\/a><\/li>\n<li>Revelle, W. (2023). <em>psych: Procedures for psychological, psychometric, and personality research<\/em> (Version 2.3.9) [Logiciel informatique]. Northwestern University. <a rel=\"noopener noreferrer\" href=\"https:\/\/CRAN.R-project.org\/package=psych\">https:\/\/CRAN.R-project.org\/package=psych<\/a><\/li>\n<li>Weissgerber, T. L., Milic, N. M., Winham, S. J., &amp; Garovic, V. D. (2015). Beyond bar and line graphs: Time for a new data presentation paradigm. <em>PLOS Biology<\/em>, 13(4), Article e1002128. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1371\/journal.pbio.1002128\">https:\/\/doi.org\/10.1371\/journal.pbio.1002128<\/a><\/li>\n<li>Wickham, H. (2011). The split-apply-combine strategy for data analysis. <em>Journal of Statistical Software<\/em>, 40(1), 1\u201329. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.18637\/jss.v040.i01\">https:\/\/doi.org\/10.18637\/jss.v040.i01<\/a><\/li>\n<li>Wickham, H., Fran\u00e7ois, R., Henry, L., M\u00fcller, K., &amp; Vaughan, D. (2023). <em>dplyr: A grammar of data manipulation<\/em> (Version 1.1.4) [Logiciel informatique]. <a rel=\"noopener noreferrer\" href=\"https:\/\/CRAN.R-project.org\/package=dplyr\">https:\/\/CRAN.R-project.org\/package=dplyr<\/a><\/li>\n<li>Wickham, H., &amp; Grolemund, G. (2017). <em>R for data science: Import, tidy, transform, visualize, and model data<\/em>. O&rsquo;Reilly Media. <a rel=\"noopener noreferrer\" href=\"https:\/\/r4ds.had.co.nz\/\">https:\/\/r4ds.had.co.nz\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide m\u00e9thodologique complet pour calculer des statistiques descriptives par groupe dans R avec Base R, dplyr et psych en recherche psychologique.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[1829,2193,1830],"tags":[2690,16,2658,2212,5413],"class_list":["post-4800","psych_stat","type-psych_stat","status-publish","hentry","category-methodologie-statistique","category-programmation-r","category-psychometrie-et-recherche","tag-dplyr","tag-psychometrie","tag-r","tag-statistiques-descriptives","tag-tapply"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/4800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4800"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/4800\/revisions"}],"predecessor-version":[{"id":16688,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/4800\/revisions\/16688"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}