Pełna informacja maksymalne prawdopodobieństwo braku danych w R

19

Kontekst : regresja hierarchiczna z pewnymi brakującymi danymi.

Pytanie : Jak wykorzystać oszacowanie maksymalnego prawdopodobieństwa (FIML) pełnej informacji w celu usunięcia brakujących danych w R? Czy polecasz pakiet i jakie są typowe kroki? Bardzo pomocne byłyby również zasoby i przykłady online.

PS : Jestem socjologiem, który niedawno zaczął używać R. Wielokrotna imputacja jest opcją, ale naprawdę podoba mi się, jak elegancko programy takie jak Mplus radzą sobie z brakującymi danymi za pomocą FIML. Niestety Mplus nie wydaje się w tej chwili porównywać modeli w kontekście regresji hierarchicznej (proszę daj mi znać, jeśli znasz sposób, aby to zrobić!). Zastanawiałem się, czy w R jest coś podobnego? Wielkie dzięki!

Sootica
źródło
1
Czy rozważałeś WinBugs ? Obsługuje brakujące dane w piękny naturalny sposób.
Mike Dunlavey
Alternatywą dla WinBUGS jest OpenBUGS lub STAN. Powinny być bardziej przyjazne dla komputerów Mac.
Maxim.K

Odpowiedzi:

16

Podziękowania dla tej odpowiedzi należą do @Joshua, który udzielił niesamowitej odpowiedzi, gdy opublikowałem to pytanie w społeczności R i Statistics w Google+. Po prostu wklejam jego odpowiedź poniżej.

Aby uruchomić regresję (bez ukrytego modelowania zmiennych), przeczytaj moje notatki wpisane po cytowanym tekście.

Obsługa brakujących danych z maksymalnym prawdopodobieństwem dla wszystkich dostępnych danych (tzw. FIML) jest bardzo przydatną techniką. Istnieje jednak wiele komplikacji, które sprawiają, że wdrożenie go w ogólny sposób jest trudne. Rozważ prosty model regresji liniowej, przewidujący pewne ciągłe wyniki na podstawie wieku, płci i rodzaju zawodu. W OLS nie martwisz się rozkładem wieku, płci i zawodu, tylko wynik. Zazwyczaj dla predyktorów jakościowych są one obojętne (0/1). Aby użyć ML, wymagane są założenia dystrybucyjne dla wszystkich zmiennych z brakami. Zdecydowanie najłatwiejszym podejściem jest wielowymiarowa normalna (MVN). Tak właśnie na przykład zrobi Mplus, jeśli nie wyjdziesz na drogę deklarowania typu zmiennej (np. Kategorialnej). W prostym przykładzie, który podałem, prawdopodobnie chciałbyś założyć, normalny dla wieku, Bernoulli dla seksu i wielomian dla rodzaju pracy. To drugie jest trudne, ponieważ tak naprawdę masz kilka zmiennych binarnych, ale nie chcesz traktować ich jak Bernoulliego. Oznacza to, że nie chcesz pracować ze zmiennymi fikcyjnymi sztucznymi, musisz pracować z rzeczywistą zmienną kategorialną, aby estymatory ML mogły poprawnie korzystać z wielomianu, ale to z kolei oznacza, że ​​sztuczny proces kodowania musi być wbudowany w model , nie dane. Znowu komplikuje życie. Co więcej, wspólny rozkład zmiennych ciągłych i kategorialnych nie jest łatwy do obliczenia (kiedy napotykam takie problemy w Mplusie, dość szybko zaczyna się rozkładać i walczyć). Wreszcie, naprawdę idealnie określasz brakujący mechanizm danych. W stylu SEM, FIML, wszystkie zmienne są zasadniczo uwarunkowane wszystkimi innymi, ale niekoniecznie jest to poprawne. Na przykład może brakuje wieku jako funkcji nie płci i rodzaju zawodu, ale ich interakcji. Interakcja może nie być ważna dla wyniku ogniskowego, ale jeśli jest ważna z powodu braku wieku, to musi być również w modelu, niekoniecznie merytorycznym modelu zainteresowania, ale brakującym modelu danych.

lavaan użyje ML dla MVN, ale obecnie uważam, że kategoryczne opcje danych są ograniczone (znowu pochodzące z pola SEM, jest to standard). Wielokrotna imputacja na początku wydaje się mniej elegancka, ponieważ zawiera wiele ukrytych założeń stojących za FIML (takich jak założenia dystrybucyjne dla każdej zmiennej i model predykcyjny przyjęty dla braku każdej zmiennej). Daje to jednak dużą kontrolę i wyraźne myślenie o rozkładzie każdej zmiennej, a optymalny mechanizm braku danych dla każdej z nich jest cenny.

