Constat empirique - Les tableaux analysés par ACP sont souvent incomplets : - mesures manquantes, - variables coûteuses ou difficiles à acquérir, - protocoles hétérogènes.
Exemples concrets - Environnement : stations × variables physico-chimiques → capteurs défaillants, données non synchrones. - Écologie : espèces × traits fonctionnels → traits manquants pour certaines espèces. - Socio-économie : individus × indicateurs → non-réponse partielle aux questionnaires.
Objectif de l’ACP > Résumer la structure de dépendance globale entre variables → difficile si le tableau est incomplet.
Le suivi d’ozone à Rennes
112 mesures journalières de variables météorologiques (vitesse du vent, température, précipitations, etc.) ainsi que la concentration d’ozone, relevées à Rennes (France) durant l’été 2001.
11 variables continues et 2 variables catégorielles comportant 2 ou 4 modalités.
Impact sur l’ACP - () n’est plus directement calculable ; estimations ad hoc () biais possibles. - Distorsion des inerties et des sous-espaces principaux.
#Imputation de données
Imputation simple : principe et propriétés
Principe - Construire () par remplacement ponctuel des valeurs manquantes. - Appliquer ensuite une ACP standard sur ().
Exemples - Moyenne (si centrée : (0)) : (_{ij} = {x}_j) - Régression : [ x_j = +* _k x_k + ] - ACP itérative / EM-PCA (idée) : alternance (estimation sous-espace) / (reconstruction) jusqu’à convergence. (Hors programme nécessite les cours de stat plus avancés)
Problèmes - Incertitude sur (_{mis}) ignorée () variances souvent sous-estimées, corrélations modifiées.
Imputation multiple et ACP
Principe - Générer (M) complétions : [ ^{(1)}, , ^{(M)} ] en simulant ({mis}) selon une loi approchant (p(_{obs})) (souvent sous MAR + modèle).
Analyse - ACP sur chaque (^{(m)}) () (M) jeux (valeurs propres, charges, scores).
Combinaison (une option simple)
\[\bar{\Sigma}=\frac{1}{M}\sum_{m=1}^M \hat{\Sigma}^{(m)} \] puis ACP de \(\bar{\Sigma}.\)
diagnostics : variabilité inter-imputations des charges/axes.
Pratiquement
1) Diagnostiquer les manquants - Taux global + par variable/individu ; structure (blocs, monotone, etc.). - Tester/argumenter (au moins qualitativement) MCAR vs MAR vs MNAR.
2) Pré-traitement cohérent - Décider centrage / réduction (important en ACP sur corrélation). - Idéalement : inclure ce pré-traitement dans le modèle d’imputation (ou le reproduire à l’identique après imputation).
3) Choisir la stratégie - Exploration rapide : imputation simple (moyenne / kNN / ACP itérative). - Inférence / reporting : imputation multiple (MI), surtout sous MAR.
4) Estimer l’ACP - Sur () (simple) ou sur chaque (^{(m)}) (IM). - Attention à l’alignement des axes si besoin (indétermination du signe / rotations).
5) Diagnostics & sensibilité - Stabilité des charges/axes (bootstrap ou IM). - Sensibilité au nombre de composantes (q), au modèle d’imputation, et (si plausible) scénarios MNAR.
Deux mots sur l’ACP comme modèle factoriel (vue probabiliste)
Lien avec l’ACP - Si \(\mathbf{z}\_i \sim \mathcal{N}(0,\mathbf{I}\_q)\), alors : \[\mathrm{Cov}(\mathbf{x}\_i)=\mathbf{L}\mathbf{L}\top+\sigma2\mathbf{I}\_p\] - L’estimation des paramètres (par maximum de vraisemblance ou EM, cf cours statistique inférentielle) mène à un sous-espace proche de celui de l’ACP (cas \(\sigma\^2 I\) : “probabilistic PCA”).
Pourquoi utile avec des manquants ? - Le cadre probabiliste donne naturellement \(p(\mathbf{X}^{mis}\mid \mathbf{X}{obs})\). - EM : E-step (espérances conditionnelles des facteurs et/ou manquants), M-step (mise à jour de \(\mathbf{L},\sigma\^2)\).
Exemple de mise en œuvre (R) : ACP itérative vs imputation multiple
library(missMDA)library(FactoMineR)library(palmerpenguins)library(mice)data(penguins)# Exemple : jeu de données continu avec manquantsX <-scale(penguins[, 3:6])dim(X)X_no_na <- X |>as.data.frame() |>drop_na()dim(X_no_na)# ici juste pour l'exemple set.seed(1)prop_na <-0.15Xmiss <- XXmiss[sample(x=length(Xmiss), size =round(0.15*length(Xmiss)))] <-NAX_no_na <- Xmiss |>as.data.frame() |>drop_na()dim(X_no_na)# --- (A) Imputation ACP itérative (missMDA) ---# Choisir nb de composantes pour l'imputation (validation croisée)ncp <-estim_ncpPCA(Xmiss, ncp.max =5)$ncp ## on teste la reconstruction par validation croiséeXmiss_pca <-imputePCA(Xmiss, ncp = ncp)$completeObsres_pca <-PCA(Xmiss_pca, graph =FALSE)# --- (B) Imputation multiple (mice) ---X_miss_df <-as.data.frame(Xmiss)# Méthode par défaut (pmm) souvent robuste ; adapter selon contexteXmiss_im <-mice(X_miss_df, m =20, method ="pmm", seed =1, printFlag =FALSE) # methode pmm regression multiple aà expliquer# ACP sur chaque jeu imputépcas <-lapply(1:Xmiss_im$m,function(m){ dta_m <-complete(Xmiss_im, m)PCA(dta_m, graph =FALSE) })# Combinaison simple : moyenne des matrices de covarianceSigmas <-lapply(1:Xmiss_im$m,function(m){ dta_m <-as.matrix(complete(Xmiss_im, m))cov(dta_m) # si déjà centré/réduit : attention aux conventions})Sigma_bar <-Reduce("+", Sigmas) / Xmiss_im$m# ACP sur Sigma_bar : via eigen-decomposition# Base de référence : plan (PC1, PC2) de Sigma_bareig_bar <-eigen(Sigma_bar)U <- eig_bar$vectors[, 1:2, drop =FALSE] # p x 2 (orthonormé)# Fonction : angles principaux (en degrés) entre deux plans 2Dprincipal_angles_2d <-function(U, V) {# cosinus des angles = valeurs singulières de t(U) %*% V sv <-svd(t(U) %*% V, nu =0, nv =0)$d sv <-pmin(1, pmax(0, sv)) # sécurité numériqueacos(sv) *180/ pi # angles en degrés}# Angles entre le plan de Sigma_bar et le plan de chaque imputationangles_deg <-sapply(seq_along(Sigmas), function(m) { eig_m <-eigen(Sigmas[[m]]) V <- eig_m$vectors[, 1:2, drop =FALSE]principal_angles_2d(U, V) # renvoie 2 angles : theta1 <= theta2})rownames(angles_deg) <-c("theta1_deg", "theta2_deg")colnames(angles_deg) <-paste0("imp", seq_along(Sigmas))# Résumé utilet(apply(angles_deg, 1, summary))# ou visualiser rapidementangles_deg[, 1:5]