Méthodologie de la rechercheStatistiques en R

Comment calculer la moyenne géométrique dans R (avec exemples)

Découvrez comment calculer la moyenne géométrique dans R avec des exemples pratiques : vecteurs, gestion des zéros, data frames et fonctions spécialisées.

PUBLIÉ

Dans le paysage foisonnant de l’analyse statistique contemporaine et du traitement de données quantitatives sous l’environnement de programmation R, le choix des indicateurs de tendance centrale constitue un pivot épistémologique fondamental. Si la moyenne arithmétique s’impose par défaut dans l’esprit de nombreux praticiens en raison de son intuitivité algébrique et de sa manipulabilité analytique, elle s’avère fréquemment inappropriée, voire fallacieuse, dès lors que les phénomènes sous-jacents obéissent à des dynamiques multiplicatives, exponentielles ou asymétriques. En psychologie quantitative, en psychophysique, en économétrie et dans les neurosciences cognitives computationnelles, les mesures empiriques — qu’il s’agisse de latences motrices, de chronométries mentales ou de ratios psychométriques d’adaptation — présentent régulièrement des distributions positivement étirées vers la droite, remettant en cause l’application aveugle du modèle additif standard.

La moyenne géométrique émerge précisément pour combler ce gouffre méthodologique. Fondée sur la racine n-ième du produit des observations ou, de façon strictement équivalente et numériquement plus stable, sur l’exponentielle de la moyenne arithmétique de leurs logarithmes, elle offre une synthèse rigoureuse des grandeurs fonctionnant par proportions et facteurs d’échelle. Dans le langage de programmation R, environnement dédié par excellence à l’inférence et à l’exploitation des données complexes, l’absence d’une fonction primitive unique et générique nommée directement pour la moyenne géométrique dans le paquet de base (contrairement à la présence immédiate de la fonction mean) nécessite une compréhension algorithmique et mathématique approfondie afin de développer des routines de calcul pérennes, efficientes et résilientes face aux anomalies de mesure.

Cet article propose une exploration exhaustive, théorique et appliquée, du calcul de la moyenne géométrique dans l’écosystème R. En articulant les fondements mathématiques purs, les impératifs computationnels liés à la précision en virgule flottante, les contraintes empiriques posées par les zéros et les valeurs négatives, ainsi que les paradigmes modernes de manipulation de données vectorisées et tabulaires (notamment au travers du métapaquetage tidyverse et des bibliothèques psychométriques spécialisées), nous fournissons aux chercheurs et analystes de données un cadre de référence méthodologique complet. À travers des implémentations pas à pas, des benchmarks conceptuels et des études de cas inspirées des sciences du comportement, ce guide détaillé éclaire les conditions de calcul, de visualisation et de communication statistique de cette métrique incontournable.

1. Introduction théorique et fondements mathématiques de la moyenne géométrique

1.1 Définition formelle et formulation mathématique

D’un point de vue formel, considérons un échantillon de variables quantitatives continues strictement positives noté x, composé de n observations scalaires individuelles x1, x2, …, xn. La moyenne géométrique, traditionnellement désignée par la lettre G ou la notation Mgeom, se définit au sens premier comme la racine n-ième du produit continu de l’ensemble de ces termes. En utilisant le formalisme du produit tensoriel scalaire, cette relation s’exprime selon l’équation fondamentale :

G = ( ∏i=1n xi )1/n = ( x1 × x2 × … × xn )1/n

Bien que cette expression soit conceptuellement limpide, sa mise en œuvre directe sur des ensembles de données empiriques volumineux se heurte rapidement à des obstacles computationnels rédhibitoires. Pour contourner ces écueils, l’algèbre mathématique exploite la propriété de morphisme de la fonction logarithmique, laquelle convertit les produits en sommes linéaires. En appliquant le logarithme naturel (ou népérien) à chaque terme de l’égalité, nous établissons l’équivalence logarithmique universelle :

ln(G) = (1 / n) ∑i=1n ln(xi)

En composant à nouveau par la fonction exponentielle, fonction réciproque stricte du logarithme népérien sur le demi-axe réel positif, la moyenne géométrique se reformule élégamment comme l’exponentielle de la moyenne arithmétique des logarithmes de l’échantillon initial :

G = exp( (1 / n) ∑i=1n ln(xi) )

Cette dualité mathématique éclaire la place de la moyenne géométrique au sein de la famille plus large des moyennes généralisées, souvent nommées moyennes de Kolmogorov ou moyennes quasi-arithmétiques. De surcroît, la structure de la moyenne géométrique s’insère de manière immuable dans l’inégalité classique reliant les moyennes fondamentales, gouvernée par l’inégalité de Cauchy-Schwarz et le théorème des moyennes de puissance. Pour tout ensemble de réels strictement positifs non identiques, nous vérifions rigoureusement l’ordre hiérarchique suivant :

Moyenne Harmonique ≤ Moyenne Géométrique ≤ Moyenne Arithmétique

L’égalité parfaite entre ces trois métriques n’est atteinte que dans la circonstance dégénérée où l’ensemble des observations sont strictement identiques entre elles (x1 = x2 = … = xn), témoignant de la dispersion nulle de la distribution.

1.2 Propriétés multiplicatives et invariance d’échelle

L’une des propriétés structurales les plus remarquables de la moyenne géométrique réside dans son adéquation parfaite aux processus gouvernés par des mécanismes générateurs multiplicatifs. Contrairement à la moyenne arithmétique, qui postule un univers additif où chaque incrément absolu conserve la même signification quelle que soit l’amplitude du niveau de départ, la moyenne géométrique analyse les variations relatives, les taux d’accroissement et les facteurs de proportionnalité.

Cette nature multiplicative induit une propriété statistique cruciale : l’invariance face au changement d’échelle proportionnel, également qualifiée d’homogénéité de degré un. Si l’on multiplie l’ensemble des éléments d’un vecteur expérimental par une constante positive arbitraire k, la moyenne géométrique de la nouvelle série résultante est rigoureusement égale à la moyenne géométrique originale multipliée par cette même constante k. De manière encore plus significative, si l’on compare deux séries de données mesurées dans des unités métriques distinctes, le ratio de leurs moyennes géométriques demeure strictement invariant, ce qui n’est nullement garanti par la moyenne arithmétique standard.

Par ailleurs, la moyenne géométrique présente une résilience mathématique supérieure face aux valeurs extrêmes positives (les « valeurs aberrantes » ou outliers à queue lourde). Dans la mesure où la transformation logarithmique sous-jacente comprime l’amplitude des grands nombres tout en dilatant l’intervalle des valeurs proches de zéro, un point d’observation anormalement élevé n’exercera pas sur l’estimation globale la force de levier démesurée qu’il imposerait à une moyenne arithmétique. Cette caractéristique confère à l’estimateur géométrique une robustesse relative très appréciée lors de l’étude de phénomènes physiques ou psychologiques soumis à de fortes variations intermittentes.

1.3 Justification du passage par les logarithmes en calcul numérique

Sur le plan de l’informatique théorique et de l’architecture matérielle des processeurs, l’évaluation naïve d’un produit continu de n nombres selon la formule élémentaire ( ∏ xi )1/n mène inéluctablement à un échec algorithmique sur des cohortes de taille modérée ou grande. En effet, selon le standard international IEEE 754 pour l’arithmétique en virgule flottante à double précision, les nombres réels ne peuvent dépasser une limite supérieure de l’ordre de 1.797693 × 10308.

