Analyse en Composantes Principales sur données manquantes
L'essentiel de cette page
{MissMDA} permet de faire de l'imputation de données (réparer les trous dans les données) à condition qu'elles soient de type MAR (Missing At Random), si elle manque en X cela ne dépend pas de la valeur de X et l'on peut retrouver sa valeur en analysant les autres variables.
library(VIM)
data(sleep)
# On simplifie le jeu de données sleep en ne gardant que quelques colonnes et les 40 premières lignes
sleep<-sleep[1:40,c(1:3,7:10)]
matrixplot(sleep)
On voit sur cet exemple que notre jeu de données sleep nettoyé ne contient plus que 7 variables dont 2 présentent des données manquantes (cases rouges).
Ici, j'ai trié les données par "Danger".
2- Imputer les valeurs (combler les trous)
MissMDA fonctionne par itération de la façon suivante :
Initialisation : Les valeurs manquantes sont d’abord remplacées par la moyenne des valeurs observées pour chaque variable.
Première ACP : Une Analyse en Composantes Principales (ACP) est effectuée sur ces données complétées. L’ACP cherche la ligne qui minimise les distances entre les points et leur projection sur cette ligne.
Mise à jour des valeurs manquantes : Les valeurs manquantes sont ensuite remplacées par leurs prédictions obtenues à partir de l’ACP.
Itération jusqu’à convergence : Une nouvelle ACP est réalisée sur ces données mises à jour), recherche d'une nouvelle projection et ainsi de suite.
# install.packages("missMDA")
library(missMDA) # Pour l'imputation des données manquantes
library(FactoMineR) # Pour l'analyse en composantes principales (ACP)
# Estimation du nombre de composantes à retenir pour l'ACP
ncomposantes <- estim_ncpPCA(sleep) ; ncomposantes
# Imputation des données manquantes en utilisant une ACP
resultat_imputation <- imputePCA(sleep, ncp = ncomposantes$ncp)
# Contrôler l'imputation et ses conséquences grâce à l'Analyse en Composantes Principales Multiple Imputée (MIPCA)
# 'ncp' spécifie le nombre de composantes à retenir
# 'nboot' spécifie le nombre de réplications bootstrap pour estimer la variabilité due à l'imputation
resultat_mipca <- MIPCA(sleep, ncp = ncomposantes$ncp, nboot = 1000)
plot(resultat_mipca)
Ce graphique montre la composante 2 en fonction de la composante 1. Chaque point correspond à un individu. L'ellipse autour de chaque individu montre l'incertitude liée à l'imputation et donc la confiance que l'on peut avoir ici.
Un graphique dont j'ai du mal à percevoir l'utilité. Je renvoie vers le site de F. Husson, co-écrivain de {FactorMineR}
Les individus des ensembles de données imputées sont projetés en tant qu’individus supplémentaires sur la carte PCA de référence, puis des ellipses de confiance sont dessinées. Cela rejoint le graphique à projection procrustéenne.
Poids des variables dans l'ACP -les variables Gest et NonD ont été imputées et l'on peut voir leur fluctuation sur les 1000 itérations.
# Récupération des données imputées
sleep_imputed <- resultat_imputation$completeObs
matrixplot(sleep_imputed)
# Une autre façon :
resultat_mipca$res.imputePCA
Finis les données manquantes ! NonD et Gest ont leurs trous comblés (plus de rouge).
3- Faire l'ACP avec {FactoMineR}
resultats_acp <- PCA(resultat_imputation)
# On peut aussi le faire sur les données fixées (la meilleure imputation de chaque valeur)
# ex : resultats_acp <- PCA(sleep_imputed)
# Afficher les résultats de l'analyse ACP
print(resultats_acp)
fviz_pca_biplot(resultats_acp) # en biplot
Projections des varialbes et leurs fluctuations en fonction des imputations.
Projections des individus et leurs fluctuations (traits) en fonction des imputations?
Une excellente source externe qui résume une partie de cette page sur l'imputation de données par {MissMDA} et {FactoMineR} : le side de DellaData.