Un approccio statistico per determinare se i dati mancano casualmente


21

Ho una vasta gamma di vettori di funzionalità che userò per attaccare un problema di classificazione binaria (usando scikit learn in Python). Prima di iniziare a pensare all'imputazione, sono interessato a cercare di determinare dalle parti rimanenti dei dati se i dati mancanti sono "mancanti a caso" o mancanti non a caso.

Qual è un modo sensato per affrontare questa domanda?


Risulta una domanda migliore è chiedere se i dati mancano "completamente a caso" o no. Qual è un modo sensato per farlo?


Se non esiste alcuna associazione tra l'indicatore mancante e qualsiasi variabile osservata, il meccanismo di dati mancante è MCAR.
Randel,

@Randel Qual è un buon test da applicare in pratica per testarlo?
Lembik,

Niente di speciale di un test di correlazione o regressione.
Randel,

3
Non è qualcosa che metti alla prova, è qualcosa che assumi .
Tim

3
Giusto per essere chiari: perdere completamente a caso significa che la probabilità di mancanza è una costante, non dipende da nulla. Perdere a caso significa che la mancanza dipende da alcuni fattori misurati, come l'età o il sesso, in modo da poter utilizzare alcuni modelli per riempire gli schemi mancanti. Perdere non a caso significa che la mancanza dipende da cose che non hai misurato. Nella domanda OP dice NMAR vs. MAR ma OP significa MAR vs MCAR.
AdamO

Risposte:


8

Ho trovato le informazioni di cui parlavo nel mio commento.

Dal libro di van Buurens , pagina 31, scrive

"Diversi test sono stati proposti per testare MCAR rispetto a MAR. Questi test non sono ampiamente utilizzati e il loro valore pratico non è chiaro. Vedere Enders (2010, pp. 17-21) per una valutazione di due procedure. Non è possibile testare MAR contro MNAR poiché mancano le informazioni necessarie per tale test. "


La domanda è su MAR vs MNAR, ma la tua risposta riguarda MCAR vs MAR. MCAR è completamente diverso da MNAR.
Tim

Se riesci a determinare che i dati sono MAR allora dovrebbe bastare. Come dice Bjorn, non è possibile dire se si tratta di MAR / MNAR, ma questa risposta è un buon proxy per la sua domanda, credo. Se dovessi fare il test Enders e scoprire che si tratta di MCAR, non avrai bisogno di imputazione. Se trovi che è MAR, puoi imputare o dare un'occhiata ai tuoi dati per vedere se c'è motivo di credere che potrebbe essere MNAR.
RayVelcoro,

@RayVelcoro È un problema di identificabilità: è possibile che i dati NMAR appaiano MCAR. Tim ha ragione sul fatto che NMAR (o il contrario) non è qualcosa per cui testiamo, è qualcosa che assumiamo. A tuo avviso su MCAR vs MAR, la cosa più (più?) Importante è: se i dati sono MCAR e usi metodi MAR, c'è davvero qualche effetto netto sui dati? Io non la penso così. Data la penetrazione, la disponibilità e la facilità d'uso per i metodi MAR, forse è meglio usare solo la ponderazione non parametrica o la procedura di imputazione piuttosto che impegnarsi in una caccia all'oca retorica di test e test.
AdamO

17

Questo non è possibile, a meno che non sia riuscito a recuperare i dati mancanti. Non è possibile determinare dai dati osservati se i dati mancanti mancano in modo casuale (MAR) o no in modo casuale (MNAR). Puoi solo dire se i dati chiaramente non mancano completamente a caso (MCAR). Oltre a ciò, si apprezza solo la plausibilità di MCAR o MAR rispetto a MNAR in base a ciò che si conosce (ad esempio, i motivi riportati per cui mancano i dati). In alternativa, potresti essere in grado di sostenere che non importa troppo, perché la proporzione di dati mancanti è piccola e in MNAR dovrebbero verificarsi scenari molto estremi affinché i risultati vengano annullati (vedi "analisi del punto di non ritorno").


1
Grazie mille. Qual è un buon modo per sapere se i dati sono MCAR?
Lembik,

@ Björn, potrebbe essere necessario riformulare sopra per riflettere le asimmetrie essenziali in ciò che possiamo imparare dai dati. Sebbene sia possibile falsificare un'ipotesi che i dati siano MCAR (viz., Costruendo un modello che sfrutta le covariate osservate per conto di una parte del missingness), non è possibile confermare MCAR o qualsiasi altra tale ipotesi.
David C. Norris,

Buon punto. L'ho reso più chiaro.
Björn,

4

Sembra abbastanza fattibile dal punto di vista della classificazione.

Vuoi classificare i dati mancanti o non mancanti usando tutte le altre funzionalità. Se ottieni risultati significativamente migliori rispetto ai risultati casuali, i tuoi dati non mancano a caso.


2

Si desidera sapere se esiste una correlazione tra un valore mancante nella funzione e il valore di qualsiasi altra funzionalità.

Per ciascuna delle funzionalità, crea una nuova funzionalità che indica se il valore è mancante o no (chiamiamole funzionalità "is_missing"). Calcola la tua misura di correlazione preferita (ti suggerisco di utilizzare qui le informazioni reciproche) delle funzioni is_missing e il resto delle funzionalità.

Nota che se non trovi alcuna correlazione tra due funzionalità, è ancora possibile avere una correlazione a causa del gruppo di funzionalità (manca un valore in funzione di XOR di altre dieci funzionalità).

Se hai un ampio set di funzionalità e un gran numero di valori, otterrai false correlazioni a causa della casualità. Oltre ai normali modi di affrontarlo (set di validazione, soglia abbastanza alta) È possibile verificare se le correlazioni sono simmetriche e transitive. Se lo sono, è probabile che siano vere e dovresti verificarle ulteriormente.


1

Un metodo che uso è una matrice ombra, in cui il set di dati è costituito da variabili indicatore in cui viene fornito un 1 se è presente un valore e 0 se non lo è. La correlazione tra questi e i dati originali può aiutare a determinare se le variabili tendono a mancare insieme (MAR) o meno (MCAR). Usando Rper un esempio (prendendo in prestito dal libro "R in action" di 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.

1
In VIM , puoi anche dare un'occhiata agli spinoplot. Danno un istogramma di due variabili con la mancanza in ciascuna. Possiamo tracciare due variabili e vedere come la mancanza in una varia con l'altra. Ad esempio, se tracciamo il tempo di sopravvivenza e l'assegnazione del trattamento, se vediamo una giusta distribuzione distorta della mancanza, possiamo affermare che i tempi di sopravvivenza più bassi sono associati a più mancanza ... cioè che la mancanza nel trattamento è MAR perché dipende dal tempo di sopravvivenza variabile osservato.
RayVelcoro,

1
La domanda è su MAR vs MNAR, ma la tua risposta riguarda MCAR vs MAR. MCAR è completamente diverso da MNAR.
Tim

@Tim Come AdamO ha affermato in un commento sotto la domanda, OP significava MAR vs MCAR.
Phil
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.