Une approche statistique pour déterminer si des données manquent au hasard

21

J'ai un grand ensemble de vecteurs de fonctionnalités que j'utiliserai pour attaquer un problème de classification binaire (en utilisant scikit learn en Python). Avant de commencer à penser à l'imputation, je voudrais essayer de déterminer à partir des parties restantes des données si les données manquantes sont «manquantes au hasard» ou manquantes pas au hasard.

Quelle est la meilleure façon d'aborder cette question?


Il s'avère que la meilleure question est de demander si les données «manquent complètement au hasard» ou non. Quelle est la meilleure façon de procéder?

Lembik
la source
S'il n'y a pas d'association entre l'indicateur manquant et toute variable observée, le mécanisme de données manquantes est MCAR.
Randel
@Randel Quel est un bon test à appliquer dans la pratique pour tester cela?
Lembik
Rien de spécial qu'un test de corrélation ou une régression.
Randel
3
Ce n'est pas quelque chose que vous testez, c'est quelque chose que vous supposez .
Tim
3
Juste pour être clair: manquer complètement au hasard signifie que la probabilité de manque est une constante, elle ne dépend de rien. Le fait de manquer au hasard signifie que la disparition dépend de certains facteurs mesurés, comme l'âge ou le sexe, de sorte que vous pouvez utiliser certains modèles pour remplir les modèles manquants. Ne pas manquer au hasard signifie que la disparition dépend de choses que vous n'avez pas mesurées . Dans la question OP dit NMAR vs MAR mais OP signifie MAR vs MCAR.
AdamO

Réponses:

8

J'ai trouvé les informations dont je parlais dans mon commentaire.

Du livre de Van Buurens , page 31, il écrit

"Plusieurs tests ont été proposés pour tester MCAR par rapport à MAR. Ces tests ne sont pas largement utilisés et leur valeur pratique n'est pas claire. Voir Enders (2010, pp. 17-21) pour une évaluation de deux procédures. Il n'est pas possible de tester MAR contre MNAR, car les informations nécessaires à un tel test sont manquantes. "