Coraz bardziej przekonuję się, że modele bayesowskie są sposobem na obsługę brakujących danych. Powodem jest to, że są bardzo elastyczne w uwzględnianiu rozkładów dla każdej zmiennej, pozwalając na wiele różnych rodzajów rozkładów, i mogą łatwo włączyć zmienność wprowadzoną przez brakujące dane w predyktorach do ogólnych oszacowań modelu (co jest sztuczką z wielokrotnym przypisaniem, w którym następnie jakoś połączyć wyniki). Oczywiście metody te nie są najłatwiejsze i mogą wymagać dużo treningu i czasu.

Więc to tak naprawdę nie odpowiada na twoje pytanie, ale wyjaśnia, dlaczego całkowicie ogólne ramy radzenia sobie z zaginięciem są trudne. W moim pakiecie semutils dla macierzy kowariancji używam lavaan pod spodem, aby używać ML. Robię to, ponieważ zakładam dla macierzy kowariancji wariancji, że i tak używasz zmiennych ciągłych, więc zakładam, że moi użytkownicy już zakładają MVN dla swoich danych.

Oznacza to, że jeśli wszystkie zmienne z brakami są ciągłe, lavaan pakiet do modelowania równań strukturalnych (SEM) jest przydatny dla FIML w R.

Wracając do mojego początkowego pytania. Moim zamiarem było magiczne naprawienie zaginięcia podczas regresji liniowej. Wszystkie moje zmienne, których brakowało, były ładne i ciągłe. Więc zacząłem przeprowadzać analizy w dwóch stylach:

  • Zwykły sposób z wielokrotnym przypisaniem
  • W stylu SEM z lavaanem za pomocą FIML.

Brakowało mi wielu rzeczy, wykonując regresję w stylu SEM. Oba style dały podobne współczynniki i kwadraty R, ale w stylu SEM nie dostałem testu istotności regresji (typowe wartości F z df), zamiast tego otrzymałem wskaźniki dopasowania, które nie były pomocne, ponieważ wykorzystałem wszystkie moje stopnie wolności. Również gdy jeden model miał większy R2 od drugiego, nie mogłem znaleźć sposobu na porównanie, czy różnica była znacząca. Ponadto wykonywanie regresji w zwykły sposób daje dostęp do szeregu testów dla nieocenionych założeń regresji. Aby uzyskać bardziej szczegółową odpowiedź na ten temat, zobacz moje inne pytanie, na które dobrze odpowiedziała @StasK .

Wniosek wydaje się zatem taki, że lavaan jest przyzwoitym pakietem dla FIML w R, jednak użycie FIML zależy od założeń statystycznych i rodzaju przeprowadzanej analizy. Jeśli chodzi o regresję (bez ukrytego modelowania zmiennych), trzymanie jej z dala od programów SEM i stosowanie wielokrotnej imputacji jest prawdopodobnie mądrym posunięciem.

Sootica
źródło
-3

istnieją 2 główne sposoby postępowania z brakującymi danymi / rekordami. U albo usuń cały wiersz obserwacji, który ma brakującą wartość, albo znajdziesz sposób na wygenerowanie tej brakującej wartości. Jeśli zastosujesz pierwsze podejście, możesz stracić dużo danych. W drugim podejściu musisz znaleźć „sprytny” sposób na wygenerowanie tych brakujących danych, w taki sposób, aby oszacowania parametrów nowego zestawu danych nie różniły się znacznie od oszacowań parametrów obserwowanego zestawu danych.

To drugie podejście nazywa się imputacją danych i robi to kilka pakietów R. Jedna z nich nazywa się mclust, a potrzebna funkcja nazywa się imputeData. Ta funkcja wykorzystuje algorytm EM (maksymalizacja oczekiwań) do oszacowania parametrów nieobserwowanej części zbioru danych, biorąc pod uwagę obserwowaną część. Po znalezieniu parametrów generowany jest nowy punkt danych. Zakłada się, że rozkład brakujących danych, obserwowane dane i cały zestaw danych są Gaussowskie.

Mam nadzieję, że to wyjaśnienie pomoże ci osiągnąć to, co próbujesz zrobić

Lalas
źródło
Dzięki. Zdaję sobie sprawę z pakietów wielokrotnego przypisywania, ale chciałbym sprawdzić, czy istnieje względnie prosty sposób na oszacowanie maksymalnego prawdopodobieństwa.
Sootica
Funkcja prawdopodobieństwa nie jest zdefiniowana dla braku próbki x. Więc myślę, że szukasz czegoś, co nie istnieje.
Lalas
2
Zobacz ten artykuł, aby uzyskać wyjaśnienie wykorzystania podejść o maksymalnym prawdopodobieństwie do brakujących danych ( Allison, 2012 ). To, co opisuje OP, istnieje.
Andy W
2
A oto coś z SAS. support.sas.com/documentation/cdl/en/statug/63347/HTML/default/ ... Nigdy nie widziałem nic w R.
Jeremy Miles
Dzięki @JeremyMiles, właśnie opublikowałem to, co pomogło mi odpowiedzieć na to pytanie, myśląc, że inni też mogą uznać to za pomocne. PS. Książka R napisana przez Ciebie z Andym Fieldem jest niesamowita !! : D
Sootica