Nuages pesants, inertie et composantes principales
2023-12-17
| Pays | PIB_par_habitant | Chomage | Inflation | Dette_publique | Gini |
|---|---|---|---|---|---|
| France | 52890 | 7.6 | 1.5 | 112 | 30.0 |
| Allemagne | 65300 | 5.9 | 1.9 | 63 | 29.5 |
| États-Unis | 86000 | 4.2 | 2.9 | 124 | 41.8 |
| Japon | 34000 | 2.5 | 2.5 | 206 | 32.9 |
| Brésil | 10500 | 7.0 | 4.5 | 87 | 52.0 |
| Norvège | 95000 | 3.5 | 3.0 | 29 | 27.7 |
Un nuage de points pesants est un ensemble \(N = \{(x_i, p_i) : i = 1, \dots, n\}\) où :
Exemple — 3 observations dans \(\mathbb{R}^2\) :
\[x_1 = (2,3),\ p_1=0.4 \qquad x_2 = (1,5),\ p_2=0.3 \qquad x_3 = (4,2),\ p_3=0.3\]
\(D\) : matrice diagonale \(n \times n\) des poids — \(X\) : matrice \(n \times p\) des données
\[D = \begin{bmatrix} 0.4 & 0 & 0 \\ 0 & 0.3 & 0 \\ 0 & 0 & 0.3 \end{bmatrix} \qquad X = \begin{bmatrix} 2 & 3 \\ 1 & 5 \\ 4 & 2 \end{bmatrix}\]
Cas courants :
Avec \(M = \text{diag}(1/s_j^2)\), les variables à faible variance (peu dispersées) reçoivent un poids plus fort, et inversement.
Propriété clé : les distances calculées sur les données brutes avec la métrique \(D_{1/s}\) sont identiques aux distances calculées sur les données réduites (centrées-réduites) avec la métrique identité.
\(\Rightarrow\) normaliser une variable ou changer de métrique, c’est la même opération.
Le centre de gravité du nuage \(N\) est
\[g = \sum_{i=1}^n p_i x_i\]
Le nuage centré a pour coordonnées \(x_i - g\).
Par rapport à un point \(a\) : \[I_a = \sum_{i=1}^n p_i\, d_M^2(a, x_i)\]
Par rapport au centre de gravité (\(I := I_g\)) : joue le rôle central dans les méthodes factorielles.
Par rapport à un sous-espace affine \(F\) : \[I_F = \sum_{i=1}^n p_i\, d_M^2(F, x_i)\]
Pour tout sous-espace affine \(F\) de \(\mathbb{R}^p\) :
\[I_F = I_{F_g} + d_M^2(a, g)\]
où \(F_g\) est le sous-espace parallèle à \(F\) passant par \(g\), et \(a\) la projection \(M\)-orthogonale de \(g\) sur \(F\).
Conséquence : le sous-espace parallèle à \(F\) d’inertie minimale est celui qui passe par le centre de gravité.
En notant \(V = X^\top D X\) la matrice de variances-covariances :
\[I = \text{tr}(VM)\]
Et le nuage \(N\) (individus) et le nuage \(N^*\) (variables, tableau transposé) ont la même inertie totale.
L’ACP cherche une représentation approchée du nuage \(N \subset \mathbb{R}^p\) dans un sous-espace de dimension réduite \(k < p\).
On cherche \(E_k\), sous-espace de dimension \(k\), qui minimise l’inertie perdue \(I_{E_k^\perp}\) — ce qui équivaut, l’inertie totale étant fixe, à maximiser l’inertie expliquée \(I_{E_k^\perp}\)…
Formellement : \(E_k\) est optimal s’il maximise l’inertie expliquée parmi tous les sous-espaces de dimension \(k\).
Deux lemmes permettent de construire les axes un à un :
\(\Rightarrow\) on peut construire les axes un par un, par ordre d’importance.
On cherche \(u_1\) unitaire (\(u_1^\top M u_1 = 1\)) qui maximise l’inertie expliquée :
\[u_1 = \arg\max_u\ u^\top MVMu \quad \text{s.c.}\quad u^\top Mu = 1\]
Par les multiplicateurs de Lagrange, on obtient :
\[MVMu_1 - \lambda_1 Mu_1 = 0 \quad\Longleftrightarrow\quad VMu_1 = \lambda_1 u_1\]
\(u_1\) est donc un vecteur propre de \(VM\), associé à sa plus grande valeur propre \(\lambda_1\). L’inertie expliquée par cet axe vaut \(\lambda_1\).
Lemme 2.3.1 — Les axes \(\Delta u_1, \dots, \Delta u_p\) sont les axes factoriels :
Si \(r = \text{rang}(X)\), alors \(\lambda_1, \dots, \lambda_r > 0\) et \(\lambda_{r+1} = \dots = \lambda_p = 0\).
La \(k\)-ème composante principale \(C_k = XMu_k\) donne les coordonnées des \(n\) observations sur l’axe \(\Delta u_k\).
Propriétés : les \(C_k\) sont centrées, de variance \(\lambda_k\), et non corrélées entre elles.
Formule de reconstitution — avec \(s < r\) composantes : \[X \approx \tilde X = \sum_{k=1}^s C_k u_k^\top\]
Qualité de représentation d’une observation sur l’axe \(k\) : \[\cos^2(i,k) = \left(\frac{c_{ik}}{\|x_i\|_M}\right)^2\]
Contribution d’une observation à la construction de l’axe \(k\) (repère les observations atypiques) : \[\text{ctr}(i,k) = \frac{p_i c_{ik}^2}{\lambda_k}\]
On peut projeter les variables initiales sur les axes factoriels et calculer leur corrélation avec chaque composante :
\[\text{cor}(j,k) = \frac{d_{kj}}{\|X_j\|_D} \in [-1, 1]\]
Ces corrélations se visualisent sur le cercle des corrélations.
swissIndicateurs socio-économiques et de fécondité pour 47 provinces francophones de Suisse (1888) — inclus nativement dans R.
'data.frame': 47 obs. of 6 variables:
$ Fertility : num 80.2 83.1 92.5 85.8 76.9 76.1 83.8 92.4 82.4 82.9 ...
$ Agriculture : num 17 45.1 39.7 36.5 43.5 35.3 70.2 67.8 53.3 45.2 ...
$ Examination : int 15 6 5 12 17 9 16 14 12 16 ...
$ Education : int 12 9 5 7 15 7 7 8 7 13 ...
$ Catholic : num 9.96 84.84 93.4 33.77 5.16 ...
$ Infant.Mortality: num 22.2 22.2 20.2 20.3 20.6 26.6 23.6 24.9 21 24.4 ...
Fertility Agriculture Examination Education
Min. :35.00 Min. : 1.20 Min. : 3.00 Min. : 1.00
1st Qu.:64.70 1st Qu.:35.90 1st Qu.:12.00 1st Qu.: 6.00
Median :70.40 Median :54.10 Median :16.00 Median : 8.00
Mean :70.14 Mean :50.66 Mean :16.49 Mean :10.98
3rd Qu.:78.45 3rd Qu.:67.65 3rd Qu.:22.00 3rd Qu.:12.00
Max. :92.50 Max. :89.70 Max. :37.00 Max. :53.00
Catholic Infant.Mortality
Min. : 2.150 Min. :10.80
1st Qu.: 5.195 1st Qu.:18.15
Median : 15.140 Median :20.00
Mean : 41.144 Mean :19.94
3rd Qu.: 93.125 3rd Qu.:21.70
Max. :100.000 Max. :26.60
Importance of components:
PC1 PC2 PC3 PC4 PC5 PC6
Standard deviation 1.7888 1.0901 0.9207 0.66252 0.45225 0.34765
Proportion of Variance 0.5333 0.1981 0.1413 0.07315 0.03409 0.02014
Cumulative Proportion 0.5333 0.7313 0.8726 0.94577 0.97986 1.00000
Ici, la métrique \(M = \text{diag}(1/s_j^2)\) correspond à scale. = TRUE (normalisation des variables).
cor_var <- as.data.frame(cor(swiss, acp$x[, 1:2]))
cor_var$variable <- rownames(cor_var)
theta <- seq(0, 2*pi, length.out = 100)
cercle <- data.frame(x = cos(theta), y = sin(theta))
ggplot() +
geom_path(data = cercle, aes(x, y), color = "grey70") +
geom_segment(data = cor_var, aes(x = 0, y = 0, xend = PC1, yend = PC2),
arrow = arrow(length = unit(0.2, "cm")), color = "#e34a33") +
geom_text(data = cor_var, aes(PC1, PC2, label = variable), vjust = -0.5, size = 3) +
coord_equal() +
labs(x = "Composante 1", y = "Composante 2", title = "Cercle des corrélations") +
theme_minimal()Catholic) et la mortalité infantilesummary(acp))Retour sur la toute première étape de la résolution (partie 4) : on cherche l’axe qui maximise l’inertie expliquée — c’est-à-dire la variance du nuage projeté dessus.
L’animation ci-dessous (réalisée avec Manim, la bibliothèque créée par Grant Sanderson pour 3Blue1Brown) montre :
Comment générer la vidéo
Le fichier rendu se trouve dans
media/videos/acp_projection/1080p60/ACPProjection.mp4— il suffit de le copier versresources/manim/acp_projection.mp4pour qu’il s’affiche sur cette slide.