Comment effectuer le test de Dunn en Python

Guide universitaire pour réaliser le test de Dunn en Python avec scikit-posthocs : théorie, code, ajustements de p-valeurs et application selon les normes APA.

Dr. Mohammed Looti Universitaire et chercheur spécialisé en psychologie
PUBLIÉ
Révisé scientifiquement · Dr. Marwa Abd-Alazim · septembre 11, 2026
Revu médicalement et scientifiquement Vérifié le : septembre 11, 2026
Dr. Marwa Abd-Alazim PhD in Psychology
Faculty Member • University of Kerbala
Critères d'évaluation et normes cliniques

Ce contenu fait l'objet d'un examen scientifique rigoureux et de normes éditoriales médicales afin de garantir l'exactitude clinique et la conformité aux directives fondées sur des preuves (APA / OMS).

Dans le domaine de l’inférence statistique moderne, l’analyse comparative de plusieurs échantillons indépendants constitue l’un des piliers méthodologiques les plus sollicités en sciences biomédicales, en psychologie, en neurosciences et en économétrie appliquée. Lorsque les distributions empiriques violent les postulats stricts de normalité gaussienne ou d’homogénéité des variances intrinsèques à l’analyse de variance classique (ANOVA de Fisher), les chercheurs se tournent vers les méthodes non paramétriques. Le test d’analyse de variance à un facteur de Kruskal-Wallis s’impose alors comme l’alternative par excellence pour tester l’hypothèse nulle selon laquelle plusieurs populations partagent une distribution stochastique identique. Toutefois, ce test dit « omnibus » se heurte à une limite intrinsèque majeure : il se borne à détecter l’existence d’une hétérogénéité globale au sein du système expérimental sans jamais préciser quelles paires de sous-groupes se différencient mutuellement.

L’identification rigoureuse de ces disparités intergroupes impose le recours à une procédure d’analyse post-hoc spécialisée, capable de préserver la structure distributionnelle des données tout en jugulant l’inflation probabiliste de l’erreur de type I inhérente à la multiplication des tests d’hypothèses. C’est précisément à cette croisée des exigences statistiques que s’illustre le test proposé par la biostatisticienne Olive Jean Dunn en 1964. Conçu expressément pour faire suite à un test de Kruskal-Wallis significatif, le test de Dunn repose sur l’évaluation des écarts entre les rangs moyens calculés à l’échelle globale de l’échantillon groupé, fournissant un cadre mathématiquement cohérent avec la statistique globale initiale.

Alors que les progiciels statistiques propriétaires tels que SPSS, SAS ou Stata ont longtemps dominé la pratique analytique en milieu académique, le paradigme de la recherche ouverte et reproductible a catalysé une adoption massive de l’écosystème Python pour le traitement des données empiriques. Grâce à des bibliothèques hautement spécialisées telles que SciPy, Pandas et particulièrement scikit-posthocs, l’exécution computationnelle du test de Dunn bénéficie aujourd’hui d’une puissance algorithmique, d’une flexibilité d’ajustement des valeurs critiques et d’une intégration graphique sans précédent. Ce guide méthodologique exhaustif a pour vocation d’exposer de manière exhaustive les fondements mathématiques, les critères de décision épistémologiques, les protocoles de programmation en Python ainsi que les normes de restitution académique du test de Dunn, fournissant ainsi aux chercheurs et analystes de données un cadre de référence rigoureux et pérenne.

1. Introduction aux tests post-hoc non paramétriques et au test de Dunn

1.1 Fondements théoriques des analyses post-hoc après Kruskal-Wallis

L’inférence statistique sur données quantitatives repose traditionnellement sur la distinction fondamentale entre les approches paramétriques, qui postulent une forme fonctionnelle a priori de la distribution sous-jacente des populations sources, et les approches non paramétriques, qui s’affranchissent de ces contraintes de modélisation en substituant aux grandeurs métriques brutes leurs statistiques de rangs relatives. Lorsqu’une expérience scientifique implique trois conditions indépendantes ou davantage, la stratégie inférentielle canonique consiste à soumettre les données à un test omnibus. Le test de Kruskal-Wallis joue ce rôle pivot dans le paradigme non paramétrique : il évalue si les fonctions de répartition empiriques des $k$ groupes proviennent d’une population parente commune en comparant la variance intergroupe des rangs moyens à la variance théorique attendue sous l’hypothèse nulle.

Néanmoins, la puissance de rejet du test de Kruskal-Wallis s’accompagne d’une cécité directionnelle complète. Une valeur p inférieure au seuil critique conventionnel indique avec certitude qu’au moins une population domine stochastiquement une autre, mais elle ne fournit aucun moyen formel d’isoler la ou les paires spécifiques responsables de ce déséquilibre statistique global. Tenter de déduire la structure sous-jacente des différences à partir de la simple inspection visuelle des médianes échantillonnales constitue une grave faute méthodologique, car les fluctuations d’échantillonnage et les disparités d’effectifs faussent l’intuition descriptive. Il devient dès lors mathématiquement indispensable de déployer des tests d’hypothèses secondaires ciblés sur les écarts de rangs moyens, calibrés pour contrôler le risque de faux positifs.

Le positionnement épistémologique du test de Dunn face aux contraintes non gaussiennes répond à cette exigence d’alignement théorique. Contrairement aux approches post-hoc dérivées de la théorie des modèles linéaires généraux (telles que le test HSD de Tukey ou le test de Scheffé), le test de Dunn opère exclusivement dans l’espace topologique des rangs combinés. Il respecte fidèlement la spécificité méthodologique de l’analyse non paramétrique en recherche quantitative, qui refuse d’attribuer une signification probabiliste à des moyennes arithmétiques lorsque les données sont asymétriques, plafonnées ou issues d’échelles de mesure ordinales où les intervalles métriques ne possèdent aucune équidistance démontrée.

1.2 Pertinence et cas d’usage en psychologie et neurosciences

Les sciences du comportement et les neurosciences cognitives constituent des champs d’application privilégiés pour les analyses non paramétriques par rangs. La psychométrie quantitative manipule quotidiennement des inventaires cliniques, des questionnaires de personnalité et des batteries d’évaluation de l’humeur calibrés sur des échelles de type Likert à cinq, sept ou dix points. Attribuer des propriétés d’intervalles stricts à de tels indicateurs psychologiques relève d’une hypothèse excessivement hardie : la distance subjective séparant un score de « Pas du tout d’accord » à « Modérément d’accord » n’est en rien comparable à celle séparant « Tout à fait d’accord » d’un stade supérieur fictif. Le test de Dunn fournit le cadre idoine pour comparer les profils de sévérité symptomatique sans imposer de linéarité artificielle aux construits psychologiques latents.

Par ailleurs, la recherche neurobiologique et clinique contemporaine se heurte régulièrement à la contrainte de petits échantillons d’individus, particulièrement lors de l’étude de pathologies neurodégénératives rares, de lésions cérébrales focalisées ou d’essais pharmacologiques de phase précoce impliquant des primates non humains ou des rongeurs génétiquement modifiés. Ces configurations expérimentales induisent fréquemment une asymétrie de distribution très prononcée ainsi qu’une hétéroscédasticité structurelle que le théorème central limite ne peut compenser en raison d’effectifs restreints (souvent compris entre six et douze observations par groupe). L’évaluation de protocoles d’intervention comportementale comparant, par exemple, un groupe recevant une thérapie d’exposition, un groupe soumis à un entraînement attentionnel informatisé et un groupe contrôle sur liste d’attente, nécessite une analyse robuste capable de tolérer de tels écarts morphologiques.

Enfin, les paradigmes de chronométrie mentale fournissent une illustration saisissante de l’utilité du test de Dunn. Les données de temps de réaction (TR) enregistrées lors de tâches de décision lexicale, d’indiçage spatial de Posner ou de discrimination visuelle rapide présentent une distribution invariablement tronquée à gauche par les limites physiologiques de la conduction neuronale et étirée à droite par des latences cognitives atypiques ou des fluctuations d’attention. L’exclusion arbitraire des valeurs extrêmes afin de normaliser artificiellement la distribution expose le chercheur au biais de confirmation ; le recours au test de Dunn permet de préserver l’intégrité de l’échantillon complet tout en garantissant une estimation non biaisée des contrastes de performance motrice et cognitive entre conditions de stimulation.

1.3 Comparaison critique entre Dunn et les tests de Mann-Whitney par paires

Face au défi des comparaisons multiples consécutives à un test de Kruskal-Wallis, une pratique erronée mais tristement répandue dans la littérature scientifique consiste à exécuter une série de tests U de Mann-Whitney (ou tests de la somme des rangs de Wilcoxon) distincts pour chaque dyade possible, en y associant une simple correction de Bonferroni. Cette démarche repose sur un contresens algébrique fondamental : lors de l’exécution d’un test de Mann-Whitney entre deux sous-groupes $A$ et $B$, l’ensemble des données des autres groupes ($C$, $D$, etc.) est exclu de l’algorithme, ce qui oblige la procédure à recalculer une assignation de rangs locale et isolée, propre à cette seule paire restreinte. Ce réarrangement dynamique détruit la cohérence topologique globale qui avait servi à rejeter l’hypothèse nulle lors du test omnibus de Kruskal-Wallis.

À l’inverse, la formulation originale de Dunn (1964) calcule la statistique de contraste en conservant la structure d’ordonnancement établie sur la totalité des $N$ observations mutualisées au sein de l’expérience. Chaque sujet conserve son rang global, garantissant une parfaite consistance mathématique entre l’inférence omnibus et l’inférence par paires. Comme le souligne la littérature méthodologique spécialisée, dissocier la phase post-hoc de la matrice globale des rangs produit des inversions de classement paradoxales où la hiérarchie stochastique locale contredit l’ordre établi au niveau de la population consolidée.

Sur le plan de l’efficacité asymptotique et du contrôle du risque d’erreur, le test de Dunn tire parti de l’estimation mutualisée de la variance calculée sur l’ensemble de l’échantillon élargi, conférant à la statistique de décision une plus grande stabilité paramétrique en présence de déséquilibres d’effectifs locaux. Les recommandations méthodologiques unanimes de la communauté biostatistique préconisent l’exclusion systématique des batteries de tests de Mann-Whitney non coordonnées au profit de la procédure standardisée de Dunn, considérée comme le prolongement théorique direct, naturel et exact de la statistique de Kruskal-Wallis.

2. Fondements mathématiques et statistiques du test de Dunn

2.1 Algorithme de calcul des sommes et moyennes des rangs

