From 59772d55d0456cbb8998667c9ed56b35c6d351ae Mon Sep 17 00:00:00 2001 From: Pierre-Edouard Portier Date: Sat, 7 Jan 2023 14:58:36 +0100 Subject: [PATCH] utilisation des termes 'axe factoriel' et 'facteur' --- 05_b_svd_pca.Rmd | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/05_b_svd_pca.Rmd b/05_b_svd_pca.Rmd index d1b55bb..516ea48 100644 --- a/05_b_svd_pca.Rmd +++ b/05_b_svd_pca.Rmd @@ -8,7 +8,7 @@ source("05_b_svd_pca_code.R", local = knitr::knit_global()) set.seed(1123) ``` -## Projection sur les axes principaux +## Projection sur les axes factoriels ### SVD @@ -17,7 +17,7 @@ $$\mathbf{X} = \sum_{\alpha}\sqrt{\lambda_\alpha}\mathbf{u_\alpha}\mathbf{v_\alp ### Facteurs -Nous avons montré que la projection orthogonale des lignes $\mathbf{x_i}$ de $\mathbf{X}$ sur $\mathbf{v_1},\dots,\mathbf{v_k}$ est la meilleure approximation $k$-dimensionnelle de $\mathbf{X}$ au sens de la minimisation des résidus au carré. Les axes de vecteurs directeurs $\mathbf{v_\alpha}$ sont appelés les \emph{axes principaux}. Les coordonnées des observations sur les axes principaux sont appelées \emph{facteurs}. Notons $\mathbf{F}$ la matrice dont les lignes sont les facteurs : +Nous avons montré que la projection orthogonale des lignes $\mathbf{x_i}$ de $\mathbf{X}$ sur $\mathbf{v_1},\dots,\mathbf{v_k}$ est la meilleure approximation $k$-dimensionnelle de $\mathbf{X}$ au sens de la minimisation des résidus au carré. Les axes de vecteurs directeurs $\mathbf{v_\alpha}$ sont appelés les \emph{axes principaux} ou \emph{axes factoriels}. Les coordonnées des observations sur les axes principaux sont appelées \emph{facteurs}. Notons $\mathbf{F}$ la matrice dont les lignes sont les facteurs : $$\mathbf{F} \triangleq \mathbf{X}\mathbf{V} = \mathbf{U} \mathbf{D} \mathbf{V}^T\mathbf{V} = \mathbf{U} \mathbf{D}$$ La covariance des facteurs est : @@ -31,15 +31,15 @@ $$CTR_{i,\alpha} = \frac{f_{i,\alpha}^2}{\sum_i f_{i,\alpha}^2} = \frac{f_{i,\al Puisque $\sum_i CTR_{i,\alpha} = 1$, nous pouvons considérer, de façon heuristique, que les observations qui contribuent le plus à expliquer l'axe $\mathbf{v_\alpha}$ sont telles que $CTR_{i,\alpha} \geq 1/n$. Les observations dont les contributions sont les plus importantes et de signes opposés peuvent permettre d'interpréter un axe en fonction de l'opposition de ses pôles. -### Contributions des axes +### Contributions des axes factoriels Nous pouvons similairement mesurer combien l'axe $\mathbf{v_\alpha}$ contribue à expliquer l'écart au centre de gravité d'une observation $\mathbf{x_i}$ : $$COS2_{i,\alpha} = \frac{f_{i,\alpha}^2}{\sum_\alpha f_{i,\alpha}^2} = \frac{f_{i,\alpha}^2}{d_{i,g}^2}$$ Avec $d_{i,g}^2$ le carré de la distance de l'observation $\mathbf{x_i}$ au centre de gravité $g$. $d_{i,g}^2 = \sum_j \left(x_{i,j}-g_j\right)^2$. Si les données sont centrées alors $d_{i,g}^2 = \sum_j x_{i,j}^2$. La somme des carrés des distances au centre de gravité pour toutes les observations est égale à la variance totale des données, ou inertie totale : $\sum_i d_{i,g}^2 = \mathcal{I} = \sum_\alpha \lambda_\alpha$. -### Contribution des variables aux axes principaux +### Contribution des variables aux axes factoriels -Les axes principaux $\mathbf{v_\alpha}$ sont des combinaisons linéaires des variables initiales. Lorsque la matrice initiale est centrée et réduite, les éléments de $(\lambda_\alpha/\sqrt{n-1})\mathbf{v_\alpha}$ représentent les corrélations entre les variables initiales et l'axe $\mathbf{v_\alpha}$. Ainsi, nous pouvons mesurer la contribution des variables initiales à l'expression de la variance expliquée par chaque axe principal (l'expression est au carré pour que la somme des contributions des variables à l'axe $\mathbf{v_\alpha}$ soit égale à $1$) : +Les axes factoriels $\mathbf{v_\alpha}$ sont des combinaisons linéaires des variables initiales. Lorsque la matrice initiale est centrée et réduite, les éléments de $(\lambda_\alpha/\sqrt{n-1})\mathbf{v_\alpha}$ représentent les corrélations entre les variables initiales et l'axe $\mathbf{v_\alpha}$. Ainsi, nous pouvons mesurer la contribution des variables initiales à l'expression de la variance expliquée par chaque axe factoriel (l'expression est au carré pour que la somme des contributions des variables à l'axe $\mathbf{v_\alpha}$ soit égale à $1$) : $$VARCTR_{j,\alpha} = \left(\frac{\lambda_\alpha}{\sqrt{n-1}}\mathbf{v_\alpha}\right)^2$$ ## Implémentation @@ -49,15 +49,15 @@ Nous écrivons une fonction `fa` (_factor analysis_) qui : - utilise l'algorithme `k-means` pour découvrir une centaine de clusters à partir des données standardisées, - applique une décomposition en valeurs singulières sur les centres standardisés des clusters, - calcule : - - le pourcentage de variance expliquée par chaque axe principal (`prctPrcp`), - - les facteurs (`fact`), c'est-à-dire les coordonnées des observations sur les axes principaux, - - les contributions des observations aux axes principaux (`ctr`), - - les contributions des axes principaux aux écarts au centre d'inertie des observations (`cos2`), - - les contributions des variables aux axes principaux (`varctr`) + - le pourcentage de variance expliquée par chaque axe factoriel (`prctPrcp`), + - les facteurs (`fact`), c'est-à-dire les coordonnées des observations sur les axes factoriels, + - les contributions des observations aux axes factoriels (`ctr`), + - les contributions des axes factoriels aux écarts au centre d'inertie des observations (`cos2`), + - les contributions des variables aux axes factoriels (`varctr`) -Nous écrivons une fonction `print.fa` qui affiche sur les axes principaux `d1` (par défaut $1$) et `d2` (par défaut $2$) les centres des clusters qui contribuent le plus à ces axes. +Nous écrivons une fonction `print.fa` qui affiche sur les axes factoriels `d1` (par défaut $1$) et `d2` (par défaut $2$) les centres des clusters qui contribuent le plus à ces axes. -Nous écrivons une fonction `away.fa` qui retourne le cluster (son identifiant, sa taille et les noms des observations qui le composent) qui a le plus d'inertie (i.e., qui est le plus éloigné du centre d'inertie, c'est-à-dire l'origine du repère pour des données centrées) le long de l'axe principal `d` (par défaut $1$). +Nous écrivons une fonction `away.fa` qui retourne le cluster (son identifiant, sa taille et les noms des observations qui le composent) qui a le plus d'inertie (i.e., qui est le plus éloigné du centre d'inertie, c'est-à-dire l'origine du repère pour des données centrées) le long de l'axe factoriel `d` (par défaut $1$). ```{r, code=readLines("05_b_svd_pca_code.R"), eval=FALSE} ``` @@ -86,12 +86,12 @@ Nous réalisons une première fois l'analyse en composantes principales. fam <- fa(X) # fam pour 'factor analysis model' ``` -Nous affichons le pourcentage de variance expliquée par chaque axe principal. +Nous affichons le pourcentage de variance expliquée par chaque axe factoriel. ```{r} fam$prctPrcp ``` -Nous affichons, sur les deux premiers axes principaux, les centres des clusters qui contribuent le plus à ces axes. +Nous affichons, sur les deux premiers axes factoriels, les centres des clusters qui contribuent le plus à ces axes. ```{r} print(fam) ``` @@ -100,7 +100,7 @@ print(fam) far <- away(fam,2) ``` -Le cluster `r far$id` (`far$id`) qui explique le plus la variance du deuxième axe principal semble anormalement important. Il contribue à expliquer `r round(fam$ctr[far$id,2]*100, 2)` % (`round(fam$ctr[far$id,2]*100, 2)`) de la variance du second axe. Il est composé de seulement `r far$size` (`far$size`) élément : +Le cluster `r far$id` (`far$id`) qui explique le plus la variance du deuxième axe factoriel semble anormalement important. Il contribue à expliquer `r round(fam$ctr[far$id,2]*100, 2)` % (`round(fam$ctr[far$id,2]*100, 2)`) de la variance du second axe. Il est composé de seulement `r far$size` (`far$size`) élément : ```{r} abalone[far$names,] ``` @@ -118,9 +118,9 @@ Nous affichons le pourcentage de variance expliquée par chaque axe principal. fam$prctPrcp ``` -Après cette correction, nous voyons qu'une part encore plus importante de la variance est expliquée par le premier axe principal. Cela peut nous indiquer que les variables explicatives sont très corrélées. +Après cette correction, nous voyons qu'une part encore plus importante de la variance est expliquée par le premier axe factoriel. Cela peut nous indiquer que les variables explicatives sont très corrélées. -Nous calculons à nouveau les facteurs et les contributions des observations aux axes principaux. Nous affichons, sur les deux premiers axes principaux, les centres des clusters qui contribuent le plus à ces axes. +Nous calculons à nouveau les facteurs et les contributions des observations aux axes factoriels. Nous affichons, sur les deux premiers axes factoriels, les centres des clusters qui contribuent le plus à ces axes. ```{r} print(fam) ``` @@ -138,12 +138,12 @@ abalone[far$names,] boxplot(abalone$height) ``` -Nous affichons les contributions des axes principaux à l'écart au centre d'inertie du cluster `r far$id`. +Nous affichons les contributions des axes factoriels à l'écart au centre d'inertie du cluster `r far$id`. ```{r} fam$cos2[far$id,] ``` -Nous vérifions que cette observation, sans doute anormale, est presque entièrement expliquée par les deux premiers axes principaux. Nous ne prenons donc pas de risque à considérer comme significatif son écart à l'origine dans le plan formé par ces deux axes. +Nous vérifions que cette observation, sans doute anormale, est presque entièrement expliquée par les deux premiers axes factoriels. Nous ne prenons donc pas de risque à considérer comme significatif son écart à l'origine dans le plan formé par ces deux axes. Observons aussi les contributions des variables aux axes principaux : ```{r}