RayVelcoro
la source
La question concerne MAR vs MNAR, mais votre réponse concerne MCAR vs MAR. MCAR est complètement différent de MNAR.
Tim
Si vous pouvez déterminer que les données sont MAR, cela devrait suffire. Comme le dit Bjorn, il n'est pas possible de dire s'il s'agit de MAR / MNAR, mais cette réponse est un bon proxy pour sa question, je crois. Si vous deviez faire un test Enders et découvrir que c'est MCAR, alors vous n'auriez pas besoin d'imputation. Si vous constatez qu'il s'agit de MAR, vous pouvez imputer ou examiner attentivement vos données pour voir s'il y a des raisons de croire qu'il peut s'agir de MNAR.
RayVelcoro
@RayVelcoro C'est un problème d'identification: il est possible que les données NMAR apparaissent MCAR. Tim a raison de dire que NMAR (ou l'inverse) n'est pas quelque chose pour lequel nous testons, c'est quelque chose que nous supposons. En ce qui concerne MCAR vs MAR, la chose la plus (la plus importante) est: si les données sont MCAR et que vous utilisez des méthodes MAR, y a-t-il vraiment un effet net sur les données? Je ne pense pas. Compte tenu de la pénétration, de la disponibilité et de la facilité d'utilisation des méthodes MAR, il est peut-être préférable d'utiliser simplement la procédure de pondération ou d'imputation non paramétrique plutôt que de se lancer dans une poursuite rhétorique de tests et de tests.
AdamO
17

Ce n'est pas possible, sauf si vous avez réussi à récupérer les données manquantes. Vous ne pouvez pas déterminer à partir des données observées si les données manquantes sont manquantes au hasard (MAR) ou non au hasard (MNAR). Vous pouvez seulement dire si les données ne sont clairement pas manquantes au hasard (MCAR). Au-delà de cela, ne faites appel qu'à la plausibilité de MCAR ou MAR par opposition à MNAR sur la base de ce que vous savez (par exemple, les raisons signalées pour lesquelles les données sont manquantes). Alternativement, vous pourriez être en mesure d'affirmer que cela n'a pas trop d'importance, car la proportion de données manquantes est faible et dans le cadre du MNAR, des scénarios très extrêmes devraient se produire pour que vos résultats soient renversés (voir "Analyse du point de basculement").

Björn
la source
1
Merci beaucoup. Quelle est la bonne façon de savoir si les données sont MCAR?
Lembik
@ Björn, il peut être nécessaire de reformuler ce qui précède pour refléter les asymétries essentielles dans ce que nous pouvons apprendre des données. Bien qu'il soit possible de falsifier une hypothèse selon laquelle les données sont MCAR (à savoir, en construisant un modèle qui exploite les covariables observées pour expliquer une partie du manque), il n'est pas possible de confirmer MCAR ou toute autre hypothèse de ce type.
David C. Norris
Bon point. Je l'ai précisé.
Björn
4

Cela semble tout à fait faisable du point de vue de la classification.

Vous souhaitez classer les données manquantes par rapport aux données non manquantes à l'aide de toutes les autres fonctionnalités. Si vous obtenez de bien meilleurs résultats que les résultats aléatoires, alors vos données ne manquent pas au hasard.

Pyromane
la source
2

Vous voulez savoir s'il existe une corrélation entre une valeur manquée dans la fonction et la valeur de toute autre fonction.

Pour chacune des fonctionnalités, créez une nouvelle fonctionnalité indiquant si la valeur est manquante ou non (appelons-les fonctionnalité "is_missing"). Calculez votre mesure de corrélation préférée (je suggère d'utiliser ici des informations mutuelles) des fonctionnalités is_missing et du reste des fonctionnalités.

Notez que si vous ne trouvez pas de corrélation entre deux entités, il est toujours possible d'avoir une corrélation en raison d'un groupe d'entités (une valeur est manquante en fonction de XOR de dix autres entités).

Si vous disposez d'un grand nombre de fonctionnalités et d'un grand nombre de valeurs, vous obtiendrez de fausses corrélations en raison du caractère aléatoire. Autre que les moyens habituels de faire face à cela (ensemble de validation, seuil suffisamment élevé) Vous pouvez vérifier si les corrélations sont symétriques et transitives. S'ils le sont, il est probable qu'ils soient vrais et vous devriez les vérifier davantage.

DaL
la source
1

Une méthode que j'utilise est une matrice fantôme, dans laquelle l'ensemble de données se compose de variables indicatrices où un 1 est donné si une valeur est présente et 0 si elle ne l'est pas. Les corréler entre eux et les données originales peuvent aider à déterminer si les variables ont tendance à manquer ensemble (MAR) ou non (MCAR). En utilisant Run exemple (emprunt du livre « R en action » par Robert Kabacoff):

#Load dataset
data(sleep, package = "VIM")

x <- as.data.frame(abs(is.na(sleep)))

#Elements of x are 1 if a value in the sleep data is missing and 0 if non-missing.
head(sleep)
head(x)

#Extracting variables that have some missing values.
y <- x[which(sapply(x, sd) > 0)]
cor(y)

#We see that variables Dream and NonD tend to be missing together. To a lesser extent, this is also true with Sleep and NonD, as well as Sleep and Dream.

#Now, looking at the relationship between the presence of missing values in each variable and the observed values in other variables:
cor(sleep, y, use="pairwise.complete.obs")

#NonD is more likely to be missing as Exp, BodyWgt, and Gest increases, suggesting that the missingness for NonD is likely MAR rather than MCAR.
Phil
la source
1
Dans VIM , vous pouvez également consulter les spinoplots. Ils donnent un histogramme de deux variables avec le manque dans chacune. Nous pouvons tracer deux variables et voir comment la disparité dans l'une varie avec l'autre. Par exemple, si nous traçons le temps de survie et l'attribution du traitement, si nous voyons une distribution asymétrique correcte du manque, nous pouvons supposer que des temps de survie plus bas sont associés à plus de manque ... c'est-à-dire que le manque de traitement est MAR car il dépend de la temps de survie variable observé.
RayVelcoro
1
La question concerne MAR vs MNAR, mais votre réponse concerne MCAR vs MAR. MCAR est complètement différent de MNAR.
Tim
@Tim Comme AdamO l'a déclaré dans un commentaire sous la question, OP signifiait MAR vs MCAR.
Phil