Pour appréhender l’architecture formelle du test de Dunn, il convient d’expliciter son algorithme de calcul pas à pas. Soit un ensemble expérimental comportant $k$ groupes indépendants, chaque groupe $i$ (pour $i in {1, 2, dots, k}$) possédant un effectif désigné par $n_i$. L’effectif total agrégé de l’étude est noté $N = \sum_{i=1}^k n_i$. La première étape algorithmique consiste à regrouper l’intégralité des $N$ observations scalaires dans un unique vecteur conjoint, sans considération de leur appartenance factorielle d’origine, puis à trier ce vecteur de manière strictement croissante.

Un rang numérique entier compris entre $1$ (attribué à l’observation présentant la plus faible magnitude) et $N$ (attribué à la valeur la plus élevée) est ensuite alloué à chaque donnée. Une fois cette opération d’indexation matricielle achevée, les observations sont réassignées à leurs sous-groupes expérimentaux d’origine tout en conservant leur étiquette de rang global $R_{ij}$, désignant le rang attribué au $j$-ième individu du $i$-ième groupe. La somme des rangs pour un groupe déterminé s’établit formellement comme :

$$R_i = \sum_{j=1}^{n_i} R_{ij}$$

À partir de cette somme factorielle, on calcule le rang moyen du sous-groupe considéré, grandeur centrale de toute la théorisation non paramétrique :

$$\bar{R}_i = \frac{R_i}{n_i}$$

La statistique différentielle au cœur du test de Dunn pour évaluer l’écart séparant deux groupes distincts arbitraires $i$ et $j$ repose directement sur la valeur absolue de la différence de leurs rangs moyens respectifs :

$$D_{ij} = |\bar{R}_i – \bar{R}_j|$$

Sous l’hypothèse nulle fondamentale $H_0$ stipulant que toutes les observations sont issues d’une même distribution continue sous-jacente continue et homogène, la distribution d’échantillonnage de cette différence de rangs moyens admet une espérance mathématique strictement nulle, $E(D_{ij}) = 0$, et converge asymptotiquement vers une structure stochastique prévisible régie par les lois limites combinatoires.

2.2 Distribution asymptotique z et calcul de l’erreur type

Pour convertir la différence arithmétique $D_{ij}$ en une métrique de décision standardisée, le test de Dunn divise cet écart brut par l’erreur type théorique de la différence des rangs moyens sous l’hypothèse nulle. La variance théorique d’une observation de rang tirée aléatoirement au sein d’un ensemble de $N$ éléments distincts sans ex æquo est définie par $\sigma^2 = \frac{N(N+1)}{12}$. En vertu de l’indépendance mutuelle postulée entre les échantillons expérimentaux, la variance théorique associée à l’écart séparant les estimateurs $\bar{R}_i$ et $\bar{R}_j$ correspond à la somme de leurs variances individuelles respectives :

$$\sigma^2_{ij} = V(\bar{R}_i – \bar{R}_j) = \left( \frac{N(N + 1)}{12} \right) \left( \frac{1}{n_i} + \frac{1}{n_j} \right)$$

L’erreur type formelle, notée $SE_{ij}$, s’obtient directement par extraction de la racine carrée de cette variance combinée :

$$SE_{ij} = \sqrt{\left( \frac{N(N + 1)}{12} \right) \left( \frac{1}{n_i} + \frac{1}{n_j} \right)}$$

La statistique de test standardisée de Dunn, désignée universellement par la lettre $z$, se formule dès lors par le quotient suivant :

$$z = \frac{\bar{R}_i – \bar{R}_j}{\sqrt{\left( \frac{N(N + 1)}{12} \right) \left( \frac{1}{n_i} + \frac{1}{n_j} \right)}}$$

En vertu des théorèmes limites asymptotiques régissant les statistiques d’ordre, à mesure que la taille d’échantillon globale $N$ croît, la variable aléatoire $z$ converge en loi vers une distribution normale centrée réduite standard $\mathcal{N}(0, 1)$. Il apparaît clairement dans cette formulation que l’erreur type s’ajuste dynamiquement aux effectifs partiels $n_i$ et $n_j$. Une disparité structurelle dans la distribution des effectifs n’invalide pas le calcul, mais augmente proportionnellement l’erreur type associée aux contrastes impliquant des groupes minoritaires, préservant ainsi la rigueur inférentielle contre les faux artefacts statistiques générés par une fausse précision d’échantillonnage.

2.3 Traitement rigoureux des ex æquo (rangs liés)

L’idéal théorique d’une variable quantitative parfaitement continue implique une probabilité nulle d’observer deux valeurs rigoureusement identiques. Cependant, dans la pratique empirique de la recherche — et tout particulièrement lors du recueil de données discrètes ou de scores psychométriques calibrés sur des échelles entières —, la présence d’ex æquo (rangs liés ou ties) s’avère omniprésente. Ignorer la présence de données identiques altérerait le calcul de la variance combinée des rangs en surestimant artificiellement la dispersion stochastique théorique.

Le traitement mathématique canonique des ex æquo repose sur le protocole des rangs moyens (mid-ranks). Lorsque plusieurs observations partagent une valeur métrique rigoureusement identique, le protocole algorithmique leur attribue à chacune la moyenne arithmétique des positions de rangs contiguës qu’elles auraient occupées si elles avaient présenté une variation infinitésimale. Par exemple, si trois observations se disputent les positions ordinales 4, 5 et 6, le rang moyen attribué uniformément à ces trois observations s’établit à $(4 + 5 + 6) / 3 = 5$.

Cette condensation artificielle de la variabilité impose l’application d’un facteur de correction formel à l’expression de la variance sous hypothèse nulle. Si l’on recense $m$ groupes distincts d’ex æquo, chaque groupe $e$ (pour $e in {1, 2, dots, m}$) contenant $t_e$ observations mutuellement identiques, la variance corrigée de l’erreur type s’énonce selon l’expression :

$$\sigma^2_{corrigee} = \left[ \frac{N(N + 1)}{12} – \frac{\sum_{e=1}^m (t_e^3 – t_e)}{12(N – 1)} \right] \left( \frac{1}{n_i} + \frac{1}{n_j} \right)$$

Le dénominateur de la statistique $z$ incorpore directement ce coefficient réducteur, réduisant l’erreur type estimée et augmentant légèrement la valeur absolue de la statistique $z$. Dans les jeux de données caractérisés par une saturation massive d’ex æquo (par exemple un échantillon psychologique où 60 % des sujets obtiennent la note maximale à un test de performance cognitive), l’omission de cette correction computationnelle induirait un accroissement fallacieux de l’erreur de type II en masquant des contrastes réels sous une variance théorique surdimensionnée.

3. Le problème des comparaisons multiples et méthodes d’ajustement

3.1 Inflation de l’erreur de type I (taux d’erreur par famille)

L’exploration analytique des différences existant entre $k$ sous-groupes expérimentaux implique la réalisation d’un ensemble combinatoire de comparaisons par paires distinctes. Le nombre total de contrastes dyadiques non redondants, traditionnellement noté $C$, se détermine rigoureusement par le coefficient binomial :

$$C = \binom{k}{2} = \frac{k(k – 1)}{2}$$

Pour un protocole expérimental modeste impliquant $k = 3$ groupes, le nombre de comparaisons s’établit à $C = 3$. Dès lors que le design s’étend à $k = 5$ groupes, ce chiffre grimpe à $C = 10$, pour atteindre $C = 45$ lorsque $k = 10$. Si l’on teste chacune de ces hypothèses partielles au seuil de significativité conventionnel univarié fixé à $\alpha = 0{,}05$, on s’expose immédiatement au phénomène dévastateur de l’inflation de l’erreur de type I globale, désigné sous le vocable technique de taux d’erreur par famille (Family-Wise Error Rate ou FWER).

Sous l’hypothèse nulle conjointe globale où l’ensemble des populations proviendrait d’une même distribution parente, et en postulant de manière simplificatrice l’indépendance stochastique des tests, la probabilité d’observer au moins un rejet à tort (un faux positif) sur la famille globale des $C$ tests s’exprime mathématiquement par la formule probabiliste :

$$\alpha_{global} = FWER = 1 – (1 – \alpha)^C$$

Ainsi, pour un dispositif expérimental comportant 5 groupes indépendants ($C = 10$ contrastes) testés à un seuil unitaire de 0,05, la probabilité globale d’enregistrer au minimum une découverte illusoire s’élève à $1 – (1 – 0{,}05)^{10} \approx 0{,}401$, soit plus de 40 % de risque d’erreur. Dans les disciplines expérimentales confrontées à la crise de la reproductibilité, tolérer une telle dérive statistique revient à saturer la littérature scientifique de corrélations fallacieuses et d’affirmations d’efficacité thérapeutique dénuées de fondement matériel. Il est donc impératif d’intégrer des procédures d’ajustement calibrées pour restaurer l’intégrité de la décision inférentielle.

3.2 Ajustements conservateurs classiques : Bonferroni et Šidák

La réponse historique et conceptuellement la plus intuitive au problème du FWER a été formalisée à travers l’inégalité de Boole-Bonferroni. La correction classique de Bonferroni préconise une modulation linéaire stricte du critère de décision : pour maintenir le risque d’erreur globale par famille à un niveau inférieur ou égal à $\alpha$, chaque contraste individuel $c$ doit être confronté à un seuil d’exclusion recalculé selon la règle :

$$\alpha_{Bonferroni} = \frac{\alpha}{C}$$

De manière équivalente, les environnements computationnels contemporains implémentent cette contrainte en multipliant directement la valeur p brute issue de la distribution asymptotique par le facteur $C$, soit $p_{ajustee} = \min(1, p_{brute} \times C)$. Bien que cette procédure garantisse mathématiquement un contrôle irréprochable du FWER dans toutes les configurations de dépendance stochastique, elle se distingue par un conservatisme excessif. Dès que le nombre de comparaisons dépasse une dizaine d’unités, la pénalité imposée aux valeurs p devient si draconienne que la puissance statistique globale du dispositif s’effondre, augmentant dramatiquement le risque de commettre une erreur de type II en passant sous silence des découvertes scientifiques authentiques.

La correction de Šidák propose une variante légèrement moins répressive, dérivée directement de l’axiome de décomposition multiplicative sous hypothèse d’indépendance mutuelle des hypothèses nulles partielles :

$$\alpha_{Sidak} = 1 – (1 – \alpha)^{\frac{1}{C}}$$

La valeur p corrigée correspondante s’obtient alors via la transformation $p_{ajustee} = 1 – (1 – p_{brute})^C$. Bien que la formulation de Šidák procure un gain infinitésimal de puissance par rapport au découpage purement linéaire de Bonferroni, l’écart pratique entre les deux approches s’avère négligeable sur les petits échantillons, tandis que la condition théorique d’indépendance stricte entre les tests de rangs n’est jamais rigoureusement respectée dans le test de Dunn (les rangs moyens d’un groupe intervenant dans plusieurs contrastes simultanés, introduisant une covariance structurelle positive entre les statistiques de test).

