Podejście statystyczne do ustalenia, czy dane brakuje przypadkowo

21

Mam duży zestaw wektorów cech, których użyję do zaatakowania problemu z klasyfikacją binarną (za pomocą scikit learn w Pythonie). Zanim zacznę myśleć o imputacji, jestem zainteresowany próbą ustalenia na podstawie pozostałych części danych, czy brakujące dane są „losowo brakujące”, czy nie losowe.

Jak rozsądnie podejść do tego pytania?


Okazuje się, że lepszym pytaniem jest pytanie, czy dane „całkowicie przypadkowo brakuje”, czy nie. Jaki jest rozsądny sposób to zrobić?

Lembik
źródło
Jeśli nie ma związku między brakującym wskaźnikiem a jakąkolwiek zaobserwowaną zmienną, wówczas mechanizmem brakujących danych jest MCAR.
Randel,
@Randel Jaki test należy zastosować w praktyce, aby go przetestować?
Lembik,
Nic specjalnego niż test korelacji lub regresja.
Randel,
3
To nie jest coś, co testujesz, to coś, co zakładasz .
Tim
3
Żeby było jasne: całkowity brak losowy oznacza, że ​​prawdopodobieństwo braku jest stałe, nie zależy od niczego. Brakujące losowo oznacza, że ​​brak zależy od niektórych mierzonych czynników, takich jak wiek lub płeć, dzięki czemu można użyć niektórych modeli do uzupełnienia brakujących wzorców. Brak przypadkowego oznacza, że ​​brak zależy od rzeczy, których nie zmierzyłeś. W pytaniu OP mówi NMAR vs. MAR, ale OP oznacza MAR vs MCAR.
AdamO,

Odpowiedzi:

8

Informacje, o których mówiłem, znalazłem w moim komentarzu.

Z książki van Buurensa , strona 31, pisze

„Zaproponowano kilka testów do testowania MCAR w porównaniu z MAR. Testy te nie są szeroko stosowane, a ich praktyczna wartość jest niejasna. Zobacz Enders (2010, s. 17–21), aby uzyskać ocenę dwóch procedur. Nie można przetestować MAR a MNAR, ponieważ brakuje informacji potrzebnych do takiego testu. ”

RayVelcoro
źródło
Pytanie dotyczy MAR vs MNAR, ale twoja odpowiedź dotyczy MCAR vs MAR. MCAR jest zupełnie inny niż MNAR.
Tim
Jeśli możesz ustalić, że dane to MAR, to powinno wystarczyć. Jak mówi Bjorn, nie można stwierdzić, czy jest to MAR / MNAR, ale ta odpowiedź jest dobrym pełnomocnikiem dla jego pytania, które, jak sądzę, brzmi. Jeśli miałbyś zrobić test Endersa i odkryć, że jest to MCAR, nie potrzebujesz imputacji. Jeśli okaże się, że jest to MAR, możesz przypisać lub rzetelnie przyjrzeć się danym, aby sprawdzić, czy istnieje powód, by sądzić, że może to być MNAR.
RayVelcoro
@RayVelcoro Jest to problem związany z identyfikowalnością: dane NMAR mogą pojawiać się MCAR. Tim ma rację, że NMAR (lub odwrotnie) nie jest czymś, co testujemy, to coś, co zakładamy. Jeśli chodzi o MCAR vs MAR, najważniejsze (najbardziej?) Jest to, że: jeśli dane są MCAR i używasz metod MAR, to czy naprawdę ma to jakiś wpływ netto na dane? Nie wydaje mi się Biorąc pod uwagę penetrację, dostępność i łatwość użycia metod MAR, być może lepiej jest po prostu zastosować nieparametryczną procedurę ważenia lub imputacji niż brać udział w retorycznej gęsiej pogoni za testami i testami.
AdamO,
17

