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 :

# 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.