3.3 Procédures séquentielles et contrôle du FDR : Holm et Benjamini-Hochberg

Pour dépasser l’écueil du conservatisme outrancier sans pour autant compromettre la rigueur du contrôle du risque alpha, les statisticiens ont développé des procédures séquentielles pas à pas (stepwise procedures). Parmi celles-ci, la méthode de Holm-Bonferroni (ou méthode de Holm) s’impose comme la référence méthodologique dominante pour le contrôle strict du FWER. L’algorithme opère de façon séquentielle ascendante : les $C$ valeurs p non ajustées issues des comparaisons de Dunn sont initialement triées par ordre strictement croissant :

$$p_{(1)} le p_{(2)} le dots le p_{(C)}$$

Chaque probabilité empirique ordonnée $p_{(i)}$ est ensuite confrontée successivement à un seuil glissant recalculé de façon adaptative :

$$\alpha_{(i)} = \frac{\alpha}{C – i + 1}$$

Le processus décisionnel s’interrompt dès lors qu’une valeur p échoue à franchir le seuil assigné à son rang d’ordre. Toutes les hypothèses associées aux valeurs p supérieures ou égales à cet indice de rupture sont alors déclarées non significatives. Sur le plan computationnel, l’algorithme génère des valeurs p ajustées monotones croissantes. La méthode de Holm domine uniformément la correction de Bonferroni : elle procure une puissance statistique substantiellement supérieure tout en préservant exactement le même niveau de garantie probabiliste contre l’erreur de type I à l’échelle de la famille globale.

Dans un paradigme philosophique distinct, axé sur la découverte exploratoire plutôt que sur la validation confirmatoire stricte, Yoav Benjamini et Yosef Hochberg (1995) ont formalisé le contrôle du taux de fausses découvertes (False Discovery Rate ou FDR). Plutôt que de chercher à interdire l’occurrence d’un seul faux positif au sein de l’étude (objectif du FWER), la procédure de Benjamini-Hochberg (BH) vise à borner l’espérance mathématique de la proportion de rejets fallacieux parmi l’ensemble des hypothèses rejetées. La formule d’évaluation séquentielle descendante confronte les valeurs p ordonnées au critère :

$$p_{(i)} le \frac{i}{C} \times Q$$

où $Q$ représente le taux de tolérance d’erreur ciblé (usuellement fixé à 0,05). Cette approche confère une puissance statistique particulièrement élevée lors de criblages expérimentaux impliquant des matrices de données hautement multidimensionnelles, fréquemment rencontrées en profilage transcriptomique cérébral ou en analyse neuro-imagerie computationnelle.

4. Configuration de l’environnement d’analyse sous Python

4.1 L’écosystème open source pour la statistique post-hoc

La mise en œuvre pratique des calculs non paramétriques avancés exige un environnement scientifique structuré, cohérent et pérenne. L’écosystème Python dédié à l’analyse de données s’appuie sur une hiérarchie modulaire de bibliothèques hautement spécialisées dont la synergie garantit à la fois l’exactitude des calculs matriciels et l’élégance de la programmation orientée objet. Au cœur de cette infrastructure statistique, la bibliothèque spécialisée scikit-posthocs occupe une place prépondérante. Conçue spécifiquement par Maksim Terpilowski pour combler les lacunes historiques des grandes suites statistiques en matière d’analyses post-hoc non paramétriques, elle fournit une implémentation native et optimisée du test de Dunn, ainsi que de multiples variantes de contrastes stochastiques.

En amont de ces routines post-hoc, la bibliothèque SciPy (à travers son sous-module scipy.stats) constitue le socle algorithmique indispensable pour conduire les calculs inférentiels initiaux, au premier rang desquels figure le test omnibus de Kruskal-Wallis. SciPy prend en charge l’évaluation de la fonction de répartition empirique, le calcul des rangs et l’extraction formelle des statistiques d’ordre.

La manipulation tabulaire, le nettoyage des matrices expérimentales et la structuration des cohortes reposent sans équivoque sur le tandem NumPy et Pandas. Pandas permet de gérer avec précision les séries hétérogènes, les étiquettes factorielles et les indexations hiérarchiques propres aux designs expérimentaux contemporains. Enfin, l’articulation graphique s’opère via les bibliothèques Matplotlib et Seaborn, capables de convertir les matrices de décision statistiques abstraites en représentations iconographiques de haute qualité visuelle conformes aux exigences éditoriales des plus prestigieuses revues à comité de lecture.

4.2 Installation et configuration des bibliothèques dépendantes

Pour garantir la stabilité opérationnelle des calculs et éliminer les risques de conflits de bibliothèques croisées, il est impératif d’installer l’ensemble des modules analytiques au sein d’un environnement virtuel isolé (par exemple via venv ou un gestionnaire d’environnement Conda dédié). Le déploiement s’effectue simplement en exécutant les instructions d’installation standardisées via le terminal de commandes. L’installation native via l’utilitaire pip s’effectue en invoquant les paquets suivants :

pip install numpy scipy pandas scikit-posthocs matplotlib seaborn statsmodels

Pour les infrastructures scientifiques déployées sur la distribution Anaconda ou Miniconda, la résolution des dépendances précompilées peut être ordonnée via le canal communautaire de référence :

conda install -c conda-forge scikit-posthocs scipy pandas matplotlib seaborn

Une fois les modules déployés dans l’interpréteur Python, il convient d’exécuter une séquence d’initialisation dans l’en-tête de votre script ou de votre calepin Jupyter afin d’importer explicitement les espaces de noms nécessaires et de paramétrer la gestion des avertissements d’exécution (warnings). Le bloc de script fonctionnel suivant illustre cette préparation méthodologique :

import sys
import warnings
import numpy as np
import pandas as pd
import scipy.stats as stats
import scikit_posthocs as sp
import matplotlib.pyplot as plt
import seaborn as sns

warnings.filterwarnings('ignore', category=FutureWarning)
warnings.filterwarnings('ignore', category=UserWarning)

Cette directive de configuration inhibe l’apparition récurrente des avertissements de dépréciation liés aux transitions architecturales internes des structures matricielles de Pandas, assurant ainsi une lisibilité optimale de la console d’exécution tout au long des étapes de modélisation inférentielle.

4.3 Gestion de la reproductibilité scientifique

L’idéal méthodologique contemporain impose que toute analyse statistique publiée s’accompagne d’une traçabilité intégrale de son environnement d’exécution, permettant à tout évaluateur indépendant de régénérer à l’identique les estimations chiffrées présentées. En Python, la variabilité des versions de sous-dépendances mathématiques peut induire des altérations infinitésimales des valeurs p calculées via des déviations d’arrondis à la quinzième décimale ou des modifications d’algorithmes de tri interne des rangs liés. Le verrouillage explicite des versions logicielles constitue donc une obligation déontologique.

La formalisation d’un fichier standardisé requirements.txt doit être systématiquement opérée à l’issue de l’analyse, en consignant la version exacte de chaque brique algorithmique employée :

numpy==1.26.4
scipy==1.13.0
pandas==2.2.2
scikit-posthocs==0.9.0
matplotlib==3.8.4
seaborn==0.13.2

Parallèlement, lorsque l’analyse statistique s’insère dans un flux de travail nécessitant la simulation de données, l’imputation probabiliste ou l’application de méthodes de rééchantillonnage par amorçage (bootstrap) pour estimer les intervalles de confiance des contrastes, il est indispensable de figer la graine du générateur de nombres pseudo-aléatoires. L’initialisation déterministe via la méthode np.random.seed(42) ou l’instanciation explicite d’un générateur standardisé de la classe np.random.default_rng(seed=42) garantit que la génération des distributions empiriques et les rééchantillonnages subséquents demeureront rigoureusement identiques, assurant une parfaite reproductibilité sur n’importe quel terminal informatique distant.

5. Vérification préalable : Exécution du test de Kruskal-Wallis dans Python

5.1 Vérification des postulats d’application

Avant d’engager le moindre calcul post-hoc, la probité scientifique impose de valider la conformité du protocole expérimental avec les postulats sous-tendant le test non paramétrique omnibus de Kruskal-Wallis. Le premier axiome méthodologique concerne l’indépendance mutuelle stricte des observations entre les différents sous-groupes expérimentaux. Chaque unité statistique (patient, sujet, modèle animal) ne peut appartenir qu’à un seul et unique groupe factoriel et ne doit avoir subi aucune mesure répétée dans le temps. Tout plan expérimental à mesures répétées ou comportant un appariement systématique invalide le recours à cette procédure et exige l’orientation vers le test de Friedman ou un modèle linéaire mixte sur rangs.

Le second critère structurel réside dans la nature de la variable dépendante. Celle-ci doit se situer au minimum à un niveau d’échelle ordinale continue ou discrète afin de permettre une hiérarchisation monotone non ambiguë de l’ensemble des observations. Les variables purement nominales ou polytomiques dépourvues d’ordre intrinsèque ne peuvent en aucun cas être traitées par cette méthodologie.

Enfin, une distinction épistémologique cruciale — fréquemment négligée dans la pratique — sépare le test d’homogénéité globale des rangs du test de comparaison des médianes. Pour que le test de Kruskal-Wallis (puis le test de Dunn subséquent) puisse formellement s’interpréter comme un test d’égalité des médianes entre les groupes expérimentaux, il est impératif que les distributions de chaque condition présentent une morphologie distributionnelle similaire (c’est-à-dire un profil de dissymétrie, d’étalement et d’aplatissement comparable). Si les distributions partagent une forme géométrique superposable, tout décalage du rang moyen correspond fidèlement à un glissement de la médiane. En revanche, si les sous-groupes présentent des formes distributionnelles divergentes, le test de Dunn conserve toute sa validité mathématique, mais son interprétation théorique doit rigoureusement se limiter à l’évaluation de la dominance stochastique ordinale, sans référence abusive aux médianes physiques des populations sources.

5.2 Implémentation algorithmique avec scipy.stats.kruskal

L’exécution de l’analyse omnibus au sein de l’environnement Python est prise en charge par la fonction kruskal hébergée dans le sous-module spécialisé scipy.stats. Cette routine accepte en arguments d’entrée une série d’itérables (listes numériques, tableaux unidimensionnels NumPy ou séries Pandas) représentant chacun les valeurs mesurées au sein d’une modalité factorielle donnée. L’extraction matricielle à partir d’un DataFrame structuré selon les standards modernes s’opère de manière concise et élégante.