Dès lors que l’on manipule, par exemple, un vecteur composé de seulement quelques centaines d’observations d’une valeur moyenne de 50, le produit accumulé franchit instantanément cette borne physique, déclenchant un dépassement de capacité arithmétique irrémédiable, désigné techniquement sous le terme de dépassement vers l’infini ou overflow arithmétique. Dans ce cas de figure, l’interpréteur R substitue au produit la constante Inf, et l’extraction subséquente de la racine n-ième échoue en renvoyant invariablement Inf ou NaN, détruisant toute possibilité d’inférence statistique.

La transformation par le logarithme népérien résout ce problème d’ingénierie logicielle avec une élégance absolue. En substituant à l’explosion multiplicative une somme de logarithmes, les magnitudes numériques demeurent cantonnées dans des plages d’amplitude parfaitement maîtrisées. Le calcul de la somme ∑ ln(xi) s’exécute avec une remarquable stabilité computationnelle, limitant au maximum les erreurs de troncature et d’arrondi machine. Une fois le barycentre obtenu dans le domaine transformé par simple division par n, l’application finale de l’opérateur exponentiel exp() restitue la valeur à l’échelle naturelle sans jamais frôler les frontières de saturation des registres mémoires du microprocesseur.

2. Pertinence de la moyenne géométrique en psychologie quantitative et sciences cognitives

2.1 Analyse des temps de réaction et lois psychophysiques

Le champ expérimental de la psychologie cognitive et des neurosciences comportementales mobilise massivement l’analyse des chronométries mentales. Qu’il s’agisse de mesurer la vitesse de détection d’un stimulus visuel, le délai de sélection d’une réponse motrice dans une tâche d’inhibition comportementale (comme la tâche de Stroop ou le paradigme de Simon), ou encore la vitesse de traitement sémantique, la distribution empirique des temps de réaction ne suit pratiquement jamais une distribution normale gaussienne. Au contraire, elle exhibe une asymétrie positive marquée, caractérisée par une accumulation rapide de latences minimales physiologiques et une longue queue de distribution s’étirant vers des latences très élevées.

La littérature en psychométrie computationnelle démontre que ces latences sont remarquablement bien ajustées par des lois de distribution log-normales ou des lois d’ex-Gaussienne. Dans le cadre d’un modèle log-normal, la moyenne géométrique des temps de réponse représente rigoureusement l’estimateur de la médiane de la distribution sous-jacente, fournissant le paramètre d’échelle le plus fidèle pour qualifier la performance cognitive typique d’un participant sans distorsion due à d’occasionnels décrochages attentionnels.

De surcroît, cette approche s’inscrit en continuité directe avec la loi de Weber-Fechner, pierre angulaire de la psychophysique classique. Selon cette loi, la sensation subjective psychologique varie proportionnellement au logarithme de l’intensité physique du stimulus objectif administré :

S = k × ln(I / I0)

Lorsqu’un chercheur souhaite synthétiser les seuils différentiels de perception sensorielle — par exemple l’intensité lumineuse minimale discernable ou l’amplitude acoustique perçue —, le calcul d’une moyenne arithmétique dénature profondément le substrat psychologique de la mesure. Seule la moyenne géométrique respecte l’homologie entre l’échelle physique exponentielle et la grille perceptuelle humaine logarithmique.

2.2 Échelles de réponse et ratios psychométriques

Au-delà de la psychophysique des seuils, la construction d’échelles de mesure subjectives en sciences sociales et comportementales s’appuie fréquemment sur la méthode d’estimation de magnitude popularisée par S. S. Stevens. Dans ces protocoles d’évaluation psychologique directe, les sujets ne répondent pas via des échelles d’intervalles contraintes de type Likert (de 1 à 7), mais assignent librement des valeurs numériques arbitraires dont les rapports mutuels reflètent leurs jugements internes d’intensité ou de valence.

Pour agréger de tels jugements entre plusieurs participants, la moyenne arithmétique génère des aberrations statistiques majeures. Si un sujet A juge un stimulus deux fois plus stressant qu’un référentiel (ratio = 2) et qu’un sujet B le juge deux fois moins stressant (ratio = 0.5), leur ressenti moyen combiné devrait logiquement refléter une neutralité relative (ratio = 1). Or, la moyenne arithmétique de 2 et de 0.5 s’établit à 1.25, introduisant un biais positif artificiel non négligeable. En revanche, la moyenne géométrique de 2 et 0.5 produit avec une parfaite exactitude :

( 2 × 0.5 )1/2 = ( 1 )1/2 = 1.0

L’utilisation de la moyenne géométrique s’impose également lors de la standardisation et de l’intégration de scores composites composites issus de batteries neuropsychologiques pluridisciplinaires. Lorsque des sous-tests évaluant la flexibilité exécutive, la mémoire épisodique et l’empan visuo-spatial possèdent des métriques intrinsèques incommensurables, la synthèse par moyenne géométrique garantit que l’indice de performance globale préserve la contribution relative de chaque domaine cognitif sans écrasement par les échelles à forte variance brute.

2.3 Modélisation des trajectoires d’apprentissage et taux de variation

L’évaluation quantitative du progrès comportemental au fil des sessions d’entraînement moteur ou d’acquisition de connaissances relève intrinsèquement de modèles dynamiques non linéaires. Selon la célèbre loi de puissance de l’apprentissage formalisée par Newell et Rosenbloom, le temps nécessaire pour exécuter une tâche cognitive complexe décroît comme une fonction de puissance du nombre d’essais préalablement accomplis :

T = a × N-b

b symbolise le taux d’apprentissage de l’individu. Ce phénomène indique que chaque répétition procure un gain relatif — un pourcentage de réduction de la latence — plutôt qu’une diminution temporelle constante exprimée en millisecondes fixes.

Lorsque les chercheurs analysent longitudinalement des cohortes d’apprentissage, la détermination du rythme moyen de progression nécessite impérativement le calcul de moyennes géométriques appliquées aux ratios d’amélioration successifs Tt / Tt-1. Procéder par moyenne arithmétique sur de tels taux de changement induit le fameux paradoxe de la moyenne des pourcentages, aboutissant à une surestimation systématique de la vitesse d’acquisition des compétences cognitives.

De même, dans les protocoles d’investigation de la mémoire à long terme explorant la courbe de l’oubli formulée initialement par Hermann Ebbinghaus, la rétention mnésique s’érode selon un facteur de déclin multiplicatif récurrent par unité de temps. La quantification rigoureuse du coefficient de rétention moyen au sein d’une population nécessite par conséquent l’agrégation géométrique des indices de persistance mnésique intermédiaires.

3. La syntaxe fondamentale de base dans R : exp(mean(log(x)))

3.1 Décomposition fonctionnelle de l’instruction primitive

L’environnement de base de R (souvent désigné sous le vocable de base R) privilégie une philosophie de programmation fonctionnelle où la modularité des opérations primitives prévaut sur la multiplication d’opérateurs spécialisés redondants. Ainsi, pour exécuter le calcul d’une moyenne géométrique sur un objet vectoriel désigné par x, l’idiome universel et le plus direct repose sur l’imbrication tripartite :

exp(mean(log(x)))

Examinons avec précision la mécanique interne de cette expression lors de son évaluation séquentielle par l’interpréteur R :

  • La primitive log(x) : Cette fonction applique l’opérateur logarithmique népérien (base e ≈ 2.718282) à chaque élément constitutif du vecteur atomique numérique x. En vertu du polymorphisme natif de R, cette opération s’effectue de façon entièrement vectorisée, appelant directement en arrière-plan des routines compilées en langage C issues de la bibliothèque standard mathlib.
  • L’opérateur mean(...) : Il reçoit en entrée le vecteur numérique nouvellement instancié contenant les logarithmes des données d’origine. La fonction en calcule le centre de gravité additif — c’est-à-dire la somme de l’ensemble des termes divisée par la longueur effective de la structure — et retourne un unique scalaire représentant la moyenne arithmétique de l’espace transformé.
  • La fonction exp(...) : Enfin, l’exponentielle est appliquée à ce scalaire résultant. Elle projette à rebours cette valeur vers le système de coordonnées initial de la mesure, délivrant rigoureusement l’estimateur de la moyenne géométrique.

