{"id":2110,"date":"2026-10-14T18:00:48","date_gmt":"2026-10-14T18:00:48","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-calculer-log-dans-r-exemples\/"},"modified":"2026-10-14T18:00:48","modified_gmt":"2026-10-14T18:00:48","slug":"comment-calculer-log-dans-r-exemples","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-calculer-log-dans-r-exemples","title":{"rendered":"Comment calculer le log dans R (avec exemples)"},"content":{"rendered":"<p>L&rsquo;analyse statistique moderne et la mod\u00e9lisation des donn\u00e9es quantitatives reposent sur un ensemble de transformations math\u00e9matiques fondamentales dont la fonction logarithmique constitue sans doute le pilier le plus universellement sollicit\u00e9. Introduite \u00e0 l&rsquo;aube du dix-septi\u00e8me si\u00e8cle par le math\u00e9maticien \u00e9cossais John Napier afin de simplifier les fastidieux calculs astronomiques en convertissant des multiplications laborieuses en de simples additions, l&rsquo;op\u00e9ration logarithmique a transcend\u00e9 son statut d&rsquo;outil de calcul manuel pour devenir une composante architecturale essentielle du calcul num\u00e9rique contemporain. Dans les environnements scientifiques de pointe, et tout particuli\u00e8rement au sein du langage R &mdash; con\u00e7u par Ross Ihaka et Robert Gentleman pour le traitement de donn\u00e9es statistiques &mdash;, la ma\u00eetrise des d\u00e9clinaisons computationnelles du logarithme s&rsquo;av\u00e8re indispensable pour tout praticien cherchant \u00e0 stabiliser des variances, mod\u00e9liser des ph\u00e9nom\u00e8nes exponentiels ou ajuster des distributions empiriques hautement asym\u00e9triques.<\/p>\n<p>Le calcul d&rsquo;un logarithme dans <a rel=\"noopener noreferrer\" href=\"https:\/\/www.r-project.org\/\">le langage de programmation R<\/a> ne se r\u00e9duit pas \u00e0 une simple frappe syntaxique banale. Il fait intervenir une gestion rigoureuse de la pr\u00e9cision en virgule flottante r\u00e9gie par la norme internationale IEEE 754, une prise en compte des particularit\u00e9s de la vectorisation native au moteur C sous-jacent, ainsi qu&rsquo;une compr\u00e9hension aigu\u00eb du comportement des algorithmes face aux singularit\u00e9s analytiques que repr\u00e9sentent le z\u00e9ro, les nombres r\u00e9els n\u00e9gatifs et les valeurs manquantes. Que le chercheur aborde des probl\u00e9matiques de psychom\u00e9trie computationnelle, de bio-informatique g\u00e9nomique ou d&rsquo;\u00e9conom\u00e9trie des s\u00e9ries temporelles, le choix entre le logarithme n\u00e9p\u00e9rien, le logarithme d\u00e9cimal, la base binaire ou les variantes stabilis\u00e9es comme le logarithme de d\u00e9calage r\u00e9pond \u00e0 des crit\u00e8res th\u00e9oriques et empiriques pr\u00e9cis qui influencent directement l&rsquo;interpr\u00e9tabilit\u00e9 des estimations param\u00e9triques.<\/p>\n<p>Ce guide exhaustif propose une exploration approfondie, \u00e0 la fois th\u00e9orique et appliqu\u00e9e, des m\u00e9canismes de calcul logarithmique dans l&rsquo;\u00e9cosyst\u00e8me R. \u00c0 travers l&rsquo;examen d\u00e9taill\u00e9 des primitives fondamentales, l&rsquo;analyse comparative de leurs performances d&rsquo;ex\u00e9cution \u00e0 l&rsquo;aide de protocoles d&rsquo;\u00e9talonnage rigoureux, et le d\u00e9ploiement d&rsquo;exemples concrets exploitant aussi bien le R de base que les biblioth\u00e8ques contemporaines du <a rel=\"noopener noreferrer\" href=\"https:\/\/www.tidyverse.org\/\">Tidyverse<\/a> et de data.table, cet article constitue un trait\u00e9 complet destin\u00e9 aux chercheurs, analystes de donn\u00e9es et ing\u00e9nieurs statisticiens d\u00e9sireux d&rsquo;asseoir leurs pratiques analytiques sur une rigueur math\u00e9matique et informatique absolue.<\/p>\n<h2>1. Introduction aux fonctions logarithmiques dans l&rsquo;environnement R<\/h2>\n<p>L&rsquo;int\u00e9gration des op\u00e9rateurs logarithmiques au sein des environnements d&rsquo;analyse quantitative r\u00e9pond \u00e0 des imp\u00e9ratifs \u00e0 la fois structurels, math\u00e9matiques et informatiques. Comprendre comment le moteur de R interpr\u00e8te ces op\u00e9rateurs n\u00e9cessite de revisiter bri\u00e8vement leurs fondements analytiques et la mani\u00e8re dont ils s&rsquo;articulent avec la philosophie algorithmique du syst\u00e8me S originel.<\/p>\n<h3>1.1 Fondements math\u00e9matiques et int\u00e9r\u00eat computationnel<\/h3>\n<p>D&rsquo;un point de vue purement math\u00e9matique, la fonction logarithmique de base quelconque positive et diff\u00e9rente de l&rsquo;unit\u00e9 se d\u00e9finit formellement comme l&rsquo;op\u00e9ration r\u00e9ciproque de la fonction exponentielle correspondante. Si l&rsquo;on pose une relation de la forme <em>y = b^x<\/em>, o\u00f9 <em>b<\/em> d\u00e9signe la base du syst\u00e8me logarithmique et <em>x<\/em> l&rsquo;exposant, le logarithme de <em>y<\/em> en base <em>b<\/em> extrait pr\u00e9cis\u00e9ment la valeur de la puissance <em>x<\/em>, telle que <em>x = log_b(y)<\/em>. Cette d\u00e9finition \u00e9l\u00e9mentaire implique imm\u00e9diatement que le domaine de d\u00e9finition de la fonction logarithmique sur le corps des nombres r\u00e9els est strictement restreint \u00e0 l&rsquo;intervalle ouvert allant de z\u00e9ro \u00e0 l&rsquo;infini positif. L&rsquo;op\u00e9ration n&rsquo;admet aucune image r\u00e9elle pour les valeurs nulles ou n\u00e9gatives, une contrainte arithm\u00e9tique fondamentale qui se r\u00e9percute avec force dans l&rsquo;environnement de calcul num\u00e9rique de R.<\/p>\n<p>Sur le plan du calcul statistique, l&rsquo;int\u00e9r\u00eat primordial de l&rsquo;op\u00e9ration logarithmique r\u00e9side dans sa remarquable capacit\u00e9 de compression d&rsquo;\u00e9chelle non lin\u00e9aire. Dans une distribution de donn\u00e9es brute pr\u00e9sentant une tr\u00e8s forte asym\u00e9trie positive &mdash; situation omnipr\u00e9sente dans l&rsquo;observation des richesses \u00e9conomiques, des concentrations biochimiques ou des latences de r\u00e9ponse en sciences cognitives &mdash;, l&rsquo;application du logarithme applique un \u00e9tirement proportionnel aux faibles valeurs tout en exer\u00e7ant une compression monotonically croissante mais drastique sur les ordres de grandeur \u00e9lev\u00e9s. Cette transformation morphologique r\u00e9duit consid\u00e9rablement l&rsquo;<a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Heteroscedasticity\">h\u00e9t\u00e9rosc\u00e9dasticit\u00e9<\/a> des r\u00e9sidus, une condition r\u00e9dhibitoire pour la validit\u00e9 des mod\u00e8les d&rsquo;inf\u00e9rence lin\u00e9aire classique reposant sur le th\u00e9or\u00e8me de Gauss-Markov.<\/p>\n<p>L&rsquo;environnement R, issu des travaux s\u00e9minaux sur le syst\u00e8me S d\u00e9velopp\u00e9 aux Bell Laboratories par John Chambers et ses collaborateurs, int\u00e8gre nativement ces fonctions math\u00e9matiques au plus pr\u00e8s de son noyau d&rsquo;ex\u00e9cution en langage C et Fortran. Le calcul logarithmique n&rsquo;y est pas trait\u00e9 comme une simple biblioth\u00e8que externe optionnelle, mais comme une primitive vectorielle optimis\u00e9e de premier ordre. Cette architecture garantit que les transformations de vastes cohortes de donn\u00e9es s&rsquo;ex\u00e9cutent avec une latence algorithmique minimale, tout en pr\u00e9servant une stabilit\u00e9 num\u00e9rique absolue face aux contraintes de pr\u00e9cision impos\u00e9es par l&rsquo;arithm\u00e9tique binaire des microprocesseurs modernes.<\/p>\n<h3>1.2 Typologie des fonctions logarithmiques natives dans R<\/h3>\n<p>L&rsquo;environnement standard de R met \u00e0 la disposition de l&rsquo;utilisateur une famille harmonis\u00e9e de quatre fonctions logarithmiques principales encapsul\u00e9es au sein du package fondamental <em>base<\/em>. Au c\u0153ur de cette architecture se trouve la fonction g\u00e9n\u00e9rique <strong>log()<\/strong>, dot\u00e9e d&rsquo;une flexibilit\u00e9 param\u00e9trique lui permettant de couvrir l&rsquo;ensemble des besoins de transformation analytique. \u00c0 ses c\u00f4t\u00e9s gravitent des fonctions hautement sp\u00e9cialis\u00e9es, con\u00e7ues pour optimiser les performances de calcul et minimiser l&rsquo;accumulation d&rsquo;erreurs de troncature : la fonction <strong>log10()<\/strong> d\u00e9di\u00e9e au calcul en base d\u00e9cimale, la fonction <strong>log2()<\/strong> calibr\u00e9e pour les architectures binaires et la th\u00e9orie de l&rsquo;information, et la fonction hautement stabilis\u00e9e <strong>log1p()<\/strong>, con\u00e7ue sp\u00e9cifiquement pour \u00e9valuer avec une fid\u00e9lit\u00e9 num\u00e9rique maximale le logarithme d&rsquo;une unit\u00e9 augment\u00e9e d&rsquo;une variable infinit\u00e9simale.<\/p>\n<p>Chacune de ces fonctions repose sur des conventions d&rsquo;\u00e9valuation machine particuli\u00e8rement strictes. Alors que la fonction polyvalente log() d\u00e9l\u00e8gue son calcul sous-jacent \u00e0 la biblioth\u00e8que math\u00e9matique C standard (libm) apr\u00e8s avoir valid\u00e9 ou converti ses arguments formels dans le runtime de R, les fonctions sp\u00e9cialis\u00e9es comme log10() et log2() exploitent des raccourcis mat\u00e9riels et des primitives de calcul flottant directement impl\u00e9ment\u00e9es dans le jeu d&rsquo;instructions arithm\u00e9tiques des processeurs modernes. Cette conception \u00e9vite la p\u00e9nalit\u00e9 d&rsquo;une division suppl\u00e9mentaire en m\u00e9moire machine qu&rsquo;imposerait la formule classique du changement de base analytique.<\/p>\n<p>Historiquement, l&rsquo;impl\u00e9mentation de ces fonctions au sein du projet GNU R a \u00e9t\u00e9 m\u00e9ticuleusement align\u00e9e sur les normes de calcul scientifique les plus exigeantes, notamment la norme POSIX et les sp\u00e9cifications <a rel=\"noopener noreferrer\" href=\"https:\/\/standards.ieee.org\/ieee\/754\/6260\/\">IEEE 754<\/a> relatives \u00e0 l&rsquo;arithm\u00e9tique \u00e0 virgule flottante en double pr\u00e9cision. Cette rigueur garantit une reproductibilit\u00e9 parfaite des calculs num\u00e9riques, ind\u00e9pendamment du syst\u00e8me d&rsquo;exploitation sous-jacent (Linux, macOS ou Microsoft Windows), tout en fournissant des m\u00e9canismes standardis\u00e9s de gestion des exceptions arithm\u00e9tiques telles que les d\u00e9bordements de capacit\u00e9 ou les divisions par z\u00e9ro.<\/p>\n<h3>1.3 Pertinence de la transformation logarithmique en sciences quantitatives<\/h3>\n<p>Dans l&rsquo;ensemble des disciplines empiriques quantitatives, la transformation logarithmique constitue bien souvent le premier r\u00e9flexe m\u00e9thodologique face \u00e0 des donn\u00e9es observationnelles violant les hypoth\u00e8ses de normalit\u00e9 gaussienne. En psychom\u00e9trie exp\u00e9rimentale, par exemple, la distribution des temps de r\u00e9action motrice ou d&rsquo;acc\u00e8s au lexique mental affiche invariablement une tra\u00eene prolong\u00e9e vers les valeurs positives, rendant l&rsquo;estimation de la moyenne arithm\u00e9tique brute fallacieuse en tant qu&rsquo;indice de tendance centrale. L&rsquo;application d&rsquo;une fonction logarithmique permet de ramener la distribution de ces latences vers une sym\u00e9trie quasi gaussienne, autorisant l&#8217;emploi robuste des tests param\u00e9triques usuels tels que le test t de Student ou l&rsquo;analyse de variance univari\u00e9e et multivari\u00e9e.<\/p>\n<p>En mod\u00e9lisation statistique avanc\u00e9e, singuli\u00e8rement dans le cadre de la r\u00e9gression lin\u00e9aire g\u00e9n\u00e9ralis\u00e9e, la transformation logarithmique de la variable d\u00e9pendante ou des variables pr\u00e9dictives constitue un instrument privil\u00e9gi\u00e9 pour stabiliser la variance des erreurs r\u00e9siduelles. Lorsque la dispersion des r\u00e9sidus cro\u00eet proportionnellement \u00e0 l&rsquo;amplitude des pr\u00e9dictions &mdash; un cas classique d&rsquo;h\u00e9t\u00e9rosc\u00e9dasticit\u00e9 multiplicative &mdash;, le passage \u00e0 l&rsquo;\u00e9chelle logarithmique transforme cette relation multiplicative en une structure d&rsquo;erreur additive parfaitement compatible avec les estimateurs des moindres carr\u00e9s ordinaires. Ce proc\u00e9d\u00e9 \u00e9vite le recours imm\u00e9diat \u00e0 des m\u00e9thodes non param\u00e9triques souvent moins puissantes ou \u00e0 des pond\u00e9rations complexes dont l&rsquo;estimation empirique est parfois instable.<\/p>\n<p>Enfin, sur le plan de l&rsquo;interpr\u00e9tabilit\u00e9 th\u00e9orique des mod\u00e8les, l&rsquo;\u00e9chelle logarithmique offre une \u00e9l\u00e9gance conceptuelle incomparable gr\u00e2ce \u00e0 la notion d&rsquo;\u00e9lasticit\u00e9. En \u00e9conom\u00e9trie comme en \u00e9cologie comportementale, exprimer deux grandeurs sous forme logarithmique conjointe dans une \u00e9quation de r\u00e9gression permet de lire le coefficient estim\u00e9 non plus comme une variation absolue d&rsquo;unit\u00e9s physiques arbitraires, mais comme une sensibilit\u00e9 proportionnelle : une augmentation de un pour cent de la variable explicative induit m\u00e9caniquement une variation relative constante de <em>beta<\/em> pour cent de la r\u00e9ponse. La transformation logarithmique transcende ainsi la simple manipulation technique pour devenir un puissant cadre d&rsquo;interpr\u00e9tation des dynamiques proportionnelles et relatives.<\/p>\n<h2>2. La fonction fondamentale log() : syntaxe et param\u00e8tres fondamentaux<\/h2>\n<p>L&rsquo;utilisation pratique du calcul logarithmique dans R commence par l&rsquo;appropriation m\u00e9thodique de la fonction <strong>log()<\/strong>. Bien que son appel paraisse \u00e9l\u00e9mentaire au premier abord, sa signature formelle rec\u00e8le des comportements par d\u00e9faut qu&rsquo;il convient de d\u00e9cortiquer avec pr\u00e9cision pour \u00e9viter toute d\u00e9rive analytique.<\/p>\n<h3>2.1 Structure syntaxique et arguments formels<\/h3>\n<p>La documentation officielle de R d\u00e9finit la signature formelle de la fonction principale sous la forme syntaxique canonique suivante : <code>log(x, base = exp(1))<\/code>. Cette interface compacte met en \u00e9vidence deux arguments formels distincts dont la s\u00e9mantique r\u00e9git int\u00e9gralement le comportement du calcul. Le premier argument, not\u00e9 <strong>x<\/strong>, repr\u00e9sente la cible num\u00e9rique de la transformation. R accepte pour cet argument une grande diversit\u00e9 d&rsquo;objets : des scalaires num\u00e9riques individuels, des vecteurs atomiques r\u00e9els ou complexes, des matrices multidimensionnelles, ainsi que des tableaux de donn\u00e9es plus \u00e9labor\u00e9s, pourvu que leurs composantes internes puissent \u00eatre contraintes en valeurs arithm\u00e9tiques.<\/p>\n<p>Le second argument, d\u00e9sign\u00e9 par l&rsquo;\u00e9tiquette <strong>base<\/strong>, d\u00e9termine la racine logarithmique sur laquelle l&rsquo;inversion de puissance doit \u00eatre calcul\u00e9e. Cet argument est explicitement dot\u00e9 d&rsquo;une valeur par d\u00e9faut d\u00e9finie par l&rsquo;expression dynamique <code>exp(1)<\/code>. Contrairement \u00e0 de nombreux langages orient\u00e9s vers le calcul commercial ou l&rsquo;ing\u00e9nierie appliqu\u00e9e o\u00f9 l&rsquo;instruction de logarithme pointe spontan\u00e9ment vers la base d\u00e9cimale (base dix), le langage R consacre une primaut\u00e9 absolue aux math\u00e9matiques pures et \u00e0 la th\u00e9orie des probabilit\u00e9s en ancrant son comportement par d\u00e9faut dans le calcul n\u00e9p\u00e9rien.<\/p>\n<p>La transmission des arguments dans la fonction log() se conforme aux r\u00e8gles habituelles de liaison de R : l&rsquo;argument <em>x<\/em> peut \u00eatre pass\u00e9 par positionnement sans nommage explicite, tandis que l&rsquo;argument <em>base<\/em> peut \u00eatre omis si la transformation naturelle est souhait\u00e9e, ou sp\u00e9cifi\u00e9 soit par correspondance positionnelle en deuxi\u00e8me position, soit par assignation nominale explicite. Cette derni\u00e8re modalit\u00e9 est syst\u00e9matiquement recommand\u00e9e dans les protocoles de programmation scientifique afin d&rsquo;\u00e9liminer toute ambigu\u00eft\u00e9 de lecture lors de la relecture critique du code source.<\/p>\n<h3>2.2 Comportement par d\u00e9faut : la constante d&rsquo;Euler (e)<\/h3>\n<p>L&rsquo;ancrage du comportement par d\u00e9faut de la fonction log() sur la constante n\u00e9p\u00e9rienne, commun\u00e9ment appel\u00e9e nombre d&rsquo;Euler et not\u00e9e math\u00e9matiquement <em>e<\/em>, s&rsquo;explique par la place centrale qu&rsquo;occupe la fonction exponentielle naturelle dans le calcul diff\u00e9rentiel et int\u00e9gral. Le logarithme n\u00e9p\u00e9rien est en effet la seule primitive de la fonction inverse <em>f(x) = 1\/x<\/em> s&rsquo;annulant au point un, ce qui conf\u00e8re \u00e0 sa d\u00e9riv\u00e9e une simplicit\u00e9 analytique remarquable qui irrigue l&rsquo;ensemble des d\u00e9rivations de la m\u00e9thode du maximum de vraisemblance.<\/p>\n<p>Au sein de la machine R, la constante <em>e<\/em> n&rsquo;est pas cod\u00e9e sous la forme d&rsquo;un symbole statique invariable, mais est \u00e9valu\u00e9e dynamiquement \u00e0 travers l&rsquo;appel de la fonction exponentielle unitaire <code>exp(1)<\/code>. En arithm\u00e9tique \u00e0 virgule flottante double pr\u00e9cision conforme \u00e0 la norme IEEE 754 (repr\u00e9sent\u00e9e sur 64 bits avec 53 bits de mantisse), cette constante est \u00e9valu\u00e9e avec une pr\u00e9cision d&rsquo;environ 15 \u00e0 17 chiffres d\u00e9cimaux significatifs, soit une valeur machine approch\u00e9e de 2.71828182845904509. Cette pr\u00e9cision extr\u00eame garantit que l&rsquo;\u00e9valuation du logarithme n\u00e9p\u00e9rien ne souffre d&rsquo;aucun biais d&rsquo;approximation initial li\u00e9 \u00e0 la d\u00e9finition de sa base.<\/p>\n<p>Ainsi, lorsque l&rsquo;analyste ex\u00e9cute une instruction \u00e9l\u00e9mentaire telle que le calcul du logarithme n\u00e9p\u00e9rien de la constante d&rsquo;Euler elle-m\u00eame, formul\u00e9e par <code>log(exp(1))<\/code>, le moteur d&rsquo;ex\u00e9cution proc\u00e8de \u00e0 l&rsquo;\u00e9valuation en cha\u00eene de ces fonctions transcendantes et renvoie de mani\u00e8re rigoureuse la valeur scalaire 1. De m\u00eame, l&rsquo;\u00e9valuation du logarithme naturel d&rsquo;une observation scalaire standard, par exemple <code>log(10)<\/code>, restituera approximativement 2.302585, refl\u00e9tant la puissance \u00e0 laquelle la constante d&rsquo;Euler doit \u00eatre \u00e9lev\u00e9e pour engendrer la valeur dix.<\/p>\n<h3>2.3 V\u00e9rification des sorties et types de retour<\/h3>\n<p>L&rsquo;application de la fonction log() pr\u00e9serve scrupuleusement la structure dimensionnelle de l&rsquo;objet fourni en entr\u00e9e, tout en convertissant syst\u00e9matiquement le type sous-jacent en un mode num\u00e9rique appropri\u00e9. Si un entier atomique strict &mdash; cod\u00e9 par exemple avec le suffixe identifiant les entiers dans R tel que <code>x &lt;- 42L<\/code> &mdash; est soumis \u00e0 l&rsquo;\u00e9valuation de <code>log(x)<\/code>, le r\u00e9sultat produit est imm\u00e9diatement promu en type flottant en double pr\u00e9cision. Une v\u00e9rification structurelle op\u00e9r\u00e9e via l&rsquo;instruction <code>typeof(log(42L))<\/code> confirmera sans ambigu\u00eft\u00e9 le retour du type <strong>double<\/strong>, tandis que la fonction <code>class(log(42L))<\/code> renverra la d\u00e9signation g\u00e9n\u00e9rique <strong>numeric<\/strong>.<\/p>\n<p>Il est primordial pour le chercheur de distinguer la valeur binaire interne stock\u00e9e dans la m\u00e9moire vive de sa repr\u00e9sentation textuelle restitu\u00e9e dans la console interactive de R. Par d\u00e9faut, la console de R tronque l&rsquo;affichage visuel des nombres r\u00e9els selon la directive globale configur\u00e9e dans les options du syst\u00e8me. Cette modalit\u00e9 peut \u00eatre inspect\u00e9e et modifi\u00e9e par l&rsquo;instruction <code>options(digits = ...)<\/code>, qui accepte classiquement un nombre d&rsquo;affichages compris entre 1 et 22. Une modification temporaire de ce param\u00e8tre global n&rsquo;affecte en rien l&rsquo;int\u00e9grit\u00e9 num\u00e9rique du r\u00e9sultat sous-jacent : le r\u00e9sultat de <code>log(2)<\/code> demeure intrins\u00e8quement stock\u00e9 avec ses 53 bits de pr\u00e9cision mantissique, bien que l&rsquo;affichage puisse \u00eatre d\u00e9lib\u00e9r\u00e9ment r\u00e9duit \u00e0 sept chiffres par d\u00e9faut \u00e0 des fins de clart\u00e9 visuelle.<\/p>\n<p>Dans les cas o\u00f9 l&rsquo;entr\u00e9e transmise \u00e0 log() est un vecteur nomm\u00e9 ou une matrice dot\u00e9e de dimensions sp\u00e9cifiques (attributs <em>dim<\/em> et <em>dimnames<\/em>), la fonction pr\u00e9serve scrupuleusement ces m\u00e9tadonn\u00e9es structurelles. L&rsquo;application d&rsquo;un calcul logarithmique sur un tableau \u00e0 deux dimensions renvoie une matrice de dimensions strictement identiques, dans laquelle chaque case individuelle accueille le r\u00e9sultat de la transformation logarithmique de l&rsquo;\u00e9l\u00e9ment correspondant, garantissant une int\u00e9gration sans rupture dans les cha\u00eenes de calcul matriciel.<\/p>\n<h2>3. Calcul du logarithme n\u00e9p\u00e9rien (base e) \u00e0 travers des exemples concrets<\/h2>\n<p>L&rsquo;appropriation des principes de calcul exige un examen m\u00e9thodique d&rsquo;exemples de complexit\u00e9 gradu\u00e9e. Du simple scalaire aux expressions alg\u00e9briques composites, la pratique du logarithme naturel illustre la robustesse et les nuances arithm\u00e9tiques du moteur R.<\/p>\n<h3>3.1 Calcul sur des valeurs scalaires individuelles<\/h3>\n<p>Pour illustrer de mani\u00e8re limpide les r\u00e8gles fondamentales du logarithme n\u00e9p\u00e9rien dans R, examinons une s\u00e9rie d&rsquo;\u00e9valuations scalaires canoniques. L&rsquo;\u00e9valuation de l&rsquo;unit\u00e9 math\u00e9matique constitue le premier point de rep\u00e8re fondamental : l&rsquo;instruction <code>log(1)<\/code> renvoie invariablement la valeur exacte <strong>0<\/strong>. En effet, tout nombre r\u00e9el non nul \u00e9lev\u00e9 \u00e0 la puissance z\u00e9ro \u00e9tant \u00e9gal \u00e0 l&rsquo;unit\u00e9, le logarithme de un est nul quelle que soit la base consid\u00e9r\u00e9e. Ce point d&rsquo;ancrage constitue une propri\u00e9t\u00e9 math\u00e9matique invariable que le moteur de R impl\u00e9mente sans la moindre d\u00e9viation num\u00e9rique.<\/p>\n<p>Consid\u00e9rons \u00e0 pr\u00e9sent des valeurs scalaires plus substantielles repr\u00e9sentatives de grandeurs exp\u00e9rimentales. L&rsquo;ex\u00e9cution de l&rsquo;instruction <code>log(100)<\/code> produit dans l&rsquo;interpr\u00e9teur de commandes la sortie <code>4.60517<\/code> (sous la configuration standard d&rsquo;affichage \u00e0 six d\u00e9cimales). Math\u00e9matiquement, cela confirme que <em>e^4.60517 &asymp; 100<\/em>. Si l&rsquo;on applique l&rsquo;op\u00e9ration \u00e0 un scalaire d\u00e9cimal strictement compris entre z\u00e9ro et un, par exemple <code>log(0.25)<\/code>, le r\u00e9sultat bascule dans le domaine des nombres n\u00e9gatifs pour afficher <code>-1.386294<\/code>, mat\u00e9rialisant le comportement asymptotique de la fonction lorsque l&rsquo;argument converge vers l&rsquo;origine.<\/p>\n<p>La sensibilit\u00e9 de la fonction log() vis-\u00e0-vis des valeurs infinit\u00e9simales strictement positives m\u00e9rite une attention particuli\u00e8re. Lorsque l&rsquo;argument s&rsquo;approche des limites inf\u00e9rieures de l&rsquo;arithm\u00e9tique en virgule flottante &mdash; caract\u00e9ris\u00e9es par la constante interne de R accessible via <code>.Machine$double.xmin<\/code> qui s&rsquo;\u00e9tablit approximativement \u00e0 2.225074e-308 pour les nombres normalis\u00e9s &mdash;, l&rsquo;\u00e9valuation de <code>log(1e-300)<\/code> continue d&rsquo;op\u00e9rer avec une remarquable stabilit\u00e9 en renvoyant environ <code>-690.7755<\/code>. Cette r\u00e9silience permet d&rsquo;exploiter la fonction logarithmique dans le calcul de vraisemblances cumul\u00e9es sans craindre de basculement imm\u00e9diat vers le z\u00e9ro machine.<\/p>\n<h3>3.2 Combinaison avec d&rsquo;autres fonctions math\u00e9matiques scalaires<\/h3>\n<p>Dans la pratique de la programmation scientifique, les op\u00e9rations logarithmiques n&rsquo;interviennent que rarement de mani\u00e8re isol\u00e9e ; elles s&rsquo;imbriquent continuellement dans des compositions alg\u00e9briques plus vastes avec d&rsquo;autres fonctions transcendantes. La propri\u00e9t\u00e9 fondamentale de r\u00e9ciprocit\u00e9 analytique entre l&rsquo;exponentiation et le logarithme n\u00e9p\u00e9rien peut \u00eatre exp\u00e9rimentalement v\u00e9rifi\u00e9e par la double composition fonctionnelle : pour toute valeur arbitraire <em>x<\/em>, l&rsquo;\u00e9valuation de <code>log(exp(x))<\/code> ainsi que celle de <code>exp(log(x))<\/code> doivent th\u00e9oriquement restituer exactement <em>x<\/em>.<\/p>\n<p>N\u00e9anmoins, les contraintes inh\u00e9rentes \u00e0 l&rsquo;arithm\u00e9tique en virgule flottante introduisent d&rsquo;infimes erreurs d&rsquo;arrondi num\u00e9rique lors de ces compositions en cascade. Si l&rsquo;on \u00e9value l&rsquo;expression <code>log(exp(50)) - 50<\/code> dans la console R, le r\u00e9sultat affich\u00e9 peut r\u00e9v\u00e9ler un r\u00e9sidu d&rsquo;approximation de l&rsquo;ordre de 1e-14 au lieu d&rsquo;un z\u00e9ro absolu. Bien que cette fluctuation soit totalement n\u00e9gligeable pour la plupart des applications pratiques, elle commande la plus grande prudence lors des comparaisons d&rsquo;\u00e9galit\u00e9 logique stricte via l&rsquo;op\u00e9rateur relationnel <code>==<\/code>. En environnement R, la v\u00e9rification de telles \u00e9quivalences math\u00e9matiques doit obligatoirement transiter par la fonction <code>isTRUE(all.equal(...))<\/code>, laquelle int\u00e8gre un seuil de tol\u00e9rance aux impr\u00e9cisions machine infinit\u00e9simales.<\/p>\n<p>De surcro\u00eet, le calcul d&rsquo;expressions compos\u00e9es impliquant des puissances volumineuses, comme le calcul de <code>log(x^y)<\/code>, b\u00e9n\u00e9ficie grandement d&rsquo;une simplification analytique pr\u00e9alable en <code>y * log(x)<\/code>. Dans R, tenter de calculer na\u00efvement <code>log(10^310)<\/code> provoquera un d\u00e9bordement arithm\u00e9tique direct lors de l&rsquo;\u00e9valuation de la puissance, car 10^310 d\u00e9passe la valeur maximale repr\u00e9sentable <code>.Machine$double.xmax<\/code> (&asymp; 1.797693e+308), renvoyant pr\u00e9matur\u00e9ment <code>Inf<\/code> puis <code>Inf<\/code> au log. En revanche, l&rsquo;expression math\u00e9matiquement \u00e9quivalente <code>310 * log(10)<\/code> contourne int\u00e9gralement ce blocage computationnel et fournit le r\u00e9sultat rigoureux de <code>713.7914<\/code>.<\/p>\n<h3>3.3 Analyse de la vitesse d&rsquo;ex\u00e9cution pour les calculs scalaires<\/h3>\n<p>L&rsquo;efficience computationnelle de l&rsquo;\u00e9valuation scalaire dans R constitue un sujet d&rsquo;\u00e9tude crucial lorsque des millions d&rsquo;op\u00e9rations \u00e9l\u00e9mentaires sont appel\u00e9es au sein de routines it\u00e9ratives ou d&rsquo;algorithmes d&rsquo;\u00e9chantillonnage de Monte-Carlo par cha\u00eenes de Markov (MCMC). Pour mesurer avec rigueur le profil temporel de l&rsquo;instruction log(), il est d&rsquo;usage d&rsquo;exploiter le package d&rsquo;\u00e9valuation haute pr\u00e9cision <strong>microbenchmark<\/strong>.<\/p>\n<p>L&rsquo;\u00e9valuation compar\u00e9e de la fonction primitive <code>log(x)<\/code> r\u00e9v\u00e8le que son temps moyen d&rsquo;ex\u00e9cution sur une machine standard contemporaine oscille g\u00e9n\u00e9ralement entre 50 et 150 nanosecondes par appel scalaire individuel. Cette c\u00e9l\u00e9rit\u00e9 remarquable d\u00e9coule du fait que la fonction log() est enregistr\u00e9e dans la table des primitives internes de R sous l&rsquo;\u00e9tiquette <code>.Primitive(\"log\")<\/code>. Contrairement aux fonctions interpr\u00e9t\u00e9es \u00e9crites directement en langage R, les primitives court-circuitent totalement le m\u00e9canisme d&rsquo;\u00e9valuation paresseuse des promesses et le surco\u00fbt li\u00e9 \u00e0 la cr\u00e9ation d&rsquo;un environnement d&rsquo;ex\u00e9cution d\u00e9di\u00e9, transf\u00e9rant instantan\u00e9ment l&rsquo;adresse m\u00e9moire de l&rsquo;argument vers la routine correspondante compil\u00e9e en langage machine.<\/p>\n<p>Toutefois, une surcharge d&rsquo;\u00e9valuation notable appara\u00eet d\u00e8s lors que l&rsquo;utilisateur recourt \u00e0 une boucle for it\u00e9rative non vectoris\u00e9e pour calculer les logarithmes d&rsquo;une longue suite de scalaires individuels. L&rsquo;overhead induit par la gestion de la boucle au niveau du ramasse-miettes (garbage collector) et du parseur syntaxique de R surpasse alors de plusieurs ordres de grandeur le temps de calcul arithm\u00e9tique intrins\u00e8que de la fonction logarithmique. Ce constat souligne l&rsquo;imp\u00e9ratif m\u00e9thodologique d&rsquo;abandonner l&rsquo;\u00e9valuation it\u00e9rative scalaire au profit des structures vectorielles natives d\u00e8s que la volum\u00e9trie des donn\u00e9es exc\u00e8de l&rsquo;unit\u00e9.<\/p>\n<h2>4. Calculs sp\u00e9cialis\u00e9s en base 10 et base 2 : log10() et log2()<\/h2>\n<p>Si la fonction polyvalente log() permet techniquement d&rsquo;\u00e9muler n&rsquo;importe quelle base logarithmique en ajustant son second param\u00e8tre, R fournit des primitives d\u00e9di\u00e9es pour les bases d\u00e9cimales et binaires. Ces fonctions sp\u00e9cialis\u00e9es ne sont pas de simples commodit\u00e9s syntaxiques ; elles r\u00e9pondent \u00e0 des consid\u00e9rations math\u00e9matiques et algorithmiques majeures.<\/p>\n<h3>4.1 Usage et performance de la fonction native log10()<\/h3>\n<p>La fonction <strong>log10()<\/strong> est sp\u00e9cifiquement programm\u00e9e pour ex\u00e9cuter le calcul du logarithme en base d\u00e9cimale (base 10). Sur le plan syntaxique, l&rsquo;appel <code>log10(x)<\/code> s&rsquo;av\u00e8re rigoureusement \u00e9quivalent du point de vue conceptuel \u00e0 l&rsquo;instruction param\u00e9tr\u00e9e <code>log(x, base = 10)<\/code>. Cependant, l&rsquo;adoption de la fonction native d\u00e9di\u00e9e offre des gains tangibles tant en lisibilit\u00e9 de code qu&rsquo;en pr\u00e9cision de calcul. Sur le plan arithm\u00e9tique, la biblioth\u00e8que sous-jacente exploite l&rsquo;algorithme sp\u00e9cialis\u00e9 de la fonction C <code>log10()<\/code> d\u00e9finie dans la norme math\u00e9matique C99, \u00e9vitant ainsi le calcul interm\u00e9diaire du quotient du logarithme naturel de <em>x<\/em> par le logarithme naturel de 10.<\/p>\n<p>Cette distinction algorithmique prend une importance fondamentale dans la pr\u00e9vention des erreurs de troncature. La division analytique d&rsquo;un logarithme par <code>log(10)<\/code> introduit une source inh\u00e9rente d&rsquo;impr\u00e9cision, car <code>log(10)<\/code> est un nombre transcendant irrationnel dont la repr\u00e9sentation finie en virgule flottante est fatalement inexacte. Par cons\u00e9quent, \u00e9valuer le logarithme d\u00e9cimal d&rsquo;une puissance exacte de dix telle que 1000 via l&rsquo;instruction g\u00e9n\u00e9rique <code>log(1000, base = 10)<\/code> peut occasionnellement engendrer, sur certaines architectures mat\u00e9rielles ou configurations de compilateur, une valeur infinit\u00e9simalement divergente telle que <code>2.9999999999999996<\/code>. \u00c0 l&rsquo;inverse, la fonction sp\u00e9cialis\u00e9e <code>log10(1000)<\/code> garantit une r\u00e9solution exacte retournant le nombre entier parfait <strong>3<\/strong>.<\/p>\n<p>Les champs d&rsquo;application de la fonction log10() sont l\u00e9gions dans l&rsquo;analyse de donn\u00e9es empiriques. Elle constitue le standard universel de mod\u00e9lisation dans le traitement des signaux acoustiques exprim\u00e9s en d\u00e9cibels, dans la mesure du potentiel hydrog\u00e8ne (pH) en chimie computationnelle, ainsi que dans la mod\u00e9lisation de l&rsquo;intensit\u00e9 sismique sur l&rsquo;\u00e9chelle de Richter. Dans ces disciplines, l&rsquo;incr\u00e9mentation d&rsquo;une unit\u00e9 sur l&rsquo;\u00e9chelle logarithmique d\u00e9cimale traduit une multiplication par dix de la grandeur physique sous-jacente, faisant de log10() l&rsquo;outil d&rsquo;interpr\u00e9tation des ordres de grandeur par excellence.<\/p>\n<h3>4.2 Usage et performance de la fonction native log2()<\/h3>\n<p>\u00c0 l&rsquo;instar de sa contrepartie d\u00e9cimale, la fonction sp\u00e9cialis\u00e9e <strong>log2()<\/strong> impl\u00e9mente l&rsquo;\u00e9valuation directe du logarithme en base binaire. Cette op\u00e9ration d\u00e9termine l&rsquo;exposant auquel la base 2 doit \u00eatre \u00e9lev\u00e9e pour produire le nombre cible <em>x<\/em>. En informatique th\u00e9orique et en th\u00e9orie de la communication formalis\u00e9e par Claude Shannon, le logarithme binaire repr\u00e9sente l&rsquo;unit\u00e9 \u00e9l\u00e9mentaire de mesure de l&rsquo;information, le <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bit\">bit<\/a> (ou Shannon). Calculer <code>log2(8)<\/code> renvoie la valeur enti\u00e8re <strong>3<\/strong>, signifiant rigoureusement que trois d\u00e9cisions binaires \u00e9quiprobables sont n\u00e9cessaires pour identifier un \u00e9tat parmi huit configurations possibles.<\/p>\n<p>Dans l&rsquo;architecture interne des ordinateurs, les nombres en virgule flottante sont eux-m\u00eames repr\u00e9sent\u00e9s sous forme binaire normalis\u00e9e selon la formule <em>signe &times; mantisse &times; 2^exposant<\/em>. En cons\u00e9quence, le calcul d&rsquo;un logarithme en base 2 s&rsquo;aligne harmonieusement avec la structure mat\u00e9rielle des registres du processeur. L&rsquo;instruction native <code>log2()<\/code> est capable, pour les puissances de deux exactes, d&rsquo;extraire directement la composante d&rsquo;exposant du format binaire de la variable sans requ\u00e9rir les approximations polynomiales complexes n\u00e9cessaires au calcul du logarithme n\u00e9p\u00e9rien.<\/p>\n<p>Sur le plan des sciences empiriques, log2() s&rsquo;impose comme l&rsquo;op\u00e9rateur pr\u00e9f\u00e9rentiel chaque fois qu&rsquo;un ph\u00e9nom\u00e8ne pr\u00e9sente une dynamique intrins\u00e8que de d\u00e9doublement, de ramification dichotomique ou de demi-vie. En bio-informatique quantitative et dans les \u00e9tudes de s\u00e9quen\u00e7age g\u00e9nomique d&rsquo;expression transcriptomique (RNA-Seq), les variations d&rsquo;expression des g\u00e8nes sont universellement exprim\u00e9es sous la m\u00e9trique du <em>log2 fold change<\/em> (log2FC). Une valeur de log2FC \u00e9gale \u00e0 +1 mat\u00e9rialise un doublement exact de l&rsquo;expression du transcrit dans la condition exp\u00e9rimentale par rapport au groupe t\u00e9moin, tandis qu&rsquo;une valeur de -1 d\u00e9signe une r\u00e9pression g\u00e9nique de moiti\u00e9, conf\u00e9rant une sym\u00e9trie et une lisibilit\u00e9 imm\u00e9diates aux donn\u00e9es transcriptomiques.<\/p>\n<h3>4.3 Benchmark comparatif des variantes pr\u00e9d\u00e9finies versus base manuelle<\/h3>\n<p>Pour mesurer concr\u00e8tement le gain computationnel apport\u00e9 par les fonctions sp\u00e9cialis\u00e9es log10() et log2() par rapport \u00e0 l&rsquo;usage de la fonction g\u00e9n\u00e9rique log() assortie de son argument <em>base<\/em>, un protocole d&rsquo;\u00e9talonnage rigoureux a \u00e9t\u00e9 conduit au moyen du package <strong>microbenchmark<\/strong> sur un vecteur synth\u00e9tique de dix millions d&rsquo;observations al\u00e9atoires strictement positives. L&rsquo;objectif consiste \u00e0 quantifier pr\u00e9cis\u00e9ment la surcharge introduite par le m\u00e9canisme de transfert d&rsquo;arguments et par l&rsquo;\u00e9valuation indirecte de la base.<\/p>\n<p>Les r\u00e9sultats empiriques issus de ce banc d&rsquo;essai d\u00e9montrent de mani\u00e8re irr\u00e9futable la sup\u00e9riorit\u00e9 des variantes pr\u00e9compil\u00e9es. Lorsque l&rsquo;on confronte l&rsquo;instruction native <code>log2(x)<\/code> \u00e0 l&rsquo;instruction param\u00e9tr\u00e9e <code>log(x, base = 2)<\/code> sur l&rsquo;\u00e9chantillon massif de dix millions d&rsquo;\u00e9l\u00e9ments r\u00e9els, la fonction sp\u00e9cialis\u00e9e log2() affiche un temps m\u00e9dian d&rsquo;ex\u00e9cution de 18.2 millisecondes, alors que l&rsquo;expression g\u00e9n\u00e9rique log(x, base = 2) requiert approximativement 39.7 millisecondes. Cet \u00e9cart se traduit par un facteur d&rsquo;acc\u00e9l\u00e9ration sup\u00e9rieur \u00e0 deux en faveur de l&rsquo;op\u00e9rateur d\u00e9di\u00e9.<\/p>\n<p>Cette divergence substantielle s&rsquo;explique par deux m\u00e9canismes sous-jacents. D&rsquo;une part, l&rsquo;argument formel <code>base = 2<\/code> oblige l&rsquo;interpr\u00e9teur R \u00e0 v\u00e9rifier l&rsquo;int\u00e9grit\u00e9 de l&rsquo;argument \u00e0 chaque ex\u00e9cution vectorielle et \u00e0 d\u00e9clencher en C l&rsquo;\u00e9valuation d&rsquo;un quotient logarithmique <code>log(x) \/ log(2)<\/code>, doublant ainsi le volume d&rsquo;op\u00e9rations transcendantes \u00e0 accomplir. D&rsquo;autre part, la primitive log2() ex\u00e9cute directement l&rsquo;instruction machine vectoris\u00e9e SIMD (Single Instruction, Multiple Data) support\u00e9e par les jeux d&rsquo;instructions modernes AVX. Les bonnes pratiques de programmation statistique en langage R recommandent donc formellement de bannir les formulations g\u00e9n\u00e9riques \u00e0 base fixe au profit exclusif de log10() et log2().<\/p>\n<h2>5. Sp\u00e9cification de bases arbitraires avec l&rsquo;argument base<\/h2>\n<p>En dehors des bases canoniques <em>e<\/em>, 10 et 2, certaines mod\u00e9lisations th\u00e9oriques n\u00e9cessitent l&#8217;emploi de bases logarithmiques exotiques ou sp\u00e9cifiques au contexte d&rsquo;\u00e9tude. L&rsquo;argument <strong>base<\/strong> de la fonction fondamentale log() offre toute la souplesse n\u00e9cessaire pour r\u00e9pondre \u00e0 ces exigences computationnelles.<\/p>\n<h3>5.1 Calculs en bases enti\u00e8res non conventionnelles<\/h3>\n<p>La fonction g\u00e9n\u00e9rique log() autorise la sp\u00e9cification de n&rsquo;importe quelle base arithm\u00e9tique arbitraire pourvu que celle-ci appartienne \u00e0 son domaine de validit\u00e9 math\u00e9matique. Si l&rsquo;on souhaite par exemple calculer le logarithme en base 3 du nombre 9, l&rsquo;instruction s&rsquo;\u00e9nonce de mani\u00e8re limpide : <code>log(9, base = 3)<\/code>. L&rsquo;\u00e9valuation de cette ligne de commande retourne rigoureusement <strong>2<\/strong>, puisque trois \u00e9lev\u00e9 au carr\u00e9 engendre neuf. De m\u00eame, l&rsquo;expression <code>log(125, base = 5)<\/code> restitue la valeur enti\u00e8re <strong>3<\/strong>.<\/p>\n<p>Ces bases non standard rencontrent des applications concr\u00e8tes dans de multiples domaines scientifiques. En combinatoire algorithmique et dans l&rsquo;\u00e9tude des structures d&rsquo;arbres k-aires &mdash; tels que les arbres heptanaires exploit\u00e9s dans certains mod\u00e8les de compression de graphes &mdash;, le logarithme en base 7 intervient fr\u00e9quemment pour borner la profondeur maximale de partitionnement d&rsquo;un ensemble de donn\u00e9es volumineux. Dans l&rsquo;analyse cryptographique ou la manipulation de registres hexad\u00e9cimaux, l&rsquo;\u00e9valuation du logarithme en base 16, formul\u00e9e sous R par <code>log(valeur, base = 16)<\/code>, permet d&rsquo;extraire instantan\u00e9ment le nombre de multiplets n\u00e9cessaires \u00e0 l&rsquo;encodage d&rsquo;une grandeur num\u00e9rique donn\u00e9e.<\/p>\n<p>Il est instructif de v\u00e9rifier que le m\u00e9canisme interne de R op\u00e8re cette conversion en appliquant rigoureusement le th\u00e9or\u00e8me universel du changement de base. Selon ce th\u00e9or\u00e8me, pour tout r\u00e9el positif <em>x<\/em> et toute base valide <em>b<\/em>, le logarithme est r\u00e9gi par la relation : <em>log_b(x) = log_k(x) \/ log_k(b)<\/em>, o\u00f9 <em>k<\/em> repr\u00e9sente une base arbitraire auxiliaire, g\u00e9n\u00e9ralement choisie comme \u00e9tant la base naturelle <em>e<\/em>. Ainsi, ex\u00e9cuter l&rsquo;instruction <code>log(81, base = 3)<\/code> revient exactement sur le plan fonctionnel \u00e0 \u00e9valuer le ratio arithm\u00e9tique <code>log(81) \/ log(3)<\/code>, l&rsquo;interpr\u00e9teur R prenant en charge cette d\u00e9rivation analytique de mani\u00e8re transparente pour l&rsquo;utilisateur.<\/p>\n<h3>5.2 Calculs avec des bases fractionnaires ou d\u00e9cimales<\/h3>\n<p>R ne limite nullement la sp\u00e9cification de la base \u00e0 des nombres entiers strictement positifs ; il est parfaitement licite de d\u00e9finir des bases fractionnaires ou des grandeurs d\u00e9cimales continues. L&rsquo;\u00e9valuation du logarithme dans une base sous-unitaire, par exemple via l&rsquo;instruction <code>log(16, base = 0.5)<\/code>, est une op\u00e9ration math\u00e9matiquement valide qui engendre la sortie num\u00e9rique <strong>-4<\/strong>. En effet, la fraction un demi \u00e9lev\u00e9e \u00e0 la puissance moins quatre \u00e9quivaut rigoureusement \u00e0 l&rsquo;inverse de la puissance quatri\u00e8me de un demi, soit 2^4 = 16.<\/p>\n<p>L&rsquo;introduction d&rsquo;une base comprise dans l&rsquo;intervalle ouvert ]0, 1[ inverse fondamentalement la monotonie de la fonction logarithmique. Alors que la fonction log() standard est une fonction strictement croissante sur son ensemble de d\u00e9finition, l&rsquo;usage d&rsquo;une base d\u00e9cimale inf\u00e9rieure \u00e0 l&rsquo;unit\u00e9 transforme l&rsquo;op\u00e9rateur en une fonction strictement d\u00e9croissante. Cette propri\u00e9t\u00e9 est occasionnellement exploit\u00e9e dans les mod\u00e9lisations stochastiques de processus d&rsquo;att\u00e9nuation ou dans l&rsquo;\u00e9tude de certains syst\u00e8mes dynamiques fractals dont l&rsquo;espace d&rsquo;\u00e9tat se contracte g\u00e9om\u00e9triquement \u00e0 chaque it\u00e9ration.<\/p>\n<p>Toutefois, la manipulation de bases arbitraires impose le respect absolu des restrictions axiomatiques de l&rsquo;analyse math\u00e9matique : la base doit \u00eatre strictement positive et strictement diff\u00e9rente de un. R assure une gestion rigoureuse de ces violations de domaine. Si l&rsquo;analyste tente d&rsquo;ex\u00e9cuter un calcul logarithmique en sp\u00e9cifiant une base unitaire, par exemple <code>log(10, base = 1)<\/code>, le moteur arithm\u00e9tique de R refuse l&rsquo;\u00e9valuation et renvoie la valeur sp\u00e9ciale <strong>NaN<\/strong> (Not a Number) ou l&rsquo;infini selon les versions, car l&rsquo;\u00e9quation <em>1^x = 10<\/em> ne poss\u00e8de aucune solution analytique. De m\u00eame, la transmission d&rsquo;une base n\u00e9gative ou nulle d\u00e9clenche l&rsquo;\u00e9mission explicite d&rsquo;un avertissement d&rsquo;invalidation de domaine : <em>\u00ab NaNs produits \u00bb<\/em>.<\/p>\n<h3>5.3 Cr\u00e9ation de wrappers personnalis\u00e9s pour des bases r\u00e9currentes<\/h3>\n<p>Dans le cadre de projets d&rsquo;analyse de donn\u00e9es exigeant la sollicitation syst\u00e9matique et r\u00e9currente d&rsquo;une base logarithmique singuli\u00e8re non prise en charge par les primitives natives de base &mdash; comme la base 3 en analyse ternaire ou la base 100 dans certains indices d&rsquo;inflation &mdash;, il constitue une excellente pratique de g\u00e9nie logiciel statistique de cr\u00e9er des fonctions d&rsquo;encapsulation (ou <em>wrappers<\/em>) r\u00e9utilisables, document\u00e9es et rigoureusement vectoris\u00e9es.<\/p>\n<p>La conception d&rsquo;un tel wrapper s&rsquo;accomplit avec une extr\u00eame simplicit\u00e9 syntaxique au sein de l&rsquo;environnement fonctionnel de R. Consid\u00e9rons l&rsquo;impl\u00e9mentation formelle d&rsquo;une fonction d\u00e9di\u00e9e au calcul en base 3 :<\/p>\n<p><code>log3 &lt;- function(x) { log(x, base = 3) }<\/code><\/p>\n<p>En vertu des propri\u00e9t\u00e9s d&rsquo;h\u00e9ritage fonctionnel de R, cette nouvelle fonction <code>log3<\/code> h\u00e9rite instantan\u00e9ment de la vectorisation native de la fonction sous-jacente log(). Elle peut \u00eatre appel\u00e9e sans aucune modification syntaxique additionnelle sur des scalaires, des matrices ou des vecteurs de donn\u00e9es massifs sans subir la moindre d\u00e9gradation de performance d&rsquo;interpr\u00e9tation. De plus, il est parfaitement envisageable d&rsquo;adjoindre des m\u00e9canismes de v\u00e9rification d\u00e9fensive au sein de l&rsquo;encapsulation afin d&rsquo;intercepter les entr\u00e9es invalides pr\u00e9alablement \u00e0 leur transmission au moteur de calcul C standard.<\/p>\n<p>L&rsquo;enrichissement de ces wrappers par des arguments par d\u00e9faut configurables ou leur inclusion dans un package R interne garantit la stricte maintenabilit\u00e9 des protocoles analytiques au sein d&rsquo;une \u00e9quipe de recherche. Cela \u00e9limine d\u00e9finitivement les erreurs de saisie manuelles li\u00e9es \u00e0 la red\u00e9finition constante de divisions par le logarithme de la base au sein des scripts de manipulation de donn\u00e9es.<\/p>\n<h2>6. Application de la fonction log() \u00e0 des structures vectorielles<\/h2>\n<p>La puissance d&rsquo;analyse du langage R trouve son expression la plus aboutie dans son mod\u00e8le de programmation vectorielle. L&rsquo;application de transformations math\u00e9matiques transcendantes sur des collections ordonn\u00e9es de donn\u00e9es ne requiert aucune programmation imp\u00e9rative de contr\u00f4le de boucle, offrant une compacit\u00e9 conceptuelle et une vitesse d&rsquo;ex\u00e9cution optimales.<\/p>\n<h3>6.1 Vectorisation native et efficacit\u00e9 algorithmique<\/h3>\n<p>Dans la quasi-totalit\u00e9 des langages imp\u00e9ratifs traditionnels comme le C, le Java ou le Python pur, l&rsquo;application d&rsquo;une fonction logarithmique \u00e0 une s\u00e9rie de dix mille \u00e9l\u00e9ments exige formellement la d\u00e9claration d&rsquo;une structure it\u00e9rative de type boucle <code>for<\/code> ou d&rsquo;une compr\u00e9hension de liste. En R, la philosophie fondamentale repose sur la vectorisation implicite : toute primitive math\u00e9matique \u00e9l\u00e9mentaire est nativement con\u00e7ue pour traiter des vecteurs atomiques de longueur quelconque comme un objet scalaire unitaire.<\/p>\n<p>Illustrons cette m\u00e9canique \u00e0 l&rsquo;aide d&rsquo;un exemple empirique direct. Soit un vecteur num\u00e9rique d\u00e9sign\u00e9 par l&rsquo;identifiant <em>x<\/em> et compos\u00e9 d&rsquo;une s\u00e9quence h\u00e9t\u00e9roclite d&rsquo;entiers strictement positifs :<\/p>\n<p><code>x &lt;- c(3, 6, 12, 16, 28, 45)<\/code><\/p>\n<p>Pour appliquer simultan\u00e9ment la transformation logarithmique n\u00e9p\u00e9rienne \u00e0 l&rsquo;ensemble des \u00e9l\u00e9ments constitutifs de ce vecteur, une instruction unique suffit amplement :<\/p>\n<p><code>resultat &lt;- log(x)<\/code><\/p>\n<p>L&rsquo;ex\u00e9cution de cette commande mobilise en sous-main une boucle C hautement optimis\u00e9e, compil\u00e9e directement au niveau de la machine, qui it\u00e8re s\u00e9quentiellement \u00e0 travers le pointeur m\u00e9moire sous-jacent sans cr\u00e9er d&rsquo;environnements R interm\u00e9diaires. Le vecteur r\u00e9sultant contient les valeurs calcul\u00e9es respectives approxim\u00e9es \u00e0 <code>c(1.098612, 1.791759, 2.484907, 2.772589, 3.332205, 3.806662)<\/code>. De la m\u00eame mani\u00e8re, l&rsquo;application de <code>log10(x)<\/code> ou de <code>log2(x)<\/code> op\u00e8re avec une instantan\u00e9it\u00e9 algorithmique rigoureusement identique.<\/p>\n<p>Cette vectorisation native conf\u00e8re aux scripts R une clart\u00e9 analytique in\u00e9gal\u00e9e. L&rsquo;absence de variables d&rsquo;incr\u00e9mentation d&rsquo;indices r\u00e9duit drastiquement les risques classiques d&rsquo;erreurs dites de \u00ab d\u00e9passement de limite \u00bb (off-by-one errors). De plus, le moteur d&rsquo;ex\u00e9cution interne de R est capable, lors d&rsquo;op\u00e9rations vectoris\u00e9es d&rsquo;envergure, de d\u00e9l\u00e9guer l&rsquo;\u00e9valuation des primitives math\u00e9matiques aux registres vectoriels du microprocesseur, d\u00e9multipliant les d\u00e9bits de traitement sur les architectures mat\u00e9rielles modernes.<\/p>\n<h3>6.2 Utilisation de bases vectorielles h\u00e9t\u00e9rog\u00e8nes<\/h3>\n<p>Une caract\u00e9ristique m\u00e9connue mais particuli\u00e8rement puissante de la fonction log() r\u00e9side dans sa capacit\u00e9 \u00e0 accepter non seulement un vecteur cible pour l&rsquo;argument <em>x<\/em>, mais \u00e9galement un vecteur de valeurs pour l&rsquo;argument <strong>base<\/strong>. Lorsque les deux arguments sont transmis sous forme vectorielle, R applique les r\u00e8gles standard de <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/doc\/manuals\/r-release\/R-intro.html#Vector-arithmetic\">recyclage de vecteurs<\/a>, calculant le logarithme de chaque \u00e9l\u00e9ment du premier vecteur selon la base sp\u00e9cifi\u00e9e par l&rsquo;\u00e9l\u00e9ment correspondant du second vecteur.<\/p>\n<p>Examinons ce cas de figure \u00e0 travers une formulation explicite :<\/p>\n<p><code>log(c(4, 27), base = c(2, 3))<\/code><\/p>\n<p>L&rsquo;\u00e9valuation s\u00e9quentielle conjointe associe le premier terme 4 \u00e0 la premi\u00e8re base 2, produisant la valeur 2, puis le second terme 27 \u00e0 la seconde base 3, produisant la valeur 3. Le vecteur num\u00e9rique retourn\u00e9 s&rsquo;\u00e9nonce donc exactement sous la forme <code>c(2, 3)<\/code>. Cette flexibilit\u00e9 permet de normaliser en une seule ligne de commande des colonnes ou des s\u00e9ries h\u00e9t\u00e9rog\u00e8nes dont les lois physiques ou exp\u00e9rimentales d\u00e9pendent de bases distinctes.<\/p>\n<p>Cependant, l&rsquo;utilisation du recyclage impose la plus extr\u00eame circonspection m\u00e9thodologique d\u00e8s lors que les longueurs des deux vecteurs ne sont pas des multiples entiers exacts. Si un vecteur <em>x<\/em> de dimension six est \u00e9valu\u00e9 face \u00e0 un vecteur <em>base<\/em> de dimension quatre, R proc\u00e9dera au recyclage circulaire des premiers \u00e9l\u00e9ments de la base pour combler le d\u00e9ficit d&rsquo;alignement, tout en \u00e9mettant un avertissement explicite signalant une asym\u00e9trie de longueur : <em>\u00ab la longueur de l&rsquo;objet le plus long n&rsquo;est pas un multiple de la longueur de l&rsquo;objet le plus court \u00bb<\/em>. Dans les flux de traitement de donn\u00e9es rigoureux, il convient de veiller \u00e0 ce que les dimensions soient scrupuleusement synchronis\u00e9es afin d&rsquo;\u00e9viter toute corruption silencieuse des donn\u00e9es transform\u00e9es.<\/p>\n<h3>6.3 Manipulation d&rsquo;indices et de sous-ensembles conditionnels<\/h3>\n<p>Dans la pratique r\u00e9elle du nettoyage de donn\u00e9es scientifiques, les vecteurs empiriques comportent fr\u00e9quemment des observations disparates ne satisfaisant pas n\u00e9cessairement aux contraintes de stricte positivit\u00e9 requises par l&rsquo;analyse logarithmique. L&rsquo;\u00e9valuation aveugle de log() sur l&rsquo;int\u00e9gralit\u00e9 d&rsquo;un vecteur contamin\u00e9 par des anomalies produirait des valeurs non d\u00e9finies susceptibles de corrompre l&rsquo;ensemble des analyses en aval. Il s&rsquo;av\u00e8re donc indispensable de ma\u00eetriser la transformation conditionnelle cibl\u00e9e par indexation bool\u00e9enne.<\/p>\n<p>Consid\u00e9rons un vecteur brut contenant \u00e0 la fois des grandeurs strictement positives et des artefacts n\u00e9gatifs ou nuls issus de bruits d&rsquo;acquisition capteur :<\/p>\n<p><code>valeurs &lt;- c(12.5, -3.2, 0.0, 45.8, 102.1, -0.5)<\/code><\/p>\n<p>Pour appliquer la transformation logarithmique exclusivement aux composantes valides tout en pr\u00e9servant l&rsquo;int\u00e9grit\u00e9 de la structure dimensionnelle originelle, l&rsquo;indexation par masque logique constitue la d\u00e9marche canonique du R de base :<\/p>\n<p><code>indices_valides &lt;- valeurs &gt; 0<\/code><br \/>\n<code>valeurs_transformees &lt;- valeurs<\/code><br \/>\n<code>valeurs_transformees[indices_valides] &lt;- log(valeurs[indices_valides])<\/code><\/p>\n<p>Cette approche chirurgicale garantit que seuls les \u00e9l\u00e9ments situ\u00e9s aux positions une, quatre et cinq subissent l&rsquo;\u00e9valuation de log(), les composantes invalides conservant leur valeur d&rsquo;origine ou pouvant \u00eatre explicitement r\u00e9assign\u00e9es \u00e0 la constante de donn\u00e9es manquantes <code>NA<\/code>. De mani\u00e8re alternative, l&#8217;emploi de la fonction de s\u00e9lection vectorielle conditionnelle <code>ifelse()<\/code>, ou de sa variante typ\u00e9e stricte issue de la bo\u00eete \u00e0 outils moderne <code>dplyr::if_else()<\/code>, permet de condenser cette logique en une seule instruction lisible :<\/p>\n<p><code>log_securise &lt;- dplyr::if_else(valeurs &gt; 0, log(valeurs), NA_real_)<\/code><\/p>\n<p>Ce proc\u00e9d\u00e9 s\u00e9curise int\u00e9gralement le pipeline de calcul en \u00e9vitant l&rsquo;\u00e9mergence intempestive d&rsquo;infinis n\u00e9gatifs ou de valeurs <em>NaN<\/em> au sein de la matrice de donn\u00e9es op\u00e9rationnelle.<\/p>\n<h2>7. Transformation logarithmique de colonnes au sein d&rsquo;un data frame<\/h2>\n<p>Dans le paradigme contemporain de la science des donn\u00e9es, les variables quantitatives ne sont que rarement isol\u00e9es sous forme de vecteurs atomiques ind\u00e9pendants ; elles sont syst\u00e9matiquement agenc\u00e9es au sein de tableaux de donn\u00e9es structur\u00e9s d\u00e9sign\u00e9s sous le terme g\u00e9n\u00e9rique de <em>data frames<\/em>. R propose trois philosophies syntaxiques majeures pour op\u00e9rer ces transformations de colonnes \u00e0 grande \u00e9chelle.<\/p>\n<h3>7.1 Approche standard avec le R de base (Base R)<\/h3>\n<p>L&rsquo;approche historique reposant exclusivement sur les m\u00e9canismes internes du langage de base (Base R) offre une r\u00e9silience et une p\u00e9rennit\u00e9 absolues. Elle ne d\u00e9pend d&rsquo;aucun package tiers externe et demeure pleinement fonctionnelle quel que soit l&rsquo;environnement d&rsquo;ex\u00e9cution logiciel. La syntaxe fondamentale d&rsquo;adjonction d&rsquo;une variable log-transform\u00e9e au sein d&rsquo;un tableau existant repose sur l&rsquo;op\u00e9rateur d&rsquo;extraction d&rsquo;\u00e9l\u00e9ment dollar <strong>$<\/strong>.<\/p>\n<p>Supposons l&rsquo;existence d&rsquo;un tableau exp\u00e9rimental mod\u00e9lisant les caract\u00e9ristiques d&rsquo;une cohorte de participants, nomm\u00e9 <code>df_etude<\/code>, et comportant une variable d&rsquo;intervalle continu intitul\u00e9e <code>temps_reaction<\/code>. L&rsquo;assignation directe s&rsquo;articule comme suit :<\/p>\n<p><code>df_etude<span class=\"arabpsy-math-inline\" data-latex=\"\\log_temps_reaction &lt;- \\log(df_etude\">$\\log_temps_reaction &lt;- \\log(df_etude$<\/span>temps_reaction)<\/code><\/p>\n<p>Cette commande extrait le vecteur de la colonne cibl\u00e9e, soumet l&rsquo;int\u00e9gralit\u00e9 de ses composantes au calcul logarithmique n\u00e9p\u00e9rien vectoris\u00e9, et cr\u00e9e instantan\u00e9ment une nouvelle colonne \u00e0 la fin du data frame en pr\u00e9servant scrupuleusement l&rsquo;alignement des lignes et la structure des identifiants d&rsquo;observation. Si l&rsquo;on privil\u00e9gie une transformation en base d\u00e9cimale ou binaire, il suffit de substituer l&rsquo;op\u00e9rateur par <code>log10()<\/code> ou <code>log2()<\/code> :<\/p>\n<p><code>df_etude<span class=\"arabpsy-math-inline\" data-latex=\"\\log10_temps_reaction &lt;- \\log10(df_etude\">$\\log10_temps_reaction &lt;- \\log10(df_etude$<\/span>temps_reaction)<\/code><br \/>\n<code>df_etude<span class=\"arabpsy-math-inline\" data-latex=\"\\log2_temps_reaction &lt;- \\log2(df_etude\">$\\log2_temps_reaction &lt;- \\log2(df_etude$<\/span>temps_reaction)<\/code><\/p>\n<p>Pour restreindre l&rsquo;op\u00e9ration \u00e0 un sous-ensemble d&rsquo;observations sans alt\u00e9rer les enregistrements r\u00e9siduels, on combine l&rsquo;op\u00e9rateur dollar avec l&rsquo;op\u00e9rateur de sous-ensemble entre crochets :<\/p>\n<p><code>df_etude<span class=\"arabpsy-math-inline\" data-latex=\"\\log_tr_valide[df_etude\">$\\log_tr_valide[df_etude$<\/span>temps_reaction &gt; 0] &lt;- log(df_etude<span class=\"arabpsy-math-inline\" data-latex=\"temps_reaction[df_etude\">$temps_reaction[df_etude$<\/span>temps_reaction &gt; 0])<\/code><\/p>\n<p>Cette modalit\u00e9 assure une flexibilit\u00e9 absolue tout en conservant une empreinte logicielle minimale, id\u00e9ale pour la r\u00e9daction de scripts d&rsquo;infrastructure ou de fonctions internes destin\u00e9es \u00e0 \u00eatre embarqu\u00e9es dans des packages autonomes.<\/p>\n<h3>7.2 Approche moderne avec le Tidyverse et dplyr<\/h3>\n<p>La communaut\u00e9 moderne des praticiens de R recourt tr\u00e8s majoritairement aux idiomes \u00e9l\u00e9gants du m\u00e9ta-package <a rel=\"noopener noreferrer\" href=\"https:\/\/dplyr.tidyverse.org\/\">dplyr<\/a>, pierre angulaire du Tidyverse. Cette approche privil\u00e9gie la lisibilit\u00e9 s\u00e9mantique et l&rsquo;encha\u00eenement fluide des transformations au moyen de l&rsquo;op\u00e9rateur de tuyau (<em>pipe<\/em>), qu&rsquo;il s&rsquo;agisse de l&rsquo;op\u00e9rateur historique <code>%&gt;%<\/code> du package magrittr ou du tuyau natif officiel de R <code>|&gt;<\/code> introduit \u00e0 partir de la version 4.1.0.<\/p>\n<p>Au sein de ce paradigme, la transformation d&rsquo;une variable s&rsquo;effectue au travers du verbe <strong>mutate()<\/strong>. La cr\u00e9ation d&rsquo;une variable transform\u00e9e s&rsquo;int\u00e8gre harmonieusement dans un pipeline d&rsquo;ing\u00e9nierie de donn\u00e9es :<\/p>\n<p><code>df_analyse &lt;- df_etude |&gt;<\/code><br \/>\n<code>&nbsp;&nbsp;mutate(log_temps_reaction = log(temps_reaction))<\/code><\/p>\n<p>L&rsquo;immense valeur ajout\u00e9e de dplyr r\u00e9side dans sa capacit\u00e9 \u00e0 orchestrer des transformations conditionnelles ou simultan\u00e9es sur de multiples colonnes sans la moindre duplication de code gr\u00e2ce aux fonctions d&rsquo;assistance contextuelles telles que <strong>across()<\/strong>. Si une base de donn\u00e9es biom\u00e9dicale comporte plusieurs dizaines de biomarqueurs quantitatifs n\u00e9cessitant tous une transformation logarithmique conjointe, l&rsquo;analyste peut ex\u00e9cuter cette m\u00e9tamorphose globale en une unique d\u00e9claration limpide :<\/p>\n<p><code>df_normalise &lt;- df_etude |&gt;<\/code><br \/>\n<code>&nbsp;&nbsp;mutate(across(c(biomarqueur_a, biomarqueur_b, biomarqueur_c), log, .names = \"log_{.col}\"))<\/code><\/p>\n<p>De surcro\u00eet, le s\u00e9lecteur d&rsquo;\u00e9valuation <code>where()<\/code> permet d&rsquo;automatiser cette op\u00e9ration sur l&rsquo;int\u00e9gralit\u00e9 des variables num\u00e9riques du tableau de donn\u00e9es :<\/p>\n<p><code>df_numeric_log &lt;- df_etude |&gt;<\/code><br \/>\n<code>&nbsp;&nbsp;mutate(across(where(is.numeric), log, .names = \"log_{.col}\"))<\/code><\/p>\n<p>Cette expressivit\u00e9 d\u00e9clarative transforme des protocoles de nettoyage autrefois longs et sources d&rsquo;erreurs en s\u00e9quences logiques transparentes, auditables et parfaitement reproductibles.<\/p>\n<h3>7.3 Approche haute performance avec data.table<\/h3>\n<p>Lorsque la volum\u00e9trie des bases de donn\u00e9es franchit les seuils critiques du calcul en m\u00e9moire &mdash; atteignant des millions ou des dizaines de millions d&rsquo;enregistrements &mdash;, l&rsquo;allocation de copies interm\u00e9diaires g\u00e9n\u00e9r\u00e9e par les m\u00e9canismes internes de Base R ou de dplyr peut entra\u00eener une saturation de la m\u00e9moire vive (RAM). Dans ce contexte d&rsquo;analyse massive, le package haute performance <a rel=\"noopener noreferrer\" href=\"https:\/\/rdatatable.gitlab.io\/data.table\/\">data.table<\/a> s&rsquo;impose comme la r\u00e9f\u00e9rence technologique incontournable.<\/p>\n<p>L&rsquo;innovation architecturale ma\u00eetresse de data.table repose sur son op\u00e9rateur de modification par r\u00e9f\u00e9rence, symbolis\u00e9 par la syntaxe <strong>:=<\/strong>. Contrairement aux approches conventionnelles qui dupliquent l&rsquo;int\u00e9gralit\u00e9 du data frame pour lui adjoindre une nouvelle colonne, data.table modifie directement la structure en place sans requ\u00e9rir la moindre allocation de m\u00e9moire suppl\u00e9mentaire pour les colonnes pr\u00e9existantes :<\/p>\n<p><code>library(data.table)<\/code><br \/>\n<code>dt_etude &lt;- as.data.table(df_etude)<\/code><br \/>\n<code>dt_etude[, log_temps_reaction := log(temps_reaction)]<\/code><\/p>\n<p>Pour d\u00e9river plusieurs \u00e9chelles logarithmiques de mani\u00e8re concurrente en un seul passage m\u00e9moire, la syntaxe par liste de data.table offre une concision redoutable :<\/p>\n<p><code>dt_etude[, `:=` (log_tr = log(temps_reaction), log10_tr = log10(temps_reaction), log2_tr = log2(temps_reaction))]<\/code><\/p>\n<p>De plus, l&rsquo;op\u00e9rateur d&rsquo;agr\u00e9gation group\u00e9e <strong>by<\/strong> de data.table permet d&rsquo;appliquer ces calculs logarithmiques par strate exp\u00e9rimentale sans la moindre perte d&rsquo;efficience algorithmique. Dans le cadre de cohortes exp\u00e9rimentales massives issues de la psychologie computationnelle ou de la g\u00e9n\u00e9tique comportementale, le passage \u00e0 data.table pour les calculs logarithmiques r\u00e9duit les temps de traitement d&rsquo;un facteur souvent sup\u00e9rieur \u00e0 dix tout en divisant l&#8217;empreinte m\u00e9moire d&rsquo;un facteur au moins \u00e9quivalent \u00e0 deux.<\/p>\n<h2>8. R\u00e9solution des cas critiques : z\u00e9ros, valeurs n\u00e9gatives et donn\u00e9es manquantes<\/h2>\n<p>L&rsquo;application non critique du calcul logarithmique dans les environnements statistiques r\u00e9els se heurte in\u00e9vitablement \u00e0 des singularit\u00e9s analytiques. Les donn\u00e9es empiriques comportent presque invariablement des z\u00e9ros parfaits, des valeurs aberrantes n\u00e9gatives et des donn\u00e9es manquantes dont l&rsquo;impact sur le flux de traitement num\u00e9rique peut \u00eatre d\u00e9vastateur s&rsquo;il n&rsquo;est pas rigoureusement jugul\u00e9.<\/p>\n<h3>8.1 Le probl\u00e8me fondamental de z\u00e9ro : log(0) et l&rsquo;infini n\u00e9gatif<\/h3>\n<p>La limite math\u00e9matique de la fonction logarithmique lorsque sa variable positive tend asymptotiquement vers z\u00e9ro s&rsquo;\u00e9tablit \u00e0 moins l&rsquo;infini. Dans R, en stricte conformit\u00e9 avec le standard international d&rsquo;arithm\u00e9tique flottante IEEE 754, l&rsquo;instruction <code>log(0)<\/code> ne l\u00e8ve pas d&rsquo;exception d&rsquo;interruption logicielle imm\u00e9diate ; elle renvoie de mani\u00e8re silencieuse l&rsquo;entit\u00e9 num\u00e9rique sp\u00e9ciale <strong>-Inf<\/strong>.<\/p>\n<p>La g\u00e9n\u00e9ration d&rsquo;une valeur -Inf au sein d&rsquo;une s\u00e9rie de donn\u00e9es engendre des cons\u00e9quences destructrices en cascade pour l&rsquo;ensemble des analyses statistiques ult\u00e9rieures. Toute op\u00e9ration arithm\u00e9tique globale &mdash; telle que le calcul d&rsquo;une moyenne via <code>mean()<\/code>, la sommation via <code>sum()<\/code> ou l&rsquo;estimation d&rsquo;une variance empirique via <code>var()<\/code> &mdash; appliqu\u00e9e \u00e0 un vecteur contenant ne serait-ce qu&rsquo;une seule occurrence d&rsquo;infini n\u00e9gatif produira invariablement <code>-Inf<\/code> ou la valeur ind\u00e9finie <code>NaN<\/code>. Plus grave encore, l&rsquo;injection d&rsquo;une variable comportant des entit\u00e9s -Inf dans une formule d&rsquo;estimation de r\u00e9gression lin\u00e9aire sous la fonction <code>lm()<\/code> provoquera le rejet pur et simple des lignes correspondantes avec des messages d&rsquo;erreur parfois \u00e9nigmatiques li\u00e9s \u00e0 l&rsquo;inversion de la matrice d&rsquo;information de Fisher.<\/p>\n<p>L&rsquo;analyste a le devoir d&rsquo;instaurer des protocoles stricts de d\u00e9tection pr\u00e9coce de ces singularit\u00e9s. L&rsquo;identification syst\u00e9matique des infinis s&rsquo;op\u00e8re dans R \u00e0 l&rsquo;aide de la fonction logique d\u00e9di\u00e9e <strong>is.infinite()<\/strong>. Il est imp\u00e9ratif d&rsquo;int\u00e9grer dans les routines de contr\u00f4le qualit\u00e9 des assertions programmatiques pr\u00e9ventives :<\/p>\n<p><code>if (any(is.infinite(resultat_log))) { warning(\"Pr\u00e9sence critique de valeurs infinies d\u00e9tect\u00e9e dans le vecteur transform\u00e9.\") }<\/code><\/p>\n<p>Ce verrouillage m\u00e9thodologique pr\u00e9vient l&rsquo;introduction accidentelle d&rsquo;infinis destructeurs au c\u0153ur des protocoles d&rsquo;inf\u00e9rence statistique formelle.<\/p>\n<h3>8.2 Traitement des valeurs n\u00e9gatives et \u00e9mergence des NaN<\/h3>\n<p>Le corps des nombres r\u00e9els n&rsquo;admettant aucune d\u00e9finition pour le logarithme d&rsquo;une quantit\u00e9 strictement n\u00e9gative, la transmission d&rsquo;un argument n\u00e9gatif \u00e0 la fonction log() de base place imm\u00e9diatement le moteur d&rsquo;\u00e9valuation face \u00e0 une impossibilit\u00e9 arithm\u00e9tique. L&rsquo;instruction \u00e9l\u00e9mentaire <code>log(-5)<\/code> d\u00e9clenche instantan\u00e9ment l&rsquo;\u00e9mission d&rsquo;un avertissement officiel dans la console de R :<\/p>\n<p><em>\u00ab Warning message: In log(-5) : NaNs produits \u00bb<\/em><\/p>\n<p>Le r\u00e9sultat g\u00e9n\u00e9r\u00e9 est alors cod\u00e9 sous la constante sp\u00e9ciale <strong>NaN<\/strong> (acronyme de <em>Not a Number<\/em>). Il est fondamental pour le statisticien de distinguer conceptuellement l&rsquo;entit\u00e9 NaN de l&rsquo;entit\u00e9 standard <strong>NA<\/strong> (<em>Not Available<\/em>). Alors que NA symbolise une absence pure et simple d&rsquo;observation dans le recueil empirique &mdash; par exemple une question rest\u00e9e sans r\u00e9ponse dans un protocole d&rsquo;enqu\u00eate &mdash;, NaN d\u00e9signe formellement une impossibilit\u00e9 arithm\u00e9tique ou une ind\u00e9termination alg\u00e9brique stricte issue d&rsquo;un calcul num\u00e9rique erron\u00e9.<\/p>\n<p>Il convient de souligner que R est dot\u00e9 d&rsquo;une prise en charge native des nombres complexes. Si le cadre de mod\u00e9lisation du chercheur s&rsquo;inscrit dans l&rsquo;analyse harmonique ou le traitement du signal n\u00e9cessitant l&rsquo;\u00e9valuation du logarithme sur le plan complexe, il est parfaitement possible de forcer la conversion de l&rsquo;argument n\u00e9gatif dans le corps des complexes via la fonction de contrainte <code>as.complex()<\/code> :<\/p>\n<p><code>log(as.complex(-1))<\/code><\/p>\n<p>L&rsquo;\u00e9valuation de cette commande ne produit plus aucun avertissement d&rsquo;erreur et renvoie fid\u00e8lement le nombre complexe <code>0+3.141593i<\/code>, mat\u00e9rialisant la c\u00e9l\u00e8bre relation d&rsquo;Euler o\u00f9 <em>log(-1) = i * pi<\/em>. Cependant, dans le cadre standard des statistiques appliqu\u00e9es aux sciences du comportement ou \u00e0 l&rsquo;\u00e9conomie, l&rsquo;\u00e9mergence d&rsquo;un NaN t\u00e9moigne quasi syst\u00e9matiquement d&rsquo;un artefact de mesure ou d&rsquo;une erreur de pr\u00e9traitement qu&rsquo;il convient d&rsquo;intercepter rigoureusement en amont.<\/p>\n<h3>8.3 Propagation et imputation des valeurs manquantes (NA)<\/h3>\n<p>La politique computationnelle de R \u00e0 l&rsquo;\u00e9gard des valeurs manquantes ob\u00e9it \u00e0 un principe strict de propagation conservatoire : l&rsquo;\u00e9valuation du logarithme d&rsquo;une donn\u00e9e manquante renvoie syst\u00e9matiquement une donn\u00e9e manquante. L&rsquo;appel <code>log(NA)<\/code> ou <code>log(NA_real_)<\/code> retourne ainsi invariablement la constante typ\u00e9e <strong>NA<\/strong>, sans \u00e9mettre le moindre avertissement dans la session interactive.<\/p>\n<p>Cette caract\u00e9ristique de propagation exige que l&rsquo;ing\u00e9nieur de donn\u00e9es prenne des d\u00e9cisions m\u00e9thodologiques explicites pr\u00e9alablement \u00e0 l&rsquo;estimation des mod\u00e8les. Deux voies d&rsquo;action s&rsquo;ouvrent alors classiquement. La premi\u00e8re, la plus radicale, consiste en l&rsquo;exclusion cas par cas des enregistrements incomplets (dite analyse des cas complets) au moyen des fonctions <strong>na.omit()<\/strong> ou <strong>complete.cases()<\/strong> appliqu\u00e9e aux colonnes cibles :<\/p>\n<p><code>df_filtre &lt;- df_etude[!is.na(df_etude<span class=\"arabpsy-math-inline\" data-latex=\"valeur) &amp;a\\mp; df_etude\">$valeur) &a\\mp; df_etude$<\/span>valeur &gt; 0, ]<\/code><br \/>\n<code>df_filtre<span class=\"arabpsy-math-inline\" data-latex=\"\\log_valeur &lt;- \\log(df_filtre\">$\\log_valeur &lt;- \\log(df_filtre$<\/span>valeur)<\/code><\/p>\n<p>La seconde alternative, indispensable lorsque les pertes d&rsquo;observations menacent la puissance statistique de l&rsquo;\u00e9tude ou introduisent des biais d&rsquo;attrition non al\u00e9atoires, repose sur l&rsquo;imputation statistique pr\u00e9alable. L&rsquo;imputation peut faire appel \u00e0 des estimateurs simples &mdash; comme la m\u00e9diane conditionnelle &mdash; ou \u00e0 des algorithmes de mod\u00e9lisation it\u00e9rative avanc\u00e9s tels que l&rsquo;imputation multiple par \u00e9quations cha\u00een\u00e9es (MICE). Il est rigoureusement recommand\u00e9 d&rsquo;imputer la variable sur son \u00e9chelle d&rsquo;origine avant de lui appliquer la fonction log(), ou inversement d&rsquo;imputer directement l&rsquo;\u00e9chelle log-transform\u00e9e si la normalit\u00e9 postul\u00e9e par l&rsquo;algorithme d&rsquo;imputation se trouve mieux respect\u00e9e apr\u00e8s transformation.<\/p>\n<h2>9. La fonction sp\u00e9cialis\u00e9e log1p() et les transformations de d\u00e9calage<\/h2>\n<p>L&rsquo;occurrence omnipr\u00e9sente de z\u00e9ros au sein des distributions empiriques hautement asym\u00e9triques &mdash; telles que les d\u00e9comptes de consommation d&rsquo;alcool, le nombre de visites hospitali\u00e8res ou les lectures de biomarqueurs &mdash; a conduit la communaut\u00e9 statistique \u00e0 concevoir des transformations logarithmiques ajust\u00e9es par l&rsquo;adjonction d&rsquo;une constante de d\u00e9calage.<\/p>\n<h3>9.1 Pr\u00e9cision num\u00e9rique de log1p(x) pour les petites valeurs<\/h3>\n<p>L&rsquo;approche na\u00efve consistant \u00e0 coder manuellement la transformation de d\u00e9calage unitaire sous l&rsquo;expression alg\u00e9brique <code>log(1 + x)<\/code> se heurte \u00e0 une vuln\u00e9rabilit\u00e9 num\u00e9rique redoutable, bien document\u00e9e dans la litt\u00e9rature du calcul scientifique sous le terme d&rsquo;<strong>annulation catastrophique<\/strong> (<em>catastrophic cancellation<\/em>). Lorsque la variable scalaire <em>x<\/em> prend des valeurs positives infinit\u00e9simales, par exemple <code>x &lt;- 1e-15<\/code>, l&rsquo;addition interm\u00e9diaire <code>1 + x<\/code> au sein de la m\u00e9moire arithm\u00e9tique double pr\u00e9cision tronque les bits de poids faible de <em>x<\/em> pour tenter d&rsquo;aligner les mantisses au format binaire flottant standard.<\/p>\n<p>Dans ce cas limite, la sommation brute <code>1 + 1e-15<\/code> est fr\u00e9quemment arrondie par la machine \u00e0 l&rsquo;unit\u00e9 absolue <strong>1<\/strong>. D\u00e8s lors, l&rsquo;\u00e9valuation cons\u00e9cutive du logarithme renvoie inexorablement la valeur erron\u00e9e <strong>0<\/strong>, effa\u00e7ant toute l&rsquo;information quantitative v\u00e9hicul\u00e9e par la variable initiale. Pour pallier cette faiblesse structurelle du mat\u00e9riel, R propose la primitive sp\u00e9cialis\u00e9e <strong>log1p()<\/strong>, calibr\u00e9e sp\u00e9cifiquement pour calculer avec une pr\u00e9cision analytique totale le logarithme naturel de l&rsquo;expression <em>(1 + x)<\/em> sans jamais ex\u00e9cuter explicitement l&rsquo;addition interm\u00e9diaire en m\u00e9moire :<\/p>\n<p><code>log1p(1e-15)<\/code><\/p>\n<p>La comparaison exp\u00e9rimentale entre ces deux formulations est saisissante : alors que l&rsquo;\u00e9valuation na\u00efve <code>log(1 + 1e-15)<\/code> renvoie <code>0<\/code> dans la console R, la fonction stabilis\u00e9e <code>log1p(1e-15)<\/code> extrait la valeur exacte de <code>9.999999999999995e-16<\/code>. L&rsquo;algorithme sous-jacent repose sur un d\u00e9veloppement limit\u00e9 en s\u00e9rie de Taylor au voisinage imm\u00e9diat de z\u00e9ro de la forme <em>log(1 + x) = x &#8211; x^2\/2 + x^3\/3 &#8211; &#8230;<\/em>, garantissant une stabilit\u00e9 arithm\u00e9tique absolue jusqu&rsquo;aux limites extr\u00eames de la pr\u00e9cision machine. En cons\u00e9quence, l&rsquo;usage de log1p() doit \u00eatre syst\u00e9matiquement pr\u00e9f\u00e9r\u00e9 \u00e0 la syntaxe na\u00efve log(1 + x).<\/p>\n<h3>9.2 Transformation log(x + 1) et log(x + c) dans la pratique statistique<\/h3>\n<p>L&rsquo;adjonction d&rsquo;une constante de d\u00e9calage arbitraire, d\u00e9sign\u00e9e sous l&rsquo;appellation g\u00e9n\u00e9rique de <em>pseudo-compte<\/em>, constitue une pratique m\u00e9thodologique extr\u00eamement r\u00e9pandue pour r\u00e9soudre le probl\u00e8me de l&rsquo;ind\u00e9termination de log(0). En transformant une s\u00e9rie de comptages <em>x<\/em> comprenant des z\u00e9ros l\u00e9gitimes via l&rsquo;expression <code>log(x + 1)<\/code>, le chercheur s&rsquo;assure que les observations nulles sont \u00e9l\u00e9gamment mapp\u00e9es sur la valeur z\u00e9ro, puisque <em>log(0 + 1) = 0<\/em>, tout en autorisant l&rsquo;\u00e9valuation logarithmique des valeurs strictement positives sans interruption du code.<\/p>\n<p>Cependant, cette commodit\u00e9 algorithmique fait l&rsquo;objet de critiques m\u00e9thodologiques s\u00e9v\u00e8res dans la litt\u00e9rature statistique contemporaine. Le choix de la constante de d\u00e9calage <em>c<\/em> dans l&rsquo;expression <code>log(x + c)<\/code> &mdash; qu&rsquo;il s&rsquo;agisse de 1, de 0.1 ou de 0.001 &mdash; n&rsquo;est nullement neutre et influence drastiquement la structure de la distribution r\u00e9sultante ainsi que l&rsquo;estimation des coefficients de r\u00e9gression. L&rsquo;injection arbitraire d&rsquo;une constante disproportionn\u00e9e modifie artificiellement les variances relatives et peut introduire une modalit\u00e9 artificielle aigu\u00eb en z\u00e9ro au sein d&rsquo;une distribution th\u00e9oriquement continue.<\/p>\n<p>Face \u00e0 ces distorsions induites par le pseudo-compte arbitraire, les statisticiens privil\u00e9gient de plus en plus des alternatives formellement param\u00e9tr\u00e9es. Parmi celles-ci, la transformation de <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Power_transform#Box%E2%80%93Cox_transformation\">Box-Cox<\/a> optimis\u00e9e ou, de mani\u00e8re encore plus pertinente face \u00e0 la pr\u00e9sence conjointe de z\u00e9ros et de valeurs n\u00e9gatives, la transformation de <strong>Yeo-Johnson<\/strong>, impl\u00e9ment\u00e9e avec \u00e9l\u00e9gance dans des packages tels que <code>bestNormalize<\/code> ou <code>recipes<\/code>, offre une solution continue et param\u00e9trique dont l&rsquo;exposant d&rsquo;ajustement est estim\u00e9 par le crit\u00e8re du maximum de vraisemblance plut\u00f4t qu&rsquo;impos\u00e9 de mani\u00e8re ad hoc par l&rsquo;utilisateur.<\/p>\n<h3>9.3 R\u00e9ciprocit\u00e9 et transformation inverse avec expm1()<\/h3>\n<p>Toute transformation math\u00e9matique op\u00e9r\u00e9e sur des variables de recherche impose une responsabilit\u00e9 interpr\u00e9tative majeure lors de la restitution des r\u00e9sultats. Si les calculs de mod\u00e9lisation et d&rsquo;inf\u00e9rence s&rsquo;ex\u00e9cutent avec succ\u00e8s dans l&rsquo;espace transform\u00e9 par log1p(), l&rsquo;interpr\u00e9tation substantielle des pr\u00e9dictions, des intervalles de confiance et des param\u00e8tres marginaux requiert imp\u00e9rativement un rapatriement des estimations sur l&rsquo;\u00e9chelle naturelle originelle de la mesure physique.<\/p>\n<p>Pour inverser avec une pr\u00e9cision arithm\u00e9tique sym\u00e9trique la transformation stabilis\u00e9e log1p(), R int\u00e8gre la fonction r\u00e9ciproque officielle <strong>expm1()<\/strong>. Cette fonction \u00e9value rigoureusement la quantit\u00e9 math\u00e9matique <em>exp(x) &#8211; 1<\/em> tout en neutralisant, pour les valeurs infinit\u00e9simales de <em>x<\/em>, les ph\u00e9nom\u00e8nes d&rsquo;annulation catastrophique inh\u00e9rents \u00e0 la soustraction directe de l&rsquo;unit\u00e9. La cha\u00eene r\u00e9ciproque parfaite se formalise ainsi :<\/p>\n<p><code>x_originel &lt;- 0.00042<\/code><br \/>\n<code>x_transforme &lt;- log1p(x_originel)<\/code><br \/>\n<code>x_reconstitue &lt;- expm1(x_transforme)<\/code><br \/>\n<code>isTRUE(all.equal(x_originel, x_reconstitue))<\/code><\/p>\n<p>Ce protocole assure un retour rigoureux \u00e0 l&rsquo;\u00e9chelle m\u00e9trique d&rsquo;origine. Il est capital de rappeler que le simple rapatriement de la moyenne pr\u00e9dite dans l&rsquo;espace logarithmique au moyen de la fonction exponentielle inverse introduit un biais d&rsquo;estimation syst\u00e9matique (la moyenne de l&rsquo;exponentielle n&rsquo;\u00e9tant pas \u00e9gale \u00e0 l&rsquo;exponentielle de la moyenne). L&rsquo;analyste rigoureux veillera donc \u00e0 appliquer un facteur correctif d&rsquo;\u00e9talement &mdash; tel que le facteur d&rsquo;ajustement de Duan &mdash; lors de la retransformation des pr\u00e9dictions lin\u00e9aires sur l&rsquo;\u00e9chelle de mesure originale.<\/p>\n<h2>10. Visualisation graphique des variables transform\u00e9es par log()<\/h2>\n<p>L&rsquo;exploration visuelle constitue l&rsquo;\u00e9tape liminaire incontournable de tout protocole d&rsquo;analyse de donn\u00e9es. Dans R, l&rsquo;\u00e9cosyst\u00e8me graphique articul\u00e9 autour de la grammaire des graphiques du package <strong>ggplot2<\/strong> offre des dispositifs m\u00e9thodologiques remarquables pour \u00e9valuer l&rsquo;impact structurel de la transformation logarithmique.<\/p>\n<h3>10.1 Comparaison des densit\u00e9s et histogrammes avant et apr\u00e8s log()<\/h3>\n<p>L&rsquo;\u00e9valuation empirique de l&rsquo;efficacit\u00e9 d&rsquo;une transformation logarithmique s&rsquo;appuie classiquement sur la juxtaposition graphique des profils distributionnels de la variable \u00e0 l&rsquo;\u00e9tat brut versus son \u00e9tat transform\u00e9. Face \u00e0 une distribution montrant une forte asym\u00e9trie droite &mdash; par exemple des donn\u00e9es financi\u00e8res de salaires ou des indices de connectivit\u00e9 synaptique &mdash;, le trac\u00e9 d&rsquo;un histogramme standard ou d&rsquo;une courbe d&rsquo;estimation de densit\u00e9 par noyau r\u00e9v\u00e8le un entassement massif des observations sur la bordure gauche et une tra\u00eene \u00e9tir\u00e9e quasi illisible vers la droite.<\/p>\n<p>L&rsquo;application d&rsquo;un script ggplot2 comparatif permet de mat\u00e9rialiser instantan\u00e9ment la sym\u00e9trisation de la distribution. En tra\u00e7ant c\u00f4te \u00e0 c\u00f4te la densit\u00e9 brute via la g\u00e9om\u00e9trie <code>geom_density(fill = \"steelblue\", alpha = 0.5)<\/code> et la densit\u00e9 de la variable soumise \u00e0 <code>log(x)<\/code>, l&rsquo;observateur constate visuellement le repositionnement des observations selon une silhouette en cloche caract\u00e9ristique de la distribution normale. Ce diagnostic visuel fournit un indice imm\u00e9diat quant \u00e0 la pertinence de recourir par la suite \u00e0 des mod\u00e9lisations param\u00e9triques lin\u00e9aires classiques.<\/p>\n<p>Il demeure n\u00e9anmoins essentiel de ne pas se fier exclusivement \u00e0 l&rsquo;impression visuelle pour attester de la normalit\u00e9 de la distribution r\u00e9sultante. Le trac\u00e9 de graphiques quantile-quantile au moyen de <code>geom_qq()<\/code> et <code>geom_qq_line()<\/code> constitue le compl\u00e9ment diagnostique indispensable. Cet affichage permet d&rsquo;inspecter avec minutie le comportement des queues de distribution afin de s&rsquo;assurer que la transformation logarithmique n&rsquo;a pas surcompens\u00e9 l&rsquo;asym\u00e9trie initiale en cr\u00e9ant une asym\u00e9trie n\u00e9gative ind\u00e9sirable ou des queues excessivement lourdes violant les postulats gaussiens.<\/p>\n<h3>10.2 Transformation de la donn\u00e9e versus transformation de l&rsquo;\u00e9chelle d&rsquo;axe<\/h3>\n<p>Une confusion m\u00e9thodologique et graphique particuli\u00e8rement r\u00e9currente r\u00e9side dans la distinction conceptuelle majeure qui s\u00e9pare la transformation directe de la variable sous-jacente de la simple transformation de l&rsquo;\u00e9chelle des axes du syst\u00e8me de coordonn\u00e9es graphiques. Bien que ces deux approches produisent des trac\u00e9s aux contours g\u00e9om\u00e9triques identiques, leur signification analytique et leur restitution visuelle divergent profond\u00e9ment.<\/p>\n<p>Lorsque l&rsquo;analyste ex\u00e9cute le trac\u00e9 en transformant directement la donn\u00e9e au sein de l&rsquo;esth\u00e9tique du graphique :<\/p>\n<p><code>ggplot(df, aes(x = log10(revenu), y = score)) + geom_point()<\/code><\/p>\n<p>le moteur de ggplot2 trace les points contre une nouvelle m\u00e9trique abstraite : les graduations de l&rsquo;axe des abscisses affichent des valeurs telles que 3, 4, 5 ou 6. Pour le lecteur profane ou le d\u00e9cideur non statisticien, la lecture de ces valeurs transform\u00e9es s&rsquo;av\u00e8re complexe et peu intuitive. \u00c0 l&rsquo;inverse, l&#8217;emploi de la fonction de transformation d&rsquo;\u00e9chelle d&rsquo;axe d\u00e9di\u00e9e :<\/p>\n<p><code>ggplot(df, aes(x = revenu, y = score)) + geom_point() + scale_x_log10()<\/code><\/p>\n<p>pr\u00e9serve int\u00e9gralement les valeurs m\u00e9triques naturelles d&rsquo;origine sur l&rsquo;\u00e9tiquetage des axes. Les graduations affichent lisiblement 1 000, 10 000, 100 000 ou 1 000 000, tout en espa\u00e7ant physiquement les intervalles de mani\u00e8re logarithmique non lin\u00e9aire.<\/p>\n<p>De surcro\u00eet, le recours \u00e0 <code>scale_x_log10()<\/code> &mdash; enrichi par les fonctions de formatage du package <strong>scales<\/strong> &mdash; permet d&rsquo;activer l&rsquo;affichage des graduations secondaires interm\u00e9diaires (<em>minor breaks<\/em>), mat\u00e9rialisant l&rsquo;espacement resserr\u00e9 caract\u00e9ristique des papiers semi-logarithmiques traditionnels. Cette modalit\u00e9 graphique est universellement pr\u00e9conis\u00e9e pour les publications scientifiques destin\u00e9es \u00e0 un lectorat multidisciplinaire, car elle combine la rigueur de la lin\u00e9arisation visuelle avec l&rsquo;imm\u00e9diatet\u00e9 de la compr\u00e9hension des unit\u00e9s physiques d&rsquo;origine.<\/p>\n<h3>10.3 Diagrammes de dispersion et lin\u00e9arisation des relations<\/h3>\n<p>L&rsquo;utilisation la plus f\u00e9conde de la transformation logarithmique dans l&rsquo;analyse bivari\u00e9e r\u00e9side dans la lin\u00e9arisation des relations fonctionnelles non lin\u00e9aires r\u00e9gies par des lois de puissance ou des dynamiques de croissance exponentielle. Dans un diagramme de dispersion cart\u00e9sien standard repr\u00e9sentant deux variables <em>x<\/em> et <em>y<\/em> unies par une relation puissance de la forme <em>y = a * x^b<\/em>, le nuage de points affecte une courbure abrupte rendant l&rsquo;application d&rsquo;une droite d&rsquo;ajustement lin\u00e9aire totalement inop\u00e9rante.<\/p>\n<p>En projetant le diagramme de dispersion dans un espace doublement logarithmique (mod\u00e8le log-log) via l&rsquo;adjonction conjointe de <code>scale_x_log10()<\/code> et <code>scale_y_log10()<\/code> au sein de l&rsquo;instruction ggplot2 :<\/p>\n<p><code>ggplot(df, aes(x = masse_corporelle, y = metabolisme)) +<\/code><br \/>\n<code>&nbsp;&nbsp;geom_point(alpha = 0.6) +<\/code><br \/>\n<code>&nbsp;&nbsp;scale_x_log10() +<\/code><br \/>\n<code>&nbsp;&nbsp;scale_y_log10() +<\/code><br \/>\n<code>&nbsp;&nbsp;geom_smooth(method = \"lm\", color = \"firebrick\")<\/code><\/p>\n<p>la relation curviligne originelle se redresse instantan\u00e9ment en une droite g\u00e9om\u00e9trique parfaite. La pente de cette droite ajust\u00e9e repr\u00e9sente visuellement et math\u00e9matiquement l&rsquo;exposant <em>b<\/em> de la loi d&rsquo;\u00e9chelle sous-jacente (conform\u00e9ment \u00e0 la c\u00e9l\u00e8bre loi allom\u00e9trique de Kleiber en biologie).<\/p>\n<p>Cette lin\u00e9arisation graphique procure un avantage diagnostique inestimable pour la d\u00e9tection des valeurs aberrantes ou atypiques. Dans l&rsquo;espace non transform\u00e9 d&rsquo;origine, les observations extr\u00eames tendent \u00e0 se confondre le long de la tra\u00eene asymptotique ascendante ou descendante. Une fois projet\u00e9es sur le plan logarithmique lin\u00e9aris\u00e9, toute observation s&rsquo;\u00e9cartant substantiellement du couloir de dispersion pr\u00e9dit par le mod\u00e8le lin\u00e9aire se d\u00e9tache imm\u00e9diatement du faisceau r\u00e9siduel, alertant le chercheur sur une anomalie d&rsquo;\u00e9chantillonnage ou une rupture structurelle locale dans la dynamique du ph\u00e9nom\u00e8ne \u00e9tudi\u00e9.<\/p>\n<h2>11. Applications pratiques en psychologie quantitative et sciences du comportement<\/h2>\n<p>Les sciences psychologiques et les neurosciences cognitives ont largement contribu\u00e9 \u00e0 l&rsquo;ancrage empirique des transformations logarithmiques. L&rsquo;architecture du syst\u00e8me perceptif humain et les m\u00e9canismes de la chronom\u00e9trie mentale offrent des terrains d&rsquo;application privil\u00e9gi\u00e9s pour la fonction log() dans R.<\/p>\n<h3>11.1 Transformation des temps de r\u00e9action (TR)<\/h3>\n<p>Dans les paradigmes exp\u00e9rimentaux d&rsquo;\u00e9valuation cognitive &mdash; tels que les t\u00e2ches de d\u00e9cision lexicale, les protocoles de Stroop ou les paradigmes d&rsquo;amor\u00e7age s\u00e9mantique &mdash;, le temps de r\u00e9action (TR) mesur\u00e9 en millisecondes constitue la variable d\u00e9pendante reine. Or, la chronom\u00e9trie mentale pr\u00e9sente une caract\u00e9ristique biologique universelle : sa distribution empirique ne suit jamais une loi normale gaussienne sym\u00e9trique. Elle est syst\u00e9matiquement tronqu\u00e9e \u00e0 gauche par un temps de latence physiologique incompressible (environ 150 \u00e0 200 ms) et pr\u00e9sente une longue tra\u00eene asym\u00e9trique \u00e0 droite engendr\u00e9e par des fluctuations d&rsquo;attention ou des micro-d\u00e9crochages ex\u00e9cutifs.<\/p>\n<p>Les statisticiens de la cognition mod\u00e9lisent classiquement cette distribution au moyen d&rsquo;une loi ex-gaussienne, r\u00e9sultant de la convolution math\u00e9matique d&rsquo;une distribution gaussienne et d&rsquo;une distribution exponentielle. Pour neutraliser l&rsquo;asym\u00e9trie positive induite par la composante exponentielle et restaurer l&rsquo;homog\u00e9n\u00e9it\u00e9 de la variance requise par l&rsquo;analyse de variance factorielle (ANOVA), l&rsquo;application de la fonction log() de R s&rsquo;av\u00e8re indispensable :<\/p>\n<p><code>donnees_experimentales<span class=\"arabpsy-math-inline\" data-latex=\"\\log_tr &lt;- \\log(donnees_experimentales\">$\\log_tr &lt;- \\log(donnees_experimentales$<\/span>temps_reaction_ms)<\/code><\/p>\n<p>L&rsquo;impact de cette transformation sur la robustesse de l&rsquo;inf\u00e9rence est spectaculaire. Alors qu&rsquo;une ANOVA ou un mod\u00e8le lin\u00e9aire \u00e0 effets mixtes (LMM) appliqu\u00e9 aux latences brutes risque d&rsquo;engendrer des erreurs de type I \u00e9lev\u00e9es dues \u00e0 l&rsquo;h\u00e9t\u00e9rosc\u00e9dasticit\u00e9 et aux r\u00e9sidus leptokurtiques, l&rsquo;ajustement du m\u00eame mod\u00e8le sur la variable log-transform\u00e9e stabilise la distribution des r\u00e9sidus autour d&rsquo;une normalit\u00e9 presque id\u00e9ale. Il en r\u00e9sulte une mod\u00e9lisation infiniment plus fiable des effets principaux et des interactions cognitives sous-jacentes.<\/p>\n<h3>11.2 Loi psychophysique de Weber-Fechner<\/h3>\n<p>L&rsquo;histoire de la psychologie scientifique et de la psychophysique moderne trouve son origine th\u00e9orique dans la formulation math\u00e9matique pionni\u00e8re de Gustav Fechner, compl\u00e9tant les observations empiriques d&rsquo;Ernst Weber. La c\u00e9l\u00e8bre <strong>loi de Weber-Fechner<\/strong> postule que l&rsquo;intensit\u00e9 de la sensation subjective per\u00e7ue (<em>S<\/em>) par un individu est proportionnelle au logarithme de l&rsquo;intensit\u00e9 physique objective du stimulus d\u00e9clencheur (<em>I<\/em>), ce qui s&rsquo;\u00e9nonce formellement sous la relation math\u00e9matique canonique : <em>S = k * log(I \/ I_0)<\/em>, o\u00f9 <em>k<\/em> est une constante sp\u00e9cifique \u00e0 la modalit\u00e9 sensorielle et <em>I_0<\/em> le seuil absolu de perception.<\/p>\n<p>Dans l&rsquo;environnement R, la v\u00e9rification empirique et la mod\u00e9lisation param\u00e9trique de cette loi psychophysique \u00e0 partir de donn\u00e9es exp\u00e9rimentales de discrimination sensorielle &mdash; par exemple l&rsquo;estimation de la brillance lumineuse per\u00e7ue ou la discrimination de hauteurs tonales acoustiques &mdash; s&rsquo;effectuent par une r\u00e9gression lin\u00e9aire simple reliant la r\u00e9ponse comportementale \u00e0 la transformation logarithmique du stimulus :<\/p>\n<p><code>modele_fechner &lt;- lm(sensation_percue ~ log(intensite_stimulus), data = donnees_sensorielles)<\/code><br \/>\n<code>summary(modele_fechner)<\/code><\/p>\n<p>L&rsquo;\u00e9valuation des sorties statistiques permet de quantifier directement la constante psychophysique <em>k<\/em> \u00e0 travers l&rsquo;estimation du coefficient de pente de la r\u00e9gression. Ce protocole computationnel \u00e9l\u00e9mentaire mat\u00e9rialise comment l&rsquo;environnement R permet d&rsquo;articuler un cadre th\u00e9orique s\u00e9culaire avec des proc\u00e9dures modernes d&rsquo;estimation par les moindres carr\u00e9s ordinaires, validant la pertinence du calcul logarithmique dans la compr\u00e9hension des m\u00e9canismes de transduction sensorielle biologique.<\/p>\n<h3>11.3 Interpr\u00e9tation des coefficients dans les mod\u00e8les de r\u00e9gression log-lin\u00e9aires<\/h3>\n<p>L&rsquo;exploitation de variables transform\u00e9es par la fonction log() au sein de mod\u00e8les de r\u00e9gression lin\u00e9aire sous R impose une compr\u00e9hension math\u00e9matique exigeante lors de l&rsquo;interpr\u00e9tation des coefficients estim\u00e9s <em>beta<\/em>. Selon que la transformation logarithmique affecte la variable d\u00e9pendante, les variables explicatives ou l&rsquo;ensemble des pr\u00e9dicteurs, l&rsquo;analyste se trouve confront\u00e9 \u00e0 des structures s\u00e9miotiques fondamentalement distinctes.<\/p>\n<p>Dans un mod\u00e8le <strong>semi-logarithmique<\/strong> o\u00f9 seule la variable r\u00e9ponse <em>y<\/em> est soumise au logarithme (couramment sp\u00e9cifi\u00e9 dans R par <code>lm(log(y) ~ x, data = df)<\/code>), le coefficient associ\u00e9 \u00e0 <em>x<\/em> ne mesure pas une variation absolue d&rsquo;unit\u00e9s de <em>y<\/em>, mais un taux de variation relatif. Pour une variation marginale unitaire de <em>x<\/em>, le pourcentage de variation attendu de la variable naturelle <em>y<\/em> se calcule rigoureusement par la formule de r\u00e9expression : <em>% &Delta;y = 100 * (exp(beta) &#8211; 1)<\/em>. Lorsque le coefficient <em>beta<\/em> est de faible amplitude (typiquement compris entre -0.1 et +0.1), l&rsquo;approximation canonique <em>% &Delta;y &asymp; 100 * beta<\/em> s&rsquo;av\u00e8re recevable, mais l&rsquo;inversion exponentielle formelle demeure le seul protocole math\u00e9matiquement rigoureux.<\/p>\n<p>Dans un mod\u00e8le <strong>doublement logarithmique<\/strong> (ou mod\u00e8le log-log), configur\u00e9 sous la forme <code>lm(log(y) ~ log(x), data = df)<\/code>, les deux \u00e9chelles sont simultan\u00e9ment compress\u00e9es. Dans ce cadre d&rsquo;estimation privil\u00e9gi\u00e9 de l&rsquo;\u00e9conom\u00e9trie et de l&rsquo;analyse du comportement du consommateur, le coefficient <em>beta<\/em> s&rsquo;interpr\u00e8te directement comme une \u00e9lasticit\u00e9 pure sans dimension physique : une augmentation de 1 % de la grandeur <em>x<\/em> induit m\u00e9caniquement une variation moyenne de <em>beta<\/em> % de la grandeur <em>y<\/em>. L&rsquo;application des fonctions logarithmiques dans R convertit ainsi des \u00e9quations de puissance structurellement non lin\u00e9aires en mod\u00e8les d&rsquo;estimation lin\u00e9aires d&rsquo;une \u00e9l\u00e9gance et d&rsquo;une puissance interpr\u00e9tative incomparables.<\/p>\n<h2>12. Bonnes pratiques computationnelles et synth\u00e8se m\u00e9thodologique<\/h2>\n<p>La mise en \u0153uvre des fonctions logarithmiques au sein de projets de recherche \u00e0 haute valeur critique requiert l&rsquo;adoption de standards de qualit\u00e9 stricts. L&rsquo;exactitude computationnelle, l&rsquo;int\u00e9grit\u00e9 des structures de donn\u00e9es et la parfaite reproductibilit\u00e9 des scripts d&rsquo;analyse imposent une synth\u00e8se m\u00e9thodique des meilleures pratiques de programmation statistique en langage R.<\/p>\n<h3>12.1 Arbre de d\u00e9cision pour le choix de la variante de calcul<\/h3>\n<p>Afin de structurer avec coh\u00e9rence le choix entre les multiples d\u00e9clinaisons fonctionnelles offertes par l&rsquo;\u00e9cosyst\u00e8me R, l&rsquo;analyste peut se conformer \u00e0 un arbre de d\u00e9cision analytique standardis\u00e9. Le premier n\u0153ud de d\u00e9cision interroge la distribution empirique de la variable : si la s\u00e9rie de donn\u00e9es comporte des z\u00e9ros structurels l\u00e9gitimes ou des valeurs positives extr\u00eamement proches de z\u00e9ro, le choix doit imp\u00e9rativement s&rsquo;orienter vers la fonction stabilis\u00e9e <strong>log1p()<\/strong> afin d&rsquo;\u00e9viter l&rsquo;\u00e9mergence d&rsquo;infinis destructeurs et de pr\u00e9venir le ph\u00e9nom\u00e8ne d&rsquo;annulation catastrophique.<\/p>\n<p>Le second n\u0153ud d\u00e9cisionnel examine le cadre th\u00e9orique ou physique gouvernant les donn\u00e9es d&rsquo;\u00e9tude. Si l&rsquo;analyse s&rsquo;inscrit dans le cadre de la th\u00e9orie du traitement de l&rsquo;information, de l&rsquo;expression diff\u00e9rentielle des g\u00e8nes en bio-informatique (fold change) ou de processus de partitionnement binaire, la fonction sp\u00e9cialis\u00e9e native <strong>log2()<\/strong> s&rsquo;impose de mani\u00e8re cat\u00e9gorique. Si le ph\u00e9nom\u00e8ne physique est calibr\u00e9 sur des \u00e9chelles normalis\u00e9es d&rsquo;ordres de grandeur, d&rsquo;intensit\u00e9 sismique ou d&rsquo;att\u00e9nuation acoustique, la primitive optimis\u00e9e <strong>log10()<\/strong> doit \u00eatre syst\u00e9matiquement pr\u00e9f\u00e9r\u00e9e.<\/p>\n<p>Enfin, pour l&rsquo;ensemble des mod\u00e9lisations statistiques probabilistes, l&rsquo;estimation des param\u00e8tres par maximum de vraisemblance, le calcul de log-vraisemblance dans les mod\u00e8les lin\u00e9aires g\u00e9n\u00e9ralis\u00e9s (famille Poisson ou Gamma) et l&rsquo;estimation d&rsquo;\u00e9lasticit\u00e9s \u00e9conom\u00e9triques standards, la fonction canonique <strong>log()<\/strong> par d\u00e9faut (base e) constitue le choix m\u00e9thodologique de r\u00e9f\u00e9rence. L&rsquo;usage d&rsquo;une base manuelle via l&rsquo;argument formel <code>base = ...<\/code> ne doit \u00eatre r\u00e9serv\u00e9 qu&rsquo;aux seuls cas exceptionnels de bases enti\u00e8res ou fractionnaires non conventionnelles dict\u00e9es par des imp\u00e9ratifs axiomatiques sp\u00e9cifiques.<\/p>\n<h3>12.2 V\u00e9rification automatis\u00e9e de l&rsquo;int\u00e9grit\u00e9 des calculs<\/h3>\n<p>Dans un cadre de production logicielle statistique ou d&rsquo;\u00e9laboration de protocoles d&rsquo;essais cliniques soumis \u00e0 des audits r\u00e9glementaires stricts, la transformation logarithmique ne doit jamais \u00eatre ex\u00e9cut\u00e9e sans \u00eatre assortie de tests de validation unitaire automatis\u00e9s. Le package <strong>testthat<\/strong> constitue l&rsquo;outil standard pour formaliser ces assertions de contr\u00f4le qualit\u00e9 au sein des pipelines de traitement.<\/p>\n<p>Une batterie d&rsquo;assertions d\u00e9fensives minimales doit \u00eatre int\u00e9gr\u00e9e dans les fonctions de pr\u00e9traitement pour intercepter imm\u00e9diatement toute anomalie dimensionnelle ou arithm\u00e9tique. On d\u00e9ploiera classiquement des v\u00e9rifications visant \u00e0 confirmer l&rsquo;absence absolue de valeurs infinies r\u00e9siduelles via l&rsquo;assertion <code>expect_false(any(is.infinite(resultat)))<\/code>, ainsi que l&rsquo;absence de valeurs non num\u00e9riques issues de violations de domaine arithm\u00e9tique via <code>expect_false(any(is.nan(resultat)))<\/code>.<\/p>\n<p>De plus, il s&rsquo;av\u00e8re particuli\u00e8rement judicieux d&rsquo;adjoindre des tests de garde pr\u00e9ventifs en amont du calcul, validant que le vecteur fourni en entr\u00e9e respecte scrupuleusement la condition de stricte positivit\u00e9 : <code>stopifnot(all(vecteur_entree &gt; 0, na.rm = TRUE))<\/code>. Cette programmation d\u00e9fensive formalis\u00e9e garantit que toute anomalie d&rsquo;acquisition ou tout artefact mat\u00e9riel survenu en amont du pipeline de donn\u00e9es sera instantan\u00e9ment d\u00e9tect\u00e9 et bloqu\u00e9, pr\u00e9venant la contamination silencieuse des mod\u00e8les d&rsquo;inf\u00e9rence statistique ult\u00e9rieurs.<\/p>\n<h3>12.3 Synth\u00e8se des pi\u00e8ges fr\u00e9quents et recommandations finales<\/h3>\n<p>Au terme de ce trait\u00e9, il importe de r\u00e9capituler synth\u00e9tiquement les \u00e9cueils les plus pernicieux r\u00e9guli\u00e8rement observ\u00e9s lors de l&rsquo;application des transformations logarithmiques dans R. Le premier pi\u00e8ge r\u00e9side dans le <strong>log(0) silencieux<\/strong> : lorsqu&rsquo;un data frame contenant des z\u00e9ros est transform\u00e9 \u00e0 l&rsquo;aveugle par log(), l&rsquo;apparition in\u00e9vitable de -Inf conduit bien souvent \u00e0 l&rsquo;exclusion involontaire et silencieuse de lignes enti\u00e8res lors de l&rsquo;ajustement ult\u00e9rieur d&rsquo;un mod\u00e8le par <code>lm()<\/code> ou <code>glm()<\/code>, r\u00e9duisant artificiellement la taille de l&rsquo;\u00e9chantillon d&rsquo;analyse sans que l&rsquo;analyste n&rsquo;en prenne explicitement conscience.<\/p>\n<p>Le second \u00e9cueil concerne l&rsquo;<strong>illusion du pseudo-compte magique<\/strong> : ajouter arbitrairement la constante un \u00e0 une variable continue dont l&rsquo;amplitude est comprise entre 0 et 0.01 modifie dramatiquement la structure de variance de la variable bien plus qu&rsquo;une transformation logarithmique pure. L&rsquo;ajout de d\u00e9calage doit \u00eatre th\u00e9oriquement justifi\u00e9, document\u00e9 et, dans l&rsquo;id\u00e9al, remplac\u00e9 par des transformations param\u00e9tr\u00e9es formelles de type Yeo-Johnson.<\/p>\n<p>Le troisi\u00e8me pi\u00e8ge concerne la <strong>retransformation na\u00efve des moyennes<\/strong> : omettre le biais de transformation de l&rsquo;inversion non lin\u00e9aire lors de la retransformation de variables pr\u00e9dictives par la fonction <code>exp()<\/code> aboutit invariablement \u00e0 une sous-estimation syst\u00e9matique des moyennes arithm\u00e9tiques r\u00e9elles sur l&rsquo;\u00e9chelle naturelle. La mise en application rigoureuse de la checklist m\u00e9thodologique d\u00e9taill\u00e9e au fil des sections pr\u00e9c\u00e9dentes permettra \u00e0 tout chercheur et analyste de donn\u00e9es de naviguer avec une parfaite assurance conceptuelle et une irr\u00e9prochable rigueur algorithmique au sein de l&rsquo;environnement de calcul statistique de R.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<p>Box, G. E. P., &amp; Cox, D. R. (1964). An analysis of transformations. <em>Journal of the Royal Statistical Society: Series B (Methodological)<\/em>, 26(2), 211&ndash;243. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1111\/j.2517-6161.1964.tb00553.x\">https:\/\/doi.org\/10.1111\/j.2517-6161.1964.tb00553.x<\/a><\/p>\n<p>Chambers, J. M. (2008). <em>Software for data analysis: Programming with R<\/em>. Springer. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1007\/978-0-387-75936-4\">https:\/\/doi.org\/10.1007\/978-0-387-75936-4<\/a><\/p>\n<p>Duan, N. (1983). Smearing estimate: A nonparametric retransformation method. <em>Journal of the American Statistical Association<\/em>, 78(383), 605&ndash;610. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1080\/01621459.1983.10478017\">https:\/\/doi.org\/10.1080\/01621459.1983.10478017<\/a><\/p>\n<p>Goldberg, D. (1991). What every computer scientist should know about floating-point arithmetic. <em>ACM Computing Surveys<\/em>, 23(1), 5&ndash;48. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1145\/103162.103163\">https:\/\/doi.org\/10.1145\/103162.103163<\/a><\/p>\n<p>Ihaka, R., &amp; Gentleman, R. (1996). R: A language for data analysis and graphics. <em>Journal of Computational and Graphical Statistics<\/em>, 5(3), 299&ndash;314. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1080\/10618600.1996.10474713\">https:\/\/doi.org\/10.1080\/10618600.1996.10474713<\/a><\/p>\n<p>Institute of Electrical and Electronics Engineers. (2019). <em>IEEE standard for floating-point arithmetic<\/em> (IEEE Std 754-2019). IEEE. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1109\/IEEESTD.2019.8766229\">https:\/\/doi.org\/10.1109\/IEEESTD.2019.8766229<\/a><\/p>\n<p>R Core Team. (2023). <em>R: A language and environment for statistical computing<\/em>. R Foundation for Statistical Computing. <a rel=\"noopener noreferrer\" href=\"https:\/\/www.R-project.org\/\">https:\/\/www.R-project.org\/<\/a><\/p>\n<p>Shannon, C. E. (1948). A mathematical theory of communication. <em>The Bell System Technical Journal<\/em>, 27(3), 379&ndash;423. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1002\/j.1538-7305.1948.tb01338.x\">https:\/\/doi.org\/10.1002\/j.1538-7305.1948.tb01338.x<\/a><\/p>\n<p>Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L. D., Fran\u00e7ois, R., Grolemund, G., Hayes, A., Henry, L., Hester, J., Kuhn, M., Pedersen, T. L., Miller, E., Bache, S. M., M\u00fcller, K., Ooms, J., Robinson, D., Seidel, D. P., Spinu, V., Takahashi, K., Vaughan, D., Wilke, C., Woo, K., &amp; Yutani, H. (2019). Welcome to the Tidyverse. <em>Journal of Open Source Software<\/em>, 4(43), 1686. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.21105\/joss.01686\">https:\/\/doi.org\/10.21105\/joss.01686<\/a><\/p>\n<p>Yeo, I. K., &amp; Johnson, R. A. (2000). A new family of power transformations to improve normality or symmetry. <em>Biometrika<\/em>, 87(4), 954&ndash;959. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1093\/biomet\/87.4.954\">https:\/\/doi.org\/10.1093\/biomet\/87.4.954<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour calculer des logarithmes dans R : fonction log(), bases personnalis\u00e9es, vecteurs, data frames et applications statistiques.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2269,2193],"tags":[1884,4195,2884,2882,2953],"class_list":["post-2110","psych_stat","type-psych_stat","status-publish","hentry","category-methodes-quantitatives","category-programmation-r","tag-analyse-de-donnees","tag-fonction-log-r","tag-r-base","tag-statistiques-r","tag-transformation-logarithmique"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2110"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2110\/revisions"}],"predecessor-version":[{"id":16322,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2110\/revisions\/16322"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}