Imputation des données manquantes par missMDA !

La semaine dernière j’ai assisté à une présentation, par François Husson, du package missMDA, dont il est co auteur avec Julie Josse.

Le package missMDA permet de faire de l’imputation, c’est à dire de remplacer les données manquantes d’un tableau de données par des valeurs plausibles.

Le principe est prédire ces valeurs plausibles à partir d’un modèle qui prend en compte à la fois les similarités entre les individus et entre les variables. Ces modèles implicites reposent sur :

– l’Analyse en Composantes Principales (ACP) lorsque les données sont continues,
– l’Analyse des Correspodances Multiples (ACM) lorsque les données sont catégorielles
– ou encore l’Analyse Factorielle de Données Mixtes (AFDM) lorsque les données sont continues et catégorielles.

A noter que les méthodes proposées dans le packages missMDA ne sont applicables que lorsque les données manquantes sont dites “missing at random” (MAR). Cela signifie que la probabilité qu’une observation de la variable X soit manquante peut être fonction des valeurs prises par certaines autres variables recueillies, mais qu’elle ne dépend pas de la vraie valeur de X

Table des matières

Comment ça marche l'imputation des données manquantes ?

L’exemple fourni par Julie Josse et Fraçois Husson dans leur article missMDA: A Package for Handling Missing Values in Multivariate Data Analysis est particulièrement didactique. Il s’agit d’un tableau de données avec 5 sujets et deux variables (x1 et x2), avec une donnée manquante au niveau de la variable x2 du 4ème sujet (1er plot).

1. La première étape consiste à remplacer la valeur manquante par la moyenne des valeurs observées pour la variable x2 (2ème plot)

2. Une ACP est ensuite réalisée sur ce premier jeu de données complet (3ème et 4ème plots). L’ACP consiste à trouver la droite qui minimise les distances entre les points et leur projection perpendiculaire sur cette droite, on parle d’erreurs perpendiculaires. Ces erreurs perpendiculaires sont notamment illustrées dans cet article.

La droite qui minimise les erreurs perpendiculaires est aussi celle qui maximise la dispersion des projections des points sur cette droite.

Voici une animation pour visualiser ce processus :

3. Dans un troisième temps, la valeur prédite par l’ACP, pour la donnée manquante, est utilisée à la place de la moyenne (5ème plot).

4. Et une nouvelle ACP est réalisée (6ème plot).

5. Ces étapes sont répétées jusqu’à ce qu’il y ait convergence, c’est à dire lorsque la nouvelle valeur prédite par l’ACP est identique, ou très très proche, de la valeur prédite par l’ACP précédente (7ème,8ème et 9ème plots).

Cette figure provient de l’article missMDA: A Package for Handling Missing Values in Multivariate Data Analysis.

L’algorithme employé ici s’appelle “iterative PCA“, plus précisément il s’agit d’une version dite “regularized iteractive PCA” . Cette modification permet de gérer les problèmes de sur-ajustement (overfitting) qui peuvent être rencontrés lorsque les données ont beaucoup de bruit et, ou, sont peu nombreuses.

Il est à noter que le nombre de composantes principales à utiliser dans l’ACP, pour réaliser les prédictions, n’est pas triviale et forcément identique pour tous les jeux de données. missMDA propose alors une fonction, basée sur une approche de cross-validation, pour déterminer ce nombre de façon spécifique au jeu de données étudié.

Evaluation de la qualité de l'imputation

Un des atouts de missMDA est de permettre d’évaluer la qualité de l’imputation réalisée : on ne se contente donc plus d’imputer et de croiser les doigts ! On visualise l’incertitude liées aux prédictions !

C’est très utile parce qu’il n’est pas possible de proposer un seuil, en terme de pourcentages de données manquantes, au delà duquel l’imputation serait de pauvre qualité. Le pourcentage de données manquante est important, mais la structure des données, c’est-à-dire les relations entre les variables, a également une influence sur la qualité de l’imputation.

L’évaluation de la qualité de l’imputation de missMDA repose sur un algorithme d’imputations multiples (qui s’appelle MIPCA), et qui va conduire à la prédiction de plusieurs valeurs plausibles pour chaque donnée manquante.

Le principe est de **générer**, dans un premier temps, B jeux de données dans lesquels seules les valeurs imputées sont différentes. Pour cela, une approche de type “bootstrap sur les résidus” est employée.

Dans un second temps, l’algorithme d’imputation simple (regularized iterative PCA ), décrit précédemment, est appliqué sur chacun de ces B jeux de données, ce qui conduit à B jeux de données imputés(complets).

Dans un troisième temps une représentation graphique globale, selon les deux composantes principales de l’ACP, est réalisée pour les points sujets d’une part, et pour les points variables d’autre part. D’après ce que j’ai compris, ces représentations sont obtenues en considérant les données des B jeux de données imputés comme des sujets et des variables supplémentaires.

Sur le graphique des points sujets, des ellipses sont dessinées autour de la position de chaque sujet, elles témoignent de la variabilité inter imputation.

variabilité des imputations

Sur la figure globale des variables, ce sont des nuages de points qui sont représentés ; ils reflètent l’incertitude des prédictions.

variabilité des prédictions après imputation

Ici les deux représentations précédentes laissent à penser que l’imputation est de bonne qualité et que les données imputées peuvent être employées pour des analyses statistiques ultérieures.

A l’inverse, les deux graphiques ci-dessous témoignent d’une mauvaise qualité d’imputation et doivent inciter à ne pas utiliser les données ainsi imputées.

 

variabilité important des imputations
variabilité importantes des prédictions

Les 4 figures précédentes proviennent du post  Can we believe in the imputations?

Les lignes de code

L’utilisation du package missMDA nécessite le chargement du package FactomineR.

library(missMDA) 
library(FactoMineR) 

En dehors du chargement du jeu de données contenant les données manquantes, l’imputation ne nécessite que 2 lignes de code.

La première consiste à déterminer le nombre de composantes principales à utiliser, en utilisant la fonction `estim_ncpPCA`

La seconde réalise à proprement parlé l’imputation, en utilisant la fonction `imputePCA`

data(geno) 
ncomp <- estim_ncpPCA(geno) 
res.imp <- imputePCA(geno, ncp = ncomp$ncp) 

Enfin, l’évaluation de la qualité de l’imputation se réalise avec deux lignes de commandes. La première consiste à réaliser l’imputation multiple grâce à la fonction MIPCA(). Et la seconde à représenter les résultats par la fonction plot().

res.comp <- MIPCA(geno, ncp = ncomp$ncp, nboot = 1000) 
plot(res.comp) 

Pour aller plus loin

Conclusion

La simplicité de ce package et la clartée des explications m’a vraiment donné envie de l’essayer la prochaine fois que je serai confronté à des données manquantes.

Et vous, que faites vous de ces données ? Pour réaliser vos analyses statistiques, vous avez l’habitude d’écarter les données manquantes ou de les imputer ? Si vous réalisez des imputations quel package utilisez vous ?

Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏

Crédits photos : geralt

Poursuivez votre lecture

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.