3.2 Construction d’une fonction personnalisée dédiée

Bien que la frappe répétée de l’instruction primitive exp(mean(log(x))) soit tout à fait envisageable pour des manipulations interactives en console, les exigences d’ingénierie logicielle, de lisibilité algorithmique et de reproductibilité de l’analyse plaident vigoureusement en faveur de son encapsulation au sein d’une fonction R modulaire et réutilisable. Nous pouvons formaliser cette définition selon la syntaxe suivante :

calculer_moyenne_geometrique <- function(x) {
  return(exp(mean(log(x))))
}

L’encapsulation fonctionnelle présente l’immense avantage de normaliser les flux de travail analytiques. En assignant un nom explicite à l’opération statistique, le chercheur s’affranchit des erreurs d’inattention syntaxique lors de scripts d’analyse volumineux, documente implicitement l’intention méthodologique du code et facilite la maintenance conjointe des programmes de traitement de données.

3.3 Efficience computationnelle et vectorisation native

L’un des atouts distinctifs de l’implémentation exp(mean(log(x))) réside dans son adéquation totale avec le modèle de conception computationnelle de R. Dans la communauté des développeurs, il est notoirement documenté que les boucles itératives séquentielles (de type for ou while) peuvent s’accompagner d’un surcoût substantiel en temps d’horloge machine lorsqu’elles sont écrites directement au niveau de l’interpréteur de script, en raison de l’évaluation dynamique permanente des types de données.

À l’inverse, l’expression exp(mean(log(x))) tire un bénéfice maximal de la vectorisation native. Les opérations de transformation logarithmique, de réduction de somme par l’algorithme d’addition compensée (sommation de Kahan ou accumulation en registres étendus) et d’élévation à l’exponentielle s’opèrent au niveau le plus profond de l’exécutable R, via des appels à des blocs de code C et Fortran hautement optimisés.

Sur des vecteurs de données massifs comprenant plusieurs dizaines de millions d’observations — situations fréquentes lors du profilage de données électrophysiologiques continues ou de trajectoires oculométriques (eye-tracking) —, cette formulation primitive surpasse de plusieurs ordres de grandeur toute logique itérative basée sur des produits cumulatifs manuels, tout en maintenant une empreinte mémoire vive extrêmement contenue.

4. Exemple 1 : Calcul de la moyenne géométrique pour un vecteur simple

4.1 Définition et structure du vecteur numérique d’expérimentation

Afin de matérialiser concrètement la démarche au travers d’un scénario opératoire contrôlé, construisons un cas expérimental type issu de la psychométrie cognitive. Supposons une série d’essais chronométrés évaluant le temps d’identification d’une cible visuelle ambigüe par un sujet adulte, les latences étant enregistrées en dixièmes de seconde : 4, 8, 9, 9, 12, 14 et 17.

Nous instancions ce vecteur au sein de la mémoire de travail de R à l’aide de l’instruction fondamentale d’assignation et du constructeur de concaténation c() :

latences <- c(4, 8, 9, 9, 12, 14, 17)

Préalablement à toute démarche de calcul, le diagnostic de la structure atomique de l’objet est une précaution méthodologique d’usage. L’application des commandes de vérification intrinsèque confirme la nature du conteneur de données :

is.numeric(latences)
typeof(latences)
length(latences)

Le diagnostic confirme que latences constitue un vecteur atomique de type « double » (réel à virgule flottante) composé d’un effectif d’échantillon rigoureusement établi à n = 7 observations valides.

4.2 Exécution directe de la commande et résultat numérique

Nous soumettons à présent ce vecteur à l’instruction de calcul géométrique direct dans la console R :

moyenne_geom <- exp(mean(log(latences)))
print(moyenne_geom)

L’exécution de cette commande fournit la valeur suivante avec la précision standard du formatage de R :

[1] 9.579479

Pour attester mathématiquement de la véracité et de la conformité algorithmique du résultat fourni par le pipeline logarithmique, nous pouvons procéder à la vérification manuelle par le produit brut, dans la mesure où notre effectif de 7 éléments est suffisamment réduit pour écarter tout risque de saturation arithmétique :

produit_brut <- prod(latences)
valeur_temoin <- produit_brut^(1 / length(latences))
print(valeur_temoin)

La commande de contrôle renvoie sans ambiguïté [1] 9.579479. La concordance numérique absolue entre les deux méthodes confirme l’exactitude de l’estimation tout en attestant de la viabilité pratique du raccourci logarithmique.

4.3 Interprétation statistique comparative de l’estimation

L’intérêt de ce premier exemple s’éclaire pleinement lorsque l’on confronte la moyenne géométrique obtenue aux autres indicateurs statistiques de tendance centrale conventionnels sur le même vecteur de données :

moyenne_arith <- mean(latences)
valeur_mediane <- median(latences)

L’affichage de ces différentes estimations synthétiques met en lumière la triangulation métrique suivante :

  • Médiane : 9.000000
  • Moyenne géométrique : 9.579479
  • Moyenne arithmétique : 10.428571

Cette confrontation illustre à merveille la position régulatrice de la moyenne géométrique au sein d’une distribution présentant une déviation vers la droite (illustrée par les observations terminales 14 et 17). La moyenne arithmétique (10.43) se trouve fortement tractée vers le haut par les deux valeurs les plus lentes de l’échantillon. La médiane (9.00) se focalise exclusivement sur le rang central ordinal, ignorant complètement la magnitude exacte des valeurs périphériques.

La moyenne géométrique (9.58) s’installe dans une position intermédiaire parfaitement proportionnée. Elle prend en considération l’ensemble des magnitudes numériques de l’échantillon tout en tempérant la force de distorsion des valeurs élevées grâce à la contraction logarithmique. Elle offre ainsi l’évaluation la plus fidèle de la latence unitaire typique du participant sous une hypothèse d’accumulation temporelle proportionnelle.

5. Gestion des contraintes numériques : le défi des zéros et des valeurs négatives

5.1 Indéfinition mathématique du logarithme aux limites réelles