Supposons un DataFrame Pandas nommé df_etude, contenant une colonne désignée par 'Score' et une colonne factorielle catégorisant les groupes sous l’étiquette 'Protocole'. L’implémentation de la fonction de calcul globale et l’extraction de la statistique formelle s’articulent selon le paradigme de programmation suivant :

groupes_uniques = df_etude['Protocole'].unique()
donnees_par_groupe = [df_etude[df_etude['Protocole'] == g]['Score'].values for g in groupes_uniques]

statistique_H, p_valeur_globale = stats.kruskal(*donnees_par_groupe)

print(f"Statistique omnibus H (Kruskal-Wallis) : {statistique_H:.4f}")
print(f"Valeur p globale associée : {p_valeur_globale:.4e}")

La statistique extraite $H$ intègre d’emblée la correction mathématique standard pour les rangs liés. L’opérateur de décompression d’arguments (l’astérisque *) permet d’injecter dynamiquement un nombre arbitraire de sous-échantillons dans la signature de la fonction sans nécessiter de coder manuellement chaque modalité expérimentale, conférant à la chaîne de traitement un degré élevé d’automatisation logicielle.

5.3 Critères de décision pour le passage aux comparaisons par paires

L’évaluation probabiliste issue de l’étape précédente gouverne strictement la bifurcation du protocole d’analyse de données. Selon l’orthodoxie méthodologique classique de Fisher appliquée aux tests non paramétriques (principe de la procédure protégée), l’engagement des comparaisons par paires via le test de Dunn est subordonné au rejet formel de l’hypothèse nulle conjointe au niveau omnibus. Si la valeur p globale générée par stats.kruskal demeure strictement supérieure au seuil d’exclusion $\alpha$ préétabli (usuellement fixé à 0,05 ou 0,01 selon les standards disciplinaires), l’analyste se voit interdire d’explorer les contrastes post-hoc sous peine d’altérer le cadre de contrôle probabiliste.

Il convient toutefois de souligner l’existence d’un débat contemporain au sein de la communauté des biostatisticiens concernant les contrastes planifiés a priori. Certains méthodologistes soutiennent que si un contraste particulier entre deux thérapies ciblées découle d’une hypothèse de recherche déductivement postulée avant la collecte des données expérimentales, ce contraste peut faire l’objet d’un test direct ciblé, indépendamment du résultat du test omnibus. Néanmoins, dès lors que l’on s’inscrit dans un paradigme d’exploration systématique et exhaustive de l’ensemble des combinaisons dyadiques disponibles, le filtre de décision du Kruskal-Wallis demeure le garant inviolable contre la prolifération incontrôlée de faux positifs fortuits.

La formalisation algorithmique de cette barrière décisionnelle se traduit naturellement par une clause conditionnelle au sein du code Python :

seuil_alpha = 0.05
if p_valeur_globale < seuil_alpha:
    print("Rejet formel de H0 omnibus : Procéder aux analyses post-hoc de Dunn.")
else:
    print("Non-rejet de H0 : Absence de divergence stochastique globale démontrée.")

Ce verrouillage logique évite la propagation accidentelle de traitements post-hoc superflus au sein des chaînes de calcul automatisées.

6. Préparation et structuration des données expérimentales

6.1 Structuration matricielle : Format long versus format large

La manipulation rigoureuse des données sous Python impose une maîtrise experte de la topologie des structures tabulaires. En statistique computationnelle, deux agencements matriciels prédominent : le format large (wide format) et le format long (long format ou concept de données rangées, formalisé sous l’appellation anglophone de tidy data). Dans le format large, chaque colonne du tableau est réservée à un sous-groupe expérimental spécifique, tandis que les lignes répertorient les réplicats individuels. Cette présentation, bien qu’intuitive pour la saisie manuelle sur tableur de bureau, s’avère totalement inadaptée à la modélisation statistique dès lors que les effectifs par groupe sont asymétriques (ce qui force l’insertion artificielle de valeurs manquantes en fin de tableau).

À l’inverse, l’ensemble des fonctions d’analyse avancée de la bibliothèque scikit-posthocs, à l’instar des routines de modélisation de Seaborn, exigent impérativement une organisation matricielle sous format long. Dans cette configuration géométrique, chaque ligne représente une unité d’observation individuelle unique. Le tableau comporte a minima deux colonnes fondamentales : une colonne de mesure continue ou ordinale (la variable dépendante métrique) et une colonne catégorielle codifiant le facteur d’appartenance expérimental (le groupe ou traitement). Pour convertir aisément une matrice large préexistante en structure longue conforme, Pandas offre la méthode vectorisée pd.melt() :

df_format_long = pd.melt(
    df_large,
    var_name='Modalite_Traitement',
    value_name='Score_Mesure'
).dropna()

Pour optimiser les performances de traitement et clarifier la gestion des niveaux factoriels, il est fortement recommandé de typer explicitement la variable textuelle de regroupement sous le type category de Pandas via l’instruction :

df_format_long['Modalite_Traitement'] = df_format_long['Modalite_Traitement'].astype('category')

6.2 Prétraitement et nettoyage des données psychométriques

Avant d’injecter les observations dans les moteurs d’inférence, un audit d’intégrité de la base de données doit être entrepris afin d’éviter toute corruption mathématique des rangs. Les données issues de protocoles psychologiques ou biomédicaux comportent invariablement des non-réponses accidentelles ou des omissions de saisie. En matière d’analyse non paramétrique de rangs, l’imputation de valeurs manquantes par la moyenne arithmétique constitue une aberration absolue qui détruit la structure stochastique réelle de la distribution. Les stratégies conventionnelles s’orientent soit vers une suppression raisonnée des observations incomplètes (listwise deletion) via df.dropna(subset=['Score_Mesure']), soit vers des méthodes d’imputation par la médiane ou par modélisation des plus proches voisins (KNN) spécialement calibrées pour les données discrètes.

Le traitement des valeurs atypiques (outliers) appelle également une réflexion épistémologique mesurée. L’un des mérites cardinaux des méthodes d’assignation de rangs réside précisément dans leur robustesse naturelle face aux valeurs extrêmes : une observation aberrante située à six écarts-types de la médiane n’exerce aucune influence disproportionnée sur l’inférence, puisqu’elle se voit simplement attribuer le rang maximal $N$, exactement au même titre qu’une observation ne dépassant le reste du groupe que de quelques millièmes d’unité métrique. Il est par conséquent fortement déconseillé de censurer ou de tronquer unilatéralement les scores extrêmes au sein d’un pipeline de test de Dunn, sauf s’il est avéré que ces scores résultent d’une erreur d’encodage matériel ou d’un dysfonctionnement instrumental manifeste.

L’audit de conformité s’achève par la vérification de la monotonicité des variables d’identification et par l’assainissement syntaxique des chaînes de caractères représentant les étiquettes factorielles (élimination des espaces superflus, normalisation typographique des accents) afin de prévenir l’instanciation accidentelle de sous-groupes fantômes lors du traitement par l’interpréteur Python.

6.3 Statistiques descriptives préliminaires par groupe

Une communication scientifique irréprochable ne saurait se cantonner à la simple livraison de valeurs p probabilistes ; elle requiert une contextualisation descriptive détaillée de la position centrale et de l’étendue de chaque sous-échantillon. Les paramètres gaussiens traditionnels (moyenne et écart-type) étant inopérants pour restituer fidèlement la morphologie de distributions asymétriques, l’analyste doit privilégier les estimateurs de position non paramétriques, dominés par la médiane et l’écart interquartile (Interquartile Range ou IQR, défini par la différence $Q_3 – Q_1$).

Parallèlement, dans la mesure où le test de Dunn opère directement sur les propriétés spatiales des rangs, il est particulièrement pertinent de calculer et de consigner formellement le rang moyen global de chaque sous-groupe expérimental au sein du tableau descriptif d’amorce. La bibliothèque Pandas permet de synthétiser ces différentes métriques en une ligne d’agrégation hautement expressive :

df_format_long['Rang_Global'] = df_format_long['Score_Mesure'].rank()

tableau_descriptif = df_format_long.groupby('Modalite_Traitement', observed=True).agg(
    Effectif=('Score_Mesure', 'count'),
    Mediane=('Score_Mesure', 'median'),
    Q1=('Score_Mesure', lambda x: np.percentile(x, 25)),
    Q3=('Score_Mesure', lambda x: np.percentile(x, 75)),
    IQR=('Score_Mesure', lambda x: np.percentile(x, 75) - np.percentile(x, 25)),
    Rang_Moyen=('Rang_Global', 'mean')
).reset_index()

print(tableau_descriptif)

Ce tableau d’agrégation constitue la matrice de référence absolue à intégrer dans les annexes méthodologiques ou le corps principal de vos rapports de recherche, fournissant aux relecteurs une visibilité totale sur la cohérence entre les grandeurs brutes observées et les rangs sous-jacents qui détermineront les inférences post-hoc.

7. Exécution pratique du test de Dunn avec scikit-posthocs

7.1 Paramétrage détaillé de la fonction posthoc_dunn()

L’implémentation opérationnelle du test de Dunn sous Python atteint son plus haut niveau de raffinement à travers la fonction dédiée posthoc_dunn() du module scikit_posthocs. Conçue pour offrir une interface fluide avec les DataFrames Pandas, cette fonction encapsule l’intégralité des dérivations mathématiques explicitées au chapitre 2, intégrant la gestion automatique des ex æquo par la méthode des rangs moyens et l’ajustement dynamique de l’erreur type asymptotique.

La signature de la fonction et ses paramètres cardinaux méritent un examen analytique approfondi :

scikit_posthocs.posthoc_dunn(
    a,
    val_col=None,
    group_col=None,
    p_adjust=None,
    sort=True
)

Le paramètre structurel a accepte indifféremment une matrice de données sous format large, une liste de listes de valeurs scalaires ou, dans le cas d’usage recommandé, un DataFrame Pandas structuré selon le format long. Lorsque ce dernier format est retenu, il devient obligatoire d’expliciter les chaînes de caractères désignant les colonnes cibles via val_col (désignant la variable numérique dépendante, par exemple val_col='Score_Mesure') et group_col (désignant la variable catégorielle définissant les modalités factorielles, par exemple group_col='Modalite_Traitement').

Le paramètre critique sort, fixé par défaut à True, ordonne les groupes par ordre alphanumérique sur les index et colonnes de la matrice résultante. Il est vivement recommandé de préserver ce paramétrage afin d’assurer une parfaite bijection visuelle entre les tableaux de contingence et les axes des futures représentations graphiques.

7.2 Sélection et comparaison des modes de correction de p-valeurs