Nie jest to możliwe, chyba że udało się odzyskać brakujące dane. Na podstawie zaobserwowanych danych nie można ustalić, czy brakujące dane są losowe (MAR), czy nie losowe (MNAR). Możesz jedynie stwierdzić, czy dane nie są całkowicie przypadkowe (MCAR). Poza tym tylko odwołanie do wiarygodności MCAR lub MAR w przeciwieństwie do MNAR w oparciu o to, co wiesz (np. Zgłoszone powody braku danych). Alternatywnie możesz być w stanie argumentować, że nie ma to większego znaczenia, ponieważ odsetek brakujących danych jest niewielki i według MNAR musiałyby wystąpić bardzo ekstremalne scenariusze, aby twoje wyniki zostały obalone (patrz „analiza punktu krytycznego”).

Björn
źródło
1
Dziękuję Ci bardzo. Jaki jest dobry sposób na stwierdzenie, czy dane to MCAR?
Lembik,
@ Björn, powyższe może wymagać przeredagowania w celu odzwierciedlenia istotnych asymetrii w tym, czego możemy się nauczyć z danych. Chociaż można sfalsyfikować hipotezę, że dane to MCAR (a mianowicie, budując model wykorzystujący zaobserwowane zmienne towarzyszące do uwzględnienia części braków), nie jest możliwe potwierdzenie MCAR ani żadnej innej takiej hipotezy.
David C. Norris,
Słuszna uwaga. Wyjaśniłem to.
Björn
4

Brzmi to całkiem wykonalne z punktu widzenia klasyfikacji.

Chcesz klasyfikować brakujące dane w stosunku do brakujących danych przy użyciu wszystkich innych funkcji. Jeśli uzyskasz znacznie lepsze wyniki niż losowe, dane nie zostaną przypadkowo pominięte.

Firebug
źródło
2

Chcesz wiedzieć, czy istnieje pewna korelacja wartości pominiętej w elemencie i wartości jakiejkolwiek innej cechy.

Dla każdej z funkcji utwórz nową funkcję wskazującą, czy wartości brakuje, czy nie (nazwijmy ją funkcją „is_missing”). Oblicz swoją ulubioną miarę korelacji (sugeruję użycie tutaj wzajemnej informacji) funkcji is_missing i pozostałych funkcji.

Zwróć uwagę, że jeśli nie znajdziesz żadnej korelacji między dwiema cechami, nadal istnieje możliwość korelacji z powodu grupy cech (brakuje wartości jako funkcji XOR dziesięciu innych cech).

Jeśli masz duży zestaw funkcji i dużą liczbę wartości, otrzymasz fałszywe korelacje z powodu losowości. Inne niż standardowe sposoby radzenia sobie z tym (zestaw walidacyjny, wystarczająco wysoki próg) Możesz sprawdzić, czy korelacje są symetryczne i przechodnie. Jeśli tak, prawdopodobnie są prawdziwe i powinieneś je dalej sprawdzić.

DaL
źródło
1

Metodą, której używam, jest macierz cienia, w której zestaw danych składa się ze zmiennych wskaźnikowych, gdzie 1 jest podana, jeśli wartość jest obecna, i 0, jeśli nie jest. Korelowanie ich ze sobą i oryginalnymi danymi może pomóc w określeniu, czy zmienne często brakuje razem (MAR), czy nie (MCAR). Stosując Rna przykład (zaciąganie z książki „R w działaniu” Roberta 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
źródło
1
W VIM możesz także sprawdzić spinoploty. Dają histogram dwóch zmiennych z brakiem w każdej. Możemy wykreślić dwie zmienne i zobaczyć, jak brak w jednej zmienia się w zależności od drugiej. Na przykład, jeśli wykreślimy czas przeżycia i przypisanie do leczenia, jeśli zobaczymy prawidłowy przekrzywiony rozkład braków, możemy założyć, że niższe czasy przeżycia są związane z większą liczbą braków ... tj. Że brak leczenia jest MAR, ponieważ zależy od obserwowany zmienny czas przeżycia.
RayVelcoro,
1
Pytanie dotyczy MAR vs MNAR, ale twoja odpowiedź dotyczy MCAR vs MAR. MCAR jest zupełnie inny niż MNAR.
Tim
@Tim Jak AdamO stwierdził w komentarzu pod pytaniem, OP oznaczało MAR vs MCAR.
Phil