{"id":2103,"date":"2026-10-14T18:00:47","date_gmt":"2026-10-14T18:00:47","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/multiplication-matricielle-dans-r-exemples\/"},"modified":"2026-10-14T18:00:47","modified_gmt":"2026-10-14T18:00:47","slug":"multiplication-matricielle-dans-r-exemples","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=multiplication-matricielle-dans-r-exemples","title":{"rendered":"Comment effectuer la multiplication matricielle dans R (avec exemples)"},"content":{"rendered":"<p>Dans le paysage contemporain de la science des donn\u00e9es, de la mod\u00e9lisation statistique et de l&rsquo;intelligence artificielle, l&rsquo;alg\u00e8bre lin\u00e9aire computationnelle constitue l&rsquo;infrastructure fondamentale sur laquelle reposent les algorithmes les plus sophistiqu\u00e9s. Qu&rsquo;il s&rsquo;agisse de calibrer un mod\u00e8le de r\u00e9gression lin\u00e9aire multiple par la m\u00e9thode des moindres carr\u00e9s, de d\u00e9composer des signaux complexes par analyse en composantes principales, ou d&rsquo;entra\u00eener des r\u00e9seaux de neurones profonds, la manipulation matricielle repr\u00e9sente le langage naturel de l&rsquo;analyse quantitative. Pour les chercheurs et les analystes, la ma\u00eetrise des op\u00e9rations matricielles au sein de l&rsquo;environnement de programmation statistique R ne rel\u00e8ve pas d&rsquo;une simple comp\u00e9tence syntaxique, mais d&rsquo;une n\u00e9cessit\u00e9 m\u00e9thodologique incontournable garantissant l&rsquo;exactitude conceptuelle et l&rsquo;efficience algorithmique des calculs.<\/p>\n<p>Le langage R, h\u00e9ritier direct du syst\u00e8me S d\u00e9velopp\u00e9 aux Laboratoires Bell par John Chambers, a \u00e9t\u00e9 express\u00e9ment con\u00e7u d\u00e8s ses origines pour placer le calcul vectoriel et matriciel au c\u0153ur de son paradigme op\u00e9rationnel. Contrairement aux langages g\u00e9n\u00e9ralistes imp\u00e9ratifs qui requi\u00e8rent l&rsquo;impl\u00e9mentation de structures it\u00e9ratives complexes pour parcourir des tableaux multidimensionnels, R int\u00e8gre des abstractions math\u00e9matiques de haut niveau permettant de traiter des ensembles de donn\u00e9es entiers comme des entit\u00e9s alg\u00e9briques unifi\u00e9es. Cependant, cette apparente simplicit\u00e9 syntaxique dissimule une rigueur formelle stricte : la distinction entre les op\u00e9rations scalaires, les produits terme \u00e0 terme et le produit matriciel au sens de Cayley soul\u00e8ve r\u00e9guli\u00e8rement des \u00e9cueils conceptuels majeurs, susceptibles d&rsquo;engendrer des erreurs de calcul silencieuses ou des interruptions d&rsquo;ex\u00e9cution p\u00e9nalisantes.<\/p>\n<p>Ce guide exhaustif a pour vocation d&rsquo;explorer en profondeur les m\u00e9canismes th\u00e9oriques, syntaxiques et computationnels de la multiplication matricielle dans R. En parcourant les r\u00e8gles formelles de conformabilit\u00e9, les subtilit\u00e9s d&rsquo;indexation, les comportements de recyclage de la m\u00e9moire, ainsi que les fonctions d&rsquo;acc\u00e9l\u00e9ration algorithmique et les applications pratiques en statistiques multivari\u00e9es, ce trait\u00e9 offre aux praticiens les outils d&rsquo;ing\u00e9nierie logicielle indispensables pour concevoir des scripts rigoureux, robustes et hautement optimis\u00e9s.<\/p>\n<h2>1. Introduction aux fondements de l&rsquo;alg\u00e8bre matricielle dans l&rsquo;environnement R<\/h2>\n<h3>1.1 Importance de l&rsquo;alg\u00e8bre lin\u00e9aire dans l&rsquo;analyse quantitative et la mod\u00e9lisation<\/h3>\n<p>L&rsquo;alg\u00e8bre lin\u00e9aire constitue la structure unificatrice de la quasi-totalit\u00e9 des m\u00e9thodologies statistiques contemporaines. Dans le domaine de l&rsquo;analyse multivari\u00e9e, les jeux de donn\u00e9es empiriques ne sont pas trait\u00e9s comme de simples collections de variables isol\u00e9es, mais comme des espaces vectoriels multidimensionnels o\u00f9 chaque individu statistique est repr\u00e9sent\u00e9 par un vecteur de caract\u00e9ristiques, et chaque variable par une coordonn\u00e9e dans cet hyperespace. D\u00e8s lors que l&rsquo;on aborde des d\u00e9marches de r\u00e9duction dimensionnelle telles que l&rsquo;analyse factorielle exploratoire, l&rsquo;analyse factorielle confirmatoire ou la mod\u00e9lisation par \u00e9quations structurelles, l&rsquo;ensemble des relations de d\u00e9pendance et de covariation est synth\u00e9tis\u00e9 sous forme de matrices de covariance ou de corr\u00e9lation.<\/p>\n<p>Dans ce contexte th\u00e9orique, la multiplication matricielle intervient comme l&rsquo;op\u00e9rateur universel permettant d&rsquo;effectuer des transformations g\u00e9om\u00e9triques, des rotations d&rsquo;axes, des changements de base et des projections orthogonales. Par exemple, projeter un nuage de points de grande dimension sur un sous-espace vectoriel de dimension r\u00e9duite afin de maximiser la variance restitu\u00e9e repose exclusivement sur une s\u00e9rie de produits matriciels impliquant la matrice des donn\u00e9es centr\u00e9es et la matrice des vecteurs propres issue de la d\u00e9composition spectrale. De m\u00eame, les syst\u00e8mes d&rsquo;\u00e9quations lin\u00e9aires simultan\u00e9es, fondamentaux en \u00e9conom\u00e9trie et en psychom\u00e9trie computationnelle, s&rsquo;expriment avec une \u00e9l\u00e9gance et une concision optimales sous la forme matricielle canonique reliant la matrice des pr\u00e9dicteurs, le vecteur des param\u00e8tres inconnus et le vecteur des observations.<\/p>\n<p>L&rsquo;adoption syst\u00e9matique du formalisme matriciel pr\u00e9sente un avantage technique d\u00e9cisif : la vectorisation. Dans les architectures informatiques modernes, le traitement des op\u00e9rations vectorielles et matricielles s&rsquo;effectue bien plus rapidement que l&rsquo;\u00e9valuation s\u00e9quentielle de boucles it\u00e9ratives traditionnelles. En \u00e9liminant le co\u00fbt d&rsquo;interpr\u00e9tation associ\u00e9 aux boucles du langage et en d\u00e9l\u00e9guant l&rsquo;ex\u00e9cution des calculs \u00e0 des routines compil\u00e9es de bas niveau hautement optimis\u00e9es, la vectorisation permet d&rsquo;acc\u00e9l\u00e9rer drastiquement les temps de traitement, transformant des calculs intensifs qui n\u00e9cessiteraient plusieurs heures en proc\u00e9dures ex\u00e9cut\u00e9es en quelques fractions de seconde.<\/p>\n<h3>1.2 Philosophie du langage R et traitement des objets matriciels<\/h3>\n<p>Pour exploiter pleinement la puissance de R en calcul matriciel, il est indispensable de comprendre la philosophie architecturale r\u00e9gissant ses structures de donn\u00e9es internes. Dans la nomenclature formelle de R, une matrice n&rsquo;est pas une structure composite constitu\u00e9e d&rsquo;une liste de listes, comme c&rsquo;est fr\u00e9quemment le cas dans d&rsquo;autres langages de programmation tels que Python avec ses listes natives. Sous R, une matrice est fondamentalement un vecteur atomique \u00e0 une dimension auquel a \u00e9t\u00e9 assign\u00e9 un attribut dimensionnel sp\u00e9cifique, d\u00e9sign\u00e9 par le symbole <code>dim<\/code>. Cet attribut se compose d&rsquo;un vecteur d&rsquo;entiers de longueur deux, indiquant respectivement le nombre de lignes et le nombre de colonnes de l&rsquo;objet.<\/p>\n<p>Cette conception structurelle implique que les \u00e9l\u00e9ments d&rsquo;une matrice sont physiquement stock\u00e9s de mani\u00e8re contigu\u00eb dans la m\u00e9moire vive de l&rsquo;ordinateur selon un agencement par colonne, convention universellement d\u00e9sign\u00e9e sous le terme d&rsquo;ordre majeur des colonnes (<em>column-major order<\/em>), h\u00e9rit\u00e9e directement du langage Fortran. Ainsi, lorsque R alloue une matrice de dimension deux par deux, les \u00e9l\u00e9ments sont s\u00e9quentiellement dispos\u00e9s en m\u00e9moire selon l&rsquo;ordre : premi\u00e8re ligne de la premi\u00e8re colonne, deuxi\u00e8me ligne de la premi\u00e8re colonne, premi\u00e8re ligne de la deuxi\u00e8me colonne, puis deuxi\u00e8me ligne de la deuxi\u00e8me colonne. Cette organisation physique de la m\u00e9moire a des implications directes et massives sur la localit\u00e9 spatiale du cache processeur lors de l&rsquo;ex\u00e9cution des op\u00e9rations alg\u00e9briques.<\/p>\n<p>Par ailleurs, R op\u00e8re une distinction philosophique et technique fondamentale entre deux types d&rsquo;op\u00e9rations sur les structures bidimensionnelles : les op\u00e9rations arithm\u00e9tiques universelles et les op\u00e9rations alg\u00e9briques d&rsquo;espace vectoriel. Les concepteurs du langage ont fait le choix d\u00e9lib\u00e9r\u00e9 de r\u00e9server les op\u00e9rateurs arithm\u00e9tiques standards, tels que l&rsquo;addition, la soustraction ou la multiplication \u00e9l\u00e9mentaire, \u00e0 des calculs vectoris\u00e9s terme \u00e0 terme, pr\u00e9servant ainsi le comportement homomorphe des scalaires appliqu\u00e9s aux structures tabulaires. En contrepartie, les op\u00e9rations relevant formellement de l&rsquo;alg\u00e8bre bilin\u00e9aire, au premier rang desquelles figure le produit matriciel de Cayley, n\u00e9cessitent des op\u00e9rateurs d\u00e9di\u00e9s encapsulant les contraintes g\u00e9om\u00e9triques et alg\u00e9briques requises.<\/p>\n<h3>1.3 Objectifs p\u00e9dagogiques et structure de r\u00e9f\u00e9rence du pr\u00e9sent tutoriel<\/h3>\n<p>L&rsquo;objectif central de ce trait\u00e9 m\u00e9thodologique est de fournir une compr\u00e9hension exhaustive, tant conceptuelle qu&rsquo;appliqu\u00e9e, de l&rsquo;ensemble des variantes de multiplication matricielle offertes par l&rsquo;\u00e9cosyst\u00e8me R. L&rsquo;assimilation de ces concepts permettra au lecteur de naviguer avec aisance entre les diff\u00e9rentes formulations du produit, d&rsquo;\u00e9viter les pi\u00e8ges dimensionnels r\u00e9currents et de concevoir des pipelines d&rsquo;analyse num\u00e9rique parfaitement calibr\u00e9s pour les exigences de la recherche quantitative contemporaine.<\/p>\n<p>Tout au long de ce document, nous insisterons sur la ma\u00eetrise op\u00e9rationnelle de deux op\u00e9rateurs centraux dont la confusion repr\u00e9sente la source d&rsquo;erreurs logicielles la plus fr\u00e9quente chez les analystes : l&rsquo;op\u00e9rateur ast\u00e9risque unitaire servant au produit \u00e9l\u00e9ment par \u00e9l\u00e9ment (ou produit de Hadamard), et l&rsquo;op\u00e9rateur binaire entour\u00e9 de symboles de pourcentage servant au produit matriciel formel. Pour chaque op\u00e9rateur, nous expliciterons les conditions math\u00e9matiques strictes de conformabilit\u00e9 dimensionnelle, les m\u00e9canismes sous-jacents de calcul, ainsi que les comportements par d\u00e9faut de R face aux asym\u00e9tries dimensionnelles.<\/p>\n<p>Le parcours d&rsquo;apprentissage propos\u00e9 adopte une d\u00e9marche rigoureusement progressive. Apr\u00e8s avoir consolid\u00e9 les techniques de cr\u00e9ation et de manipulation des matrices sous R, nous d\u00e9taillerons les calculs pas \u00e0 pas \u00e0 travers des matrices exemples annot\u00e9es. Nous aborderons ensuite les dimensions rectangulaires, les interactions vecteur-matrice, les calculs de formes quadratiques, les optimisations de bas niveau via les biblioth\u00e8ques de calcul haute performance, pour finir par des applications concr\u00e8tes en r\u00e9gression multivari\u00e9e et psychom\u00e9trie, compl\u00e9t\u00e9es d&rsquo;une revue syst\u00e9matique des strat\u00e9gies de d\u00e9bogage.<\/p>\n<h2>2. Cr\u00e9ation et manipulation des structures matricielles sous R<\/h2>\n<h3>2.1 Instanciation d&rsquo;une matrice \u00e0 l&rsquo;aide de la fonction matrix()<\/h3>\n<p>L&rsquo;instanciation programmatique d&rsquo;une structure matricielle sous R s&rsquo;effectue principalement au moyen de la fonction native <code>matrix()<\/code>. La signature de cette fonction accepte quatre arguments primordiaux r\u00e9gissant la topologie de l&rsquo;objet cr\u00e9\u00e9 : le vecteur de donn\u00e9es sources <code>data<\/code>, le nombre de lignes <code>nrow<\/code>, le nombre de colonnes <code>ncol<\/code>, et l&rsquo;indicateur bool\u00e9en <code>byrow<\/code>. La ma\u00eetrise de ces arguments est essentielle pour garantir que les donn\u00e9es num\u00e9riques s&rsquo;organisent conform\u00e9ment au dessein analytique de l&rsquo;exp\u00e9rimentateur.<\/p>\n<p>Par d\u00e9faut, l&rsquo;argument <code>byrow<\/code> est initialis\u00e9 \u00e0 la valeur logique <code>FALSE<\/code>. Ce param\u00e9trage refl\u00e8te l&rsquo;agencement interne en ordre majeur des colonnes propre \u00e0 l&rsquo;architecture de R. Par cons\u00e9quent, si un vecteur contenant les valeurs s\u00e9quentielles de 1 \u00e0 4 est transmis \u00e0 la fonction avec deux lignes et deux colonnes, le remplissage s&rsquo;effectuera verticalement : la premi\u00e8re colonne accueillera les valeurs 1 et 2, tandis que la seconde colonne recevra les valeurs 3 et 4. Pour forcer un remplissage horizontal par rang\u00e9e successive, il convient d&rsquo;assigner explicitement la valeur <code>TRUE<\/code> \u00e0 l&rsquo;argument <code>byrow<\/code>.<\/p>\n<p>Examinons la mise en \u0153uvre pratique de ces deux modes d&rsquo;instanciation \u00e0 travers la d\u00e9claration de deux matrices carr\u00e9es de dimension 2&#215;2. Dans la console R, la commande s&rsquo;\u00e9crit de la mani\u00e8re suivante :<\/p>\n<p><code>matrice_col &lt;- matrix(data = c(1, 2, 3, 4), nrow = 2, ncol = 2, byrow = FALSE)<\/code><\/p>\n<p><code>matrice_row &lt;- matrix(data = c(1, 2, 3, 4), nrow = 2, ncol = 2, byrow = TRUE)<\/code><\/p>\n<p>Dans la matrice <code>matrice_col<\/code>, l&rsquo;\u00e9l\u00e9ment situ\u00e9 en premi\u00e8re ligne et premi\u00e8re colonne prend la valeur 1, tandis que l&rsquo;\u00e9l\u00e9ment en deuxi\u00e8me ligne et premi\u00e8re colonne est 2. Inversement, dans <code>matrice_row<\/code>, la premi\u00e8re ligne contient les \u00e9l\u00e9ments 1 et 2, et la seconde ligne les \u00e9l\u00e9ments 3 et 4. Cette distinction est cruciale : une inversion involontaire de la m\u00e9thode de remplissage modifie l&rsquo;op\u00e9rateur lin\u00e9aire repr\u00e9sent\u00e9 par la matrice, faussant irr\u00e9m\u00e9diablement tous les produits matriciels ult\u00e9rieurs.<\/p>\n<h3>2.2 Inspection dimensionnelle et int\u00e9grit\u00e9 structurelle des matrices<\/h3>\n<p>Avant d&rsquo;engager toute op\u00e9ration alg\u00e9brique entre plusieurs matrices, la v\u00e9rification rigoureuse de leurs caract\u00e9ristiques dimensionnelles et de leur typage est une exigence m\u00e9thodologique absolue. L&rsquo;outil diagnostique de r\u00e9f\u00e9rence est la fonction <code>dim()<\/code>, qui renvoie un vecteur num\u00e9rique \u00e0 deux \u00e9l\u00e9ments contenant les dimensions respectives de l&rsquo;objet : la premi\u00e8re coordonn\u00e9e indique la hauteur (nombre de lignes) et la seconde coordonn\u00e9e d\u00e9finit la largeur (nombre de colonnes). Les fonctions auxiliaires <code>nrow()<\/code> et <code>ncol()<\/code> permettent d&rsquo;extraire isol\u00e9ment chacune de ces grandeurs g\u00e9om\u00e9triques.<\/p>\n<p>Au-del\u00e0 des dimensions pures, la lisibilit\u00e9 et l&rsquo;int\u00e9grit\u00e9 structurelle des jeux de donn\u00e9es complexes requi\u00e8rent souvent l&rsquo;attribution de m\u00e9tadonn\u00e9es descriptives sous la forme d&rsquo;\u00e9tiquettes textuelles. Les fonctions <code>rownames()<\/code> et <code>colnames()<\/code> permettent d&rsquo;assigner des identifiants s\u00e9mantiques clairs aux vecteurs directeurs de la matrice. L&rsquo;attribution de noms de lignes et de colonnes n&rsquo;alt\u00e8re en rien le comportement math\u00e9matique des op\u00e9rateurs alg\u00e9briques sous R, mais elle offre un filet de s\u00e9curit\u00e9 cognitif indispensable lors de la manipulation de vastes matrices de covariance ou de corr\u00e9lation.<\/p>\n<p>Enfin, l&rsquo;\u00e9valuation du typage strict des structures s&rsquo;av\u00e8re indispensable pour pr\u00e9venir les erreurs de conversion implicite. La fonction <code>is.matrix()<\/code> permet de confirmer formellement que l&rsquo;objet \u00e9valu\u00e9 poss\u00e8de bien l&rsquo;attribut dimensionnel requis, tandis que la fonction <code>mode()<\/code> ou <code>typeof()<\/code> certifie que les coefficients internes appartiennent \u00e0 la classe atomique ad\u00e9quate, g\u00e9n\u00e9ralement <code>numeric<\/code> ou <code>double<\/code>. L&rsquo;introduction accidentelle d&rsquo;une seule cha\u00eene de caract\u00e8res ou d&rsquo;une valeur textuelle au sein d&rsquo;un vecteur source entra\u00eene, par les r\u00e8gles de coercition automatique de R, la conversion de l&rsquo;int\u00e9gralit\u00e9 de la matrice en type <code>character<\/code>, rendant toute tentative de multiplication matricielle imm\u00e9diatement caduque.<\/p>\n<h3>2.3 Indexation, extraction et sous-ensembles matriciels<\/h3>\n<p>L&rsquo;extraction de coefficients individuels ou de sous-matrices constitue une \u00e9tape pr\u00e9paratoire fr\u00e9quente dans les pipelines de mod\u00e9lisation math\u00e9matique. R impl\u00e9mente une syntaxe d&rsquo;indexation d&rsquo;une grande puissance bas\u00e9e sur l&rsquo;op\u00e9rateur crochet doublement dimensionn\u00e9 <code>[i, j]<\/code>, o\u00f9 l&rsquo;indice <code>i<\/code> s\u00e9lectionne les rang\u00e9es et l&rsquo;indice <code>j<\/code> s\u00e9lectionne les colonnes. L&rsquo;omission d\u00e9lib\u00e9r\u00e9e d&rsquo;un indice signale \u00e0 l&rsquo;interpr\u00e9teur de s\u00e9lectionner l&rsquo;int\u00e9gralit\u00e9 de la dimension correspondante ; ainsi, <code>A[1, ]<\/code> extrait l&rsquo;ensemble de la premi\u00e8re ligne sous forme vectorielle, tandis que <code>A[, 2]<\/code> extrait l&rsquo;int\u00e9gralit\u00e9 de la seconde colonne.<\/p>\n<p>Cependant, ce m\u00e9canisme d&rsquo;indexation rec\u00e8le un pi\u00e8ge fondamental connu sous le nom de r\u00e9duction automatique de dimension (<em>dimension drop<\/em>). Par d\u00e9faut, lorsque le r\u00e9sultat d&rsquo;une op\u00e9ration d&rsquo;extraction ne comporte qu&rsquo;une seule ligne ou une seule colonne, R convertit automatiquement l&rsquo;objet r\u00e9sultant en un simple vecteur atomique unidimensionnel, d\u00e9pouillant la structure de son attribut <code>dim<\/code>. Cette r\u00e9duction dimensionnelle invisible a des cons\u00e9quences d\u00e9sastreuses sur les scripts automatis\u00e9s : un vecteur atomique ne r\u00e9pondant pas aux m\u00eames r\u00e8gles de conformabilit\u00e9 qu&rsquo;une matrice colonne formelle, les op\u00e9rations matricielles subs\u00e9quentes \u00e9chouent syst\u00e9matiquement.<\/p>\n<p>Pour neutraliser ce comportement et contraindre R \u00e0 pr\u00e9server l&rsquo;int\u00e9grit\u00e9 de la structure matricielle bidimensionnelle, il est imp\u00e9ratif d&rsquo;utiliser l&rsquo;argument compl\u00e9mentaire <code>drop = FALSE<\/code>. L&rsquo;instruction <code>A[1, , drop = FALSE]<\/code> produit ainsi une v\u00e9ritable matrice ligne de dimension 1xN, parfaitement apte \u00e0 subir des multiplications matricielles formelles. De la m\u00eame mani\u00e8re, la modification dynamique de sous-ensembles matriciels s&rsquo;op\u00e8re par r\u00e9assignation directe via l&rsquo;op\u00e9rateur d&rsquo;affectation sur des coordonn\u00e9es cibl\u00e9es, pr\u00e9parant les structures pour des calculs d&rsquo;alg\u00e8bre bilin\u00e9aire cibl\u00e9s.<\/p>\n<h2>3. Multiplication \u00e9l\u00e9ment par \u00e9l\u00e9ment (produit de Hadamard) dans R<\/h2>\n<h3>3.1 D\u00e9finition math\u00e9matique et op\u00e9rateur ast\u00e9risque (*)<\/h3>\n<p>Dans l&rsquo;univers du calcul num\u00e9rique, il est d&rsquo;une importance capitale de distinguer le produit matriciel classique du produit \u00e9l\u00e9ment par \u00e9l\u00e9ment, formellement th\u00e9oris\u00e9 sous le vocable de produit de Hadamard, ou produit de Schur. Consid\u00e9rons deux matrices <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> de dimensions strictement identiques <span class=\"arabpsy-math-inline\" data-latex=\"m \\times n\">$m \\times n$<\/span>, dont les coefficients scalaires sont respectivement d\u00e9sign\u00e9s par <span class=\"arabpsy-math-inline\" data-latex=\"a_{ij}\">$a_{ij}$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"b_{ij}\">$b_{ij}$<\/span>. Le produit de Hadamard, conventionnellement not\u00e9 dans la litt\u00e9rature math\u00e9matique par le symbole <span class=\"arabpsy-math-inline\" data-latex=\"A odot B\">$A odot B$<\/span>, est d\u00e9fini comme la matrice <span class=\"arabpsy-math-inline\" data-latex=\"C\">$C$<\/span> de m\u00eame dimension <span class=\"arabpsy-math-inline\" data-latex=\"m \\times n\">$m \\times n$<\/span> dont chaque \u00e9l\u00e9ment <span class=\"arabpsy-math-inline\" data-latex=\"c_{ij}\">$c_{ij}$<\/span> r\u00e9sulte du simple produit scalaire univari\u00e9 :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"c_{ij} = a_{ij} \\times b_{ij}\">$$c_{ij} = a_{ij} \\times b_{ij}$$<\/span><\/p>\n<p>Dans l&rsquo;environnement R, cette op\u00e9ration \u00e9l\u00e9mentaire est assign\u00e9e \u00e0 l&rsquo;op\u00e9rateur arithm\u00e9tique standard repr\u00e9sent\u00e9 par l&rsquo;ast\u00e9risque <code>*<\/code>. L&#8217;emploi de cet op\u00e9rateur implique une ind\u00e9pendance computationnelle totale entre les cellules de la matrice : le calcul de la coordonn\u00e9e <span class=\"arabpsy-math-inline\" data-latex=\"c_{ij}\">$c_{ij}$<\/span> n&rsquo;entrem\u00eale d&rsquo;aucune mani\u00e8re les composantes des autres lignes ou colonnes adjacentes. Il s&rsquo;agit d&rsquo;une transformation purement locale, qui op\u00e8re une mise \u00e0 l&rsquo;\u00e9chelle coordonn\u00e9e par coordonn\u00e9e.<\/p>\n<p>Cette logique computationnelle conf\u00e8re au produit de Hadamard des propri\u00e9t\u00e9s alg\u00e9briques qui lui sont propres et qui divergent radicalement de celles du produit matriciel usuel. Le produit de Hadamard est strictement commutatif, ce qui signifie que <span class=\"arabpsy-math-inline\" data-latex=\"A * B\">$A * B$<\/span> est rigoureusement identique \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"B * A\">$B * A$<\/span>. De plus, la condition pr\u00e9alable d&rsquo;applicabilit\u00e9 impose une congruence dimensionnelle absolue : les deux matrices doivent poss\u00e9der exactement le m\u00eame nombre de lignes et le m\u00eame nombre de colonnes, toute violation de cette \u00e9galit\u00e9 g\u00e9om\u00e9trique d\u00e9clenchant des comportements d&rsquo;adaptation ou des erreurs d&rsquo;incompatibilit\u00e9.<\/p>\n<h3>3.2 D\u00e9monstration pas \u00e0 pas avec deux matrices d&rsquo;exemple<\/h3>\n<p>Afin de mat\u00e9rialiser ce m\u00e9canisme avec une clart\u00e9 irr\u00e9prochable, mettons en place un protocole exp\u00e9rimental simple fond\u00e9 sur deux matrices carr\u00e9es <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> de dimension 2&#215;2. D\u00e9finissons la matrice <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> de telle sorte qu&rsquo;elle accueille les entiers cons\u00e9cutifs de 1 \u00e0 4 agenc\u00e9s en colonnes, et la matrice <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> avec les entiers cons\u00e9cutifs de 5 \u00e0 8, \u00e9galement distribu\u00e9s par colonne :<\/p>\n<p><code>A &lt;- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)<\/code><\/p>\n<p><code>B &lt;- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)<\/code><\/p>\n<p>Ex\u00e9cutons \u00e0 pr\u00e9sent la commande d&rsquo;\u00e9valuation terme \u00e0 terme au sein de la session de calcul R :<\/p>\n<p><code>C_hadamard &lt;- A * B<\/code><\/p>\n<p>L&rsquo;observation d\u00e9taill\u00e9e de la matrice r\u00e9sultante <code>C_hadamard<\/code> permet de d\u00e9composer l&rsquo;action directe de l&rsquo;op\u00e9rateur sur chaque cellule individuelle :<\/p>\n<ul>\n<li>Pour la cellule en position (1, 1) : le coefficient de la premi\u00e8re ligne et premi\u00e8re colonne de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> (valeur 1) est multipli\u00e9 par le coefficient homologue de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> (valeur 5), ce qui produit <span class=\"arabpsy-math-inline\" data-latex=\"1 \\times 5 = 5\">$1 \\times 5 = 5$<\/span>.<\/li>\n<li>Pour la cellule en position (2, 1) : le coefficient en deuxi\u00e8me ligne et premi\u00e8re colonne de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> (valeur 2) est multipli\u00e9 par celui de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> (valeur 6), produisant <span class=\"arabpsy-math-inline\" data-latex=\"2 \\times 6 = 12\">$2 \\times 6 = 12$<\/span>.<\/li>\n<li>Pour la cellule en position (1, 2) : la premi\u00e8re ligne et deuxi\u00e8me colonne de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> (valeur 3) est multipli\u00e9e par la coordonn\u00e9e correspondante de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> (valeur 7), fournissant <span class=\"arabpsy-math-inline\" data-latex=\"3 \\times 7 = 21\">$3 \\times 7 = 21$<\/span>.<\/li>\n<li>Pour la cellule en position (2, 2) : la deuxi\u00e8me ligne et deuxi\u00e8me colonne de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> (valeur 4) est multipli\u00e9e par celle de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> (valeur 8), donnant <span class=\"arabpsy-math-inline\" data-latex=\"4 \\times 8 = 32\">$4 \\times 8 = 32$<\/span>.<\/li>\n<\/ul>\n<p>La matrice r\u00e9sultante se pr\u00e9sente ainsi sous la forme d&rsquo;un tableau 2&#215;2 dont les colonnes successives contiennent respectivement les valeurs (5, 12) et (21, 32). Cet exemple canonique illustre avec pr\u00e9cision l&rsquo;absence totale de sommation crois\u00e9e entre lignes et colonnes lors de l&rsquo;utilisation de l&rsquo;op\u00e9rateur ast\u00e9risque.<\/p>\n<h3>3.3 Comportement de recyclage de R lors du produit \u00e9l\u00e9ment par \u00e9l\u00e9ment<\/h3>\n<p>L&rsquo;un des traits architecturaux les plus puissants, mais \u00e9galement les plus p\u00e9rilleux, de R r\u00e9side dans sa r\u00e8gle de recyclage automatique des vecteurs et matrices. Lorsque l&rsquo;op\u00e9rateur <code>*<\/code> est sollicit\u00e9 pour interagir entre deux structures dont les dimensions ne co\u00efncident pas parfaitement, R ne g\u00e9n\u00e8re pas syst\u00e9matiquement une interruption fatale. Il cherche au contraire \u00e0 r\u00e9pliquer s\u00e9quentiellement les \u00e9l\u00e9ments de la structure la plus compacte jusqu&rsquo;\u00e0 atteindre la taille de la structure cible, en suivant scrupuleusement l&rsquo;ordre de stockage m\u00e9moire en colonnes.<\/p>\n<p>Le cas d&rsquo;usage le plus intuitif et le plus s\u00fbr de cette r\u00e8gle concerne la multiplication scalaire-matrice. Lorsqu&rsquo;une matrice de dimension arbitraire <span class=\"arabpsy-math-inline\" data-latex=\"m \\times n\">$m \\times n$<\/span> est multipli\u00e9e via l&rsquo;op\u00e9rateur <code>*<\/code> par un nombre scalaire unique (un vecteur de longueur un), ce scalaire est implicitement recycl\u00e9 pour chaque coefficient de la matrice. D&rsquo;un point de vue g\u00e9om\u00e9trique, cette op\u00e9ration \u00e9quivaut \u00e0 une homoth\u00e9tie pure, modifiant l&rsquo;amplitude des vecteurs colonnes sans alt\u00e9rer leurs directions angulaires respectives.<\/p>\n<p>En revanche, la situation devient critique lorsque l&rsquo;on multiplie une matrice par un vecteur de dimension interm\u00e9diaire. Si l&rsquo;on multiplie une matrice 2&#215;2 par un vecteur de longueur deux, R recycle ce vecteur le long des colonnes de la matrice. Si le nombre total d&rsquo;\u00e9l\u00e9ments de la matrice n&rsquo;est pas un multiple exact de la longueur du vecteur, R \u00e9met un avertissement formel, mais poursuit n\u00e9anmoins l&rsquo;ex\u00e9cution du calcul. Cette permissivit\u00e9 structurelle repr\u00e9sente un risque majeur pour l&rsquo;analyste, car elle engendre des r\u00e9sultats num\u00e9riques corrompus sans bloquer le script d&rsquo;analyse. Il est donc fondamental de v\u00e9rifier syst\u00e9matiquement la stricte identit\u00e9 des dimensions avant de mobiliser l&rsquo;op\u00e9rateur <code>*<\/code>.<\/p>\n<h2>4. Multiplication matricielle formelle avec l&rsquo;op\u00e9rateur %*%<\/h2>\n<h3>4.1 R\u00e8gles formelles de conformabilit\u00e9 matricielle<\/h3>\n<p>La multiplication matricielle formelle, historiquement introduite par le math\u00e9maticien Arthur Cayley, ob\u00e9it \u00e0 un paradigme fondamentalement diff\u00e9rent de celui du produit terme \u00e0 terme. D&rsquo;un point de vue alg\u00e9brique, une matrice repr\u00e9sente une application lin\u00e9aire entre deux espaces vectoriels de dimensions finies. Par cons\u00e9quent, la multiplication de deux matrices correspond rigoureusement \u00e0 la composition de deux applications lin\u00e9aires successives. Cette d\u00e9finition g\u00e9om\u00e9trique impose une contrainte math\u00e9matique absolue, universellement d\u00e9sign\u00e9e sous le nom de condition de conformabilit\u00e9 matricielle.<\/p>\n<p>Soit une premi\u00e8re matrice <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> de dimensions <span class=\"arabpsy-math-inline\" data-latex=\"m \\times n\">$m \\times n$<\/span>, caract\u00e9ris\u00e9e par <span class=\"arabpsy-math-inline\" data-latex=\"m\">$m$<\/span> lignes et <span class=\"arabpsy-math-inline\" data-latex=\"n\">$n$<\/span> colonnes, et une seconde matrice <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> de dimensions <span class=\"arabpsy-math-inline\" data-latex=\"r \\times p\">$r \\times p$<\/span>, constitu\u00e9e de <span class=\"arabpsy-math-inline\" data-latex=\"r\">$r$<\/span> lignes et <span class=\"arabpsy-math-inline\" data-latex=\"p\">$p$<\/span> colonnes. L&rsquo;op\u00e9ration du produit matriciel formel, not\u00e9e conventionnellement <span class=\"arabpsy-math-inline\" data-latex=\"A B\">$A B$<\/span>, n&rsquo;est math\u00e9matiquement d\u00e9finie et admissible que si et seulement si le nombre de colonnes de la matrice op\u00e9rande de gauche est rigoureusement \u00e9gal au nombre de lignes de la matrice op\u00e9rande de droite. En termes formels, la condition d&rsquo;existence du produit s&rsquo;\u00e9crit :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"n = r\">$$n = r$$<\/span><\/p>\n<p>Lorsque cette condition de conformabilit\u00e9 int\u00e9rieure est satisfaite, la matrice r\u00e9sultante <span class=\"arabpsy-math-inline\" data-latex=\"C = A B\">$C = A B$<\/span> h\u00e9rite d&rsquo;une g\u00e9om\u00e9trie d\u00e9finie par les dimensions ext\u00e9rieures des deux matrices sources : elle comportera exactement <span class=\"arabpsy-math-inline\" data-latex=\"m\">$m$<\/span> lignes (la hauteur de la matrice gauche) et <span class=\"arabpsy-math-inline\" data-latex=\"p\">$p$<\/span> colonnes (la largeur de la matrice droite). Toute tentative d&rsquo;\u00e9valuer le produit entre des structures violant cette r\u00e8gle d&rsquo;\u00e9galit\u00e9 int\u00e9rieure constitue une impossibilit\u00e9 alg\u00e9brique.<\/p>\n<p>Une cons\u00e9quence imm\u00e9diate et cardinale de cette g\u00e9om\u00e9trie est la non-commutativit\u00e9 fondamentale du produit matriciel standard. M\u00eame dans le cas particulier de matrices carr\u00e9es o\u00f9 les dimensions permettraient d&rsquo;\u00e9valuer indistinctement <span class=\"arabpsy-math-inline\" data-latex=\"A B\">$A B$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"B A\">$B A$<\/span>, les deux matrices r\u00e9sultantes sont, \u00e0 de tr\u00e8s rares exceptions structurelles pr\u00e8s, totalement distinctes (<span class=\"arabpsy-math-inline\" data-latex=\"A B \\neq B A\">$A B \\neq B A$<\/span>). De plus, intervertir l&rsquo;ordre des matrices rectangulaires aboutit dans la majorit\u00e9 des cas \u00e0 une rupture de conformabilit\u00e9 ou \u00e0 une matrice r\u00e9sultante dont les dimensions n&rsquo;ont aucun rapport avec l&rsquo;objectif analytique poursuivi.<\/p>\n<h3>4.2 Syntaxe pratique de l&rsquo;op\u00e9rateur %*% en R<\/h3>\n<p>Pour ex\u00e9cuter un produit matriciel au sens de Cayley, les d\u00e9veloppeurs du langage R ont introduit un op\u00e9rateur binaire sp\u00e9cifique encadr\u00e9 par des d\u00e9limiteurs de pourcentage : <code>%*%<\/code>. Cette syntaxe distinctive permet d&rsquo;indiquer sans ambigu\u00eft\u00e9 au moteur d&rsquo;\u00e9valuation de R qu&rsquo;il ne s&rsquo;agit pas d&rsquo;une multiplication arithm\u00e9tique \u00e9l\u00e9mentaire, mais d&rsquo;une op\u00e9ration d&rsquo;alg\u00e8bre lin\u00e9aire requ\u00e9rant la mise en \u0153uvre de produits scalaires crois\u00e9s entre les vecteurs lignes du premier op\u00e9rande et les vecteurs colonnes du second.<\/p>\n<p>La structure formelle de l&rsquo;instruction dans l&rsquo;interpr\u00e9teur R adopte une formulation directe :<\/p>\n<p><code>C_algebrique &lt;- A %*% B<\/code><\/p>\n<p>D\u00e8s la r\u00e9ception de cette commande, le moteur d&rsquo;ex\u00e9cution de R proc\u00e8de \u00e0 une inspection rigoureuse de l&rsquo;attribut dimensionnel des deux objets. Si la dimension interne ne concorde pas rigoureusement, le flux d&rsquo;ex\u00e9cution s&rsquo;interrompt instantan\u00e9ment en \u00e9mettant le message d&rsquo;erreur standard <code>error: non-conformable arguments<\/code>. Si la conformabilit\u00e9 est valid\u00e9e, R d\u00e9l\u00e8gue le calcul arithm\u00e9tique aux biblioth\u00e8ques de calcul de bas niveau int\u00e9gr\u00e9es \u00e0 l&rsquo;environnement, produisant une matrice rigoureusement format\u00e9e de dimension <span class=\"arabpsy-math-inline\" data-latex=\"m \\times p\">$m \\times p$<\/span>.<\/p>\n<p>Appliquons imm\u00e9diatement cette syntaxe \u00e0 nos deux matrices mod\u00e8les <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> pr\u00e9c\u00e9demment d\u00e9finies dans la section pr\u00e9c\u00e9dente :<\/p>\n<p><code>A &lt;- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)<\/code><\/p>\n<p><code>B &lt;- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)<\/code><\/p>\n<p><code>C_algebrique &lt;- A %*% B<\/code><\/p>\n<p>L&rsquo;ex\u00e9cution de cette instruction ne renvoie aucune erreur puisque les deux matrices pr\u00e9sentent des dimensions respectives 2&#215;2. Cependant, un examen attentif des valeurs num\u00e9riques contenues dans l&rsquo;objet <code>C_algebrique<\/code> r\u00e9v\u00e8le des coefficients enti\u00e8rement distincts de ceux obtenus avec l&rsquo;op\u00e9rateur <code>*<\/code>, mat\u00e9rialisant dans l&rsquo;espace num\u00e9rique la divergence th\u00e9orique entre produit de Hadamard et produit de Cayley.<\/p>\n<h3>4.3 D\u00e9tail analytique des op\u00e9rations scalaires sous-jacentes<\/h3>\n<p>Pour appr\u00e9hender avec une pr\u00e9cision chirurgicale les op\u00e9rations ex\u00e9cut\u00e9es par R lors de l&rsquo;appel \u00e0 <code>A %*% B<\/code>, il est indispensable de d\u00e9tailler la formulation math\u00e9matique r\u00e9gissant chaque coefficient individuel <span class=\"arabpsy-math-inline\" data-latex=\"c_{ij}\">$c_{ij}$<\/span> de la matrice r\u00e9sultante. Pour une matrice <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> de taille <span class=\"arabpsy-math-inline\" data-latex=\"m \\times n\">$m \\times n$<\/span> et une matrice <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> de taille <span class=\"arabpsy-math-inline\" data-latex=\"n \\times p\">$n \\times p$<\/span>, chaque coefficient <span class=\"arabpsy-math-inline\" data-latex=\"c_{ij}\">$c_{ij}$<\/span> correspond au produit scalaire canonique entre la <span class=\"arabpsy-math-inline\" data-latex=\"i\">$i$<\/span>-\u00e8me ligne de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> et la <span class=\"arabpsy-math-inline\" data-latex=\"j\">$j$<\/span>-\u00e8me colonne de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"c_{ij} = \\sum_{k=1}^{n} a_{ik} b_{kj} = a_{i1} b_{1j} + a_{i2} b_{2j} + dots + a_{in} b_{nj}\">$$c_{ij} = \\sum_{k=1}^{n} a_{ik} b_{kj} = a_{i1} b_{1j} + a_{i2} b_{2j} + dots + a_{in} b_{nj}$$<\/span><\/p>\n<p>Reconstituons manuellement le calcul de chacun des quatre coefficients de notre matrice 2&#215;2 r\u00e9sultante :<\/p>\n<ul>\n<li><strong>Coefficient (1, 1) :<\/strong> Combinaison de la ligne 1 de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> [1, 3] et de la colonne 1 de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> [5, 6]. Le calcul s&rsquo;\u00e9crit : <span class=\"arabpsy-math-inline\" data-latex=\"(1 \\times 5) + (3 \\times 6) = 5 + 18 = 23\">$(1 \\times 5) + (3 \\times 6) = 5 + 18 = 23$<\/span>.<\/li>\n<li><strong>Coefficient (2, 1) :<\/strong> Combinaison de la ligne 2 de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> [2, 4] et de la colonne 1 de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> [5, 6]. Le calcul s&rsquo;\u00e9crit : <span class=\"arabpsy-math-inline\" data-latex=\"(2 \\times 5) + (4 \\times 6) = 10 + 24 = 34\">$(2 \\times 5) + (4 \\times 6) = 10 + 24 = 34$<\/span>.<\/li>\n<li><strong>Coefficient (1, 2) :<\/strong> Combinaison de la ligne 1 de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> [1, 3] et de la colonne 2 de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> [7, 8]. Le calcul s&rsquo;\u00e9crit : <span class=\"arabpsy-math-inline\" data-latex=\"(1 \\times 7) + (3 \\times 8) = 7 + 24 = 31\">$(1 \\times 7) + (3 \\times 8) = 7 + 24 = 31$<\/span>.<\/li>\n<li><strong>Coefficient (2, 2) :<\/strong> Combinaison de la ligne 2 de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> [2, 4] et de la colonne 2 de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> [7, 8]. Le calcul s&rsquo;\u00e9crit : <span class=\"arabpsy-math-inline\" data-latex=\"(2 \\times 7) + (4 \\times 8) = 14 + 32 = 46\">$(2 \\times 7) + (4 \\times 8) = 14 + 32 = 46$<\/span>.<\/li>\n<\/ul>\n<p>La matrice finale issue de <code>A %*% B<\/code> contient ainsi les valeurs 23 et 34 dans sa premi\u00e8re colonne, et 31 et 46 dans sa seconde colonne. La confrontation quantitative entre cette matrice et la matrice de Hadamard obtenue pr\u00e9c\u00e9demment (dont les colonnes contenaient respectivement 5, 12 et 21, 32) d\u00e9montre sans \u00e9quivoque qu&rsquo;il s&rsquo;agit de deux univers computationnels distincts : l&rsquo;op\u00e9rateur standard op\u00e8re une synth\u00e8se globale et crois\u00e9e de l&rsquo;information, alors que l&rsquo;op\u00e9rateur \u00e9l\u00e9ment par \u00e9l\u00e9ment maintient une s\u00e9gr\u00e9gation stricte des coordonn\u00e9es.<\/p>\n<h2>5. Analyse comparative : Multiplication scalaire, terme \u00e0 terme et alg\u00e9brique<\/h2>\n<h3>5.1 Tableau comparatif des trois modes de calcul<\/h3>\n<p>Afin de synth\u00e9tiser les caract\u00e9ristiques techniques, math\u00e9matiques et syntaxiques des diff\u00e9rentes approches de multiplication sous l&rsquo;environnement R, le tableau suivant offre une vue comparative exhaustive indispensable pour orienter le choix de l&rsquo;op\u00e9rateur en fonction des finalit\u00e9s d&rsquo;analyse :<\/p>\n<table>\n<thead>\n<tr>\n<th>Type d&rsquo;op\u00e9ration<\/th>\n<th>Syntaxe R<\/th>\n<th>Dimensions requises<\/th>\n<th>Commutativit\u00e9<\/th>\n<th>Interpr\u00e9tation math\u00e9matique<\/th>\n<th>Comportement dimensionnel<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Multiplication scalaire<\/strong><\/td>\n<td><code>k * A<\/code> ou <code>A * k<\/code><\/td>\n<td>Un scalaire (1&#215;1) et une matrice (m x n)<\/td>\n<td>Strictement commutative (<span class=\"arabpsy-math-inline\" data-latex=\"k A = A k\">$k A = A k$<\/span>)<\/td>\n<td>Homoth\u00e9tie globale ; dilatation ou contraction uniforme de l&rsquo;espace<\/td>\n<td>Pr\u00e9serve rigoureusement les dimensions initiales (m x n)<\/td>\n<\/tr>\n<tr>\n<td><strong>Produit de Hadamard<\/strong><\/td>\n<td><code>A * B<\/code><\/td>\n<td>Dimensions congruentes : A(m x n) et B(m x n)<\/td>\n<td>Strictement commutative (<span class=\"arabpsy-math-inline\" data-latex=\"A odot B = B odot A\">$A odot B = B odot A$<\/span>)<\/td>\n<td>Mise \u00e0 l&rsquo;\u00e9chelle locale coordonn\u00e9e par coordonn\u00e9e ; modulation d&rsquo;intensit\u00e9<\/td>\n<td>Pr\u00e9serve rigoureusement les dimensions initiales (m x n)<\/td>\n<\/tr>\n<tr>\n<td><strong>Produit matriciel standard<\/strong><\/td>\n<td><code>A %*% B<\/code><\/td>\n<td>Conformabilit\u00e9 int\u00e9rieure : A(m x n) et B(n x p)<\/td>\n<td>Strictement non-commutative (<span class=\"arabpsy-math-inline\" data-latex=\"A B \\neq B A\">$A B \\neq B A$<\/span>)<\/td>\n<td>Composition d&rsquo;applications lin\u00e9aires, changement de rep\u00e8re ou projection<\/td>\n<td>Dimensions r\u00e9sultantes hybrides : (m x p)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>L&rsquo;analyse de ce tableau met en lumi\u00e8re l&rsquo;asym\u00e9trie structurelle profonde qui s\u00e9pare la multiplication alg\u00e9brique des deux autres modes de calcul. Alors que la multiplication scalaire et le produit de Hadamard op\u00e8rent au sein d&rsquo;un espace topologique invariant sans en alt\u00e9rer la structure dimensionnelle, le produit de Cayley <code>%*%<\/code> agit comme un pont dimensionnel capable de transposer des repr\u00e9sentations g\u00e9om\u00e9triques d&rsquo;un espace vectoriel de d\u00e9part vers un espace d&rsquo;arriv\u00e9e aux propri\u00e9t\u00e9s g\u00e9om\u00e9triques distinctes.<\/p>\n<h3>5.2 Interpr\u00e9tations g\u00e9om\u00e9triques distinctes<\/h3>\n<p>L&rsquo;appr\u00e9hension fine de ces op\u00e9rateurs gagne \u00e0 \u00eatre explicit\u00e9e par le prisme de la g\u00e9om\u00e9trie vectorielle. Lorsqu&rsquo;une matrice de donn\u00e9es <span class=\"arabpsy-math-inline\" data-latex=\"X\">$X$<\/span> contenant des coordonn\u00e9es d&rsquo;individus est multipli\u00e9e par une matrice de projection <span class=\"arabpsy-math-inline\" data-latex=\"P\">$P$<\/span> via l&rsquo;op\u00e9rateur formel <code>X %*% P<\/code>, l&rsquo;action g\u00e9om\u00e9trique \u00e9quivaut \u00e0 soumettre chaque vecteur ligne \u00e0 une rotation, une r\u00e9flexion, ou un \u00e9crasement orthogonal sur un sous-espace. Les corr\u00e9lations originelles entre les axes sont combin\u00e9es et redistribu\u00e9es de mani\u00e8re continue. C&rsquo;est pr\u00e9cis\u00e9ment cette propri\u00e9t\u00e9 qui rend <code>%*%<\/code> irrempla\u00e7able pour calculer des coordonn\u00e9es factorielles ou r\u00e9orienter un rep\u00e8re spatial.<\/p>\n<p>\u00c0 l&rsquo;inverse, l&rsquo;application du produit de Hadamard <code>A * B<\/code> ne r\u00e9alise aucune rotation de l&rsquo;espace g\u00e9om\u00e9trique. Chaque axe de coordonn\u00e9es demeure rigoureusement orthogonal aux autres et conserve son orientation primitive. L&rsquo;action g\u00e9om\u00e9trique se limite \u00e0 d\u00e9former l&rsquo;espace de mani\u00e8re anisotrope : certaines directions sont \u00e9tir\u00e9es tandis que d&rsquo;autres sont comprim\u00e9es, chaque cellule subissant un coefficient de proportionnalit\u00e9 ind\u00e9pendant sans qu&rsquo;aucune synth\u00e8se directionnelle n&rsquo;intervienne.<\/p>\n<p>Quant \u00e0 la multiplication par un scalaire <code>k * A<\/code>, elle repr\u00e9sente une homoth\u00e9tie isotrope parfaite. L&rsquo;ensemble de la structure spatiale est dilat\u00e9 ou contract\u00e9 d&rsquo;un facteur constant, pr\u00e9servant scrupuleusement la totalit\u00e9 des angles, des formes relatives et des rapports de distances au sein du nuage de points. Cette op\u00e9ration n&rsquo;alt\u00e8re en rien la colin\u00e9arit\u00e9 des vecteurs ni la structure de corr\u00e9lation intrins\u00e8que des colonnes.<\/p>\n<h3>5.3 Cas d&rsquo;usage sp\u00e9cifiques en sciences quantitatives<\/h3>\n<p>Dans la pratique de la recherche quantitative et de l&rsquo;ing\u00e9nierie statistique, le choix entre ces trois op\u00e9rateurs s&rsquo;articule autour de cas d&rsquo;usage bien d\u00e9limit\u00e9s :<\/p>\n<p>Le produit \u00e9l\u00e9ment par \u00e9l\u00e9ment <code>*<\/code> s&rsquo;av\u00e8re particuli\u00e8rement utile lors des op\u00e9rations de filtrage, de pond\u00e9ration discr\u00e8te ou de masquage bool\u00e9en. En psychom\u00e9trie computationnelle ou lors de l&rsquo;administration de questionnaires d&rsquo;\u00e9valuation, il est fr\u00e9quent de disposer d&rsquo;une matrice brute de r\u00e9ponses binaires et d&rsquo;une matrice homologue de coefficients de pond\u00e9ration diff\u00e9rentielle associ\u00e9e \u00e0 chaque question pour un groupe d&rsquo;individus donn\u00e9. La multiplication <code>Reponses * Poids<\/code> permet d&rsquo;ajuster instantan\u00e9ment le score de chaque item sans agr\u00e9ger les donn\u00e9es pr\u00e9matur\u00e9ment, conservant la structure fine des variables observ\u00e9es.<\/p>\n<p>L&rsquo;op\u00e9rateur formel <code>%*%<\/code> r\u00e8gne sans partage d\u00e8s lors qu&rsquo;il s&rsquo;agit de mod\u00e9liser des interd\u00e9pendances complexes ou des projections factorielles. L&rsquo;exemple paradigmatique r\u00e9side dans le calcul des scores composites dans le cadre des mod\u00e8les d&rsquo;analyse factorielle ou d&rsquo;analyse en composantes principales : multiplier la matrice standardis\u00e9e des donn\u00e9es individuelles par la matrice des saturations factorielles (<em>loadings<\/em>) g\u00e9n\u00e8re imm\u00e9diatement les coordonn\u00e9es latentes des participants sur les axes principaux.<\/p>\n<p>Enfin, la multiplication scalaire est syst\u00e9matiquement mise \u00e0 profit dans les protocoles de normalisation, de standardisation ou de conversion d&rsquo;unit\u00e9s de mesure. La standardisation d&rsquo;une matrice de dispersion brute pour obtenir une matrice de corr\u00e9lation exploite des produits scalaires successifs, tout comme la division globale d&rsquo;une matrice par la taille d&rsquo;\u00e9chantillon <span class=\"arabpsy-math-inline\" data-latex=\"N - 1\">$N &#8211; 1$<\/span> lors du calcul des estimateurs non biais\u00e9s de variance.<\/p>\n<h2>6. Multiplication de matrices rectangulaires et de vecteurs<\/h2>\n<h3>6.1 Multiplication de matrices de dimensions non carr\u00e9es (m x n) par (n x p)<\/h3>\n<p>Si la manipulation de matrices carr\u00e9es constitue un cadre p\u00e9dagogique id\u00e9al, la quasi-totalit\u00e9 des configurations empiriques en science des donn\u00e9es implique des matrices rectangulaires. Dans une matrice de donn\u00e9es exp\u00e9rimentales classique, le nombre d&rsquo;observations (lignes <span class=\"arabpsy-math-inline\" data-latex=\"m\">$m$<\/span>) diff\u00e8re quasi-syst\u00e9matiquement du nombre de variables enregistr\u00e9es (colonnes <span class=\"arabpsy-math-inline\" data-latex=\"n\">$n$<\/span>). D\u00e8s lors, l&rsquo;application du produit matriciel standard requiert une vigilance accrue quant \u00e0 l&rsquo;agencement des facteurs pour respecter la conformabilit\u00e9 dimensionnelle.<\/p>\n<p>Consid\u00e9rons l&rsquo;instanciation sous R d&rsquo;une premi\u00e8re matrice <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> de dimensions rectangulaires 3&#215;2, et d&rsquo;une seconde matrice <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> de dimensions 2&#215;4. Dans cette configuration, la matrice <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> dispose de 3 lignes et 2 colonnes, tandis que la matrice <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> dispose de 2 lignes et 4 colonnes. Avant d&rsquo;engager le produit, nous v\u00e9rifions formellement l&rsquo;\u00e9galit\u00e9 des dimensions int\u00e9rieures : la largeur de <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> (2 colonnes) correspond parfaitement \u00e0 la hauteur de <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span> (2 lignes). Le produit est donc parfaitement licite et g\u00e9n\u00e9rera une matrice de dimension 3&#215;4.<\/p>\n<p>D\u00e9clarons ces matrices et \u00e9valuons leur produit dans la session de calcul R :<\/p>\n<p><code>A &lt;- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3, ncol = 2)<\/code><\/p>\n<p><code>B &lt;- matrix(c(1, 4, 2, 5, 3, 6, 7, 8), nrow = 2, ncol = 4)<\/code><\/p>\n<p><code>C_rect &lt;- A %*% B<\/code><\/p>\n<p>L&rsquo;inspection structurelle de l&rsquo;objet <code>C_rect<\/code> \u00e0 l&rsquo;aide de la fonction <code>dim(C_rect)<\/code> renvoie le vecteur <code>c(3, 4)<\/code>. Chaque ligne de la matrice <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> a \u00e9t\u00e9 combin\u00e9e avec chacune des 4 colonnes de la matrice <span class=\"arabpsy-math-inline\" data-latex=\"B\">$B$<\/span>, produisant 12 calculs scalaires distincts. Cet exemple met en \u00e9vidence la puissance de r\u00e9duction ou d&rsquo;expansion dimensionnelle propre \u00e0 la multiplication matricielle rectangulaire, pivot de l&rsquo;alg\u00e8bre appliqu\u00e9e.<\/p>\n<h3>6.2 Interactions entre vecteurs num\u00e9riques et matrices<\/h3>\n<p>L&rsquo;interaction entre des vecteurs atomiques simples et des matrices au moyen de l&rsquo;op\u00e9rateur <code>%*%<\/code> est une source d&rsquo;interrogations fr\u00e9quente chez les utilisateurs de R. Dans la syntaxe native de R, un vecteur atomique num\u00e9rique d\u00e9clar\u00e9 simplement par <code>x &lt;- c(1, 2)<\/code> ne poss\u00e8de aucun attribut dimensionnel (son <code>dim(x)<\/code> est strictement <code>NULL<\/code>). Cependant, lorsqu&rsquo;un tel vecteur est confront\u00e9 \u00e0 l&rsquo;op\u00e9rateur <code>%*%<\/code>, R applique un m\u00e9canisme de coercition dimensionnelle contextuelle hautement sophistiqu\u00e9.<\/p>\n<p>Lorsque le vecteur intervient \u00e0 droite de la matrice dans l&rsquo;expression <code>A %*% x<\/code>, R interpr\u00e8te implicitement ce vecteur atomique comme une matrice colonne formelle de dimension <span class=\"arabpsy-math-inline\" data-latex=\"n \\times 1\">$n \\times 1$<\/span>. Pour que ce produit matrice-vecteur aboutisse, le nombre de colonnes de la matrice <span class=\"arabpsy-math-inline\" data-latex=\"A\">$A$<\/span> doit co\u00efncider avec la longueur du vecteur. Ce calcul correspond \u00e0 la transformation lin\u00e9aire classique d&rsquo;un vecteur g\u00e9om\u00e9trique par un op\u00e9rateur matriciel, produisant une nouvelle matrice colonne de dimension <span class=\"arabpsy-math-inline\" data-latex=\"m \\times 1\">$m \\times 1$<\/span>.<\/p>\n<p>Inversement, lorsque ce m\u00eame vecteur atomique est positionn\u00e9 \u00e0 gauche de l&rsquo;op\u00e9rateur dans l&rsquo;instruction <code>x %*% A<\/code>, R l&rsquo;interpr\u00e8te automatiquement comme une matrice ligne de dimension <span class=\"arabpsy-math-inline\" data-latex=\"1 \\times m\">$1 \\times m$<\/span>. Dans cette configuration, la longueur du vecteur doit n\u00e9cessairement \u00e9galer le nombre de lignes de la matrice. Le r\u00e9sultat g\u00e9n\u00e9r\u00e9 est une matrice ligne de dimension <span class=\"arabpsy-math-inline\" data-latex=\"1 \\times n\">$1 \\times n$<\/span>. Cette adaptabilit\u00e9 syntaxique de R simplifie l&rsquo;\u00e9criture des scripts mais exige une parfaite clart\u00e9 d&rsquo;intention pour \u00e9viter les retournements d&rsquo;orientation involontaires.<\/p>\n<h3>6.3 Diff\u00e9renciation explicite entre vecteurs lignes et vecteurs colonnes<\/h3>\n<p>Bien que la coercition contextuelle des vecteurs atomiques offre un confort syntaxique appr\u00e9ciable, le d\u00e9veloppement de pipelines de production statistique critiques exige une rigueur structurelle exempte de toute ambigu\u00eft\u00e9 implicite. Il est vivement recommand\u00e9 d&rsquo;instancier explicitement les vecteurs sous forme de v\u00e9ritables matrices unidimensionnelles d\u00e8s lors qu&rsquo;ils participent \u00e0 des cha\u00eenes d&rsquo;op\u00e9rations alg\u00e9briques complexes.<\/p>\n<p>Pour mat\u00e9rialiser formellement un vecteur colonne de dimension <span class=\"arabpsy-math-inline\" data-latex=\"n \\times 1\">$n \\times 1$<\/span>, la commande standard s&rsquo;\u00e9crit :<\/p>\n<p><code>v_colonne &lt;- matrix(c(1, 2, 3), ncol = 1)<\/code><\/p>\n<p>Pour d\u00e9finir sans \u00e9quivoque un vecteur ligne de dimension <span class=\"arabpsy-math-inline\" data-latex=\"1 \\times n\">$1 \\times n$<\/span>, la formulation ad\u00e9quate fait appel au param\u00e8tre de ligne :<\/p>\n<p><code>v_ligne &lt;- matrix(c(1, 2, 3), nrow = 1)<\/code><\/p>\n<p>En assignant explicitement la g\u00e9om\u00e9trie de l&rsquo;objet, le programmeur garantit que toute discordance d&rsquo;orientation dimensionnelle provoquera un \u00e9chec imm\u00e9diat plut\u00f4t qu&rsquo;une adaptation implicite silencieuse potentiellement erron\u00e9e. Enfin, apr\u00e8s avoir achev\u00e9 une s\u00e9quence complexe de multiplications matricielles et lorsqu&rsquo;il s&rsquo;av\u00e8re n\u00e9cessaire de r\u00e9int\u00e9grer le r\u00e9sultat scalaire ou unidimensionnel dans des routines univari\u00e9es, la fonction <code>drop()<\/code> permet de d\u00e9pouiller \u00e9l\u00e9gamment la matrice de ses dimensions r\u00e9siduelles triviales pour la restituer sous la forme d&rsquo;un vecteur atomique standard.<\/p>\n<h2>7. Produits scalaires, formes quadratiques et produits ext\u00e9rieurs<\/h2>\n<h3>7.1 Calcul du produit scalaire de deux vecteurs<\/h3>\n<p>Le produit scalaire (ou produit euclidien standard) entre deux vecteurs de m\u00eame dimension constitue l&rsquo;op\u00e9ration \u00e9l\u00e9mentaire fondamentale de la g\u00e9om\u00e9trie euclidienne et de l&rsquo;analyse multivari\u00e9e. Math\u00e9matiquement, pour deux vecteurs colonnes <span class=\"arabpsy-math-inline\" data-latex=\"x\">$x$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"y\">$y$<\/span> appartenant \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"\\mathbb{R}^n\">$\\mathbb{R}^n$<\/span>, le produit scalaire est d\u00e9fini comme la somme des produits de leurs coordonn\u00e9es homologues. Sous forme d&rsquo;\u00e9criture matricielle formelle, cette quantit\u00e9 s&rsquo;exprime comme le produit de la transpos\u00e9e du vecteur <span class=\"arabpsy-math-inline\" data-latex=\"x\">$x$<\/span> par le vecteur <span class=\"arabpsy-math-inline\" data-latex=\"y\">$y$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\langle x, y \\rangle = x^T y = \\sum_{i=1}^{n} x_i y_i\">$$\\langle x, y \\rangle = x^T y = \\sum_{i=1}^{n} x_i y_i$$<\/span><\/p>\n<p>Dans l&rsquo;environnement R, la transposition d&rsquo;une structure matricielle ou vectorielle s&rsquo;op\u00e8re au moyen de la fonction native <code>t()<\/code>. Par cons\u00e9quent, la traduction rigoureuse du produit scalaire de deux vecteurs atomiques ou colonnes <code>x<\/code> et <code>y<\/code> s&rsquo;\u00e9crit naturellement :<\/p>\n<p><code>produit_scalaire_mat &lt;- t(x) %*% y<\/code><\/p>\n<p>Il convient de souligner que cette instruction renvoie formellement un objet de classe <code>matrix<\/code> de dimension 1&#215;1 contenant la valeur num\u00e9rique calcul\u00e9e. Si le pipeline d&rsquo;analyse requiert l&rsquo;utilisation subs\u00e9quente de ce r\u00e9sultat comme un scalaire pur dans des calculs arithm\u00e9tiques standards, l&rsquo;analyste peut soit encapsuler l&rsquo;expression dans la fonction <code>as.numeric(t(x) %*% y)<\/code>, soit lui appliquer l&rsquo;op\u00e9rateur de r\u00e9duction <code>drop()<\/code>. Cette pr\u00e9caution garantit une transition fluide entre l&rsquo;alg\u00e8bre matricielle et l&rsquo;arithm\u00e9tique scalaire.<\/p>\n<h3>7.2 Calcul du produit ext\u00e9rieur de deux vecteurs<\/h3>\n<p>\u00c0 l&rsquo;oppos\u00e9 diam\u00e9tral du produit scalaire, qui contracte deux vecteurs de dimension <span class=\"arabpsy-math-inline\" data-latex=\"n\">$n$<\/span> pour former un scalaire unique de dimension <span class=\"arabpsy-math-inline\" data-latex=\"1 \\times 1\">$1 \\times 1$<\/span>, le produit ext\u00e9rieur (ou produit tensoriel dyadique) \u00e9tend deux vecteurs pour engendrer une matrice bidimensionnelle compl\u00e8te. Soient un vecteur <span class=\"arabpsy-math-inline\" data-latex=\"x\">$x$<\/span> de dimension <span class=\"arabpsy-math-inline\" data-latex=\"m \\times 1\">$m \\times 1$<\/span> et un vecteur <span class=\"arabpsy-math-inline\" data-latex=\"y\">$y$<\/span> de dimension <span class=\"arabpsy-math-inline\" data-latex=\"n \\times 1\">$n \\times 1$<\/span>. Le produit ext\u00e9rieur de <span class=\"arabpsy-math-inline\" data-latex=\"x\">$x$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"y\">$y$<\/span>, not\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"x y^T\">$x y^T$<\/span> ou <span class=\"arabpsy-math-inline\" data-latex=\"x o\\times y\">$x o\\times y$<\/span>, est une matrice de dimensions <span class=\"arabpsy-math-inline\" data-latex=\"m \\times n\">$m \\times n$<\/span> dont le coefficient d&rsquo;indice <span class=\"arabpsy-math-inline\" data-latex=\"(i, j)\">$(i, j)$<\/span> est \u00e9gal au produit simple <span class=\"arabpsy-math-inline\" data-latex=\"x_i y_j\">$x_i y_j$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"M_{ij} = x_i y_j\">$$M_{ij} = x_i y_j$$<\/span><\/p>\n<p>Sous R, ce r\u00e9sultat s&rsquo;obtient de deux mani\u00e8res compl\u00e9mentaires. La premi\u00e8re approche repose directement sur le produit matriciel de Cayley en combinant le vecteur colonne initial et la transpos\u00e9e du second vecteur :<\/p>\n<p><code>prod_ext_cayley &lt;- x %*% t(y)<\/code><\/p>\n<p>La seconde approche exploite l&rsquo;op\u00e9rateur sp\u00e9cialis\u00e9 de produit ext\u00e9rieur propre au langage R, repr\u00e9sent\u00e9 par le symbole <code>%o%<\/code>, ou la fonction polyvalente <code>outer()<\/code> :<\/p>\n<p><code>prod_ext_natif &lt;- x %o% y<\/code><\/p>\n<p>Cette structure matricielle g\u00e9n\u00e9r\u00e9e par produit ext\u00e9rieur poss\u00e8de une propri\u00e9t\u00e9 math\u00e9matique remarquable : elle constitue une matrice de rang 1, ce qui implique que l&rsquo;ensemble de ses lignes (ou colonnes) sont strictement colin\u00e9aires entre elles. Les produits ext\u00e9rieurs sont omnipr\u00e9sents dans la construction des op\u00e9rateurs de projection, l&rsquo;actualisation des approximations de rang faible (comme dans l&rsquo;algorithme SVD) et la mod\u00e9lisation des matrices de dispersion univari\u00e9es.<\/p>\n<h3>7.3 Calcul des formes quadratiques pour l&rsquo;estimation de variances<\/h3>\n<p>L&rsquo;un des calculs matriciels les plus embl\u00e9matiques et les plus r\u00e9currents en inf\u00e9rence statistique, en \u00e9conom\u00e9trie et en psychom\u00e9trie quantitative concerne l&rsquo;\u00e9valuation des formes quadratiques. Soit un vecteur de pond\u00e9rations ou de contrastes <span class=\"arabpsy-math-inline\" data-latex=\"x in \\mathbb{R}^n\">$x in \\mathbb{R}^n$<\/span> et une matrice carr\u00e9e <span class=\"arabpsy-math-inline\" data-latex=\"\\Sigma\">$\\Sigma$<\/span> de dimension <span class=\"arabpsy-math-inline\" data-latex=\"n \\times n\">$n \\times n$<\/span> repr\u00e9sentant typiquement une matrice de covariance, de pr\u00e9cision ou d&rsquo;information de Fisher. La forme quadratique associ\u00e9e \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"x\">$x$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"\\Sigma\">$\\Sigma$<\/span> est d\u00e9finie par le scalaire :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"q(x) = x^T \\Sigma x\">$$q(x) = x^T \\Sigma x$$<\/span><\/p>\n<p>Sous R, l&rsquo;\u00e9valuation imm\u00e9diate de cette expression encha\u00eene deux multiplications matricielles s\u00e9quentielles :<\/p>\n<p><code>forme_quadratique &lt;- t(x) %*% Sigma %*% x<\/code><\/p>\n<p>Ce calcul intervient directement dans l&rsquo;estimation de la variance composite d&rsquo;un score synth\u00e9tique. En th\u00e9orie des tests psychom\u00e9triques, si un test est compos\u00e9 de <span class=\"arabpsy-math-inline\" data-latex=\"n\">$n$<\/span> sous-\u00e9chelles pond\u00e9r\u00e9es par les coefficients contenus dans le vecteur <span class=\"arabpsy-math-inline\" data-latex=\"x\">$x$<\/span>, et que <span class=\"arabpsy-math-inline\" data-latex=\"\\Sigma\">$\\Sigma$<\/span> d\u00e9signe la matrice de variance-covariance empirique des items, la variance totale du test composite est exactement donn\u00e9e par cette forme quadratique. Pour que cette quantit\u00e9 conserve un sens statistique strict et garantisse une variance strictement positive pour tout vecteur de contrastes non nul, la matrice <span class=\"arabpsy-math-inline\" data-latex=\"\\Sigma\">$\\Sigma$<\/span> doit imp\u00e9rativement respecter la contrainte formelle de sym\u00e9trie et \u00eatre d\u00e9finie positive (ou semi-d\u00e9finie positive).<\/p>\n<h2>8. Optimisation algorithmique avec crossprod() et tcrossprod()<\/h2>\n<h3>8.1 La fonction crossprod() : th\u00e9orie et gain de performance<\/h3>\n<p>Dans de nombreuses proc\u00e9dures de mod\u00e9lisation quantitative, les op\u00e9rations matricielles les plus intensives n&rsquo;impliquent pas deux matrices arbitraires distinctes, mais une matrice multipli\u00e9e par la transpos\u00e9e d&rsquo;une autre, ou plus fr\u00e9quemment encore, une matrice pr\u00e9multipli\u00e9e par sa propre transpos\u00e9e sous la forme <span class=\"arabpsy-math-inline\" data-latex=\"X^T X\">$X^T X$<\/span>. L&rsquo;\u00e9criture na\u00efve d&rsquo;un tel calcul sous R consiste \u00e0 formuler l&rsquo;instruction <code>t(X) %*% X<\/code>. Bien que math\u00e9matiquement irr\u00e9prochable, cette \u00e9criture est sous-optimale sur le plan computationnel.<\/p>\n<p>L&rsquo;ex\u00e9cution de <code>t(X) %*% X<\/code> contraint l&rsquo;interpr\u00e9teur R \u00e0 r\u00e9aliser deux \u00e9tapes s\u00e9quentielles distinctes : tout d&rsquo;abord, allouer une nouvelle zone de m\u00e9moire vive pour mat\u00e9rialiser physiquement la transpos\u00e9e explicite de <span class=\"arabpsy-math-inline\" data-latex=\"X\">$X$<\/span>, ce qui implique une duplication des donn\u00e9es et une r\u00e9organisation m\u00e9moire de type <em>row-major<\/em> vers <em>column-major<\/em> ; ensuite, transmettre cette copie \u00e9ph\u00e9m\u00e8re et la matrice d&rsquo;origine \u00e0 la routine de multiplication matricielle standard. Ce processus g\u00e9n\u00e8re une empreinte m\u00e9moire inutile et d\u00e9grade l&rsquo;efficacit\u00e9 du cache processeur.<\/p>\n<p>Pour \u00e9liminer ce goulot d&rsquo;\u00e9tranglement, R int\u00e8gre une fonction native hautement sp\u00e9cialis\u00e9e : <code>crossprod()<\/code>. Par d\u00e9finition math\u00e9matique formelle :<\/p>\n<p><code>crossprod(A, B)<\/code> \u00e9quivaut rigoureusement \u00e0 <code>t(A) %*% B<\/code><\/p>\n<p><code>crossprod(A)<\/code> \u00e9quivaut rigoureusement \u00e0 <code>t(A) %*% A<\/code><\/p>\n<p>L&rsquo;avantage d\u00e9cisif de <code>crossprod()<\/code> r\u00e9side dans son impl\u00e9mentation interne de bas niveau au sein du code source en langage C et Fortran de R. La fonction calcule le produit alg\u00e9brique directement en acc\u00e9dant aux donn\u00e9es de la matrice d&rsquo;origine selon un sch\u00e9ma d&rsquo;indexation invers\u00e9, sans jamais allouer ni construire la transpos\u00e9e en m\u00e9moire vive. De plus, lorsqu&rsquo;elle est invoqu\u00e9e sous sa forme univari\u00e9e <code>crossprod(A)<\/code>, la fonction tire parti de la sym\u00e9trie math\u00e9matique intrins\u00e8que de la matrice r\u00e9sultante <span class=\"arabpsy-math-inline\" data-latex=\"A^T A\">$A^T A$<\/span> pour n&rsquo;\u00e9valuer que la moiti\u00e9 des termes scalaires, dupliquant simplement les \u00e9l\u00e9ments sym\u00e9triques, ce qui acc\u00e9l\u00e8re encore la vitesse d&rsquo;ex\u00e9cution.<\/p>\n<h3>8.2 La fonction tcrossprod() : formulation et cas d&rsquo;usage<\/h3>\n<p>En miroir direct de la fonction <code>crossprod()<\/code>, R fournit l&rsquo;op\u00e9rateur optimis\u00e9 sym\u00e9trique <code>tcrossprod()<\/code>. Cette fonction est express\u00e9ment calibr\u00e9e pour les op\u00e9rations o\u00f9 la seconde matrice op\u00e9rande doit subir la transposition. Sa formulation fonctionnelle s&rsquo;\u00e9tablit comme suit :<\/p>\n<p><code>tcrossprod(A, B)<\/code> \u00e9quivaut rigoureusement \u00e0 <code>A %*% t(B)<\/code><\/p>\n<p><code>tcrossprod(A)<\/code> \u00e9quivaut rigoureusement \u00e0 <code>A %*% t(A)<\/code><\/p>\n<p>Le cas univari\u00e9 <code>tcrossprod(A)<\/code> \u00e9value le produit d&rsquo;une matrice par sa propre transpos\u00e9e, op\u00e9ration fr\u00e9quemment d\u00e9sign\u00e9e sous le terme de produit crois\u00e9 transpos\u00e9. Dans les applications empiriques d&rsquo;analyse de donn\u00e9es, cette structure appara\u00eet avec une r\u00e9gularit\u00e9 constante. C&rsquo;est notamment le formalisme utilis\u00e9 pour construire les matrices de similarit\u00e9 inter-individus (matrices de Gram) dans les m\u00e9thodes \u00e0 noyaux (<em>kernel methods<\/em>), les algorithmes d&rsquo;apprentissage non supervis\u00e9, ainsi que dans le calcul de la covariance des observations dans les mod\u00e8les mixtes ou les processus gaussiens.<\/p>\n<p>Tout comme son homologue, <code>tcrossprod()<\/code> contourne l&rsquo;allocation physique de l&rsquo;objet transpos\u00e9 et exploite les routines BLAS sous-jacentes les plus performantes, offrant un gain substantiel de temps machine et r\u00e9duisant la sollicitation du ramasse-miettes (<em>garbage collector<\/em>) de R lors des calculs it\u00e9ratifs de grande ampleur.<\/p>\n<h3>8.3 Benchmarking comparatif des temps d&rsquo;ex\u00e9cution<\/h3>\n<p>Pour mesurer avec rigueur scientifique le gain de performance apport\u00e9 par ces fonctions optimis\u00e9es, il convient de mener une \u00e9tude de chronom\u00e9trie comparative en utilisant le package de micro-\u00e9talonnage <code>microbenchmark<\/code>. Consid\u00e9rons une matrice al\u00e9atoire de grande dimension <span class=\"arabpsy-math-inline\" data-latex=\"X\">$X$<\/span> comprenant 2000 lignes et 500 colonnes, repr\u00e9sentative d&rsquo;un jeu de donn\u00e9es g\u00e9nomiques ou psychom\u00e9triques massives.<\/p>\n<p>L&rsquo;\u00e9valuation compar\u00e9e de la formulation conventionnelle et de la fonction optimis\u00e9e r\u00e9v\u00e8le des \u00e9carts remarquables :<\/p>\n<p><code>library(microbenchmark)<\/code><\/p>\n<p><code>X &lt;- matrix(rnorm(2000 * 500), nrow = 2000, ncol = 500)<\/code><\/p>\n<p><code>resultats &lt;- microbenchmark(<\/code><br \/>\n&nbsp;&nbsp;<code>naif = t(X) %*% X,<\/code><br \/>\n&nbsp;&nbsp;<code>optimise = crossprod(X),<\/code><br \/>\n&nbsp;&nbsp;<code>times = 100<\/code><br \/>\n<code>)<\/code><\/p>\n<p>L&rsquo;analyse des temps m\u00e9dians d&rsquo;ex\u00e9cution met syst\u00e9matiquement en \u00e9vidence une acc\u00e9l\u00e9ration de l&rsquo;ordre de 30 % \u00e0 50 % en faveur de <code>crossprod(X)<\/code>, accompagn\u00e9e d&rsquo;une dispersion temporelle nettement plus faible. Cette sup\u00e9riorit\u00e9 algorithmique s&rsquo;explique non seulement par l&rsquo;\u00e9conomie de la copie m\u00e9moire de la matrice transpos\u00e9e, mais \u00e9galement par une meilleure r\u00e9utilisation des lignes de cache L1 et L2 du microprocesseur. Dans le cadre de simulations intensives de Monte-Carlo ou de proc\u00e9dures de r\u00e9\u00e9chantillonnage par <em>bootstrap<\/em> n\u00e9cessitant l&rsquo;\u00e9valuation de milliers de mod\u00e8les successifs, le recours syst\u00e9matique \u00e0 <code>crossprod()<\/code> et <code>tcrossprod()<\/code> constitue un standard d&rsquo;ing\u00e9nierie statistique incontournable.<\/p>\n<h2>9. Applications empiriques en psychom\u00e9trie et mod\u00e9lisation statistique<\/h2>\n<h3>9.1 Estimation des coefficients du mod\u00e8le de r\u00e9gression lin\u00e9aire multiple<\/h3>\n<p>L&rsquo;application la plus illustre de la multiplication matricielle en statistique th\u00e9orique et appliqu\u00e9e concerne la r\u00e9solution analytique du mod\u00e8le lin\u00e9aire g\u00e9n\u00e9ral par la m\u00e9thode des Moindres Carr\u00e9s Ordinaires (MCO). Consid\u00e9rons le mod\u00e8le unifi\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"Y = X \\beta + \\epsilon\">$Y = X \\beta + \\epsilon$<\/span>, o\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"Y\">$Y$<\/span> d\u00e9signe le vecteur des observations de dimension <span class=\"arabpsy-math-inline\" data-latex=\"N \\times 1\">$N \\times 1$<\/span>, <span class=\"arabpsy-math-inline\" data-latex=\"X\">$X$<\/span> repr\u00e9sente la matrice de dessein (ou matrice des pr\u00e9dicteurs augment\u00e9e d&rsquo;une colonne unitaire pour l&rsquo;interception) de dimension <span class=\"arabpsy-math-inline\" data-latex=\"N \\times (p + 1)\">$N \\times (p + 1)$<\/span>, et <span class=\"arabpsy-math-inline\" data-latex=\"\\beta\">$\\beta$<\/span> est le vecteur des param\u00e8tres de r\u00e9gression inconnus.<\/p>\n<p>L&rsquo;\u00e9quation normale de minimisation de la somme des carr\u00e9s des r\u00e9sidus admet la solution matricielle analytique ferm\u00e9e :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\hat{\\beta} = (X^T X)^{-1} X^T Y\">$$\\hat{\\beta} = (X^T X)^{-1} X^T Y$$<\/span><\/p>\n<p>En combinant les op\u00e9rateurs d&rsquo;optimisation \u00e9tudi\u00e9s pr\u00e9c\u00e9demment avec la fonction d&rsquo;inversion matricielle <code>solve()<\/code>, l&rsquo;estimation rigoureuse et computationnellement efficace du vecteur de coefficients <span class=\"arabpsy-math-inline\" data-latex=\"\\hat{\\beta}\">$\\hat{\\beta}$<\/span> s&rsquo;impl\u00e9mente sous R \u00e0 l&rsquo;aide de l&rsquo;instruction compacte suivante :<\/p>\n<p><code>beta_chapeau &lt;- solve(crossprod(X)) %*% crossprod(X, Y)<\/code><\/p>\n<p>Dans cette formulation, <code>crossprod(X)<\/code> \u00e9value le bloc d&rsquo;information <span class=\"arabpsy-math-inline\" data-latex=\"X^T X\">$X^T X$<\/span>, tandis que <code>crossprod(X, Y)<\/code> calcule directement le produit <span class=\"arabpsy-math-inline\" data-latex=\"X^T Y\">$X^T Y$<\/span>. Une multiplication matricielle formelle <code>%*%<\/code> applique ensuite l&rsquo;inverse de la dispersion sur le vecteur des projections. La comparaison directe entre les valeurs contenues dans le vecteur <code>beta_chapeau<\/code> et les coefficients renvoy\u00e9s par la fonction native <code>lm(Y ~ X - 1)<\/code> d\u00e9montre une identit\u00e9 num\u00e9rique absolue, validant empiriquement l&rsquo;isomorphisme entre la th\u00e9orie alg\u00e9brique et les fonctions statistiques de haut niveau.<\/p>\n<h3>9.2 Calcul des matrices de covariance et de corr\u00e9lation empiriques<\/h3>\n<p>L&rsquo;\u00e9valuation des relations de d\u00e9pendance bivari\u00e9es au sein d&rsquo;un ensemble de variables quantitatives constitue le socle de l&rsquo;analyse multivari\u00e9e en psychom\u00e9trie et en sciences sociales. Soit une matrice de donn\u00e9es brutes <span class=\"arabpsy-math-inline\" data-latex=\"D\">$D$<\/span> de dimension <span class=\"arabpsy-math-inline\" data-latex=\"N \\times P\">$N \\times P$<\/span>, o\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> repr\u00e9sente le nombre d&rsquo;individus observ\u00e9s et <span class=\"arabpsy-math-inline\" data-latex=\"P\">$P$<\/span> le nombre de variables m\u00e9triques (par exemple, les scores \u00e0 diff\u00e9rents tests standardis\u00e9s). Le calcul formel de la matrice de variance-covariance empirique non biais\u00e9e <span class=\"arabpsy-math-inline\" data-latex=\"S\">$S$<\/span> exige au pr\u00e9alable le centrage des variables par rapport \u00e0 leurs moyennes empiriques respectives.<\/p>\n<p>Ce centrage s&rsquo;op\u00e8re de mani\u00e8re vectoris\u00e9e via la fonction native <code>scale(D, center = TRUE, scale = FALSE)<\/code>, qui soustrait \u00e0 chaque colonne sa moyenne arithm\u00e9tique. D\u00e9signons par <span class=\"arabpsy-math-inline\" data-latex=\"X_c\">$X_c$<\/span> cette matrice de donn\u00e9es centr\u00e9es de dimension <span class=\"arabpsy-math-inline\" data-latex=\"N \\times P\">$N \\times P$<\/span>. La matrice de variance-covariance empirique <span class=\"arabpsy-math-inline\" data-latex=\"S\">$S$<\/span> est formellement d\u00e9finie par l&rsquo;\u00e9quation matricielle :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"S = \\frac{1}{N - 1} X_c^T X_c\">$$S = \\frac{1}{N &#8211; 1} X_c^T X_c$$<\/span><\/p>\n<p>Dans l&rsquo;environnement R, cette expression se traduit directement par l&rsquo;articulation conjointe d&rsquo;un produit scalaire et d&rsquo;une multiplication matricielle crois\u00e9e :<\/p>\n<p><code>N &lt;- nrow(Xc)<\/code><\/p>\n<p><code>matrice_cov &lt;- (1 \/ (N - 1)) * crossprod(Xc)<\/code><\/p>\n<p>La matrice r\u00e9sultante de dimension <span class=\"arabpsy-math-inline\" data-latex=\"P \\times P\">$P \\times P$<\/span> contient les variances univari\u00e9es sur sa diagonale principale (<span class=\"arabpsy-math-inline\" data-latex=\"s_j^2\">$s_j^2$<\/span>) et les covariances bivari\u00e9es sur l&rsquo;ensemble de ses termes extradiagonaux (<span class=\"arabpsy-math-inline\" data-latex=\"s_{jk}\">$s_{jk}$<\/span>). Cette matrice de dispersion servira ensuite de mati\u00e8re premi\u00e8re pour calculer le coefficient d&rsquo;alpha de Cronbach \u00e9valuant la coh\u00e9rence interne des items psychom\u00e9triques, ou pour alimenter les algorithmes de factorisation spectrale.<\/p>\n<h3>9.3 Calcul des scores composites et projection factorielle<\/h3>\n<p>Dans le domaine de l&rsquo;\u00e9valuation psychom\u00e9trique et des mod\u00e8les de variables latentes, il est d&rsquo;usage courant de condenser une batterie de nombreuses questions observables en un nombre restreint de scores synth\u00e9tiques ou composites, refl\u00e9tant des dimensions psychologiques sous-jacentes (telles que les traits de personnalit\u00e9 du mod\u00e8le Big Five ou les dimensions de l&rsquo;intelligence g\u00e9n\u00e9rale).<\/p>\n<p>Ce processus de synth\u00e8se repose de mani\u00e8re fondamentale sur la multiplication matricielle. Consid\u00e9rons une matrice de donn\u00e9es individuelles pr\u00e9alablement standardis\u00e9es <span class=\"arabpsy-math-inline\" data-latex=\"Z\">$Z$<\/span> de dimension <span class=\"arabpsy-math-inline\" data-latex=\"N \\times P\">$N \\times P$<\/span>, o\u00f9 chaque colonne pr\u00e9sente une moyenne nulle et une variance unitaire, et une matrice de saturations ou de poids factoriels <span class=\"arabpsy-math-inline\" data-latex=\"W\">$W$<\/span> de dimension <span class=\"arabpsy-math-inline\" data-latex=\"P \\times K\">$P \\times K$<\/span>, issue d&rsquo;une analyse factorielle ou d&rsquo;une analyse en composantes principales (o\u00f9 <span class=\"arabpsy-math-inline\" data-latex=\"K\">$K$<\/span> repr\u00e9sente le nombre de composantes latentes retenues, avec <span class=\"arabpsy-math-inline\" data-latex=\"K ll P\">$K ll P$<\/span>).<\/p>\n<p>La d\u00e9rivation des profils factoriels pour l&rsquo;ensemble des <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> participants s&rsquo;effectue par projection orthogonale via l&rsquo;instruction :<\/p>\n<p><code>Scores_Fact &lt;- Z %*% W<\/code><\/p>\n<p>La matrice <code>Scores_Fact<\/code> r\u00e9sultante, de dimension <span class=\"arabpsy-math-inline\" data-latex=\"N \\times K\">$N \\times K$<\/span>, attribue \u00e0 chaque individu un ensemble de coordonn\u00e9es synth\u00e9tiques le long des nouveaux axes factoriels. Si les saturations factorielles issues de l&rsquo;extraction sont mutuellement orthogonales, l&rsquo;analyste peut v\u00e9rifier formellement cette ind\u00e9pendance g\u00e9om\u00e9trique en calculant la dispersion des scores composites via <code>crossprod(Scores_Fact)<\/code>, qui doit se rapprocher d&rsquo;une matrice strictement diagonale, confirmant l&rsquo;absence de redondance informationnelle entre les composantes extraites.<\/p>\n<h2>10. Diagnostics, erreurs courantes et proc\u00e9dures de d\u00e9bogage<\/h2>\n<h3>10.1 Analyse de l&rsquo;erreur classique : &lsquo;non-conformable arguments&rsquo;<\/h3>\n<p>L&rsquo;interruption logicielle la plus fr\u00e9quemment rencontr\u00e9e lors de la manipulation des op\u00e9rateurs d&rsquo;alg\u00e8bre lin\u00e9aire sous R est sans conteste le message d&rsquo;erreur explicite :<\/p>\n<p><code>Error in A %*% B : non-conformable arguments<\/code><\/p>\n<p>Cette notification d&rsquo;\u00e9chec se produit d\u00e8s lors que le moteur d&rsquo;\u00e9valuation interne de R constate une rupture de la conformabilit\u00e9 int\u00e9rieure requise par le produit matriciel formel. En d&rsquo;autres termes, le nombre de colonnes de l&rsquo;op\u00e9rande de gauche ne correspond pas rigoureusement au nombre de lignes de l&rsquo;op\u00e9rande de droite. Cette erreur peut r\u00e9sulter d&rsquo;une simple inversion d&rsquo;ordre dans la cha\u00eene des multiplications (tenter d&rsquo;\u00e9valuer <span class=\"arabpsy-math-inline\" data-latex=\"B A\">$B A$<\/span> au lieu de <span class=\"arabpsy-math-inline\" data-latex=\"A B\">$A B$<\/span>), d&rsquo;un oubli de transposition, ou d&rsquo;une mauvaise orientation lors de l&rsquo;instanciation des structures.<\/p>\n<p>Le protocole de diagnostic m\u00e9thodique pour neutraliser cette anomalie repose sur une inspection syst\u00e9matique des dimensions g\u00e9om\u00e9triques avant l&rsquo;\u00e9valuation du produit. L&rsquo;analyste doit ins\u00e9rer des points de contr\u00f4le dans son code \u00e0 l&rsquo;aide de la syntaxe :<\/p>\n<p><code>print(dim(A))<\/code><\/p>\n<p><code>print(dim(B))<\/code><\/p>\n<p>La r\u00e8gle empirique de d\u00e9bogage impose que <code>ncol(A) == nrow(B)<\/code> soit strictement v\u00e9rifi\u00e9. Si cette condition logique est fausse mais que <code>ncol(A) == ncol(B)<\/code> ou <code>nrow(A) == nrow(B)<\/code> est observ\u00e9e, la solution analytique consiste quasi-syst\u00e9matiquement \u00e0 transposer l&rsquo;un des op\u00e9randes en encapsulant la matrice d\u00e9viante dans la fonction <code>t()<\/code>, r\u00e9tablissant ainsi la conformabilit\u00e9 requise sans d\u00e9naturer l&rsquo;information contenue dans le jeu de donn\u00e9es.<\/p>\n<h3>10.2 Confusion fr\u00e9quente entre vecteurs 1D et matrices unidimensionnelles<\/h3>\n<p>Une source sous-jacente majeure de discordance dimensionnelle provient de la porosit\u00e9 s\u00e9mantique qui existe dans l&rsquo;esprit des praticiens entre un simple vecteur atomique unidimensionnel et une matrice formelle \u00e0 une seule ligne ou une seule colonne. Pour l&rsquo;interpr\u00e9teur de R, un objet issu de <code>c(1, 2, 3)<\/code> est un vecteur d\u00e9pourvu d&rsquo;attribut de dimension ; la commande <code>dim(c(1, 2, 3))<\/code> renvoie in\u00e9luctablement la valeur <code>NULL<\/code>.<\/p>\n<p>Cette sp\u00e9cificit\u00e9 engendre des comportements asym\u00e9triques inattendus lorsque de tels objets sont issus d&rsquo;une s\u00e9lection par sous-ensembles. Si l&rsquo;on extrait une colonne unique d&rsquo;une matrice <span class=\"arabpsy-math-inline\" data-latex=\"M\">$M$<\/span> au moyen de la syntaxe na\u00efve <code>sous_col &lt;- M[, 1]<\/code>, R \u00e9limine automatiquement l&rsquo;attribut dimensionnel en vertu de son m\u00e9canisme de r\u00e9duction par d\u00e9faut. Si l&rsquo;analyste cherche ensuite \u00e0 multiplier cette sous-colonne par une matrice conforme sous l&rsquo;hypoth\u00e8se qu&rsquo;il s&rsquo;agit d&rsquo;une matrice colonne de dimension <span class=\"arabpsy-math-inline\" data-latex=\"N \\times 1\">$N \\times 1$<\/span>, le calcul peut s&rsquo;ex\u00e9cuter sous un sch\u00e9ma de coercition involontaire ou g\u00e9n\u00e9rer une erreur dimensionnelle d\u00e9routante.<\/p>\n<p>La parade universelle contre ce biais structurel s&rsquo;articule autour de deux principes d&rsquo;ing\u00e9nierie logicielle : d&rsquo;une part, l&rsquo;usage disciplin\u00e9 de la clause <code>drop = FALSE<\/code> lors de chaque extraction d&rsquo;une sous-matrice susceptible d&rsquo;\u00eatre r\u00e9duite \u00e0 un vecteur univari\u00e9 (ex. <code>M[, 1, drop = FALSE]<\/code>) ; d&rsquo;autre part, le recours pr\u00e9ventif \u00e0 la fonction de conversion explicite <code>as.matrix()<\/code> ou \u00e0 l&rsquo;affectation directe de l&rsquo;attribut <code>dim(v) &lt;- c(length(v), 1)<\/code>, qui immunise les structures contre toute d\u00e9signation dimensionnelle flottante.<\/p>\n<h3>10.3 Gestion des donn\u00e9es manquantes (NA) et propagation des valeurs non d\u00e9finies<\/h3>\n<p>L&rsquo;int\u00e9grit\u00e9 num\u00e9rique des calculs d&rsquo;alg\u00e8bre matricielle est particuli\u00e8rement vuln\u00e9rable \u00e0 la pr\u00e9sence de donn\u00e9es manquantes, signal\u00e9es sous R par la constante r\u00e9serv\u00e9e <code>NA<\/code> (<em>Not Available<\/em>), ainsi qu&rsquo;aux valeurs num\u00e9riques non d\u00e9finies repr\u00e9sent\u00e9es par <code>NaN<\/code> (<em>Not a Number<\/em>) et les divergences infinies <code>Inf<\/code>. Conform\u00e9ment aux postulats de la logique propositionnelle multivari\u00e9e, une valeur inconnue combin\u00e9e \u00e0 une valeur connue au sein d&rsquo;une somme ou d&rsquo;un produit engendre une valeur inconnue.<\/p>\n<p>Dans la multiplication matricielle standard <code>A %*% B<\/code>, l&rsquo;\u00e9valuation de chaque cellule <span class=\"arabpsy-math-inline\" data-latex=\"c_{ij}\">$c_{ij}$<\/span> repose sur une sommation pond\u00e9r\u00e9e de <span class=\"arabpsy-math-inline\" data-latex=\"n\">$n$<\/span> produits scalaires. Il suffit qu&rsquo;une seule composante <span class=\"arabpsy-math-inline\" data-latex=\"a_{ik}\">$a_{ik}$<\/span> ou <span class=\"arabpsy-math-inline\" data-latex=\"b_{kj}\">$b_{kj}$<\/span> soit affect\u00e9e par la valeur <code>NA<\/code> pour que l&rsquo;int\u00e9gralit\u00e9 de la somme s&rsquo;effondre et prenne la valeur <code>NA<\/code>. Par un effet de propagation matricielle en cha\u00eene, la pr\u00e9sence d&rsquo;une poign\u00e9e de donn\u00e9es manquantes diss\u00e9min\u00e9es dans les matrices sources peut aboutir \u00e0 une matrice r\u00e9sultante massivement, voire totalement, corrompue par des <code>NA<\/code>, annihilant toute perspective d&rsquo;interpr\u00e9tation statistique.<\/p>\n<p>Pour immuniser les calculs matriciels contre ce risque de contagion num\u00e9rique, des strat\u00e9gies rigoureuses de pr\u00e9traitement doivent \u00eatre d\u00e9ploy\u00e9es en amont :<\/p>\n<ul>\n<li>L&rsquo;application de la fonction <code>na.omit()<\/code> sur un jeu de donn\u00e9es multivari\u00e9 permet de restreindre l&rsquo;\u00e9chantillon aux seules observations compl\u00e8tes (<em>listwise deletion<\/em>), garantissant une matrice de donn\u00e9es pleine sans valeurs manquantes.<\/li>\n<li>Le recours \u00e0 des techniques d&rsquo;imputation statistique (par la moyenne, par r\u00e9gression ou via des algorithmes de factorisation matricielle it\u00e9rative de type MissForest ou SVD-Impute) afin de remplacer les cellules lacunaires par des estimations plausibles pr\u00e9servant la structure de covariance globale.<\/li>\n<li>L&rsquo;int\u00e9gration de tests d&rsquo;assertion formels avant le calcul au moyen de la fonction <code>anyNA()<\/code>, permettant d&rsquo;interrompre gracieusement le pipeline par un message clair d\u00e8s lors qu&rsquo;une matrice op\u00e9rande pr\u00e9sente des donn\u00e9es manquantes : <code>if(anyNA(A) || anyNA(B)) stop(\"Pr\u00e9sence de valeurs manquantes (NA) incompatible avec le calcul matriciel.\")<\/code>.<\/li>\n<\/ul>\n<h2>11. Gestion de la m\u00e9moire et passage \u00e0 l&rsquo;\u00e9chelle computationnelle<\/h2>\n<h3>11.1 Traitement des matrices creuses avec le package Matrix<\/h3>\n<p>Dans de multiples champs applicatifs modernes \u2014 tels que le traitement automatique du langage naturel (matrices documents-termes), l&rsquo;analyse des r\u00e9seaux sociaux, ou les mod\u00e8les psychom\u00e9triques de graphes de connectivit\u00e9 cognitive comportant des centaines d&rsquo;items \u2014, les matrices manipul\u00e9es se caract\u00e9risent par une proportion \u00e9crasante de coefficients rigoureusement \u00e9gaux \u00e0 z\u00e9ro. De telles structures sont qualifi\u00e9es de matrices creuses (<em>sparse matrices<\/em>).<\/p>\n<p>Si l&rsquo;on persiste \u00e0 utiliser les structures matricielles standards de R pour mod\u00e9liser une matrice de dimension 50000&#215;50000 ne comportant que 1 % d&rsquo;\u00e9l\u00e9ments non nuls, le stockage m\u00e9moire exige d&rsquo;allouer de la m\u00e9moire pour 2,5 milliards de coefficients en virgule flottante double pr\u00e9cision, ce qui saturerait instantan\u00e9ment la m\u00e9moire vive d&rsquo;une station de travail conventionnelle. De surcro\u00eet, le calcul du produit matriciel standard mobiliserait d&rsquo;immenses ressources processeur pour calculer des multiplications par z\u00e9ro totalement inutiles.<\/p>\n<p>Le package de r\u00e9f\u00e9rence <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=Matrix\">Matrix<\/a>, int\u00e9gr\u00e9 \u00e0 la distribution de base recommand\u00e9e de R, apporte une r\u00e9ponse logicielle \u00e9l\u00e9gante \u00e0 ce d\u00e9fi computationnel en fournissant des classes de matrices creuses optimis\u00e9es, notamment le format <code>dgCMatrix<\/code> (matrice creuse orient\u00e9e colonnes compress\u00e9es). Dans ce paradigme, seuls les coefficients non nuls et leurs coordonn\u00e9es sont stock\u00e9s physiquement en m\u00e9moire. Les m\u00e9thodes associ\u00e9es \u00e0 l&rsquo;op\u00e9rateur <code>%*%<\/code> sont int\u00e9gralement surcharg\u00e9es par le package Matrix : elles identifient les structures creuses et ne calculent le produit que pour les intersections non triviales. Le gain en allocation m\u00e9moire et en rapidit\u00e9 d&rsquo;ex\u00e9cution atteint fr\u00e9quemment plusieurs ordres de grandeur, rendant possibles des calculs autrefois inaccessibles.<\/p>\n<h3>11.2 Calcul matriciel parall\u00e8le et biblioth\u00e8ques BLAS\/LAPACK<\/h3>\n<p>L&rsquo;efficience brute des op\u00e9rations d&rsquo;alg\u00e8bre matricielle sous R d\u00e9pend au premier chef de la qualit\u00e9 et de la configuration des biblioth\u00e8ques logicielles sous-jacentes responsables des calculs de bas niveau. Historiquement, les op\u00e9rations d&rsquo;alg\u00e8bre lin\u00e9aire num\u00e9rique sont standardis\u00e9es \u00e0 travers deux interfaces de bas niveau universelles : les sp\u00e9cifications <a rel=\"noopener noreferrer\" href=\"http:\/\/www.netlib.org\/blas\/\">BLAS (Basic Linear Algebra Subprograms)<\/a> pour les op\u00e9rations vectorielles et matricielles basiques, et <a rel=\"noopener noreferrer\" href=\"http:\/\/www.netlib.org\/lapack\/\">LAPACK (Linear Algebra Package)<\/a> pour la d\u00e9composition spectrale et la r\u00e9solution de syst\u00e8mes lin\u00e9aires.<\/p>\n<p>Par d\u00e9faut, de nombreuses distributions pr\u00e9-compil\u00e9es de R sont livr\u00e9es avec une impl\u00e9mentation de r\u00e9f\u00e9rence de BLAS mono-thread\u00e9e, con\u00e7ue pour assurer une stabilit\u00e9 maximale sur toutes les architectures mat\u00e9rielles, au d\u00e9triment de la vitesse pure. Cependant, les processeurs modernes int\u00e8grent de multiples c\u0153urs physiques capables de traiter des calculs parall\u00e8les massifs. En liant R \u00e0 des biblioth\u00e8ques BLAS acc\u00e9l\u00e9r\u00e9es et multi-thread\u00e9es \u2014 telles que <strong>OpenBLAS<\/strong>, <strong>Intel MKL (Math Kernel Library)<\/strong> ou le cadriciel <strong>Apple Accelerate<\/strong> sur macOS \u2014, l&rsquo;op\u00e9rateur de multiplication matricielle <code>%*%<\/code> est automatiquement parall\u00e9lis\u00e9 au niveau du mat\u00e9riel.<\/p>\n<p>Dans un tel environnement optimis\u00e9, lorsque l&rsquo;instruction <code>A %*% B<\/code> est invoqu\u00e9e sur de grandes matrices, le calcul du produit de blocs est r\u00e9parti de mani\u00e8re transparente et simultan\u00e9e sur l&rsquo;ensemble des c\u0153urs de calcul disponibles. De plus, ces biblioth\u00e8ques exploitent au maximum les registres de vectorisation SIMD (AVX-512, AVX2, NEON) des microprocesseurs, permettant de multiplier des matrices g\u00e9antes plusieurs dizaines de fois plus rapidement qu&rsquo;avec l&rsquo;impl\u00e9mentation standard, sans qu&rsquo;il soit n\u00e9cessaire de modifier une seule ligne de code dans le script R de l&rsquo;utilisateur.<\/p>\n<h3>11.3 Partitionnement et calcul par blocs pour les jeux de donn\u00e9es volumineux<\/h3>\n<p>Lorsque la taille des matrices d\u00e9passe la capacit\u00e9 de la m\u00e9moire vive disponible (RAM) ou que les dimensions exc\u00e8dent les plafonds allouables pour un objet contigu dans R, le recours \u00e0 la strat\u00e9gie de partitionnement matriciel par blocs (<em>block matrix multiplication<\/em>) devient imp\u00e9ratif. Ce proc\u00e9d\u00e9 math\u00e9matique repose sur la propri\u00e9t\u00e9 fondamentale selon laquelle une matrice partitionn\u00e9e en sous-matrices disjointes peut \u00eatre multipli\u00e9e bloc par bloc exactement de la m\u00eame mani\u00e8re que des scalaires au sein d&rsquo;une matrice standard.<\/p>\n<p>Soient deux matrices partitionn\u00e9es en quatre sous-blocs dimensionnellement compatibles :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"A = \\begin{\\pmatrix} A_{11} &amp; A_{12} \\ A_{21} &amp; A_{22} \\end{\\pmatrix}, \\quad B = \\begin{\\pmatrix} B_{11} &amp; B_{12} \\ B_{21} &amp; B_{22} \\end{\\pmatrix}\">$$A = \\begin{\\pmatrix} A_{11} &#038; A_{12} \\ A_{21} &#038; A_{22} \\end{\\pmatrix}, \\quad B = \\begin{\\pmatrix} B_{11} &#038; B_{12} \\ B_{21} &#038; B_{22} \\end{\\pmatrix}$$<\/span><\/p>\n<p>Le produit matriciel global <span class=\"arabpsy-math-inline\" data-latex=\"C = A B\">$C = A B$<\/span> se d\u00e9compose analytiquement sous la forme de quatre blocs ind\u00e9pendants :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"C_{11} = A_{11} B_{11} + A_{12} B_{21}\">$$C_{11} = A_{11} B_{11} + A_{12} B_{21}$$<\/span><\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"C_{12} = A_{11} B_{12} + A_{12} B_{22}\">$$C_{12} = A_{11} B_{12} + A_{12} B_{22}$$<\/span><\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"C_{21} = A_{21} B_{11} + A_{22} B_{21}\">$$C_{21} = A_{21} B_{11} + A_{22} B_{21}$$<\/span><\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"C_{22} = A_{21} B_{12} + A_{22} B_{22}\">$$C_{22} = A_{21} B_{12} + A_{22} B_{22}$$<\/span><\/p>\n<p>En exploitant ce formalisme math\u00e9matique sous R, l&rsquo;analyste peut impl\u00e9menter une s\u00e9quence computationnelle it\u00e9rative qui lit s\u00e9quentiellement depuis le disque dur uniquement les sous-blocs requis pour \u00e9valuer un quadrant donn\u00e9, proc\u00e8de \u00e0 leur multiplication, puis sauvegarde le r\u00e9sultat interm\u00e9diaire sur disque avant de lib\u00e9rer la m\u00e9moire vive. Cette approche, \u00e9galement d\u00e9sign\u00e9e sous le terme de calcul matriciel hors-m\u00e9moire (<em>out-of-core computing<\/em>), permet d&rsquo;\u00e9tendre la puissance de R au traitement de flux massifs de donn\u00e9es comportementales ou de matrices g\u00e9nomiques d\u00e9passant les limites physiques de la machine h\u00f4te.<\/p>\n<h2>12. Synth\u00e8se m\u00e9thodologique et bonnes pratiques de programmation en R<\/h2>\n<h3>12.1 Arbre de d\u00e9cision pour le choix de l&rsquo;op\u00e9rateur appropri\u00e9<\/h3>\n<p>Afin de structurer la prise de d\u00e9cision programmatique et de pr\u00e9munir les chercheurs contre toute erreur d&rsquo;orientation conceptuelle, il est opportun de formaliser la d\u00e9marche de s\u00e9lection de l&rsquo;op\u00e9rateur arithm\u00e9tique ou alg\u00e9brique sous la forme d&rsquo;un protocole d&rsquo;arbitrage m\u00e9thodique :<\/p>\n<p>La premi\u00e8re interrogation porte sur l&rsquo;objectif analytique : cherche-t-on \u00e0 effectuer une transformation g\u00e9om\u00e9trique, une composition lin\u00e9aire ou une projection d&rsquo;un espace vectoriel sur un autre ? Si la r\u00e9ponse est affirmative, le choix doit imp\u00e9rativement se porter sur le <strong>produit matriciel formel<\/strong>. La conformabilit\u00e9 dimensionnelle int\u00e9rieure (\u00e9galit\u00e9 entre colonnes de gauche et lignes de droite) doit \u00eatre pr\u00e9alablement valid\u00e9e.<\/p>\n<p>Si la r\u00e9ponse est n\u00e9gative et que l&rsquo;objectif consiste \u00e0 appliquer une pond\u00e9ration diff\u00e9rentielle cellule par cellule, \u00e0 moduler l&rsquo;intensit\u00e9 de coefficients individuels ou \u00e0 masquer des coordonn\u00e9es pr\u00e9cises au moyen d&rsquo;une grille bool\u00e9enne, l&rsquo;analyste doit imp\u00e9rativement mobiliser le <strong>produit de Hadamard<\/strong> via l&rsquo;op\u00e9rateur ast\u00e9risque <code>*<\/code>, en s&rsquo;assurant au pr\u00e9alable de la stricte congruence bidimensionnelle des deux op\u00e9randes.<\/p>\n<p>Lorsque le produit matriciel formel est requis et qu&rsquo;il implique la transpos\u00e9e de l&rsquo;un des deux op\u00e9randes, un second arbitrage s&rsquo;impose pour des consid\u00e9rations de performance : l&rsquo;expression <code>t(A) %*% B<\/code> doit \u00eatre syst\u00e9matiquement et sans h\u00e9sitation substitu\u00e9e par <code>crossprod(A, B)<\/code>. De mani\u00e8re analogue, l&rsquo;expression <code>A %*% t(B)<\/code> doit \u00eatre formellement remplac\u00e9e par <code>tcrossprod(A, B)<\/code>. L&rsquo;incorporation de ces automatismes syntaxiques constitue la marque d&rsquo;une programmation scientifique mature et efficiente.<\/p>\n<h3>12.2 Bonnes pratiques de codage et reproductibilit\u00e9<\/h3>\n<p>La qualit\u00e9, la lisibilit\u00e9 et la p\u00e9rennit\u00e9 d&rsquo;un code source d&rsquo;analyse statistique reposent sur l&rsquo;adoption de normes de d\u00e9veloppement rigoureuses. En mati\u00e8re d&rsquo;alg\u00e8bre lin\u00e9aire sous R, plusieurs bonnes pratiques s&rsquo;imposent \u00e0 l&rsquo;analyste soucieux de reproductibilit\u00e9 scientifique :<\/p>\n<p>En premier lieu, l&rsquo;int\u00e9gration syst\u00e9matique d&rsquo;assertions dimensionnelles pr\u00e9ventives au moyen de la commande <code>stopifnot()<\/code> permet d&rsquo;\u00e9viter l&rsquo;ex\u00e9cution de longs calculs vou\u00e9s \u00e0 l&rsquo;\u00e9chec. L&rsquo;insertion en amont d&rsquo;une directive telle que <code>stopifnot(ncol(A) == nrow(B))<\/code> documente explicitement l&rsquo;intention du concepteur et produit un arr\u00eat contr\u00f4l\u00e9 du programme en cas d&rsquo;incoh\u00e9rence dans le pipeline de donn\u00e9es.<\/p>\n<p>En second lieu, l&rsquo;attribution d\u00e9lib\u00e9r\u00e9e de noms de lignes et de colonnes s\u00e9mantiquement transparents (via <code>rownames()<\/code> et <code>colnames()<\/code>) constitue une d\u00e9fense efficace contre les erreurs d&rsquo;inversion d&rsquo;indices. Lorsqu&rsquo;une matrice de donn\u00e9es poss\u00e8de des \u00e9tiquettes explicites, l&rsquo;apparition inattendue d&rsquo;un identifiant de variable sur l&rsquo;axe des individus \u00e0 la suite d&rsquo;une multiplication constitue un signal d&rsquo;alerte imm\u00e9diat pour l&rsquo;exp\u00e9rimentateur.<\/p>\n<p>Enfin, la modularisation des s\u00e9quences de calcul alg\u00e9brique au sein de fonctions d\u00e9di\u00e9es et typ\u00e9es favorise l&rsquo;isolation des effets de bord. En encapsulant les transformations matricielles complexes dans des fonctions document\u00e9es retournant explicitement des structures dont les dimensions et les classes sont formellement valid\u00e9es, l&rsquo;analyste garantit la robustesse de ses scripts face aux mises \u00e0 jour des jeux de donn\u00e9es empiriques.<\/p>\n<h3>12.3 Ressources compl\u00e9mentaires pour approfondir l&rsquo;alg\u00e8bre lin\u00e9aire computationnelle<\/h3>\n<p>L&rsquo;approfondissement des comp\u00e9tences en calcul matriciel et en mod\u00e9lisation avanc\u00e9e sous l&rsquo;environnement R peut \u00eatre poursuivi \u00e0 travers la consultation d&rsquo;ouvrages acad\u00e9miques de r\u00e9f\u00e9rence et la d\u00e9couverte d&rsquo;extensions logicielles sp\u00e9cialis\u00e9es. Sur le plan th\u00e9orique et statistique, le manuel de r\u00e9f\u00e9rence de John Fox intitul\u00e9 <em>Applied Regression Analysis and Generalized Linear Models<\/em> offre une couverture didactique exceptionnelle de la formulation matricielle des mod\u00e8les statistiques multivari\u00e9s.<\/p>\n<p>Pour les praticiens d\u00e9sireux de ma\u00eetriser les arcanes de l&rsquo;optimisation num\u00e9rique et de l&rsquo;ing\u00e9nierie algorithmique, le trait\u00e9 fondamental de James E. Gentle, <em>Matrix Algebra: Theory, Computations, and Applications in Statistics<\/em>, ainsi que l&rsquo;ouvrage classique de Gene H. Golub et Charles F. Van Loan, <em>Matrix Computations<\/em>, repr\u00e9sentent les r\u00e9f\u00e9rences internationales incontournables d\u00e9taillant les algorithmes de factorisation, les questions de stabilit\u00e9 num\u00e9rique et la gestion des erreurs d&rsquo;arrondi en virgule flottante.<\/p>\n<p>Sur le plan du d\u00e9veloppement logiciel avanc\u00e9 au sein de l&rsquo;\u00e9cosyst\u00e8me R, la documentation officielle du <a rel=\"noopener noreferrer\" href=\"https:\/\/www.r-project.org\/\">R Development Core Team<\/a> relative \u00e0 l&rsquo;\u00e9criture d&rsquo;extensions (<em>Writing R Extensions<\/em>) constitue une ressource inestimable. Enfin, pour les utilisateurs d\u00e9sireux de repousser les fronti\u00e8res de la vitesse de calcul en int\u00e9grant du code C++ directement au sein de leurs fonctions R matricielles, l&rsquo;apprentissage du package <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=RcppArmadillo\">RcppArmadillo<\/a> ouvre des horizons consid\u00e9rables en combinant l&rsquo;expressivit\u00e9 syntaxique de la biblioth\u00e8que Armadillo C++ avec la flexibilit\u00e9 interactive de R.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>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><\/li>\n<li>Fox, J. (2016). <em>Applied Regression Analysis and Generalized Linear Models<\/em> (3rd ed.). SAGE Publications.<\/li>\n<li>Gentle, J. E. (2017). <em>Matrix Algebra: Theory, Computations, and Applications in Statistics<\/em> (2nd ed.). Springer. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1007\/978-3-319-64877-4\">https:\/\/doi.org\/10.1007\/978-3-319-64877-4<\/a><\/li>\n<li>Golub, G. H., &amp; Van Loan, C. F. (2013). <em>Matrix Computations<\/em> (4th ed.). Johns Hopkins University Press.<\/li>\n<li>Higham, N. J. (2002). <em>Accuracy and Stability of Numerical Algorithms<\/em> (2nd ed.). Society for Industrial and Applied Mathematics. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1137\/1.9780898718027\">https:\/\/doi.org\/10.1137\/1.9780898718027<\/a><\/li>\n<li>Horn, R. A., &amp; Johnson, C. R. (2012). <em>Matrix Analysis<\/em> (2nd ed.). Cambridge University Press. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1017\/CBO9780511810817\">https:\/\/doi.org\/10.1017\/CBO9780511810817<\/a><\/li>\n<li>R Core Team. (2024). <em>R: A Language and Environment for Statistical Computing<\/em>. R Foundation for Statistical Computing, Vienna, Austria. <a rel=\"noopener noreferrer\" href=\"https:\/\/www.R-project.org\/\">https:\/\/www.R-project.org\/<\/a><\/li>\n<li>Venables, W. N., &amp; Ripley, B. D. (2002). <em>Modern Applied Statistics with S<\/em> (4th ed.). Springer. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1007\/978-0-387-21706-2\">https:\/\/doi.org\/10.1007\/978-0-387-21706-2<\/a><\/li>\n<li>Wickham, H. (2019). <em>Advanced R<\/em> (2nd ed.). Chapman and Hall\/CRC. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1201\/9781351201315\">https:\/\/doi.org\/10.1201\/9781351201315<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour ma\u00eetriser la multiplication matricielle dans R : syntaxe, op\u00e9rateur %*%, produit de Hadamard et applications quantitatives.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2269,2193],"tags":[4178,4061,4185,4186,16],"class_list":["post-2103","psych_stat","type-psych_stat","status-publish","hentry","category-methodes-quantitatives","category-programmation-r","tag-algebre-lineaire","tag-langage-r","tag-multiplication-matricielle","tag-operateur-matriciel","tag-psychometrie"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2103","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=2103"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2103\/revisions"}],"predecessor-version":[{"id":16320,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2103\/revisions\/16320"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}