L’argument central régissant le contrôle de l’erreur de décision est le paramètre p_adjust. Ce commutateur logiciel accepte sous forme de chaîne de caractères l’intégralité des algorithmes d’ajustement supportés par la bibliothèque statsmodels, qui sert de moteur d’optimisation sous-jacent. Parmi les configurations les plus sollicitées par les standards scientifiques figurent :

  • p_adjust=None : Renvoie les valeurs p asymptotiques brutes bilatérales sans la moindre altération algorithmique. Cette matrice brute s’avère indispensable pour documenter les statistiques sources ou pour appliquer ultérieurement des corrections personnalisées non implémentées nativement.
  • p_adjust='bonferroni' : Applique la correction conservative stricte par multiplication linéaire univariée. À réserver aux protocoles n’impliquant qu’un très faible volume de contrastes dyadiques ($k le 4$).
  • p_adjust='holm' : Active la procédure séquentielle ascendante de Holm-Bonferroni. Ce choix représente le consensus contemporain le plus robuste pour les études expérimentales comportementales nécessitant un contrôle irréprochable du FWER sans sacrifier la puissance de détection statistique.
  • p_adjust='fdr_bh' : Implémente l’algorithme de Benjamini-Hochberg pour le contrôle du taux de fausses découvertes. Idéal lors d’études exploratoires comportant un nombre volumineux de sous-groupes ou lors de protocoles de criblage à haut débit.
  • p_adjust='sidak' : Exécute la correction multiplicative de Šidák, offrant une alternative marginalement moins rigide que Bonferroni sous réserve de compatibilité structurelle d’indépendance.

L’exemple de script suivant met en évidence la disparité tangible des seuils de significativité obtenus en confrontant les matrices générées par différents correcteurs à partir d’un même jeu de données empiriques :

# Calcul de la matrice brute non corrigée
matrice_brute = sp.posthoc_dunn(df_format_long, val_col='Score_Mesure', group_col='Modalite_Traitement', p_adjust=None)

# Calcul avec ajustement conservateur de Bonferroni
matrice_bonf = sp.posthoc_dunn(df_format_long, val_col='Score_Mesure', group_col='Modalite_Traitement', p_adjust='bonferroni')

# Calcul avec la procédure séquentielle optimale de Holm
matrice_holm = sp.posthoc_dunn(df_format_long, val_col='Score_Mesure', group_col='Modalite_Traitement', p_adjust='holm')

La comparaison attentive de ces matrices révèle fréquemment des contrastes se situant dans une zone frontière (par exemple $p = 0{,}03$ après ajustement de Holm, mais $p = 0{,}08$ sous la férule de Bonferroni), illustrant de façon spectaculaire l’impact déterminant du choix de la méthode de correction sur la conclusion inférentielle finale.

7.3 Interprétation structurelle de la matrice de sortie

L’objet produit en sortie d’un appel à posthoc_dunn() est un DataFrame carré bidimensionnel sous Pandas, dont les index de lignes et les en-têtes de colonnes répliquent fidèlement les étiquettes de vos sous-groupes expérimentaux. Cette matrice est rigoureusement symétrique le long de sa diagonale principale : la cellule située à l’intersection de la ligne $A$ et de la colonne $B$ contient exactement la même valeur p ajustée que la cellule à l’intersection de la ligne $B$ et de la colonne $A$, puisque l’hypothèse nulle bilatérale évalue une distance absolue $|\bar{R}_A – \bar{R}_B|$. La diagonale principale elle-même présente uniformément la valeur $1{,}0$, formalisant l’absence tautologique de différence statistique entre un groupe et lui-même.

Bien que cette disposition matricielle soit particulièrement pratique pour la lecture synthétique ou l’intégration directe dans une carte thermique (heatmap), la rédaction d’articles académiques exige généralement une présentation tabulaire linéaire énumérant explicitement chaque dyade de comparaison distincte, accompagnée de sa conclusion décisionnelle binaire (significatif versus non significatif au seuil $\alpha = 0{,}05$). Il est aisé de convertir cette matrice carrée en une table de synthèse dédupliquée en exploitant les fonctionnalités de manipulation matricielle de NumPy et Pandas :

def convertir_matrice_en_tableau_paires(matrice_p):
    groupes = matrice_p.columns
    paires_extraites = []
    for i in range(len(groupes)):
        for j in range(i + 1, len(groupes)):
            g1, g2 = groupes[i], groupes[j]
            val_p = matrice_p.loc[g1, g2]
            significatif = val_p < 0.05
            paires_extraites.append({
                'Contraste': f"{g1} vs {g2}",
                'P_Ajustee': val_p,
                'Significatif_Alpha_05': significatif
            })
    return pd.DataFrame(paires_extraites)

tableau_recapitulatif = convertir_matrice_en_tableau_paires(matrice_holm)
print(tableau_recapitulatif)

Cette structuration linéaire constitue la base de travail parfaite pour alimenter les sections textuelles de résultats et automatiser la génération des annotations graphiques.

8. Cas pratique complet : Analyse de scores d’anxiété sous trois protocoles cliniques

8.1 Scénario clinique et simulation du jeu de données

Afin d’ancrer de manière pragmatique les concepts mathématiques et algorithmiques développés jusqu’ici, concevons un essai clinique contrôlé et randomisé dans le domaine de la psychiatrie translationnelle et de la psychologie de la santé. Imaginons qu’une équipe hospitalo-universitaire cherche à évaluer l’efficacité différentielle de deux approches psychothérapeutiques non pharmacologiques sur la réduction de la détresse émotionnelle chez des patients souffrant de trouble d’anxiété généralisée (TAG), comparativement à un groupe contrôle standard.

Le dispositif expérimental compare trois conditions indépendantes :

  • Controle : Patients placés sur liste d’attente avec suivi médical habituel sans intervention psychologique ciblée ($n_1 = 30$).
  • Mindfulness : Patients soumis à un protocole standardisé de réduction du stress basée sur la pleine conscience (MBSR) dispensé en huit séances de groupe ($n_2 = 32$).
  • TCC : Patients participant à une thérapie cognitivo-comportementale formalisée ciblant les distorsions cognitives et les croyances métacognitives relatives à l’inquiétude chronique ($n_3 = 28$).

La variable dépendante principale est constituée par le score total obtenu à l’inventaire d’anxiété de Beck (Beck Anxiety Inventory ou BAI) administré à l’issue des huit semaines de prise en charge. Le score BAI est un indice ordonné discret pouvant osciller théoriquement entre 0 et 63 points. Dans les populations cliniques, cette métrique se caractérise notoirement par une forte asymétrie positive (la majorité des patients répondant favorablement au traitement se regroupant sur des scores bas, générant un plancher distributionnel, tandis qu’un sous-groupe réfractaire maintient des scores de sévérité très élevés dans la queue de distribution à droite).

Les hypothèses scientifiques formalisées a priori s’énoncent comme suit :

  • $H_0$ globale : La fonction de répartition des scores de détresse sur l’inventaire BAI est rigoureusement identique dans les trois populations expérimentales (homogénéité stochastique globale).
  • $H_1$ globale : Au moins l’une des conditions thérapeutiques génère une distribution de scores BAI qui domine stochastiquement celle d’une autre condition.
  • Hypothèses par paires spécifiques post-hoc : La TCC et la pleine conscience induisent chacune une atténuation significative de la symptomatologie anxieuse comparativement au groupe contrôle sur liste d’attente, tandis qu’une divergence d’efficacité clinique relative est attendue entre les deux thérapies actives.

8.2 Script complet de traitement statistique de bout en bout

Le script Python suivant implémente l’intégralité du pipeline méthodologique : simulation d’un jeu de données synthétique réaliste présentant une asymétrie marquée via des tirages dans une distribution gamma, inspection descriptive, exécution conditionnelle du test de Kruskal-Wallis, application du test de Dunn avec ajustement séquentiel de Holm-Bonferroni, et conversion des résultats sous forme structurée tabulaire.

import numpy as np
import pandas as pd
import scipy.stats as stats
import scikit_posthocs as sp

# 1. Initialisation déterministe du générateur aléatoire
rng = np.random.default_rng(seed=2024)

# 2. Simulation de scores d'anxiété asymétriques (distribution gamma discrétisée)
scores_controle = np.clip(rng.gamma(shape=7.0, scale=4.0, size=30), 0, 63).astype(int)
scores_mindfulness = np.clip(rng.gamma(shape=5.0, scale=3.5, size=32), 0, 63).astype(int)
scores_tcc = np.clip(rng.gamma(shape=3.5, scale=3.0, size=28), 0, 63).astype(int)

# 3. Assemblage du DataFrame au format long (tidy data)
df_clinique = pd.DataFrame({
    'Score_BAI': np.concatenate([scores_controle, scores_mindfulness, scores_tcc]),
    'Protocole': (['Controle'] * 30) + (['Mindfulness'] * 32) + (['TCC'] * 28)
})
df_clinique['Protocole'] = df_clinique['Protocole'].astype('category')

# 4. Statistiques descriptives de rangs et de position
df_clinique['Rang_Global'] = df_clinique['Score_BAI'].rank()
resume_stats = df_clinique.groupby('Protocole', observed=True).agg(
    N=('Score_BAI', 'count'),
    Mediane=('Score_BAI', 'median'),
    IQR=('Score_BAI', lambda x: np.percentile(x, 75) - np.percentile(x, 25)),
    Rang_Moyen=('Rang_Global', 'mean')
).reset_index()

print("=== STATISTIQUES DESCRIPTIVES ===")
print(resume_stats.to_string(index=False))
print("n")

# 5. Inférence Omnibus : Test de Kruskal-Wallis
echantillons = [df_clinique[df_clinique['Protocole'] == m]['Score_BAI'].values for m in df_clinique['Protocole'].cat.categories]
H_stat, p_omnibus = stats.kruskal(*echantillons)

print("=== INFERENCE OMNIBUS (KRUSKAL-WALLIS) ===")
print(f"H = {H_stat:.3f}, ddl = {len(echantillons)-1}, p = {p_omnibus:.4e}")
print("n")

# 6. Décision conditionnelle et Inférence Post-Hoc : Test de Dunn (Holm)
if p_omnibus < 0.05:
    print("=== INFERENCE POST-HOC : TEST DE DUNN (AJUSTEMENT HOLM) ===")
    matrice_dunn_holm = sp.posthoc_dunn(
        df_clinique,
        val_col='Score_BAI',
        group_col='Protocole',
        p_adjust='holm'
    )
    print(matrice_dunn_holm)
    print("n")
else:
    print("Test omnibus non significatif. Aucune analyse post-hoc exécutée.")

8.3 Déconstruction pas à pas des résultats obtenus

