Dans le champ de l’analyse statistique contemporaine et du traitement de données avec le langage R, la transition d’un continuum quantitatif vers une partition discrète représente l’une des opérations fondamentales les plus courantes, mais aussi l’une des plus délicates sur le plan méthodologique. Les praticiens des sciences comportementales, de l’épidémiologie, de l’économétrie et de la science des données se trouvent continuellement confrontés à la nécessité d’agréger, de stratifier ou de segmenter des mesures continues afin de répondre à des exigences pragmatiques d’aide à la décision, de conformité aux nomenclatures institutionnelles ou d’interprétabilité clinique. Bien que la continuité mathématique offre une granularité et une puissance informationnelle optimales pour la modélisation paramétrique, l’esprit humain et les cadres réglementaires requièrent fréquemment des catégories délimitées permettant de classifier des individus, d’ordonner des trajectoires de risque ou de définir des protocoles d’intervention différenciés.
Le logiciel R, réputé pour sa flexibilité sémantique et la richesse de son écosystème statistique, propose une panoplie d’outils spécialement dévolus à cette transformation. De la vénérable fonction native cut(), pierre angulaire du socle de base de R, aux constructions modernes et expressives de l’environnement Tidyverse via des fonctions comme dplyr::case_when() ou Hmisc::cut2(), le chercheur dispose d’une infrastructure algorithmique puissante. Toutefois, la conversion d’un vecteur numérique en une variable catégorielle structurée sous forme de facteur (factor ou ordered factor) implique une maîtrise rigoureuse de la topologie des intervalles, du comportement des bornes aux extrêmes, ainsi que du traitement des valeurs manquantes et aberrantes. Un partitionnement inadéquat peut en effet introduire des biais systématiques, occulter des dynamiques non linéaires et dégrader la puissance des inférences statistiques ultérieures.
Le présent traité méthodologique a pour vocation d’exposer de manière exhaustive, approfondie et didactique les principes théoriques, les mécanismes informatiques et les implications statistiques présidant à la création de variables catégorielles à partir de variables continues dans R. En combinant formalisme mathématique, décorticage minutieux de la syntaxe, études de cas empiriques appliquées aux sciences humaines et revues critiques des risques statistiques, ce guide offre une référence complète pour transformer des données brutes en indicateurs catégoriels scientifiquement rigoureux et directement exploitables dans des contextes de recherche académique ou appliquée.
1. Introduction aux variables continues et catégorielles en analyse de données avec R
1.1 Définition et distinction conceptuelle entre continuité et catégorisation
Sur le plan épistémologique et selon la typologie canonique des échelles de mesure établie par Stanley Smith Stevens (1946), les variables statistiques se subdivisent en échelles nominales, ordinales, d’intervalles et de rapports. Les variables continues, qui relèvent généralement des échelles d’intervalles ou de rapports, se caractérisent formellement par le fait qu’entre deux points arbitrairement rapprochés de l’espace de mesure, il existe une infinité indénombrable de valeurs intermédiaires potentielles. Dans la mémoire vive de l’environnement R, ces grandeurs sont encodées sous forme de vecteurs atomiques de type numérique à virgule flottante double précision (double ou numeric). Elles capturent des grandeurs physiques, des latences temporelles ou des scores factoriels latents avec une granularité théoriquement non tronquée, limitée uniquement par la précision de la machine.
À l’inverse, les variables catégorielles renvoient à des classifications discrètes. Lorsqu’elles sont purement nominales, elles désignent des classes d’équivalence mutuellement exclusives dépourvues de toute relation d’ordre naturel (par exemple, le statut matrimonial ou le phénotype sanguin). Lorsqu’elles sont ordinales, les modalités d’attribution respectent une hiérarchie intrinsèque permettant d’établir des relations de supériorité ou d’infériorité, sans que la distance métrique séparant deux modalités successives ne soit formellement postulée comme constante. Dans R, ces entités sont prises en charge par une structure de données dédiée : la classe factor, éventuellement assortie de la sous-classe ordered. Cette classe stocke les observations sous forme d’un vecteur sous-jacent d’entiers consécutifs auquel est adjoint un attribut sémantique nommé levels.
La discrétisation consiste donc à opérer un morphisme réducteur d’une métrique dense et continue vers un ensemble fini de classes. Si ce procédé s’avère indispensable pour satisfaire des contraintes d’interprétabilité décisionnelle — par exemple, pour qualifier un individu d’hypertendu ou de non-hypertendu au regard d’une pression artérielle continue —, il modifie radicalement les propriétés distributionnelles du jeu de données. D’un point de vue de l’inférence statistique, la catégorisation d’une mesure continue entraîne mécaniquement une contraction de la variance observée et une perte irréversible d’information. Elle altère l’estimation des paramètres de régression, réduit la puissance des tests d’hypothèses et peut masquer d’importantes variations intra-classes. Il convient donc de toujours appréhender cette transformation avec une pleine conscience de ses conséquences statistiques.
1.2 Contextes d’application en recherche quantitative et psychométrie
Malgré les réserves théoriques légitimes formulées par les méthodologistes quant à la perte d’information statistique, la catégorisation de variables continues demeure une pratique prépondérante dans de multiples disciplines scientifiques. En psychométrie et en psychopathologie quantitative, l’administration d’inventaires d’évaluation psychologique (tels que l’Inventaire de Dépression de Beck, l’échelle d’anxiété STAI ou le score de détresse psychologique Kessler-10) aboutit originellement à un score composite continu résultant de l’agrégation d’items de type Likert. Or, pour la pratique diagnostique, l’orientation thérapeutique et l’épidémiologie clinique, ces valeurs scalaires doivent être transcrites en catégories nosographiques discriminantes, telles que « symptomatologie minimale », « légère », « modérée » ou « sévère ».
De même, dans les protocoles d’intervention en éducation ou en santé publique, la segmentation de cohortes en groupes d’intervention repose quasi systématiquement sur des seuils normatifs prédéterminés. On transforme l’âge chronologique en tranches de développement (enfants, adolescents, adultes émergents, seniors), ou l’indice de masse corporelle (IMC) en classes pondérales définies par l’Organisation Mondiale de la Santé. Cette stratification permet de calibrer les politiques publiques et d’ajuster les prises en charge thérapeutiques à des sous-populations homogènes au regard de standards préétablis.
Dans le domaine de la modélisation statistique avancée, la discrétisation intervient également comme un artifice méthodologique visant à simplifier l’analyse de relations non linéaires complexes lorsque les transformations fonctionnelles usuelles (polynômes, splines de lissage ou transformations logarithmiques) s’avèrent difficiles à interpréter ou à vulgariser auprès de décideurs non statisticiens. En outre, la création de classes catégorielles constitue une étape préliminaire obligatoire pour construire des tableaux de contingence croisés, évaluer des taux d’incidence stratifiés et réaliser des tests d’indépendance du khi-deux de Pearson ou des analyses de correspondances multiples, techniques largement mobilisées dans l’exploration préliminaire des données d’enquêtes sociologiques.
2. Fondements théoriques et mathématiques de la discrétisation des données
2.1 Principes de partitionnement de l’espace des données
Sur le plan topologique et formel, la discrétisation d’un vecteur continu opérée sur un domaine réel borné ou non borné repose sur la notion mathématique de partitionnement d’un ensemble. Soit $X$ une variable aléatoire réelle définie sur un univers probabilisé, prenant ses valeurs dans un intervalle $D_X \subseteq \mathbb{R}$. La discrétisation consiste à décomposer ce domaine $D_X$ en une collection finie de $k$ sous-ensembles $I_j$ ($j = 1, dots, k$) vérifiant deux axiomes fondamentaux : l’exhaustivité, qui stipule que la réunion de l’ensemble des intervalles couvre intégralement le domaine observé ($\big\cup_{j=1}^k I_j = D_X$), et la disjonction mutuelle, qui garantit que l’intersection de deux intervalles distincts quelconques est rigoureusement vide ($I_a \cap I_b = \emptyset$ pour tout $a \neq b$).
Chaque sous-ensemble $I_j$ constitue un intervalle réel délimité par une borne inférieure $c_{j-1}$ et une borne supérieure $c_j$, formant une suite strictement ordonnée de seuils de coupure : $-infty le c_0 < c_1 < c_2 < dots < c_k le +infty$. La nature exacte de ces intervalles est déterminée par la convention topologique régissant l’inclusion des frontières. Ces intervalles peuvent être semi-ouverts à gauche et fermés à droite, notés$I_j = (c_{j-1}, c_j]$, ou fermés à gauche et semi-ouverts à droite, notés$I_j = [c_{j-1}, c_j)$. Le respect strict de cette convention est indispensable pour qu’aucune observation située exactement sur une frontière ne soit orpheline ou affectée à deux classes simultanément.
Cette projection mathématique engendre une réduction d’information drastique : toutes les valeurs scalaires $x_i$ appartenant à un même intervalle $I_j$ sont rendues indiscernables et assimilées à une étiquette qualitative commune ou à un point représentatif local. Sur le plan de la variance, ce processus s’accompagne d’une décomposition canonique de la variance totale en une composante inter-classes et une composante intra-classe. La variance intra-classe représente l’erreur quadratique moyenne induite par la simplification catégorielle. Dès lors, le statisticien est constamment mis au défi de trouver un équilibre optimal entre la parcimonie heuristique du découpage et l’erreur d’approximation qu’il introduit au détriment de la précision numérique.
2.2 Typologie des méthodes de découpage
La littérature consacrée à l’apprentissage automatique et à la statistique mathématique distingue classiquement quatre grandes familles d’algorithmes de discrétisation, selon le degré de dépendance envers la distribution empirique ou vis-à-vis d’une variable cible externe.
La première modalité, désignée sous le terme de discrétisation à largeur égale (equal-width binning), consiste à subdiviser l’étendue totale des données observées, définie par l’écart entre la valeur maximale et la valeur minimale ($R = X_{\max} – X_{\min}$), en un nombre prédéterminé $k$ de segments d’amplitudes strictement identiques ($\delta = R / k$). Bien que conceptuellement intuitive et facile à implémenter, cette approche présente une vulnérabilité extrême face aux distributions asymétriques ou parasitées par des valeurs aberrantes (outliers), ces dernières étirant artificiellement l’étendue globale et créant de nombreuses classes quasi désertes.
La deuxième modalité correspond à la discrétisation à effectifs égaux (equal-frequency binning), souvent qualifiée de découpage par quantiles. Dans cette approche, les bornes de coupure sont définies par les percentiles empiriques de la distribution, de manière à ce que chaque sous-intervalle contienne une fraction théorique équivalente d’observations ($1/k$). Si ce procédé neutralise totalement les effets d’asymétrie distributionnelle et assure une stabilité computationnelle pour les analyses multivariées, il engendre une déformation de la métrique originale : des intervalles physiques très resserrés apparaissent dans les zones de haute densité probabiliste, tandis que des amplitudes considérables séparent les classes aux extrémités des queues de distribution.
La troisième approche regroupe les méthodes de découpage supervisé. Ici, les seuils ne sont pas dictés par les propriétés internes de la variable continue considérée isolément, mais sont optimisés en fonction de leur pouvoir de discrimination vis-à-vis d’une variable réponse catégorielle ou continue. Des algorithmes sophistiqués, tels que le critère MDLP (Minimum Description Length Principle) proposé par Fayyad et Irani, ou les segmentations déduites des arbres de décision de type CART (Classification and Regression Trees), calculent des frontières de coupure maximisant l’entropie de l’information ou minimisant l’impureté de Gini. Enfin, la quatrième famille intègre les méthodes d’optimisation non supervisée, telles que la classification ascendante hiérarchique unidimensionnelle ou l’algorithme des k-moyennes appliqué à une seule dimension, permettant de minimiser la variance intra-classe sans nécessiter de supervision extérieure.
3. La fonction cut() dans R : Syntaxe, structure et fonctionnement interne
3.1 Anatomie de base de la fonction cut()
Au cœur de l’écosystème de programmation de base de R réside la fonction générique cut(), conçue pour opérer le découpage systématique d’un vecteur numérique en une série d’intervalles qualifiés de niveaux de facteurs. La documentation officielle de l’environnement R Core Team définit sa signature syntaxique canonique de la manière suivante :
cut(x, breaks, labels = NULL, include.lowest = FALSE, right = TRUE, dig.lab = 3, ordered_result = FALSE, ...)
L’argument premier, x, constitue le vecteur numérique cible destiné à subir la segmentation. Ce vecteur doit obligatoirement comporter des valeurs appartenant à l’ensemble des réels, pouvant inclure des valeurs manquantes formalisées par la constante standard NA. Le second argument fondamental, breaks, régit le mécanisme de morcellement de l’espace. Il accepte soit un scalaire entier spécifiant le nombre d’intervalles équidistants à construire, soit un vecteur numérique ordonné décrivant explicitement la liste des bornes séparatrices.
L’argument labels permet d’associer des chaînes de caractères distinctes aux intervalles créés. Lorsque cet argument conserve sa valeur par défaut NULL, R engendre automatiquement des désignations textuelles basées sur la notation topologique formelle des intervalles mathématiques réels. L’objet résultant immédiatement renvoyé par l’exécution de cette fonction est un vecteur catégoriel appartenant formellement à la classe S3 factor. Lors de l’évaluation interne, R parcourt chaque élément du vecteur x, localise l’intervalle dans lequel la valeur s’insère au regard des règles d’inclusion définies, et lui assigne l’indice entier correspondant au niveau concerné.
3.2 Gestion des arguments booléens et structurels
Au-delà de ses paramètres dimensionnels principaux, la fonction cut() intègre des arguments booléens et structurels déterminant avec une grande précision la structure topologique et la métadonnée du résultat. L’argument ordered_result joue un rôle déterminant dans la qualification taxonomique de la sortie. Lorsqu’il est initialisé à FALSE (comportement par défaut), le résultat hérite uniquement de la classe de base factor. Lorsque l’utilisateur le bascule sur TRUE, l’objet renvoyé se voit attribuer la double classe c("ordered", "factor"). Cette distinction est cruciale dans la mesure où R traitera désormais les modalités comme ordonnées séquentiellement, ce qui conditionne le paramétrage automatique des contrastes polynomiaux (linéaire, quadratique, cubique) au sein des routines de modélisation linéaire telles que lm() ou glm().
L’argument dig.lab contrôle le nombre de chiffres significatifs utilisés pour convertir les bornes numériques en chaînes de caractères lors de la génération automatique des étiquettes d’intervalles. Si la distance séparant deux coupures successives est extrêmement faible, une valeur de dig.lab trop réduite peut conduire à des étiquettes tronquées identiques générant une confusion sémantique. Enfin, le paramètre interne qui gouverne l’exclusion ou l’inclusion des valeurs hors bornes ne tolère aucun laxisme : toute observation de x qui s’avère inférieure au minimum de breaks ou strictement supérieure à son maximum est inexorablement convertie en NA, sans que R n’émette d’avertissement explicite (warning).
L’inspection des propriétés internes du vecteur généré via les primitives fondamentales typeof(), class() et levels() permet de confirmer que la structure sous-jacente est bien un vecteur d’entiers pointant vers une table de hachage de modalités textuelles. Cette architecture optimise l’encombrement mémoire en évitant la duplication redondante de chaînes de caractères volumineuses pour chaque individu statistique.
4. Configuration précise des seuils avec le paramètre breaks
4.1 Définition de points de coupure vectoriels explicites
L’utilisation la plus rigoureuse et la plus reproductible de la fonction cut() repose sur la transmission d’un vecteur numérique explicite à l’argument breaks. Ce vecteur recense l’ensemble des points d’inflexion délimitant les catégories d’intérêt. Par convention arithmétique élémentaire, si l’on souhaite partitionner une variable en $k$ classes distinctes, le vecteur breaks doit comporter impérativement $k + 1$ éléments strictement croissants. Par exemple, la spécification breaks = c(0, 10, 20, 30) génère exactement trois sous-intervalles contigus.
Une des sources d’erreurs méthodologiques les plus insidieuses lors de l’application manuelle de coupures réside dans l’omission involontaire des valeurs minimales ou maximales observées dans l’échantillon. Si un vecteur de mesures empiriques s’étend de 12.4 à 98.7 et que le chercheur définit un vecteur de seuils allant de 20 à 90, toutes les observations comprises entre 12.4 et 20, ainsi que toutes celles comprises entre 90 et 98.7, seront silencieusement assignées à la valeur NA. Pour immuniser de façon pérenne un script contre ces pertes de données préjudiciables, la pratique recommandée consiste à encadrer le vecteur de coupure par les constantes de l’infini positif et négatif disponibles dans R : -Inf et Inf. Ainsi, la configuration breaks = c(-Inf, 30, 60, Inf) garantit une captation exhaustive et intégrale du spectre théorique de la variable, quelles que soient les valeurs extrêmes susceptibles d’apparaître ultérieurement lors de l’intégration de nouvelles observations.
4.2 Spécification d’un nombre entier d’intervalles équidistants
Lorsque le chercheur ne dispose pas d’hypothèses théoriques préalables et souhaite simplement déléguer à R la constitution d’un découpage régulier, l’argument breaks peut recevoir un unique scalaire entier positif ($k in \mathbb{N}^*$). Dans cette configuration, R prend en charge le calcul sous-jacent de la largeur d’intervalle en divisant l’étendue empirique des données observées par le nombre de classes sollicité.
Le calcul de l’amplitude $\delta$ obéit à la relation mathématique élémentaire $\delta = (\max(x) – \min(x)) / k$. Les bornes générées sont réparties de façon linéaire et équidistante à partir de la valeur minimale ajustée jusqu’à la valeur maximale ajustée. Cependant, cette méthode présente une très forte instabilité computationnelle face aux distributions hautement dissymétriques ou contaminées par des valeurs extrêmes aberrantes. Une unique observation située à plusieurs écarts-types de la moyenne aura pour conséquence d’étirer l’amplitude $\delta$, reléguant l’écrasante majorité de l’échantillon au sein des deux premiers intervalles et laissant les segments supérieurs presque totalement dépeuplés.
Dans ce contexte, il est pertinent de distinguer l’implémentation native de cut() de l’algorithme heuristique proposé par la fonction native pretty() de R. Tandis que cut() opère une division arithmétique stricte aboutissant à des frontières comportant généralement plusieurs décimales (par exemple 14.3333, 28.6666), pretty() sélectionne des nombres arrondis « conviviaux » (multiples de 2, de 5 ou de 10) qui facilitent grandement la lecture humaine, au prix d’un léger ajustement du nombre effectif d’intervalles finaux créés.
4.3 Génération automatisée de séquences de coupure
Pour allier la rigueur d’un contrôle total des bornes à la flexibilité d’un dimensionnement régulier, il est fortement préconisé de combiner l’usage de cut() avec le générateur de suites arithmétiques seq(). Cette technique permet de paramétrer dynamiquement le partitionnement en fonction des caractéristiques distributionnelles propres à l’échantillon ou à la métrique de l’instrument employé.
On peut, à titre d’illustration, définir une séquence délimitée par des bornes entières strictement contrôlées en écrivant : breaks = seq(from = floor(min(x, na.rm = TRUE)), to = ceiling(max(x, na.rm = TRUE)), by = 10). L’utilisation conjointe des fonctions d’arrondi inférieur floor() et supérieur ceiling() garantit que le vecteur de seuils englobera avec certitude l’intégralité du support empirique des données, neutralisant le risque de créer fortuitement des valeurs manquantes sur les marges extérieures. Ce mode opératoire assure une parfaite reproductibilité des calculs tout en conservant une traçabilité explicite de l’algorithme au sein des scripts de recherche.
5. Personnalisation sémantique des catégories avec l’argument labels
5.1 Attribution d’étiquettes textuelles explicites
Par défaut, R attribue à chaque classe une étiquette textuelle dérivée de la notation topologique mathématique formalisant l’intervalle correspondant (par exemple "(10,20]"). Bien que cette transcription soit parfaite sur le plan de la vérifiabilité formelle, elle s’avère particulièrement aride et peu communicative dans le cadre de rapports d’études, de publications scientifiques ou de graphiques à vocation décisionnelle. L’argument labels offre la possibilité de substituer à ces représentations algébriques des descripteurs textuels explicites, pertinents pour le domaine d’étude considéré.
Sur le plan computationnel, l’attribution d’étiquettes manuelles est soumise à une contrainte dimensionnelle stricte et incontournable : la taille du vecteur textuel assigné à labels doit être rigoureusement égale au nombre d’intervalles formés, soit exactement la longueur de breaks diminuée d’une unité ($length(labels) = length(breaks) – 1$). Si cette condition de bijection n’est pas scrupuleusement satisfaite, le moteur d’exécution de R interrompt immédiatement le calcul et déclenche une erreur syntaxique explicite bloquant le processus de transformation.
L’assignation d’étiquettes qualitatives soignées — telles que c("Dépression Minime", "Dépression Modérée", "Dépression Majeure") — transforme substantiellement la maniabilité des structures de données. Lors de la transmission ultérieure de ces colonnes à des moteurs de rendu graphique modernes comme ggplot2, les axes de coordonnées, les légendes et les tables d’annotation héritent automatiquement de cette nomenclature sémantique claire, ce qui réduit considérablement le besoin d’opérations fastidieuses de recodage en aval du pipeline de production.
5.2 Utilisation de labels = FALSE et manipulation indicielle
Dans certains contextes analytiques exigeants, notamment lors de l’exécution de simulations numériques intensives de type Monte-Carlo ou du traitement de très volumineuses tables de données comportant plusieurs dizaines de millions de lignes, la surcharge computationnelle induite par la création d’un objet factor et la gestion de sa table de hachage de niveaux peut s’avérer sous-optimale. Pour contourner ce coût mémoire et accélérer les calculs matriciels, la fonction cut() autorise la spécification explicite du paramètre booléen labels = FALSE.
Lorsque cette condition est appliquée, le mécanisme interne de cut() inhibe la construction du facteur et renvoie un vecteur numérique brut composé exclusivement d’entiers consécutifs ($1, 2, dots, k$) désignant le numéro de l’intervalle dans lequel chaque observation vient se loger. L’objet résultant est typé de manière primitive en tant qu’entier de base (integer). Cette approche permet de mobiliser les indices ainsi créés comme clés d’indexation vectorielle directe dans des opérations de filtrage ultrarapides ou pour interroger des tables de correspondance (dictionnaires) sans souffrir du surcoût architectural lié aux métadonnées des facteurs.
5.3 Conservation des notations d’intervalles mathématiques par défaut
L’option consistant à conserver les étiquettes par défaut générées par R (en laissant labels = NULL) revêt une valeur diagnostique inestimable lors des phases exploratoires et de contrôle qualité des données. La notation générée associe les crochets ouvrants et fermants aux parenthèses courbes conventionnelles pour expliciter sans la moindre ambiguïté le statut topologique de chaque borne :
- Une parenthèse gauche
(aindique que la valeur $a$ est strictement exclue de l’intervalle considéré ; - Un crochet gauche
[aindique que la valeur $a$ est intégralement incluse au sein de l’intervalle ; - Un crochet droit
b]atteste de l’inclusion stricte de la borne supérieure $b$ ; - Une parenthèse droite
b)confirme son exclusion au profit de l’intervalle supérieur adjacent.
Cette sémiotique mathématique rigoureuse permet à l’analyste de valider d’un simple coup d’œil l’absence de chevauchement incohérent ou de décalage indésirable entre les seuils. Elle fournit un mécanisme d’auto-documentation du code, permettant de vérifier que les bornes définies dans les paramètres du script coïncident point par point avec les hypothèses conceptuelles ou les protocoles normatifs du domaine de recherche.
6. Maîtrise rigoureuse des bornes : Les arguments right et include.lowest
6.1 Inversion de l’ouverture des intervalles avec l’argument right
Le traitement des valeurs situées exactement sur les frontières de démarcation constitue le point névralgique de toute procédure de discrétisation. L’argument booléen right régit l’orientation de l’ouverture et de la fermeture des intervalles créés par cut(). Dans sa configuration d’origine par défaut, cet argument est assigné à la valeur TRUE. Cela signifie formellement que les intervalles sont considérés comme semi-ouverts à gauche et fermés à droite, ce qui se traduit topologiquement par la structure : $(c_{j-1}, c_j]$. Dans ce paradigme, une observation numérique qui coïncide rigoureusement avec la borne $c_j$ sera intégrée dans la catégorie inférieure se terminant par $c_j$.
À l’inverse, l’assignation du paramètre à right = FALSE inverse complètement cette polarité topologique. Les intervalles deviennent fermés à gauche et ouverts à droite, adoptant la structure mathématique : $[c_{j-1}, c_j)$. Sous ce régime, une observation tombant exactement sur la borne $c_{j-1}$ est incluse dans l’intervalle supérieur débutant précisément à cette coordonnée, tandis que la valeur $c_j$ en est exclue pour être basculée dans la classe suivante.
Cette distinction n’est nullement un détail d’implémentation anodin : en psychométrie clinique ou en santé publique, la définition des seuils diagnostiques répond souvent à des conventions normatives spécifiques. Si un protocole médical stipule qu’un état pathologique débute « à partir de 140 mmHg inclus », l’utilisation impérative de right = FALSE s’impose pour que la valeur charnière 140 soit effectivement rattachée au groupe pathologique supérieur et non maintenue dans la catégorie normotensive sous-jacente.
6.2 Inclusion critique de la valeur extrême minimale avec include.lowest
L’interaction entre la convention des bornes et les valeurs extrêmes de la distribution induit un piège classique bien connu des statisticiens utilisant R. Lorsque right = TRUE, tous les intervalles formés sont ouverts à gauche : le premier sous-ensemble prend donc la forme canonique $(c_0, c_1]$. En stricte logique mathématique, la borne minimale absolue $c_0$ (qui correspond souvent au minimum absolu des données observées $min(x)$) n’appartient pas à l’intervalle $(c_0, c_1]$. En conséquence, si l’échantillon contient une ou plusieurs observations dont la valeur coïncide exactement avec $c_0$, ces observations se retrouvent orphelines et sont irrémédiablement converties en valeurs manquantes NA.
Pour pallier cette anomalie structurelle sans obliger l’utilisateur à modifier manuellement ses seuils de coupure, la fonction cut() introduit l’argument include.lowest. Lorsqu’il est configuré à TRUE, cet argument commande à l’algorithme d’opérer une fermeture exceptionnelle bilatérale sur l’intervalle d’extrémité. Plus précisément :
- Si
right = TRUE, l’argument force le premier intervalle à se fermer à gauche, devenant ainsi $[c_0, c_1]$, tandis que tous les intervalles suivants demeurent de structure semi-ouverte $(c_{j-1}, c_j]$ ; - Si
right = FALSE, l’argument applique cette même fermeture d’exception sur l’ultime frontière droite, transformant le dernier intervalle de $[c_{k-1}, c_k)$ en un intervalle bilatéralement fermé $[c_{k-1}, c_k]$.
L’omission récurrente de include.lowest = TRUE dans les scripts de découpage de scores continus est la cause la plus fréquente d’apparition inexpliquée de valeurs manquantes lors de la discrétisation de vecteurs numériques dont les seuils ont été calqués précisément sur l’amplitude empirique des données observées.
6.3 Matrice de décision méthodologique sur les bornes
Afin de synthétiser formellement l’articulation logique des paramètres right et include.lowest, il est particulièrement instructif de formaliser la matrice des quatre combinaisons possibles régissant la morphologie mathématique des intervalles résultants.
Considérons un ensemble de seuils ordonnés défini par le vecteur $C = {c_0, c_1, dots, c_k}$. Le tableau analytique suivant détaille la topologie de partitionnement résultante pour chacune des configurations disponibles :
| Configuration des paramètres | Structure du premier intervalle ($j=1$) | Structure des intervalles médians ($1 < j < k$) | Structure du dernier intervalle ($j=k$) | Conséquence pratique sur les observations limites |
|---|---|---|---|---|
right = TRUEinclude.lowest = FALSE |
$(c_0, c_1]$ | $(c_{j-1}, c_j]$ | $(c_{k-1}, c_k]$ | La valeur minimale absolue $c_0$ est exclue et convertie en NA. |
right = TRUEinclude.lowest = TRUE |
$[c_0, c_1]$ | $(c_{j-1}, c_j]$ | $(c_{k-1}, c_k]$ | La valeur minimale $c_0$ est sécurisée au sein du premier groupe. |
right = FALSEinclude.lowest = FALSE |
$[c_0, c_1)$ | $[c_{j-1}, c_j)$ | $[c_{k-1}, c_k)$ | La valeur maximale absolue $c_k$ est exclue et convertie en NA. |
right = FALSEinclude.lowest = TRUE |
$[c_0, c_1)$ | $[c_{j-1}, c_j)$ | $[c_{k-1}, c_k]$ | La valeur maximale $c_k$ est sécurisée au sein du dernier groupe. |
La règle empirique fondamentale pour garantir l’intégrité numérique complète de son jeu de données sans risquer l’éjection accidentelle des points limites consiste donc à toujours positionner include.lowest = TRUE dès lors que l’on manipule des bornes finies calées sur le minimum ou le maximum observé de la distribution.
7. Discrétisation empirique basée sur la distribution : Quantiles et packages spécialisés
7.1 Découpage par quantiles via la fonction quantile()
Lorsque la finalité de l’investigation méthodologique n’est pas de comparer des scores à des normes cliniques préétablies, mais d’étudier la distribution interne de l’échantillon ou de créer des groupes contrastés de taille similaire, le découpage par quantiles constitue la solution de référence. Cette opération s’exécute nativement dans R en imbriquant la fonction quantile() directement dans l’argument breaks de la fonction cut().
Pour partitionner un vecteur $x$ en quatre classes d’effectifs théoriquement identiques (quartiles), le chercheur génère le vecteur de points de coupure en formulant : breaks = quantile(x, probs = seq(0, 1, 0.25), na.rm = TRUE). L’utilisation du paramètre probs = seq(0, 1, 0.25) ordonne le calcul des 0-ième (minimum), 25-ième, 50-ième (médiane), 75-ième percentiles et du 100-ième percentile (maximum). L’intégration de include.lowest = TRUE est ici strictement indispensable pour garantir l’inclusion du score minimal empirique.
Cependant, cette approche se heurte à une limitation mathématique sévère dans le cas des distributions asymétriques présentant un excès prononcé de valeurs identiques (phénomène de masse ponctuelle ou distributions gonflées en zéro). Si plus de 25 % des participants d’un échantillon obtiennent le score exact de zéro à un questionnaire d’évaluation psychopathologique, le 0-ième et le 25-ième percentiles seront mathématiquement identiques ($c_0 = c_1 = 0$). Dans cette situation, le vecteur breaks transmis à cut() comportera des éléments dupliqués, ce qui provoque immédiatement un arrêt du script avec un message d’erreur stipulant que les seuils de rupture ne sont pas strictement croissants. Pour surmonter cette entrave, il devient impératif de purger les doublons via l’appel de unique(quantile(x, ...)), ce qui entraîne toutefois une réduction imprévue du nombre final de classes formées.
7.2 Utilisation de la fonction cut2() du package Hmisc
Face aux contraintes et aux subtilités de manipulation de la fonction de base cut(), Frank Harrell et ses contributeurs ont développé au sein du package Hmisc une fonction optimisée particulièrement robuste : cut2(). Cette dernière pallie de façon transparente la plupart des faiblesses inhérentes à l’implémentation standard.
La signature de Hmisc::cut2() introduit des arguments d’une remarquable commodité. L’argument g permet de requérir directement un nombre spécifié de groupes quantiles d’effectifs approximativement égaux, dispensant l’utilisateur de calculer préalablement le vecteur quantile externe. Par exemple, la commande cut2(x, g = 4) génère instantanément un découpage en quartiles. L’argument m permet quant à lui de spécifier l’effectif minimal requis au sein de chaque groupe formé, ce qui est extrêmement précieux pour éviter l’apparition de sous-classes marginales creuses lors de l’exploration de distributions très dissymétriques.
Par ailleurs, cut2() assure une gestion automatisée et élégante des valeurs ex æquo (ties). Si des seuils de quantiles sont redondants en raison d’une forte concentration de valeurs similaires, la fonction fusionne intelligemment les intervalles sans provoquer de blocage logiciel. De surcroît, elle intègre par défaut la valeur minimale sans nécessiter l’activation fastidieuse d’un paramètre additionnel, et génère des étiquettes mathématiques immédiatement lisibles intégrant la borne minimale sous forme fermée. Elle représente ainsi un substitut particulièrement efficace pour l’analyse épidémiologique et biostatistique de routine.
8. Intégration dans le workflow Tidyverse : mutate(), case_when() et cut()
8.1 Utilisation de cut() au sein d’une chaîne dplyr::mutate()
Dans le paradigme contemporain de la science des données sous R, l’écosystème Tidyverse s’est imposé comme un standard industriel pour le nettoyage, la manipulation et la transformation fluide des tables de données sous forme de data.frame ou de tibble. L’incorporation de la fonction native cut() au sein des pipelines de données orchestrés par la fonction dplyr::mutate() illustre parfaitement la complémentarité entre les structures fondamentales de R et la syntaxe déclarative moderne.
Grâce à l’opérateur de tuyauterie natif |> (introduit depuis R 4.1.0) ou au pipe historique de magrittr %>%, la catégorisation s’effectue directement sur une colonne sans jamais briser l’intégrité de l’objet initial ni nécessiter d’affectations intermédiaires redondantes dans l’espace de travail global. Le code ci-dessous conceptualise cette intégration opérationnelle :
donnees_transformees <- donnees_brutes |>
dplyr::mutate(
classe_age = cut(
age_chronologique,
breaks = c(-Inf, 18, 35, 65, Inf),
labels = c("Mineur", "Jeune Adulte", "Adulte", "Senior"),
right = FALSE
)
)
Immédiatement après l’étape de mutation, le pipeline peut être poursuivi par l’appel à la fonction dplyr::count(classe_age). Cette démarche séquentielle permet au chercheur de procéder à une vérification instantanée de la répartition des fréquences absolues et relatives dans chaque modalité générée, garantissant un contrôle qualité en continu du partitionnement opéré.
8.2 Alternative flexible : dplyr::case_when()
Bien que la fonction cut() demeure la méthode la plus rapide et la plus concise pour les découpages strictement linéaires fondés sur des suites scalaires, l’instruction dplyr::case_when() représente l’alternative la plus élégante et la plus expressive lorsque les critères de segmentation reposent sur des logiques décisionnelles complexes, hétérogènes ou multidimensionnelles.
La syntaxe de case_when() s’appuie sur une suite de formules à deux membres reliés par un tilde (condition ~ résultat). Cette structure confère au chercheur une liberté absolue quant au contrôle granulaire des inégalités strictes (<, >) ou larges (<=, >=), dissipant toute ambiguïté relative à la polarité des bornes :
donnees_segmenteés <- donnees_brutes |>
dplyr::mutate(
statut_glycemie = dplyr::case_when(
glycemie < 0.70 ~ "Hypoglycémie",
glycemie >= 0.70 & glycemie <= 1.00 ~ "Normoglycémie",
glycemie > 1.00 & glycemie <= 1.25 ~ "Prédiabète",
glycemie > 1.25 ~ "Diabète Présumé",
TRUE ~ NA_character_
)
)
Il importe toutefois de souligner une dissemblance majeure : alors que cut() produit directement un objet de type factor, la fonction case_when() génère initialement un vecteur de chaînes de caractères pures (character). Pour réinsérer ce résultat dans un modèle statistique exigeant des modalités ordonnées, il convient d’exécuter une conversion explicite ultérieure à l’aide de la fonction forcats::fct_inorder(), qui transforme les étiquettes textuelles en niveaux de facteurs en respectant fidèlement l’ordre d’apparition logique déclaré dans le bloc conditionnel.
8.3 Recodage avec dplyr::case_match() et forcats
L’affinement d’une segmentation préalable requiert fréquemment la réagrégation de plusieurs catégories élémentaires en super-classes conceptuelles plus larges. Cette situation émerge classiquement lorsque certaines modalités d’un découpage initial s’avèrent comporter des effectifs marginaux insuffisants pour autoriser des modélisations multivariées stables.
Au sein du Tidyverse, la fonction moderne dplyr::case_match() (qui rationalise et remplace progressivement dplyr::recode()) permet d’opérer cette refonte avec une remarquable lisibilité. Parallèlement, le package spécialisé forcats fournit des opérateurs de manipulation catégorielle d’une très haute précision :
forcats::fct_collapse(): offre une interface déclarative puissante pour fusionner manuellement des modalités multiples en une étiquette agrégée unique (par exemple regrouper les classes d’IMC « Obésité Classe I », « Obésité Classe II » et « Obésité Sévère » sous l’intitulé générique « Obésité Globale ») ;forcats::fct_lump_min()ouforcats::fct_lump_prop(): automatisent la détection des modalités dont l’effectif ou la proportion tombe sous un seuil critique, et les agglomèrent au sein d’une catégorie résiduelle automatiquement libellée « Other » ou « Autre ».
L’articulation méthodique de ces fonctions garantit la préservation de la cohérence interne de la table de données tout au long de son cycle d’ingénierie préparatoire.
9. Structuration en facteurs ordonnés et exploitation statistique
9.1 Création formelle de facteurs ordonnés (ordered factors)
La distinction opérée dans R entre un facteur nominal simple (factor) et un facteur ordonné (ordered factor) est d’une portée fondamentale sur le plan conceptuel comme sur celui du traitement computationnel. Lorsque l’on procède à la catégorisation d’une variable continue, les classes résultantes héritent intrinsèquement de la monotonie de la métrique sous-jacente : une catégorie de détresse psychologique « Élevée » est ontologiquement supérieure à une catégorie « Moyenne », elle-même supérieure à la catégorie « Faible ».
Pour matérialiser formellement cette structure ordinale dans l’environnement R, il convient d’activer l’argument ordered_result = TRUE au sein de l’instruction cut(), ou d’encapsuler la variable discrétisée au sein de la fonction ordered(). La classe de l’objet résultant est alors estampillée c("ordered", "factor").
Cette déclaration modifie profondément le comportement des estimateurs statistiques. Lorsque l’on introduit un facteur standard non ordonné dans la formule d’un modèle linéaire général (lm() ou glm()), R applique par défaut un codage de contrastes de traitement (treatment contrasts ou dummy coding via contr.treatment). Dans ce schéma, chaque classe est comparée bilatéralement à une modalité de référence unique. En revanche, dès lors qu’un facteur possède la classe ordered, R modifie automatiquement sa matrice de projection pour employer des contrastes polynomiaux orthogonaux (orthogonal polynomial contrasts via contr.poly). Les coefficients estimés ne représentent plus des écarts par rapport à un groupe témoin, mais quantifient respectivement la composante de tendance linéaire ($.L$), quadratique ou courbure ($.Q$), cubique ($.C$), et ainsi de suite le long de la séquence ordonnée des modalités.
9.2 Réordonnancement et réétiquetage contrôlés
Le contrôle de l’ordonnancement interne des niveaux (levels) est essentiel pour éviter des contresens dans l’interprétation des modèles statistiques paramétriques. Par défaut, la fonction factor() attribue l’ordre des niveaux selon le principe de l’ordre alphabétique des étiquettes textuelles lorsqu’aucun vecteur explicite n’est renseigné. Cette caractéristique peut engendrer des paradoxes flagrants : des libellés tels que « Faible », « Moyen », « Sévère » se verraient classés par R dans l’ordre « Faible », « Moyen », « Sévère » par coïncidence alphabétique, mais des libellés comme « Bas », « Élevé », « Moyen » seraient ordonnés « Bas », « Élevé », « Moyen », brisant la hiérarchie empirique.
Pour verrouiller manuellement l’organisation des modalités, il est impératif de stipuler explicitement l’ordre hiérarchique au moyen de l’argument levels au sein de la fonction factor() :
facteur_ordonne <- factor(
vecteur_categorise,
levels = c("Niveau 1", "Niveau 2", "Niveau 3", "Niveau 4"),
ordered = TRUE
)
Dans le cadre particulier de la régression logistique binaire ou multinomiale, le premier niveau de la hiérarchie du facteur est systématiquement désigné par R comme la catégorie de référence (baseline category). Si l’investigateur souhaite étudier l’accroissement du risque associé à l’augmentation de la sévérité d’un score, il doit s’assurer que le premier niveau correspond rigoureusement à la modalité témoin (non pathologique). La fonction stats::relevel() ou la fonction plus modulable forcats::fct_relevel() permettent de repositionner à tout instant la modalité de référence sans altérer l’intégrité des données observées.
10. Traitement rigoureux des valeurs manquantes et des valeurs aberrantes
10.1 Comportement de cut() face aux NA préexistants
Dans toute analyse quantitative menée sur des données de terrain réelles, la gestion des données manquantes (formalCompanion standard NA dans R) constitue un enjeu méthodologique de premier ordre. Le comportement d’ingénierie de la fonction cut() face aux données manquantes d’origine est parfaitement déterministe : toute observation valant NA dans le vecteur numérique initial x est transmise de façon transparente sous la forme d’un NA au sein du vecteur factoriel résultant.
Cependant, le risque méthodologique le plus insidieux ne provient pas des valeurs manquantes originelles, mais de la génération artificielle de NA provoquée par des seuils de découpage (breaks) inadéquats ou trop restrictifs. Si un seul point de données tombe en deçà du premier seuil ou au-delà du dernier seuil, cut() le convertit silencieusement en donnée manquante. Il est dès lors capital d’implémenter des routines de vérification diagnostique systématiques avant et après la catégorisation :
# Diagnostic préliminaire
sum(is.na(vecteur_continu))
# Diagnostic post-catégorisation avec recensement exhaustif
table(vecteur_categorise, useNA = "always")
L’utilisation systématique de l’argument useNA = "always" au sein de la commande table() empêche R de masquer les valeurs manquantes dans les sorties de distribution de fréquences. Par ailleurs, si le chercheur souhaite traiter l’absence de réponse non comme une défaillance computationnelle mais comme une classe analytique à part entière (par exemple pour tester l’hypothèse d’une absence non aléatoire Missing Not At Random), la fonction native addNA() permet de promouvoir la métadonnée NA au rang de niveau de facteur formellement indexé.
10.2 Détection et prise en compte des observations aberrantes
Les observations aberrantes ou extrêmes (outliers) exercent une influence disproportionnée sur les processus de discrétisation non supervisés. Dans le cadre d’un découpage à largeur égale fondé sur la commande cut(x, breaks = k), la présence d’une unique observation extrême déforme l’amplitude théorique globale, étirant démesurément les frontières de coupure et créant des strates intermédiaires totalement dépourvues d’individus statistiques.
Pour neutraliser cette vulnérabilité structurelle, deux stratégies complémentaires s’offrent au méthodologiste :
- La troncature ou winsorisation préalable : cette approche consiste à identifier les valeurs situées au-delà d’un seuil critique robuste (par exemple au-delà du 1er et du 99e percentile, ou au-delà de trois écarts absolus par rapport à la médiane via le MAD) et à réassigner ces scores extrêmes à la valeur de borne correspondante avant d’appliquer le morcellement catégoriel ;
- L’usage d’intervalles ouverts semi-infinis : en ancrant délibérément les points terminaux du vecteur de coupure à
-Infet+Inf, on assure la captation intégrale de toutes les observations divergentes au sein des catégories d’extrémités, sans altérer l’amplitude et la granularité des intervalles médians où réside l’essentiel de la densité probabiliste.
11. Étude de cas en psychométrie : Catégorisation standardisée d’une échelle psychologique
11.1 Protocole empirique et structure du jeu de données
Pour illustrer de manière concrète l’ensemble des concepts théoriques et algorithmiques exposés précédemment, nous développons ci-après une étude de cas intégralement reproductible portant sur la normalisation et la discrétisation diagnostique d’un score de détresse psychologique continue. Considérons une cohorte épidémiologique simulée comprenant $N = 1,000$ participants ayant répondu à un questionnaire d’évaluation psychopathologique. Le score global composite est distribué selon une métrique standardisée en scores T de McCall, avec une moyenne théorique fixée à 50 et un écart-type normatif de 10.
Les scores T sont conçus pour que les écarts à la moyenne correspondent rigoureusement à des unités d’écart-type. Sur le plan descriptif, une exploration initiale révèle des scores empiriques s’échelonnant sur un continuum allant de 18.2 à 84.6. L’asymétrie positive observée reflète la réalité clinique habituelle où la majorité des individus de la population générale rapporte des niveaux d’altération faibles à modérés, tandis qu’une fraction marginale d’individus présente des scores hautement pathologiques situés dans la queue supérieure de la distribution.
La doctrine psychométrique conventionnelle prescrit une stratification clinique de ces scores T en quatre catégories pronostiques distinctes :
- Score inférieur à 45 : Symptomatologie faible ou normale (sous la demi-déviation standard) ;
- Score compris entre 45 inclus et 55 exclu : Symptomatologie moyenne ou subclinique ;
- Score compris entre 55 inclus et 65 exclu : Détresse modérée (entre un et deux écarts-types au-dessus de la moyenne) ;
- Score supérieur ou égal à 65 : Détresse sévère ou hautement clinique (au-delà de deux écarts-types).
11.2 Mise en œuvre séquentielle du découpage dans R
La transcription de ce protocole normatif sous R impose une vigilance particulière quant au sens des inégalités imposées par les critères cliniques. Puisque la convention clinique stipule l’inclusion des seuils inférieurs (par exemple « 45 inclus »), les intervalles doivent impérativement être fermés à gauche et ouverts à droite, ce qui commande l’initialisation stricte du paramètre right = FALSE.
Le script suivant expose la chaîne complète de traitement, depuis la définition des seuils jusqu’à la modélisation graphique avec le package ggplot2 :
# 1. Définition rigoureuse des bornes infinies et des étiquettes associées
seuils_cliniques <- c(-Inf, 45, 55, 65, Inf)
etiquettes_classes <- c("Faible", "Moyen", "Modéré", "Sévère")
# 2. Application séquentielle de la transformation au sein du pipeline
donnees_analyse <- cohorte_psychometrique |>
dplyr::mutate(
categorie_detresse = cut(
score_t_global,
breaks = seuils_cliniques,
labels = etiquettes_classes,
right = FALSE,
ordered_result = TRUE
)
)
# 3. Contrôle de cohérence par tri croisé et validation d'effectifs
with(donnees_analyse, table(categorie_detresse, useNA = "always"))
Pour assurer la restitution visuelle de cette distribution stratifiée, nous mobilisons le moteur graphique ggplot2 à travers l’instanciation d’un histogramme de fréquences claires :
library(ggplot2)
ggplot(donnees_analyse, aes(x = categorie_detresse, fill = categorie_detresse)) +
geom_bar(color = "black", alpha = 0.85) +
scale_fill_brewer(palette = "YlOrRd") +
theme_minimal() +
labs(
title = "Distribution Stratifiée de la Détresse Psychologique",
subtitle = "Catégorisation standardisée basée sur les scores T de McCall",
x = "Catégorie Diagnostique",
y = "Fréquence Observée",
fill = "Niveau de Sévérité"
)
Cette représentation permet de vérifier immédiatement la plausibilité clinique du découpage : la prévalence décroissante attendue des formes sévères transparaît sans distorsion visuelle, validant l’adéquation computationnelle du script de transformation.
11.3 Validation de la cohérence interne et analyse de sensibilité
L’opération de catégorisation ne saurait être considérée comme scientifiquement achevée sans une démarche explicite de validation de la robustesse empirique des frontières retenues. Deux examens complémentaires s’avèrent indispensables :
Le premier consiste à vérifier la variance interne au sein de chaque groupe formé. Si une modalité catégorielle regroupe un effectif extrêmement marginal (par exemple moins de 1 % de l’échantillon global dans la classe « Sévère »), toute inférence statistique ultérieure mobilisant cette classe comme modalité prédictive ou d’ajustement souffrira d’une instabilité majeure, caractérisée par une explosion des erreurs-types des coefficients estimés. Dans ce cas, une refonte des coupures ou une fusion raisonnée de modalités s’impose au regard des effectifs disponibles.
Le second examen correspond à l’analyse de sensibilité des seuils. Elle consiste à perturber marginalement l’emplacement des points de coupure (par exemple en déplaçant le seuil critique de 65 à 64 ou à 66 points T) afin d’évaluer dans quelle mesure la proportion d’individus classés dans chaque groupe et les conclusions statistiques ultérieures (telles que le résultat d’un test du khi-deux) sont dépendantes de variations infinitésimales des frontières imposées. Si des déplacements minimes de seuils modifient radicalement le niveau de significativité des inférences cliniques, la discrétisation doit être considérée comme fragile et discutée comme telle dans les publications scientifiques.
12. Critique méthodologique, pièges statistiques et recommandations académiques
12.1 Les écueils statistiques de la catégorisation d’une variable continue
Bien que la catégorisation de variables continues soit une pratique ubiquitaire, la communauté méthodologique et biostatistique contemporaine s’accorde quasi unanimement à souligner ses lourds désavantages statistiques lorsqu’elle est exécutée sans précaution théorique. Les travaux fondateurs de MacCallum, Zhang, Preacher et Rucker (2002) ainsi que les avertissements de Royston, Altman et Sauerbrei (2006) détaillent de façon accablante les distorsions inhérentes à cette pratique.
Le premier préjudice réside dans l’effondrement massif de la puissance statistique des tests d’hypothèses. Transformer une variable continue en une dichotomie basée sur la médiane (médian split) équivaut statistiquement à jeter délibérément entre un tiers et la moitié de l’échantillon d’observation à la poubelle en termes d’information de Fisher disponible. Les analyses requièrent alors des tailles d’échantillons considérablement plus élevées pour détecter des tailles d’effet équivalentes.
Le deuxième piège méthodologique réside dans l’assimilation trompeuse d’individus pourtant fondamentalement distincts : deux sujets affichant des scores respectifs de 44.9 et de 12.0 sont arbitrairement amalgamés au sein de la même modalité « Faible », tandis que deux individus affichant des scores de 44.9 et de 45.1 — virtuellement identiques sur le plan de la réalité clinique — sont brutalement séparés et étiquetés dans des catégories diagnostiques opposées. Cette discontinuité artificielle introduit du bruit de mesure non aléatoire.
De surcroît, la discrétisation masque systématiquement les patterns fonctionnels non linéaires complexes. Si la relation réelle unissant une variable explicative continue $X$ et une variable réponse $Y$ suit une trajectoire parabolique en $U$ inversé, un découpage grossier en deux ou trois catégories peut atténuer complètement le coefficient d’association linéaire ou, pire encore, générer des associations fallacieuses dues à des biais d’agrégation. Enfin, l’inflation incontrôlée du risque d’erreur de type I (faux positifs) émerge inévitablement lorsque l’analyste procède à des essais itératifs multiples de plusieurs combinaisons de seuils jusqu’à l’obtention d’une valeur $p$ significative, une dérive épistémologique connue sous le terme de p-hacking.
12.2 Directives déontologiques pour une discrétisation scientifiquement robuste
Face à ces risques démontrés, les comités de rédaction des grandes revues scientifiques internationales préconisent le respect d’un ensemble de directives déontologiques et méthodologiques rigoureuses avant d’autoriser la publication d’analyses fondées sur des variables préalablement continues discrétisées :
- Justification a priori des seuils : Les frontières de segmentation ne doivent jamais être choisies de façon opportuniste après observation des données empiriques. Elles doivent impérativement reposer sur des normes préexistantes publiées dans la littérature spécialisée, des standards réglementaires officiels, ou faire l’objet d’un pré-enregistrement formel (pre-registration) sur des plateformes dédiées ;
- Double analyse comparative systématique : La bonne pratique scientifique moderne commande de mener conjointement les modélisations statistiques sur la variable continue originale (en utilisant le cas échéant des transformations spline de lissage pour appréhender la non-linéarité) et sur la variable catégorisée créée dans R. Si les conclusions inférentielles divergent substantiellement, cette divergence doit être explicitement discutée dans le manuscrit ;
- Transparence totale du script R : Les auteurs doivent documenter intégralement les instructions de partitionnement (vecteur
breaksexplicite, valeurs booléennes derightet deinclude.lowest, traitement diagnostique desNA) au sein d’un script mis à disposition de la communauté dans un esprit de science ouverte et de stricte reproductibilité computationnelle.
En mobilisant la fonction native cut() ou ses extensions modernes au sein du Tidyverse avec une pleine compréhension des règles topologiques et des enjeux de variance sous-jacents, l’analyste de données s’assure ainsi que le passage du continu au discret répond aux normes méthodologiques les plus rigoureuses de la recherche contemporaine.
Références
Fayyad, U. M., & Irani, K. B. (1993). Multi-interval discretization of continuous-valued attributes for classification learning. Proceedings of the 13th International Joint Conference on Artificial Intelligence (IJCAI-93), 1022–1027. https://www.ijcai.org/Proceedings/93-2/Papers/022.pdf
Harrell, F. E. (2023). Hmisc: Harrell Miscellaneous (R package version 5.1-1). Comprehensive R Archive Network. https://cran.r-project.org/package=Hmisc
MacCallum, R. C., Zhang, S., Preacher, K. J., & Rucker, D. D. (2002). On the practice of dichotomization of quantitative variables. Psychological Methods, 7(1), 19–40. https://doi.org/10.1037/1082-989X.7.1.19
R Core Team. (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
Royston, P., Altman, D. G., & Sauerbrei, W. (2006). Dichotomizing continuous predictors in multiple regression: A bad idea. Statistics in Medicine, 25(1), 127–141. https://doi.org/10.1002/sim.2331
Stevens, S. S. (1946). On the theory of scales of measurement. Science, 103(2684), 677–680. https://doi.org/10.1126/science.103.2684.677
Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L. D., François, R., Grolemund, G., Hayes, A., Henry, L., Hester, J., Kuhn, M., Pedersen, T. L., Miller, E., Bache, S. M., Müller, K., Ooms, J., Robinson, D., Seidel, D. P., Spinu, V., Takahashi, K., Vaughan, D., Wilke, C., Woo, K., & Yutani, H. (2019). Welcome to the Tidyverse. Journal of Open Source Software, 4(43), Article 1686. https://doi.org/10.21105/joss.01686