Le talon d’Achille de la moyenne géométrique calculée par la voie logarithmique réside incontestablement dans les contraintes de définition du domaine de la fonction log(x) dans le corps des nombres réels. La fonction logarithmique réelle n’est rigoureusement définie que sur l’intervalle ouvert ]0, +∞[.

Lorsque la valeur x = 0 est transmise à l’instruction log() de R, le moteur de calcul numérique retourne la constante spéciale -Inf (moins l’infini), conformément à la limite analytique de la fonction quand son argument tend vers zéro par valeurs positives. Si un vecteur contient ne serait-ce qu’une seule valeur nulle, la somme calculée par mean() devient inévitablement égale à -Inf. Lors de l’évaluation finale, l’exponentielle de moins l’infini produit :

exp(-Inf) = 0

Bien que le produit théorique continu ∏ xi incluant un zéro soit effectivement égal à zéro, qualifier la tendance centrale d’un groupe d’individus de « nulle » simplement parce qu’un individu unique a obtenu un score de zéro constitue une faillite méthodologique d’agrégation d’information.

La situation devient encore plus critique en présence de nombres strictement négatifs (x < 0). L’évaluation de log(x) pour x < 0 dans le domaine réel est indéfinie. L’interpréteur R interrompt le cours régulier du calcul en émettant un avertissement explicite (Warning: NaNs produced) et consigne la valeur NaN (Not a Number). Ce marqueur de non-définition contamine immédiatement l’intégralité des calculs subséquents, réduisant à néant la tentative d’estimation.

5.2 Implications méthodologiques dans le traitement des données empiriques

Dans la pratique de la recherche expérimentale, la présence de valeurs nulles ou négatives requiert un examen diagnostique approfondi plutôt qu’un traitement aveugle. Il est primordial de distinguer sur le plan conceptuel :

  • Les zéros structurels : Il s’agit d’occurrences réelles où le phénomène mesuré est physiologiquement ou psychologiquement nul. Par exemple, le nombre d’erreurs commises dans une tâche de reconnaissance simple peut être authentiquement de zéro pour une fraction des participants.
  • Les zéros instrumentaux ou artéfactuels : Ils proviennent de la précision finie de l’instrument d’enregistrement, de l’arrondi machine ou du dépassement du seuil de sensibilité inférieur du détecteur.
  • Les valeurs négatives relatives : Fréquemment rencontrées dans les calculs de scores différentiels (par exemple un score de soustraction pré-test/post-test ou une différence de potentiel évoqué EEG), ces valeurs ne représentent pas des magnitudes nulles au sens absolu, mais des régressions ou des polarisations relatives.

Éliminer purement et simplement les participants affichant un score nul ou négatif induit un biais d’attrition statistique majeur. Cette troncature artificielle modifie drastiquement la composition de l’échantillon, tronque la variance naturelle du phénomène et vicie l’inférence causale en violant l’hypothèse de représentativité de l’échantillon probabiliste.

5.3 Stratégies d’ajustement : filtrage conditionnel versus translation constante

Face à ce verrou méthodologique, les analystes de données déploient principalement deux tactiques algorithmiques divergentes, chacune possédant ses fondements et ses limitations :

La stratégie de filtrage conditionnel consiste à restreindre l’évaluation de la moyenne géométrique aux seules unités d’observation strictement positives au moyen d’un sous-ensemble logique (x > 0). Cette option est épistémologiquement défendable lorsque le chercheur redéfinit sa question de recherche : « Quelle est la moyenne géométrique de la magnitude de l’effet sachant que l’effet s’est manifesté ? ». Elle exige toutefois de documenter rigoureusement la réduction d’effectif résultante.

La technique de translation scalaire (souvent désignée sous le terme de pseudo-compte ou correction de type log(x + c)) consiste à additionner une constante positive c à l’ensemble des données avant le calcul logarithmique, puis à soustraire cette même constante après rétro-transformation exponentielle. En écologie quantitative et en bioinformatique, la valeur c = 1 est fréquemment adoptée, donnant naissance à la formulation :

Gajustee = exp( mean( log( x + 1 ) ) ) – 1

Néanmoins, la prudence s’impose : l’adjonction d’une constante arbitraire altère l’invariance d’échelle de la moyenne géométrique. L’estimation résultante dépend intrinsèquement de la valeur assignée à c relative à la dispersion des données. Une constante mal calibrée peut lisser artificiellement les ratios différentiels et corrompre les comparaisons d’amplitudes entre groupes expérimentaux.

6. Exemple 2 : Traitement des vecteurs contenant des zéros et des nombres négatifs

6.1 Instanciation d’un vecteur contaminé par des anomalies

Pour illustrer concrètement la défaillance des pipelines de calcul naïfs et formaliser les remédiations programmatiques dans R, configurons un vecteur empirique incluant intentionnellement des valeurs problématiques :

x_contamine <- c(4, 8, 9, 9, 12, 14, 17, 0, -4)

Ce jeu de données incorpore les sept valeurs valides de notre expérimentation initiale, auxquelles sont adjointes un score nul (pouvant traduire une absence totale de réponse) et une valeur négative (résultant par exemple d’une erreur d’enregistrement de synchronisation temporelle).

Tentons d’appliquer immédiatement l’instruction primitive non supervisée :

exp(mean(log(x_contamine)))

La console R réagit instantanément en renvoyant le message d’alerte symptomatique :

Warning message:
In log(x_contamine) : NaNs produits
[1] NaN

Le pipeline statistique s’est intégralement brisé : l’incapacité de log() à évaluer -4 a généré un NaN qui a invalidé la somme opérée par mean(), réduisant la totalité de l’analyse à une valeur indéterminée.

6.2 Syntaxe de filtrage par sous-échantillonnage logique

Pour restaurer la continuité opérationnelle du calcul sans dénaturer la métrique sur les cas valides, nous mettons en œuvre une indexation vectorielle conditionnelle au moyen des prédicats booléens natifs de R. L’expression de filtrage s’énonce comme suit :

x_filtre <- x_contamine[x_contamine > 0]

L’évaluation de la condition relationnelle x_contamine > 0 génère un vecteur logique de même longueur contenant des booléens TRUE pour les entités strictement positives et FALSE pour le zéro et l’entier négatif. Utilisé comme sélecteur d’index entre crochets, il extrait uniquement les sept premiers termes.

Dès lors, la combinaison directe du filtre et du calcul géométrique s’exécute de façon compacte et sûre :

resultat_corrige <- exp(mean(log(x_contamine[x_contamine > 0])))
print(resultat_corrige)

Le résultat obtenu s’affiche de nouveau avec exactitude :

[1] 9.579479

Le sous-échantillonnage a assaini la structure numérique sans exiger la modification manuelle destructive du jeu de données source.

6.3 Automatisation robuste au sein d’une fonction personnalisée

Afin de transformer cette astuce syntaxique en un standard de travail pérenne, formalisons une routine algorithmique défensive. Cette fonction comportera un argument paramétrable pour l’exclusion des valeurs non positives, tout en émettant un rapport de traçabilité via le mécanisme standard warning() :

moyenne_geom_robuste <- function(x, rm.nonpos = TRUE) {
  if (!is.numeric(x)) {
    stop("L'argument d'entree doit imperativement etre un vecteur numerique.")
  }
  indices_invalides <- which(is.na(x) | x <= 0)
  if (length(indices_invalides) > 0) {
    if (rm.nonpos) {
      nb_exclus <- length(indices_invalides)
      prop_exclue <- round((nb_exclus / length(x)) * 100, 2)
      warning(paste0("Exclusion de ", nb_exclus, " observation(s) non positives ou manquantes (", prop_exclue, "% de l'echantillon)."))
      x <- x[x > 0 & !is.na(x)]
    } else {
      return(NaN)
    }
  }
  if (length(x) == 0) {
    return(NA)
  }
  return(exp(mean(log(x))))
}

Testons cette implémentation sur notre vecteur contaminé :

moyenne_geom_robuste(x_contamine, rm.nonpos = TRUE)

La console renvoie l’estimation statistique conforme accompagnée d’un avertissement d’audit clair et explicite :

Warning message:
In moyenne_geom_robuste(x_contamine, rm.nonpos = TRUE) :
Exclusion de 2 observation(s) non positives ou manquantes (22.22% de l'echantillon).
[1] 9.579479

7. Gestion des données manquantes (NA) et robustesse du calcul

7.1 Mécanisme de propagation des valeurs manquantes dans R

L’omission de mesure — désignée dans l’architecture interne de R par la constante réservée NA (Not Available) — constitue une caractéristique inhérente à l’investigation empirique sur le vivant. Dans les enquêtes psychométriques longitudinales ou les suivis de cohortes comportementales, la présence de données manquantes est récurrente (non-réponse à un item de test, déconnexion fortuite d’une électrode de capture, rejet d’un essai pour clignement palpébral intempestif).

Le langage R gère les données manquantes selon une stricte philosophie de propagation d’incertitude. Dès lors qu’une opération mathématique implique un terme dont la magnitude est fondamentalement inconnue, le résultat logique de cette opération est lui-même inconnu. Par conséquent :

log(NA) renvoie invariablement NA.
mean(c(10, 12, NA)) produit immédiatement NA.

Si aucune disposition de traitement explicite n’est stipulée, toute tentative de calcul de la moyenne géométrique au moyen de la formule canonique exp(mean(log(x))) sur une collection de données comportant le moindre NA renverra purement et simplement NA.

7.2 Combinaison séquentielle de na.rm et du filtrage de positivité

Pour neutraliser cette propagation d’indétermination sans altérer la cohérence globale de l’échantillonnage, la fonction primitive mean() offre le paramètre formel na.rm = TRUE (pour NA remove). Ce commutateur logique intime au moteur R d’élaguer les valeurs manquantes préalablement au calcul de la somme et de réajuster le dénominateur au nombre effectif de cas observés.

Toutefois, une vigilance syntaxique majeure s’impose lors de l’articulation entre le filtrage de positivité et la purge des valeurs manquantes. Si l’on écrit naïvement :

exp(mean(log(x[x > 0]), na.rm = TRUE))

L’évaluation de la condition logique x > 0 sur une case contenant initialement NA produit un NA logique dans le masque d’indexation. L’extraction x[x > 0] préserve alors ces NA dans le sous-vecteur. Heureusement, la déclaration conjointe de na.rm = TRUE au sein de mean() prend en charge l’élimination finale de ces artefacts.

L’ordre de composition analytique garantit ainsi que la fonction log() ne reçoit que des entités strictement positives ou des marqueurs NA, évitant rigoureusement la création involontaire de NaN arithmétiques.

7.3 Développement d’un opérateur de calcul géométrique universel

En consolidant l’ensemble des contraintes techniques — contrôle de positivité stricte, élimination des omissions NA et protection contre les échantillons résiduels vides —, nous pouvons édifier un opérateur généraliste répondant aux standards les plus rigoureux de la programmation scientifique. Nommons cette fonction gmean_universel :

gmean_universel <- function(x, na.rm = TRUE, zero.rm = TRUE) {
  if (!is.numeric(x) && !is.logical(x)) {
    stop("L'argument vectoriel doit etre de nature purement numerique.")
  }
  if (na.rm) {
    x <- x[!is.na(x)]
  }
  if (any(is.na(x))) {
    return(NA)
  }
  if (zero.rm) {
    x <- x[x > 0]
  }
  if (length(x) == 0 || any(x <= 0)) {
    return(NaN)
  }
  return(exp(mean(log(x))))
}

Cette implémentation garantit une résilience absolue. Si le vecteur contient des valeurs négatives et que le paramètre zero.rm est maintenu à faux, la fonction refuse de tronquer arbitrairement le spectre empirique et délivre immédiatement NaN, signalant ainsi à l’expérimentateur l’inadéquation de la métrique géométrique pour son cas d’usage.

8. Exemple 3 : Calcul de la moyenne géométrique sur les colonnes d’un data frame

8.1 Génération de la structure tabulaire multidimensionnelle

Dans la conduite concrète de recherches en psychologie quantitative et en neurosciences, les données ne subsistent que rarement sous forme de vecteurs isolés. Elles sont orchestrées au sein de structures tabulaires multidimensionnelles matricielles ou, plus couramment, sous la forme de data.frame, où chaque rangée symbolise une unité expérimentale (un sujet) et chaque colonne représente une variable quantifiée.

Générons une structure de données empirique représentative de sept participants soumis à une batterie évaluant trois dimensions neuropsychologiques distinctes : l’anxiété cognitive (colonne a), l’empan de mémoire de travail (colonne b) et le score d’inhibition exécutive (colonne c) :

df_cognitif <- data.frame(
  a = c(1, 3, 4, 6, 8, 8, 9),
  b = c(7, 8, 8, 7, 13, 14, 16),
  c = c(11, 13, 13, 18, 19, 19, 22)
)

L’inspection structurelle via str(df_cognitif) atteste qu’il s’agit d’une table d’expérimentation rectangulaire de dimensions 7 lignes × 3 colonnes, dont l’ensemble des vecteurs colonnes répond au standard de stockage numérique.

8.2 Application itérative via les primitives sapply() et lapply()

Pour calculer la moyenne géométrique de chacune des échelles psychométriques sans recourir à des boucles fastidieuses, l’idiome fondamental de base R mobilise la famille fonctionnelle des applicateurs. La primitive sapply() (pour simplified apply) opère une itération sur chaque colonne du tableau en appliquant une fonction anonyme ou nommée, puis simplifie automatiquement la structure résultante sous la forme d’un vecteur nommé particulièrement ergonomique :

moyennes_geom_colonnes <- sapply(df_cognitif, function(colonne) exp(mean(log(colonne))))
print(moyennes_geom_colonnes)

L’exécution de cette requête génère la sortie synthétique suivante :

       a        b        c
4.551817 9.816654 16.037887

Si l’analyste désire préserver la sortie sous forme d’une structure en arbre modulaire — particulièrement commode lorsque les colonnes possèdent des typages composites ou des métadonnées hétérogènes —, la fonction œur lapply() (pour list apply) restitue les résultats encapsulés dans une liste générique :

liste_geom <- lapply(df_cognitif, function(colonne) exp(mean(log(colonne))))

8.3 Traitement matriciel avec la fonction apply()

Une alternative analytique puissante pour la manipulation de tableaux de données entièrement numériques réside dans l’utilisation de l’opérateur matriciel apply(). Cet opérateur impose la spécification explicite d’une dimension de parcours via son argument formel MARGIN :

  • MARGIN = 2 dicte un traitement orienté selon les colonnes (synthèse inter-sujets de chaque variable).
  • MARGIN = 1 dicte un traitement orienté selon les lignes (synthèse intra-sujet entre les différentes échelles).

Le calcul transversal par colonne s’exécute par :

apply(df_cognitif, MARGIN = 2, function(x) exp(mean(log(x))))

L’intérêt conceptuel s’accroît lorsque le chercheur souhaite évaluer un indice composite intra-individuel d’efficience cognitive pondérant géométriquement les trois performances pour chaque participant pris isolément. En basculant la marge sur les rangées (MARGIN = 1) :

df_cognitif$indice_synthetique <- apply(df_cognitif[, c("a", "b", "c")], MARGIN = 1, function(sujet) exp(mean(log(sujet))))
print(df_cognitif)

Cette commande intègre dynamiquement une nouvelle variable au tableau d’origine, chaque sujet se voyant attribuer son niveau d’aptitude composite géométrique harmonisé.

9. Approche avancée avec le Tidyverse et dplyr pour les analyses psychométriques

9.1 Intégration dans un flux de manipulation summarise()

L’écosystème moderne du Tidyverse, initié par Hadley Wickham et activement maintenu par les équipes de Posit, a révolutionné les pratiques d’ingénierie statistique dans R en introduisant le paradigme des « données ordonnées » (tidy data). Dans cette architecture, les manipulations de flux s’articulent autour de l’opérateur de redirection séquentielle — historiquement le tube %>% du paquet magrittr, aujourd’hui consolidé dans le tube natif |> introduit depuis la version 4.1 de R.

Au sein de ce flux déclaratif, le verbe summarise() de la bibliothèque dplyr permet de condenser de multiples observations en indicateurs récapitulatifs avec une élégance syntaxique incomparable. Illustrons son utilisation :

library(dplyr)

resume_statistique <- df_cognitif |>
  summarise(
    geo_mean_a = exp(mean(log(a), na.rm = TRUE)),
    arith_mean_a = mean(a, na.rm = TRUE),
    mediane_a = median(a, na.rm = TRUE)
  )
print(resume_statistique)

Cette approche garantit une lisibilité irréprochable du script d’analyse. Le flux d’opérations s’énonce comme une phrase logique en langage quasi-naturel, limitant drastiquement la charge cognitive lors de la relecture de pipelines statistiques complexes.

9.2 Opérations transversales multi-colonnes avec across()

La puissance du dialecte dplyr culmine avec le modificateur contextuel across(), conçu pour appliquer simultanément un jeu de transformations algorithmiques à un éventail déterminé de variables numériques au sein d’une seule directive concise.

Supposons que nous souhaitions extraire les moyennes géométriques de l’ensemble des colonnes numériques de notre base de recherche comportementale. Nous combinons across() avec le sélecteur typologique where(is.numeric) :

tableau_geometrique <- df_cognitif |>
  summarise(
    across(
      where(is.numeric),
      ~ exp(mean(log(.x[.x > 0]), na.rm = TRUE)),
      .names = "geom_{.col}"
    )
  )
print(tableau_geometrique)

Dans cette expression hautement optimisée, le tilde ~ amorce une fonction anonyme condensée dans laquelle .x représente de façon abstraite le vecteur colonne en cours de traitement. La clause .names = "geom_{.col}" orchestre une métaprogrammation élégante qui renomme automatiquement les colonnes de sortie en préfixant le libellé d’origine par « geom_ ».

9.3 Agrégation par stratification expérimentale avec group_by()

Dans la très grande majorité des protocoles de recherche en neurosciences cognitives et en psychologie clinique, l’objectif fondamental réside dans la comparaison inter-groupes (par exemple groupe témoin sain contre cohorte clinique avec lésion cérébrale) ou dans l’étude des interactions entre conditions expérimentales (condition neutre contre condition d’amorçage émotionnel) et covariables sociodémographiques (genre, tranches d’âge).

L’articulation harmonieuse entre group_by() et summarise() rend cette partition analytique limpide. Enrichissons notre jeu de données expérimental en y ajoutant une variable de conditionnement inter-sujets :

df_groupes <- data.frame(
  groupe_clinique = factor(c("Temoin", "Temoin", "Temoin", "Patient", "Patient", "Patient", "Patient")),
  temps_reaction = c(210, 245, 260, 310, 450, 490, 850)
)

comparaison_groupes <- df_groupes |>
  group_by(groupe_clinique) |>
  summarise(
    effectif = n(),
    moyenne_geom = exp(mean(log(temps_reaction))),
    moyenne_arith = mean(temps_reaction),
    ratio_distorsion = round(moyenne_arith / moyenne_geom, 3)
  )
print(comparaison_groupes)

Cette syntaxe segmente instantanément les sous-populations d’échantillons, délivrant une table récapitulative claire. Le ratio de distorsion mis en exergue dans cet exemple illustre avec netteté comment l’hétérogénéité et l’asymétrie de distribution au sein du groupe clinique creusent l’écart entre la moyenne arithmétique et la moyenne géométrique, révélant la vulnérabilité de la première face à l’allongement de la latence chez les patients sévères.

10. Utilisation des packages spécialisés dans R (psych, EnvStats, DescTools)

10.1 La fonction geometric.mean() de la bibliothèque psych

Pour la communauté des chercheurs en sciences comportementales et psychométrie quantitative, l’éminent paquet psych, développé par William Revelle à la Northwestern University, constitue la bibliothèque de prédilection incontournable. Parmi son impressionnant arsenal d’outils dédiés à l’analyse factorielle, à la validation de fidélité d’échelle et au calcul d’indices de cohérence interne (alpha de Cronbach, oméga de McDonald), ce package met nativement à disposition une fonction explicitement baptisée geometric.mean().

Son installation et son exploitation s’opèrent selon le protocole standard :

install.packages("psych")
library(psych)

L’implémentation offerte par psych::geometric.mean() présente l’avantage majeur d’intégrer en natif la prise en compte des valeurs manquantes sans imposer de reformulation syntaxique complexe :

latences_avec_na <- c(4, 8, 9, 9, 12, 14, 17, NA)
res_psych <- geometric.mean(latences_avec_na, na.rm = TRUE)
print(res_psych)

Un aspect méthodologique essentiel de la fonction geometric.mean() de psych réside dans son traitement propriétaire des valeurs nulles. Par défaut, si des scores de zéro sont détectés au sein du vecteur, la fonction n’interrompt pas brutalement son cycle de traitement ; elle avertit l’utilisateur et applique une constante corrective unitaire ou un ajustement paramétré, garantissant une flexibilité précieuse lors de l’analyse exploratoire de grands inventaires de personnalité ou d’échelles d’attitudes.

10.2 Estimation robuste avec le package EnvStats

Bien que son patronyme renvoie initialement à la statistique environnementale, le paquetage hautement spécialisé EnvStats fait autorité dans l’ensemble de la communauté biostatistique pour son traitement exhaustif des distributions log-normales et asymétriques. Sa fonction geoMean() se distingue par une rigueur algorithmique absolue.

L’appel conventionnel s’exécute selon l’interface formelle :

library(EnvStats)
res_envstats <- geoMean(latences, na.rm = TRUE)

Cependant, la véritable plus-value d’EnvStats réside dans sa capacité à transcender la statistique descriptive univariée pour aborder l’inférence formelle et l’estimation probabiliste paramétrique. Via la fonction conjointe elnormAlt() (pour estimation of lognormal parameters – alternative parameterization), le package estime simultanément la moyenne géométrique de la population parente et calcule ses intervalles de confiance exacts basés sur la distribution log-normale :

estimation_complete <- elnormAlt(latences, ci = TRUE, ci.type = "two-sided", conf.level = 0.95)
print(estimation_complete$parameters["mean"])
print(estimation_complete$interval$limits)

Cette instrumentation inférentielle s’avère providentielle pour le chercheur qui doit rapporter dans ses publications scientifiques des intervalles de confiance robustes pour la moyenne géométrique, conformes aux exigences contemporaines de réplication des résultats en psychologie expérimentale.

10.3 La suite DescTools et sa fonction Gmean()

Le méta-package d’analyse descriptive et exploratoire DescTools, conçu par Andri Signorell, regroupe un nombre considérable d’opérateurs statistiques optimisés pour la production de rapports d’analyse préliminaires. Sa fonction dédiée s’intitule de manière compacte Gmean().

Ce module apporte un niveau de personnalisation algorithmique supérieur, particulièrement en ce qui concerne la gestion fine des zéros structurels grâce à l’argument formel method :

library(DescTools)

vecteur_mixte <- c(4, 8, 9, 9, 12, 14, 17, 0)

res_desctools_classic <- Gmean(vecteur_mixte, na.rm = TRUE, method = "classic")

res_desctools_modifie <- Gmean(vecteur_mixte, na.rm = TRUE, method = "mod")

En mode "classic", la détection d’une observation nulle entraîne le basculement strict vers zéro, tandis que la méthode modifiée "mod" (ou les réglages basés sur zero.prop) déploie une correction géométrique adaptative proportionnelle à l’effectif total. DescTools propose ainsi une trousse à outils intermédiaire idéale pour tester la robustesse des résultats empiriques face aux différentes hypothèses d’imputation des zéros.

11. Visualisation graphique et interprétation comparative des moyennes

11.1 Représentation conjointe de la distribution et des tendances centrales

La communication statistique ne saurait être complète sans une médiation visuelle soignée permettant d’apprécier la morphologie de la distribution des données et d’expliciter le positionnement différentiel des indicateurs de tendance centrale. Le package graphique de référence ggplot2 offre une flexibilité totale pour concevoir de telles synthèses visuelles didactiques.

Imaginons un échantillon expérimental de 1000 observations simulées issues d’une distribution log-normale modélisant des temps de décision perceptive :

library(ggplot2)

set.seed(42)
latences_simulees <- rlnorm(n = 1000, meanlog = 5.5, sdlog = 0.45)
donnees_visu <- data.frame(Temps = latences_simulees)

stat_arith <- mean(donnees_visu$Temps)
stat_geom <- exp(mean(log(donnees_visu$Temps)))
stat_med <- median(donnees_visu$Temps)

Nous construisons un histogramme de densité empirique sur lequel nous superposons des lignes verticales contrastées signalant l’emplacement exact de chaque métrique :

p1 <- ggplot(donnees_visu, aes(x = Temps)) +
  geom_histogram(aes(y = after_stat(density)), bins = 50, fill = "#ECEFF1", color = "#90A4AE") +
  geom_density(color = "#37474F", linewidth = 0.8) +
  geom_vline(aes(xintercept = stat_med, color = "Mediane"), linewidth = 1.1, linetype = "dashed") +
  geom_vline(aes(xintercept = stat_geom, color = "Moyenne Geometrique"), linewidth = 1.2) +
  geom_vline(aes(xintercept = stat_arith, color = "Moyenne Arithmetique"), linewidth = 1.1, linetype = "dotdash") +
  scale_color_manual(name = "Indicateurs", values = c("Mediane" = "#1E88E5", "Moyenne Geometrique" = "#004D40", "Moyenne Arithmetique" = "#D81B60")) +
  labs(title = "Morphologie de distribution asymetrique et parametres de centralite",
       subtitle = "Illustration de la divergence arithmetique-geometrique sur 1000 latences cognitives",
       x = "Temps de reaction (ms)", y = "Densite de probabilite") +
  theme_minimal() +
  theme(legend.position = "bottom", plot.title = element_text(face = "bold", size = 13))

Ce graphique met en lumière avec une force démonstrative indiscutable comment la moyenne arithmétique (en magenta) se trouve « aspirée » vers la queue de distribution sous l’effet des valeurs élevées occasionnelles, fournissant une impression trompeuse de la performance moyenne réelle. La moyenne géométrique (en vert sombre), elle, coïncide presque idéalement avec le sommet de vraisemblance et la médiane empirique (en bleu).

11.2 Transformation d’échelle logarithmique des axes visuels

Lorsque des mesures s’étendent sur plusieurs ordres de grandeur — comme c’est le cas pour les fréquences d’apparition des mots en psycholinguistique cognitive ou les seuils de détection olfactive —, la représentation sur une échelle cartésienne linéaire écrase la quasi-totalité des observations dans un intervalle illisible près de l’origine. Le passage à une échelle logarithmique sur l’axe des abscisses via scale_x_log10() permet de rétablir une parfaite symétrie distributionnelle :

p2 <- ggplot(donnees_visu, aes(x = Temps)) +
  geom_density(fill = "#80CBC4", alpha = 0.4, color = "#00695C") +
  scale_x_log10(breaks = c(100, 200, 300, 500, 1000)) +
  geom_vline(xintercept = stat_geom, color = "#004D40", linewidth = 1.2) +
  annotate("text", x = stat_geom * 1.15, y = 1.5, label = paste0("G = ", round(stat_geom, 1), " ms"), color = "#004D40", fontface = "bold") +
  labs(title = "Symetrisation gaussienne sous transformation d'echelle logarithmique",
       x = "Temps de reaction (ms, echelle log10)", y = "Densite transformee") +
  theme_classic()

Sur cette projection logarithmique, la distribution log-normale originale prend l’apparence rigoureuse d’une courbe en cloche gaussienne symétrique. Fait mathématique remarquable : la moyenne géométrique s’installe alors très exactement au centre parfait de gravité visuel et d’inflexion symétrique de la courbe, démontrant visuellement son adéquation ontologique profonde avec les phénomènes régis par des échelles d’intervalles relatives.

11.3 Conception de diagrammes d’interaction conformes aux normes APA

L’American Psychological Association (APA) impose des directives éditoriales d’une grande rigueur pour la publication des résultats expérimentaux dans les revues à comité de lecture de rang A. Lorsque des moyennes géométriques sont mobilisées pour synthétiser des dispositifs factoriels croisés (par exemple un plan factoriel mixte 2 × 2 associant un facteur de groupe et une condition expérimentale), il est méthodologiquement incorrect de juxtaposer des barres d’erreur basées sur l’écart-type arithmétique standard linéaire.

La mesure de dispersion appropriée conjointe à la moyenne géométrique est l’écart-type géométrique (noté GSD pour Geometric Standard Deviation). Il se définit mathématiquement comme l’exponentielle de l’écart-type des logarithmes :

GSD = exp( sd( log(x) ) )

L’écart-type géométrique est un facteur multiplicatif/divisif sans dimension. Par conséquent, l’intervalle de dispersion empirique à 68% ne s’exprime pas sous la forme additive [G – SD, G + SD], mais sous la forme multiplicative asymétrique :

[ G / GSD , G × GSD ]

Formalisons la construction d’un diagramme d’interaction vectoriel professionnel sous ggplot2 respectant scrupuleusement ce formalisme :

df_experience <- data.frame(
  Condition = factor(rep(c("Controle", "Stress_Aigu"), each = 2)),
  Tache = factor(rep(c("Facile", "Complexe"), times = 2)),
  G_Mean = c(220, 310, 240, 480),
  GSD = c(1.18, 1.25, 1.19, 1.35)
)

df_experience$Borne_Inf <- df_experience$G_Mean / df_experience$GSD
df_experience$Borne_Sup <- df_experience$G_Mean * df_experience$GSD

p_apa <- ggplot(df_experience, aes(x = Condition, y = G_Mean, group = Tache, shape = Tache, linetype = Tache)) +
  geom_line(position = position_dodge(0.25), linewidth = 0.75, color = "black") +
  geom_errorbar(aes(ymin = Borne_Inf, ymax = Borne_Sup), width = 0.15, position = position_dodge(0.25), linewidth = 0.6, color = "black") +
  geom_point(position = position_dodge(0.25), size = 3, fill = "white", color = "black") +
  scale_shape_manual(values = c(16, 17)) +
  scale_linetype_manual(values = c("solid", "dashed")) +
  scale_y_continuous(limits = c(150, 700), breaks = seq(200, 700, by = 100)) +
  labs(x = "Condition psychophysiologique", y = "Temps de latence geometrique moyen (ms)",
       caption = "Note. Les barres d'erreur representent l'ecart-type geometrique asymetrique (G / GSD, G * GSD). Format APA 7e ed.") +
  theme_classic(base_size = 12) +
  theme(
    legend.position = "top",
    legend.title = element_text(face = "bold"),
    axis.title = element_text(face = "bold"),
    plot.caption = element_text(hjust = 0, face = "italic", size = 9)
  )
print(p_apa)

Ce type de figure s’insère directement dans des manuscrits soumis aux plus hautes exigences des revues internationales de neurosciences cognitives et de psychologie quantitative, témoignant d’une maîtrise méthodologique sans faille de l’asymétrie propre aux grandeurs multiplicatives.

12. Bonnes pratiques, limites statistiques et recommandations méthodologiques

12.1 Arbre de décision pour le choix d’un indicateur de tendance centrale

L’intégration de la moyenne géométrique au cœur de son arsenal méthodologique ne dispense aucunement de procéder à un examen critique de la nature fondamentale des données expérimentales. Aucun indicateur statistique ne saurait détenir de validité universelle absolue ; chaque métrique tire sa pertinence du respect de ses postulats mathématiques sous-jacents.

Pour guider le praticien face à ses données dans R, nous pouvons synthétiser les critères de sélection selon l’arbre logique décisionnel suivant :

  • Le domaine des valeurs comprend-il des nombres négatifs ou un zéro conceptuellement incompressible ?
    • Si oui : Exclure impérativement la moyenne géométrique standard. Privilégier la médiane (approche non paramétrique ordinale robuste) ou la moyenne arithmétique tronquée (trimmed mean) après examen attentif des résidus.
  • Le processus générateur sous-jacent est-il additif ou multiplicatif ?
    • S’il est additif (ex. : taille en centimètres, poids total accumulé) et que la distribution présente une symétrie gaussienne confirmée (coefficient d’asymétrie de Pearson |skewness| < 0.5 et test de Shapiro-Wilk non significatif) : Adopter la moyenne arithmétique.
    • S’il est multiplicatif (ex. : taux de croissance, pourcentages d’évolution, chronométries mentales, seuils perceptifs log-normaux) : Adopter impérativement la moyenne géométrique.
  • La distribution est-elle lourdement contaminée par des valeurs aberrantes extrêmes des deux côtés ?
    • Si oui : La médiane demeure l’estimateur de point de rupture le plus élevé (50% de tolérance aux outliers).

12.2 Inférence statistique et communication des résultats

Un écueil statistique classique lors de la communication de travaux scientifiques consiste à calculer la moyenne géométrique de façon purement descriptive dans un tableau récapitulatif, puis à soumettre ces mêmes données brutes à un test t de Student ou à une analyse de variance (ANOVA) paramétrique ordinaire. Ce décalage viole les hypothèses d’homoscédasticité et de normalité des résidus de l’inférence linéaire classique.

La règle d’or d’une inférence valide sur des grandeurs géométriques s’articule autour de la rétro-transformation après modélisation log-linéaire. Le protocole rigoureux s’énonce comme suit :

  1. Appliquer la transformation logarithmique y_log <- log(y) à la variable dépendante empirique.
  2. Ajuster le modèle linéaire généralisé ou le modèle mixte sur ces valeurs transformées (via lm() ou la fonction lmer() de la bibliothèque lme4). Les postulats de normalité des résidus et d’homogénéité de variance s’y trouvent généralement pleinement restaurés.
  3. Extraire les moyennes estimées marginales (estimated marginal means) et leurs intervalles de confiance à 95% dans l’espace logarithmique (au moyen de la bibliothèque emmeans).
  4. Appliquer la rétro-transformation exponentielle exp() à ces estimateurs et à leurs bornes d’intervalles de confiance pour les ramener sur l’échelle métrique d’origine.

Dans le corps du texte académique rédigé selon les normes APA, les résultats ne doivent pas se contenter d’énoncer un laconique p-value, mais rapporter l’indicateur de façon exhaustive, par exemple : « Les temps de réaction géométriques moyens étaient significativement plus brefs dans la condition d’inhibition (Mgeom = 245.2 ms, IC à 95% [228.1, 263.5]) que dans la condition de contrôle (Mgeom = 312.8 ms, IC à 95% [291.4, 335.7]), t(48) = 4.12, p < .001, d = 0.58 ».

Pour les plans expérimentaux d’échantillonnage complexe où la distribution exacte sous-jacente ne saurait être postulée a priori avec certitude, le recours aux techniques non paramétriques de ré-échantillonnage par bootstrap (au moyen du paquet boot dans R) fournit une méthode de pointe pour estimer sans biais l’erreur-type empirique de la moyenne géométrique.

12.3 Synthèse des règles d’or de programmation dans R

Pour conclure cette fresque théorique et opérationnelle, synthétisons les trois axiomes méthodologiques et informatiques que tout analyste de données opérant dans l’environnement R devrait graver dans ses protocoles d’ingénierie statistique :

  1. Vérification systématique de la positivité du vecteur : Ne jamais lancer une instruction log() sans avoir préalablement garanti par un test logique ou une clause défensive l’absence de valeurs inférieures ou égales à zéro, sous peine de contaminer silencieusement l’arbre analytique par des NaN destructeurs.
  2. Privilégier la vectorisation native : Exploiter prioritairement le triplet d’instructions fondamentales exp(mean(log(x), na.rm = TRUE)) ou des paquets spécialisés éprouvés (psych, EnvStats) plutôt que des constructions itératives manuelles par produit cumulatif, assurant ainsi une vélocité maximale et une résilience computationnelle absolue face aux risques d’overflow arithmétique.
  3. Transparence et reproductibilité expérimentale : Documenter de manière explicite et vérifiable dans le script de recherche la proportion exacte d’observations nulles ou manquantes exclues lors de la phase d’épuration, archiver la graine aléatoire (set.seed()) lors de l’application de routines de bootstrap, et figer les versions de l’environnement de calcul R via des systèmes de gestion des dépendances comme renv afin de garantir la pérennité séculaire de vos analyses quantitatives.

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

Bland, J. M., & Altman, D. G. (1996). Statistics notes: Transformations, means, and confidence intervals. BMJ, 312(7038), 1079. https://doi.org/10.1136/bmj.312.7038.1079

Fechner, G. T. (1860). Elemente der Psychophysik. Breitkopf und Härtel.

Lenth, R. V. (2023). emmeans: Estimated Marginal Means, aka Least-Squares Means (R package version 1.8.5). Comprehensive R Archive Network. https://CRAN.R-project.org/package=emmeans

Millard, S. P. (2013). EnvStats: An R package for environmental statistics. Springer. https://doi.org/10.1007/978-1-4614-8456-1

Newell, A., & Rosenbloom, P. S. (1981). Mechanisms of skill acquisition and the law of practice. In J. R. Anderson (Ed.), Cognitive skills and their acquisition (pp. 1-55). Lawrence Erlbaum Associates.

R Core Team. (2023). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/

Revelle, W. (2023). psych: Procedures for psychological, psychometric, and personality research (R package version 2.3.6). Northwestern University. https://CRAN.R-project.org/package=psych

Signorell, A. (2023). DescTools: Tools for descriptive statistics (R package version 0.99.50). Comprehensive R Archive Network. https://CRAN.R-project.org/package=DescTools

Stevens, S. S. (1957). On the psychophysical law. Psychological Review, 64(3), 153-181. https://doi.org/10.1037/h0046162

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), 1686. https://doi.org/10.21105/joss.01686

Citer cet article

memjavad (2026, septembre 5). Comment calculer la moyenne géométrique dans R (avec exemples). Base de données de psychologie en français. https://fr.arabpsychology.com/statistics/comment-calculer-moyenne-geometrique-r-exemples/
memjavad. “Comment calculer la moyenne géométrique dans R (avec exemples).” Base de données de psychologie en français, 5 septembre 2026, https://fr.arabpsychology.com/statistics/comment-calculer-moyenne-geometrique-r-exemples/.
memjavad. “Comment calculer la moyenne géométrique dans R (avec exemples).” Base de données de psychologie en français. septembre 5, 2026. https://fr.arabpsychology.com/statistics/comment-calculer-moyenne-geometrique-r-exemples/.