L’exécution scripturale ci-dessus fournit une série de sorties chiffrées qu’il convient de déconstruire avec minutie afin de comprendre la dynamique inférentielle à l’œuvre. En premier lieu, l’examen des statistiques descriptives révèle des médianes de scores d’anxiété s’établissant approximativement à 27,5 pour le groupe Contrôle, à 17,0 pour le protocole Pleine Conscience (Mindfulness) et à 10,0 pour le groupe soumis à la Thérapie Cognitivo-Comportementale (TCC). Les rangs moyens globaux reflètent cette progression ordinale : le groupe Contrôle enregistre un rang moyen d’environ 63,4, le groupe Mindfulness un rang de 44,2, tandis que le protocole TCC culmine sur les scores les plus favorables avec un rang moyen réduit à environ 26,8.

L’étape omnibus confirme la pertinence de l’analyse : la statistique de Kruskal-Wallis atteint une valeur de $H \approx 31{,}42$ avec 2 degrés de liberté, générant une valeur p asymptotique de l’ordre de $1{,}5 \times 10^{-7}$. Ce résultat autorise sans équivoque le rejet de l’hypothèse nulle d’homogénéité stochastique globale à un seuil critique très largement inférieur à $\alpha = 0{,}001$. Le passage au protocole post-hoc de Dunn est donc pleinement légitimé.

L’inspection de la matrice triangulaire résultant du test de Dunn avec ajustement séquentiel de Holm permet de caractériser précisément l’architecture des contrastes cliniques :

  1. Contraste TCC versus Contrôle : La valeur p ajustée s’établit à une magnitude extrêmement faible ($p_{ajustee} < 0{,}0001$). L’écart entre le rang moyen du groupe TCC (26,8) et celui du groupe Contrôle (63,4) est massif. L’inférence démontre formellement la supériorité statistique hautement significative de la TCC sur l’absence de prise en charge psychologique active.
  2. Contraste Mindfulness versus Contrôle : La comparaison dyadique produit une valeur p ajustée de l’ordre de $p_{ajustee} \approx 0{,}004$. L’hypothèse nulle est ici encore fermement rejetée. Le protocole de pleine conscience induit une diminution statistiquement significative des scores d’anxiété comparativement au suivi standard sur liste d’attente.
  3. Contraste TCC versus Mindfulness : L’interrogation de l’écart séparant les deux approches psychothérapeutiques actives génère une valeur p corrigée de $p_{ajustee} \approx 0{,}018$. Dans la mesure où cette valeur demeure strictement inférieure au seuil alpha conventionnel de 0,05, nous sommes fondés à conclure à l’existence d’une différence d’efficacité statistiquement démontrée entre les deux thérapies actives, la thérapie cognitivo-comportementale démontrant une dominance stochastique supérieure sur le soulagement des scores de sévérité anxieuse mesurés via le BAI dans cet échantillon clinique.

Sur le plan des applications cliniques et de la modélisation en santé mentale, ces déductions confirment que si la méditation de pleine conscience offre un levier thérapeutique réel et mesurable face à l’inertie de la liste d’attente, la restructuration cognitive et l’exposition inhérentes au protocole de TCC procurent un bénéfice thérapeutique additionnel significatif dans la prise en charge symptomatique du TAG.

9. Visualisation graphique avancée des résultats de Dunn

9.1 Génération d’une carte thermique (Heatmap) des p-valeurs

Dans les contextes expérimentaux complexes impliquant un grand nombre de modalités factorielles, la lecture aride de tables matricielles denses fatigue l’attention visuelle de l’évaluateur. La conversion de la matrice des valeurs p en une carte thermique (heatmap) chromatique permet d’appréhender instantanément la cartographie des contrastes significatifs. La bibliothèque scikit-posthocs intègre une routine native dénommée sign_plot(), mais la combinaison conjointe des méthodes d’habillage graphique de Seaborn et de Matplotlib offre un contrôle esthétique et fonctionnel infiniment plus raffiné.

L’enjeu graphique fondamental réside dans la définition d’un gradient de couleurs divergent dont le point d’inflexion visuel correspond rigoureusement au seuil de décision statistique critique fixé conventionnellement à $\alpha = 0{,}05$. L’utilisation d’une échelle logarithmique inverse ou d’une palette bicolore contrastée (par exemple bleu pour les contrastes non significatifs et rouge vermillon pour les paires franchissant le seuil d’exclusion) guide immédiatement le regard vers les découvertes statistiquement robustes.

Le script suivant assure la génération complète d’une carte thermique publication-ready à partir de la matrice de Dunn ajustée selon Holm :

# Configuration globale de l'esthétique graphique
plt.figure(figsize=(7, 6), dpi=300)
sns.set_theme(style='white', font='Arial')

# Masque triangulaire supérieur pour éliminer la redondance bilatérale
masque_superieur = np.triu(np.ones_like(matrice_dunn_holm, dtype=bool))

# Tracé de la carte thermique annotée
carte_thermique = sns.heatmap(
    matrice_dunn_holm,
    mask=masque_superieur,
    annot=True,
    fmt=".3f",
    cmap="vlag_r",
    vmin=0.00,
    vmax=0.10,
    cbar_kws={'label': 'Valeur p ajustée (Holm)'},
    linewidths=1.0,
    linecolor='white'
)

plt.title("Matrice des contrastes de Dunn post-hoc", fontsize=13, weight='bold', pad=15)
plt.xlabel("Groupe expérimental", fontsize=11, labelpad=10)
plt.ylabel("Groupe expérimental", fontsize=11, labelpad=10)
plt.tight_layout()
plt.show()

Ce type de rendu visuel élimine toute ambiguïté d’interprétation et se prête parfaitement à l’insertion dans des présentations orales scientifiques ou des rapports d’audit statistique.

9.2 Représentation conjointe des distributions et annotations de significativité

Si la matrice thermique excelle dans l’évaluation des valeurs p, elle demeure muette quant à la directionnalité et à la dispersion physique des données primaires. La figure reine en publication biomédicale et psychologique consiste à juxtaposer, sur un même plan géométrique, l’architecture distributionnelle des données brutes et les indicateurs synthétiques de significativité statistique sous forme de barres de comparaison surmontées d’astérisques standardisés (* pour $p < 0{,}05$, ** pour $p < 0{,}01$, *** pour $p < 0{,}001$).

La superposition d’un diagramme en boîte de Tukey classique (boxplot) tronqué et d’un nuage de points individuels jitterisés (stripplot) offre une transparence descriptive absolue. Le diagramme en boîte documente les quantiles de la population, tandis que le nuage de points révèle la densité réelle des observations, prévenant toute dissimulation d’agrégats bimodaux sous une boîte faussement homogène.

L’intégration programmatique des barres de significativité s’opère directement à l’aide des primitives graphiques de Matplotlib :

fig, ax = plt.subplots(figsize=(8, 6), dpi=300)

# Superposition boxplot et stripplot
sns.boxplot(x='Protocole', y='Score_BAI', data=df_clinique, ax=ax, width=0.45, palette='Set2', boxprops=dict(alpha=0.8), showmeans=False)
sns.stripplot(x='Protocole', y='Score_BAI', data=df_clinique, ax=ax, size=6, color='black', alpha=0.4, jitter=0.2)

# Tracé manuel programmatique d'une barre de comparaison entre Contrôle (idx 0) et TCC (idx 2)
x1, x2 = 0, 2
y_barre = df_clinique['Score_BAI'].max() + 4
hauteur_tige = 1.5

ax.plot([x1, x1, x2, x2], [y_barre, y_barre + hauteur_tige, y_barre + hauteur_tige, y_barre], lw=1.2, c='black')
ax.text((x1 + x2) * 0.5, y_barre + hauteur_tige + 0.5, "***", ha='center', va='bottom', color='black', fontsize=12, weight='bold')

ax.set_title("Distribution des scores d'anxiété (BAI) par groupe d'intervention", fontsize=12, weight='bold', pad=15)
ax.set_xlabel("Protocole d'intervention clinique", fontsize=10, labelpad=10)
ax.set_ylabel("Score d'anxiété de Beck (Points)", fontsize=10, labelpad=10)
ax.set_ylim(bottom=-2, top=y_barre + 8)
sns.despine(top=True, right=True)
plt.tight_layout()
plt.show()

Ce format iconographique répond en tous points aux exigences de clarté documentaire promues par les directives éditoriales des revues savantes internationales.

9.3 Diagrammes de rangs et graphiques de contrastes

Dans la mesure exacte où le test de Dunn ne teste pas l’égalité des médianes brutes mais l’égalité des rangs moyens sous l’hypothèse de distributions partagées, une rigueur méthodologique absolue incite à représenter directement l’espace latent des rangs moyens expérimentaux accompagnés de leurs intervalles d’incertitude. Le diagramme de contrastes (ou graphique en forêt, forest plot) s’impose ici comme le véhicule visuel le plus fidèle à la machinerie statistique interne du test.

Un tel graphique trace sur l’axe des ordonnées l’ensemble des comparaisons par paires et sur l’axe des abscisses l’amplitude standardisée de la différence des rangs moyens $(\bar{R}_i – \bar{R}_j)$, flanquée de son intervalle de confiance asymptotique calculé à partir de l’erreur type $SE_{ij}$ pondérée par le quantile critique de la loi normale centrée réduite ajusté au seuil global choisi. Une ligne verticale d’abscisse zéro représente l’hypothèse nulle d’indifférenciation stochastique : tout intervalle sécant cette ligne axiale formalise un contraste non statistiquement concluant, tandis que tout segment entièrement disjoint du zéro atteste d’un rejet univoque de l’hypothèse nulle.

Lors de la phase finale de préparation documentaire pour soumission à l’éditeur, ces visualisations doivent impérativement être exportées sous des formats vectoriels haute résolution (format PDF vectoriel ou SVG) préservant l’intégrité topologique des textes et tracés indépendamment du facteur d’agrandissement, ou a minima sous forme de fichiers matriciels compressés sans perte (PNG calibré à une densité spatiale minimale de 300 points par pouce ou DPI) via l’instruction :

plt.savefig("resultats_contrastes_dunn.pdf", format='pdf', bbox_inches='tight')
plt.savefig("resultats_contrastes_dunn.png", dpi=300, bbox_inches='tight')

10. Calcul de la taille d’effet pour les comparaisons par paires

10.1 Importance épistémologique de la taille d’effet en recherche expérimentale

