Staram się przewidzieć wynik binarny przy użyciu 50 ciągłe zmienne objaśniające (w zakresie od najbardziej zmiennych jest do ∞ ). Mój zestaw danych ma prawie 24 000 wierszy. Kiedy biegnę w R, otrzymuję:glm
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
Przeczytałem inne odpowiedzi, które sugerują, że może wystąpić idealna separacja, ale jestem pewien, że nie ma tego w moich danych (chociaż może istnieć quasi-pełna separacja; jak mogę sprawdzić, czy tak jest?) . Jeśli usunę niektóre zmienne, błąd „nie zbiegnie się” może zniknąć. Ale nie zawsze tak się dzieje.
Próbowałem użyć tych samych zmiennych w bayesglm
funkcji i dostałem te same błędy.
Jakie kroki byś podjął, aby dowiedzieć się dokładnie, co się tutaj dzieje? Jak ustalić, które zmienne powodują problemy?
r
regression
logistic
separation
Ciastko
źródło
źródło
bayesglm
pracy , oni, że oddzielenie jest „wspólny problem, nawet, jeśli rozmiar próbki jest większy, a ilość predykcyjnych jest mały”bayesglm
próbuje uniknąć separacji, dodając przeor, ale przy 24 000 rzędach przeor najprawdopodobniej zostanie zalany przez prawdopodobieństwo. Spróbuj zmniejszyćprior.scale
, prawdopodobnie o dużą ilość. Rozważ również zwiększenie stopnia swobody przeora, co pomoże wykluczyć duże wartości związane z separacją.Odpowiedzi:
Przy tak dużej przestrzeni projektowej ( !) Możliwe jest uzyskanie idealnej separacji bez konieczności oddzielania żadnej zmiennej indywidualnie. Poparłbym nawet komentarz Davida J. Harrisa, mówiąc, że jest to prawdopodobne.R50
Możesz łatwo sprawdzić, czy Twoje klasy są idealnie oddzielone w twojej przestrzeni projektowej. Sprowadza się to do rozwiązania problemu programowania liniowego. Implementacja R tego „testu” (nie testu w znaczeniu statystycznym) jest zaimplementowana w pakiecie safeBinaryRegression .
Jeśli okaże się, że separacja jest rzeczywiście problemem, a jeśli interesuje Cię zwykłe waniliowe użycie glm (np. Glm nie jest wywoływany przez funkcję wyższego poziomu, ale przez ciebie), to istnieje implementacja R algorytmów, które nieznacznie modyfikuje klasyczny, aby uczynić go „odpornym” na separację. Jest zaimplementowany w pakiecie hlr
źródło