L’inférence statistique basée exclusivement sur la valeur p présente une faille conceptuelle rédhibitoire dénoncée avec vigueur par l’American Psychological Association depuis plusieurs décennies : la valeur p est une mesure composite intriquant indissociablement la magnitude réelle du phénomène étudié et la puissance d’échantillonnage de l’expérience (la taille d’échantillon $N$). Avec un échantillon suffisamment vaste, une différence de rang moyen microscopique, dénuée de la moindre utilité pratique ou pertinence clinique, franchira inévitablement le seuil de significativité statistique ($p < 0{,}05$). Inversement, dans une cohorte à effectifs réduits explorant des pathologies orphelines, un effet thérapeutique majeur peut échouer à atteindre le seuil de significativité par simple déficit de puissance mathématique.

La détermination de la taille d’effet (effect size) constitue donc un impératif méthodologique incontournable. Les métriques de taille d’effet fournissent une estimation quantitative standardisée, affranchie de la taille de l’échantillon, de l’amplitude du contraste observé. Elles permettent aux praticiens d’évaluer l’intérêt clinique réel d’un protocole d’intervention et constituent le substrat quantitatif indispensable à la réalisation future de méta-analyses intégratives compilant les données de multiples laboratoires à travers le monde.

10.2 Formulation du coefficient r de Wilcoxon / Dunn

Dans le domaine non paramétrique, l’indicateur de taille d’effet le plus rigoureusement documenté et le plus largement adopté pour quantifier les contrastes basés sur les rangs est le coefficient de corrélation de rang biserte $r$ de Rosenthal-Wilcoxon. Ce coefficient standardisé convertit la statistique asymptotique $z$ issue de la différence des rangs en une métrique d’association bornée théoriquement sur l’intervalle $[0, 1]$ pour sa valeur absolue.

La formulation analytique exacte reliant le score standardisé $z$ du contraste de Dunn à la taille de l’échantillon impliqué dans la dyade considérée s’énonce comme suit :

$$r = \frac{|z|}{\sqrt{N_{paire}}}$$

où $|z|$ représente la valeur absolue de la statistique normale centrée réduite associée au contraste spécifique séparant le groupe $i$ du groupe $j$, et $N_{paire} = n_i + n_j$ représente l’effectif combiné restreint aux deux seuls sous-groupes engagés dans cette comparaison dyadique spécifique. (Il convient de noter une divergence méthodologique mineure dans la littérature : certains auteurs préconisent l’utilisation de l’effectif total $N$ agrégé de toute l’étude au dénominateur ; néanmoins, l’emploi de la taille d’échantillon locale de la paire $n_i + n_j$ prévaut largement dans les standards de publication actuels, car elle évite d’écraser artificiellement la taille d’effet relative d’un contraste lorsque l’étude globale englobe un nombre volumineux d’autres groupes distants).

Pour guider l’interprétation qualitative de cette métrique, les balises de référence proposées historiquement par Jacob Cohen dans le cadre des coefficients de corrélation s’appliquent fidèlement :

  • $r \approx 0{,}10$ : Effet d’amplitude faible (différence perceptible uniquement sur de larges cohortes).
  • $r \approx 0{,}30$ : Effet d’amplitude modérée (différence cliniquement significative et observable en pratique courante).
  • $r ge 0{,}50$ : Effet d’amplitude forte à majeure (divergence massive entre les populations d’intérêt).

10.3 Implémentation algorithmique d’une fonction Python sur mesure

Bien que la bibliothèque scikit-posthocs délivre avec une parfaite fiabilité les matrices de valeurs p via posthoc_dunn(), elle n’extrait pas directement par défaut les statistiques $z$ intermédiaires ni les coefficients $r$ de taille d’effet associés. Il est donc hautement profitable pour le chercheur de disposer d’une fonction algorithmique personnalisée, vectorisée et modulaire, capable de dériver les valeurs $z$ exactes à partir des valeurs p asymptotiques bilatérales brutes et de calculer systématiquement les tailles d’effet correspondantes pour chaque dyade du protocole.

La conversion d’une probabilité unilatérale ou bilatérale en quantile d’écart normal s’opère élégamment via la fonction quantile de la distribution normale standard (la percent point function ou stats.norm.ppf). Le script Python ci-dessous fournit une routine automatisée intégrant ces calculs :

def table_dunn_avec_tailles_effet(df, col_val, col_grp, methode_ajust='holm'):
    import scipy.stats as stats
    import scikit_posthocs as sp
    import pandas as pd
    import numpy as np
    
    # Extraction des p-valeurs brutes et ajustées
    mat_brute = sp.posthoc_dunn(df, val_col=col_val, group_col=col_grp, p_adjust=None)
    mat_ajust = sp.posthoc_dunn(df, val_col=col_val, group_col=col_grp, p_adjust=methode_ajust)
    
    groupes = df[col_grp].unique()
    comptages = df.groupby(col_grp, observed=True)[col_val].count()
    
    resultats = []
    for i in range(len(groupes)):
        for j in range(i + 1, len(groupes)):
            g1, g2 = groupes[i], groupes[j]
            p_brute = mat_brute.loc[g1, g2]
            p_ajust = mat_ajust.loc[g1, g2]
            
            # Reconstitution de la statistique |z| sous l'hypothèse asymptotique
            z_val = stats.norm.ppf(1.0 - (p_brute / 2.0))
            
            # Calcul de l'effectif local combiné de la paire
            n_paire = comptages[g1] + comptages[g2]
            taille_effet_r = z_val / np.sqrt(n_paire)
            
            # Qualification qualitative selon les critères de Cohen
            if taille_effet_r < 0.30:
                magnitude = "Faible"
            elif taille_effet_r < 0.50:
                magnitude = "Modérée"
            else:
                magnitude = "Forte"
                
            resultats.append({
                'Comparaison': f"{g1} vs {g2}",
                'Statistique_z': np.round(z_val, 3),
                'P_Brute': f"{p_brute:.4e}",
                'P_Ajustee': f"{p_ajust:.4e}",
                'Taille_Effet_r': np.round(taille_effet_r, 3),
                'Magnitude': magnitude
            })
    return pd.DataFrame(resultats)

df_synthese_complete = table_dunn_avec_tailles_effet(df_clinique, 'Score_BAI', 'Protocole', 'holm')
print(df_synthese_complete.to_string(index=False))

L’intégration de cette routine au sein de vos analyses consolide instantanément la rigueur quantitative de vos travaux en livrant l’ensemble du faisceau de preuves exigé par les relecteurs méthodologistes les plus exigeants.

11. Erreurs fréquentes, pièges méthodologiques et bonnes pratiques

11.1 Erreurs de syntaxe et de manipulation de données courantes

Dans la conduite computationnelle du test de Dunn sous Python, une proportion substantielle des anomalies d’exécution ou d’inférence résulte d’erreurs de syntaxe élémentaires ou d’incompréhensions liées aux signatures de fonctions. La méprise la plus fréquente consiste à inverser involontairement l’attribution des arguments nominaux val_col et group_col lors de l’appel à posthoc_dunn(). Tenter d’assigner une colonne de labels textuels à val_col déclenche invariablement une exception système de type TypeError ou produit une tentative aberrante de calcul de rangs sur des chaînes de caractères ordonnées alphabétiquement.

Un autre piège pernicieux réside dans la présence masquée de valeurs manquantes (valeurs NaN ou None). Si Pandas tolère généralement la présence de ces données lacunaires lors de l’exécution d’opérations d’agrégation simples en les éliminant silencieusement, le passage de structures contenant des cellules vides à certains algorithmes sous-jacents de scikit-posthocs peut générer une troncature silencieuse de la taille d’échantillon globale $N$, biaisant mathématiquement le calcul de l’erreur type asymptotique par fausse estimation de la variance théorique sous hypothèse nulle. Un nettoyage explicite préalable via dropna() est une précaution impérative.

Enfin, une confusion persiste régulièrement autour de la typographie exacte des chaînes de caractères pilotant l’ajustement des valeurs p. Spécifier par inadvertance p_adjust='bonf' ou p_adjust='BH' (en majuscules) déclenchera une exception d’exécution, le moteur statsmodels sous-jacent attendant scrupuleusement les désignations normalisées en minuscules, telles que 'bonferroni', 'holm' ou 'fdr_bh'. L’audit scrupuleux du dictionnaire d’arguments prévient ces interruptions chronophages.

11.2 Controverses méthodologiques et dérives analytiques

Au-delà des simples maladresses algorithmiques, plusieurs dérives conceptuelles fragilisent régulièrement la validité des inférences non paramétriques publiées. La première dérive réside dans la tentation du p-hacking par sélection a posteriori de la méthode de correction. Un analyste observant qu’un contraste frontière atteint $p = 0{,}046$ sous l’algorithme de Benjamini-Hochberg, mais recule à $p = 0{,}081$ sous la correction de Holm, commettrait une grave infraction à l’éthique scientifique en optant rétroactivement pour le FDR sans déclarer ouvertement ce choix comme exploratoire. Le cadre d’ajustement doit impérativement faire l’objet d’un pré-enregistrement méthodologique ou d’une justification théorique rigoureusement explicitée en amont de l’analyse.

Une seconde dérive théorique majeure concerne l’exécution abusive du test de Dunn sur des mesures appariées ou dépendantes. Tester l’évolution longitudinale de patients à $T_0$, $T_1$ et $T_2$ par un Kruskal-Wallis suivi d’un test de Dunn constitue une violation caractérisée du postulat d’indépendance mutuelle stochastique. Dans un schéma intrajumelé, l’analyste doit impérativement recourir au test de Friedman pour la phase omnibus, suivi de tests post-hoc de Wilcoxon pour séries appariées ou du test spécifique de Nemenyi pour blocs dépendants.

Enfin, l’assimilation sémantique fallacieuse entre les rangs moyens et les médianes physiques demeure le piège le plus insidieux de la littérature appliquée. Affirmer textuellement que « le test de Dunn démontre une différence significative entre les médianes des groupes A et B » s’avère formellement inexact dès lors que les distributions empiriques des deux cohortes ne présentent pas une similarité de dispersion et d’asymétrie rigoureuse. L’analyste rigoureux s’astreindra à rédiger ses déductions en termes de « dominance stochastique ordinale » ou d’« écarts significatifs de rangs moyens », préservant ainsi l’exactitude mathématique de sa démonstration.

11.3 Arbre de décision pour guider l’analyste de données

Afin de structurer le discernement méthodologique du chercheur face au foisonnement des options algorithmiques, le tableau synoptique suivant formalise les conditions de bascule et d’orientation inférentielle adaptées à chaque configuration expérimentale :

  • Configuration standard (Kruskal-Wallis significatif, échantillons de tailles égales ou inégales, objectif confirmatoire strict du FWER) :

    Décision : Test de Dunn avec correction de Holm-Bonferroni (posthoc_dunn(..., p_adjust='holm')). Représente le standard méthodologique optimal alliant puissance statistique et contrôle rigoureux des faux positifs.
  • Recherche de puissance maximale sous Kruskal-Wallis (contexte biomédical avec effectifs réduits et distributions symétriques) :

    Décision : Test post-hoc de Conover-Iman (implémenté via scikit_posthocs.posthoc_conover()). Basé sur la distribution de Student t appliquée aux rangs conjoints, ce test offre une puissance statistique supérieure à celle de Dunn, mais requiert une stricte conformité aux postulats de Kruskal-Wallis.
  • Tailles d’échantillons rigoureusement identiques par groupe ($n_1 = n_2 = dots = n_k$) et approche conservatrice classique :

    Décision : Test post-hoc de Nemenyi (disponible via scikit_posthocs.posthoc_nemenyi()). Repose sur la distribution de l’étendue standardisée (Studentized range distribution), analogue non paramétrique du HSD de Tukey. Moins puissant que Dunn en présence d’effectifs hétérogènes.
  • Études exploratoires à haut débit ou criblage multidimensionnel ($C > 20$ comparaisons) :

    Décision : Test de Dunn avec ajustement du taux de fausses découvertes selon Benjamini-Hochberg (p_adjust='fdr_bh'). Empêche l’asphyxie statistique de la puissance induite par le FWER.
  • Présence de covariables quantitatives continues ou de facteurs de confusion multiples :

    Décision : Abandon de la stratégie univariée de Kruskal-Wallis/Dunn au profit d’une modélisation de régression logistique ordinale (proportional odds model) ou de modèles linéaires généralisés mixtes (GLMM).

Cette grille d’orientation garantit une parfaite adéquation entre la typologie des données empiriques et le modèle mathématique mobilisé.

12. Restitution académique et communication des résultats selon les normes APA

12.1 Directives de rédaction de l’APA (7e édition)

La communication publique de données scientifiques régies par les normes du manuel de publication de l’American Psychological Association (APA, 7e édition) impose un formalisme typographique et numérique d’une grande rigueur. L’ensemble des symboles statistiques désignant des paramètres ou des estimateurs scalaires doivent impérativement être composés en caractères italiques (par exemple, la statistique omnibus H, la statistique d’écart normalisé z, la valeur de probabilité p, l’effectif d’échantillon N ou n, et le coefficient de taille d’effet r).

En matière d’affichage décimal, la doctrine de l’APA préconise d’arrondir les statistiques de test ($H$, $z$) ainsi que les métriques de taille d’effet ($r$) à deux ou trois décimales après la virgule (la précision à deux décimales étant la norme canonique, à l’instar de $z = 2{,}48$ ou $r = 0{,}32$). Concernant la valeur p, celle-ci doit être restituée avec trois décimales de précision exacte (par exemple $p = 0{,}023$). Une exception typographique absolue s’applique au chiffre zéro précédent le séparateur décimal : dans la mesure où une valeur de probabilité statistique p ne peut mathématiquement jamais être supérieure à 1, l’usage éditorial anglo-saxon impose d’omettre le zéro initial (écrire p = .023 et non p = 0.023). Enfin, si la valeur p calculée par l’algorithme Python s’avère inférieure à un millième, il est rigoureusement prohibé d’écrire p = .000 (ce qui constituerait une aberration probabiliste) ; il convient de consigner formellement p < .001.

L’explicitation de la procédure de contrôle des comparaisons multiples doit apparaître sans ambiguïté dès la première mention narrative des résultats post-hoc, en nommant l’algorithme d’ajustement sélectionné (par exemple : « les valeurs p bilatérales ont fait l’objet d’un ajustement séquentiel selon la méthode de Holm-Bonferroni afin de maintenir le taux d’erreur par famille à $\alpha = .05$ »).

12.2 Conception de tableaux statistiques prêts pour la publication

L’élaboration de tableaux récapitulatifs selon les canons de l’APA exclut catégoriquement l’usage de lignes de séparation verticales. Seules trois bordures horizontales principales composent l’ossature du tableau : une bordure supérieure délimitant l’en-tête, une bordure inférieure fermant le libellé des colonnes, et une bordure terminale fermant le tableau au-dessus des notes méthodologiques de bas de page. Le tableau suivant illustre la disposition idéale synthétisant l’analyse complète issue de notre cas clinique d’anxiété :

Tableau 1
Statistiques descriptives, contrastes post-hoc de Dunn et tailles d’effet de l’inventaire d’anxiété de Beck (BAI)

Comparaison dyadique n combiné Écart de rangs ($\Delta \bar{R}$) Statistique z p brute p ajustée (Holm) Taille d’effet r
Contrôle vs Mindfulness 62 19,23 2,87 .0041 .0082 .36 (Modérée)
Contrôle vs TCC 58 36,65 5,31 < .0001 < .0001 .70 (Forte)
Mindfulness vs TCC 60 17,42 2,54 .0111 .0111 .33 (Modérée)

Note. N total = 90 participants. TCC = Thérapie Cognitivo-Comportementale. Les valeurs p ont été ajustées selon la procédure descendante de Holm. La taille d’effet r est calculée selon la formule $r = |z| / \sqrt{n_{paire}}$.

Cette présentation unifiée délivre en un coup d’œil l’ensemble des métriques décisionnelles nécessaires aux examinateurs de revues scientifiques.

12.3 Modèle textuel réutilisable pour la section Résultats

Afin de faciliter la transposition de vos calculs dans vos futurs manuscrits de recherche, le paragraphe ci-dessous propose une rédaction académique standardisée, modélisée selon les canons les plus stricts de la diffusion scientifique universitaire :

« Une analyse de variance non paramétrique à un facteur de Kruskal-Wallis a été conduite afin d’examiner l’impact différentiel des trois protocoles d’intervention clinique (Contrôle sur liste d’attente, Méditation de pleine conscience et Thérapie cognitivo-comportementale) sur les scores de sévérité mesurés à l’inventaire d’anxiété de Beck (BAI). Les analyses descriptives préliminaires indiquent des divergences marquées d’asymétrie distributionnelle entre les groupes : le groupe Contrôle présente le niveau d’anxiété médian le plus élevé ($Mdn = 27{,}50$ ; $IQR = 8{,}75$ ; rang moyen = 63,41), suivi par le groupe de méditation de pleine conscience ($Mdn = 17{,}00$ ; $IQR = 7{,}25$ ; rang moyen = 44,18), tandis que les participants ayant bénéficié du protocole de TCC enregistrent les scores de détresse les plus atténués ($Mdn = 10{,}00$ ; $IQR = 6{,}00$ ; rang moyen = 26,76). L’analyse omnibus confirme l’existence d’une divergence stochastique globale hautement significative entre les trois conditions expérimentales, $H(2) = 31{,}42$, $p < .001$. »

« En raison de la significativité du test omnibus, des comparaisons multiples post-hoc par paires ont été exécutées au moyen du test de Dunn avec correction séquentielle ascendante de Holm-Bonferroni pour contrôler le taux d’erreur par famille ($\alpha = .05$). L’analyse révèle que le groupe TCC présente une réduction statistiquement significative des scores de sévérité anxieuse comparativement au groupe Contrôle ($z = 5{,}31$, $p_{ajustee} < .001$, $r = .70$), cet écart témoignant d’une taille d’effet majeure. De façon analogue, le protocole de pleine conscience s’avère significativement supérieur à la liste d’attente ($z = 2{,}87$, $p_{ajustee} = .008$, $r = .36$), avec une taille d’effet modérée. Enfin, la comparaison directe entre les deux approches psychothérapeutiques actives met en évidence une dominance stochastique statistiquement significative en faveur de la TCC ($z = 2{,}54$, $p_{ajustee} = .011$, $r = .33$), attestant d’une efficacité supérieure modérée de la restructuration cognitivo-comportementale sur la réduction de l’anxiété généralisée comparativement à l’entraînement à la pleine conscience au sein de cette cohorte. »

Ce patron rédactionnel intègre harmonieusement l’ensemble des contraintes techniques, statistiques et déontologiques indispensables à une validation éditoriale immédiate.

Références

  • American Psychological Association. (2020). Publication manual of the American Psychological Association (7th ed.). American Psychological Association. https://doi.org/10.1037/0000165-000
  • Benjamini, Y., & Hochberg, Y. (1995). Controlling the false discovery rate: A practical and powerful approach to multiple testing. Journal of the Royal Statistical Society: Series B (Methodological), 57(1), 289–300. https://doi.org/10.1111/j.2517-6161.1995.tb02031.x
  • Cohen, J. (1988). Statistical power analysis for the behavioral sciences (2nd ed.). Lawrence Erlbaum Associates.
  • Conover, W. J., & Iman, R. L. (1981). Rank transformations as a bridge between parametric and nonparametric statistics. The American Statistician, 35(3), 124–129. https://doi.org/10.1080/00031305.1981.10482810
  • Dunn, O. J. (1964). Multiple comparisons using rank sums. Technometrics, 6(3), 241–252. https://doi.org/10.1080/00401706.1964.10490181
  • Holm, S. (1979). A simple sequentially rejective multiple test procedure. Scandinavian Journal of Statistics, 6(2), 65–70. https://www.jstor.org/stable/4615733
  • Kruskal, W. H., & Wallis, W. A. (1952). Use of ranks in one-criterion variance analysis. Journal of the American Statistical Association, 47(260), 583–621. https://doi.org/10.1080/01621459.1952.10483441
  • Rosenthal, R. (1991). Meta-analytic procedures for social research (Rev. ed.). SAGE Publications. https://doi.org/10.4135/9781412984997
  • Terpilowski, M. (2019). scikit-posthocs: Pairwise multiple comparison post-hoc tests in Python. Journal of Open Source Software, 4(36), 1169. https://doi.org/10.21105/joss.01169
  • Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N., Nelson, A. R. J., Jones, E., Kern, R., Larson, E., … SciPy 1.0 Contributors. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. Nature Methods, 17(3), 261–272. https://doi.org/10.1038/s41592-019-0686-2
★

Rate This Content

5.0 / 5 • 1 vote

Citer cet article

Looti, M. (2026, septembre 11). Comment effectuer le test de Dunn en Python. Base de données de psychologie en français. https://fr.arabpsychology.com/statistics/comment-effectuer-le-test-de-dunn-en-python/
Looti, Mohammed. “Comment effectuer le test de Dunn en Python.” Base de données de psychologie en français, 11 septembre 2026, https://fr.arabpsychology.com/statistics/comment-effectuer-le-test-de-dunn-en-python/.
Looti, Mohammed. “Comment effectuer le test de Dunn en Python.” Base de données de psychologie en français. septembre 11, 2026. https://fr.arabpsychology.com/statistics/comment-effectuer-le-test-de-dunn-en-python/.