2016-05-07 40 views
12

Próbuję uruchomić model mieszanych efektów, które prognozuje F2_difference z resztą kolumn jako predyktory, ale pojawia się komunikat o błędzielme4 :: lmer zgłasza, że ​​"matryca z matrycą o stałym efekcie ma niedobór rangi", czy potrzebuję poprawki i jak?

stałej efekt modelu matryca jest ranga niedoborem tak spada 7 kolumn/współczynniki.

z tego linku, Fixed-effects model is rank deficient, myślę, że powinienem użyć findLinearCombos w pakiecie R caret. Jednak, gdy próbuję findLinearCombos(data.df), to daje mi komunikat o błędzie

Błąd w qr.default (Object): NA/NaN/Inf w obcym wywołania funkcji (arg 1) Ponadto: komunikat ostrzegawczy: W qr.default (object): NAs wprowadzone przez przymus

Moje dane nie mają żadnych NA - co może być przyczyną? (Przepraszam, jeśli odpowiedź jest oczywista - jestem nowy w R).

Wszystkie moje dane są czynnikami, z wyjątkiem wartości liczbowej, którą próbuję przewidzieć. Oto mała próbka moich danych.

sex <- c("f", "m", "f", "m") 
nasal <- c("TRUE", "TRUE", "FALSE", "FALSE") 
vowelLabel <- c("a", "e", "i", "o") 
speaker <- c("Jim", "John", "Ben", "Sally") 
word_1 <- c("going", "back", "bag", "back") 
type <- c("coronal", "coronal", "labial", "velar") 
F2_difference <- c(345.6, -765.8, 800, 900.5) 
data.df <- data.frame(sex, nasal, vowelLabel, speaker, 
         word_1, type, F2_difference 
         stringsAsFactors = TRUE) 

Edytuj: Oto kilka dodatkowych kodów, jeśli to pomaga.

formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
      type * vowelLabel + nasal * type + 
      (1|speaker) + (1|word_1) 

lmer(formula, REML = FALSE, data = data.df) 

edit Redaktor:

PO nie zapewniają dostatecznej liczby danych testowych, aby umożliwić rzeczywisty przebieg modelu w lmer dla czytelnika. Ale to nie jest zbyt duży problem. To wciąż bardzo dobry post!

+1

To mówiąc, że zachodzi podział na zero lub rejestracja liczby ujemnej lub innego matematycznie patologicznego stanu. Bez kodu i danych jest mało prawdopodobne, aby ktokolwiek mógł wyrazić sensowne komentarze. –

+0

Przykro mi, ale nie wiem, jak mogę podać moje dane, ponieważ pochodzą one z wielu plików tekstowych, które są połączone w R. Zmienna zależna, 'F2_difference' może być ujemna. Czy to jest problem? Jeśli tak, czy mogę dodać pewną liczbę do wszystkich zmiennych, aby nic nie było negatywne? – Lisa

+0

To nie to. Niedostatek rangowy matrycy modelu jest oznaką trudności w RHS modelu ("zmiennych niezależnych"). –

Odpowiedz

13

Powiedziałbym, że są nieco zbyt zaniepokojony z komunikatem ostrzegawczym:

stałej efekt modelu matryca jest ranga niedoborem więc upuszczenie 7 kolumn/współczynników.

To tylko ostrzeżenie, a nie błąd. Nie ma tu niewłaściwego użycia "lmera" ani niewłaściwej specyfikacji formuły modelu, dlatego otrzymasz oszacowany model. Ale ponieważ zapytałeś, postaram się jak najlepiej wyjaśnić tę historię.


Podczas wykonywania lmer, oryginalny wzór formuła jest podzielony na na części: Poprawiono efekt formula i efekt losowy wzór. Dla każdej części skonstruowana jest macierz modelu . Konstrukcja dla części stałej jest przekazywana do standardowego konstruktora macierzy modelu model.matrix, podczas gdy konstrukcja dla części losowej jest nieco bardziej skomplikowana, ale niezwiązana z twoim pytaniem, więc pomijam ją.

Do modelu można sprawdzić, jakie stały matryca efekt modelu wygląda przez:

fix.formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
       type * vowelLabel + nasal * type 
X <- model.matrix (fix.formula, data.df) 

Wszystkie twoje zmienne są czynnikiem tak X będzie binarny. Chociaż model.matrix dotyczy contrasts dla każdego czynnika i jego interakcji, nadal jest prawdopodobne, że X nie zakończy się pełnym rankingiem kolumn, ponieważ niektóre kolumny mogą być skorelowane liniowo. W twoim przypadku niektóre poziomy jednego czynnika mogą być zagnieżdżone na pewnym poziomie innego czynnika. Chociaż dobry modelarz powinien postarać się jak najlepiej, aby uniknąć takiego problemu przed dopasowaniem modelu, nie zawsze można mieć pełną kontrolę nad tym, ponieważ korelacja między zmiennymi zbyt często występuje w modelowaniu statystycznym w świecie rzeczywistym.

Zatem każdy dobrze napisany modelu montażu rutynowe, jak lm, glm, mgcv::gam, będą miały zastosowanie dekompozycji QR dla X używać tylko jej pełnego rzędu podprzestrzeń dla modelu okucia, kurczy inne współczynniki 0 lub NA. Komunikat ostrzegawczy, który otrzymasz, jest sygnałem tego. Pierwotnie są to współczynniki, które można oszacować, ale ze względu na niedostatek rangowy szacowany będzie tylko ncol(X) - 7, a reszta to 0 lub NA. Taki skurcz jest dobrym znakiem, ponieważ zapewnia stabilność numeryczną w rozwiązywaniu równań szacunkowych. Więc nie powinieneś się tym przejmować.


Aby pomóc lepiej widzieć, użyjmy funkcji lm, by sprawdzić, co się stanie, jeśli pasuje do modelu liniowego z fix.formula:

fix.fit <- lm (fix.formula, data.df, method = "qr", singular.ok = TRUE) 

method = "qr" i singular.ok = TRUE są domyślne, więc faktycznie możemy don” t potrzebujesz go ustawić. Z drugiej strony, jeśli ustawiony singular.ok = FALSE:

oo <- lm (fix.formula, data.df, method = "qr", singular.ok = FALSE) 

lm zatrzyma się i narzekają szeregowych niedoboru.

Teraz sprawdźmy zwrócone wartości w fix.fit.

coef <- fix.fit$coef 
p <- length(coef) 

Gwarantuje się, że p = ncol(X). Jeśli jednak sprawdzić coef przez

no.NA <- sum(is.na(coef)) 

powinieneś zobaczyć 7 NA. Zaskakujący? Teraz sprawdź postój

rank <- fix.fit$rank 

Jest to pozycja numeryczna dla X. Powinieneś zweryfikować, że rank + no.NA = p.

Dokładnie to samo dzieje się wewnątrz lmer. lm nie zgłasza niedostatków rangi, podczas gdy robi to lmer. Jest to w rzeczywistości informacyjne. Zbyt często widzę ludzi, którzy pytają, dlaczego lm powracają dla niektórych współczynników.


Update 1 (7.05.2016):

nie martw się o wykorzystaniu anova lub BIC funkcja pakiet zajmie się nimi prawidłowo.

edytowany oryginalny post, dodając znaczniki [lme4], [regresja liniowym], [regresja] i przemianowany na tytuł, aby być bardziej pouczające. Mamy nadzieję, że osoby z takimi samymi wątpliwościami łatwo znajdą Twój post.

Update 2 (06.11.2016):

Załóżmy też usłyszeć, co pakiet autor lme4 powiedziałby: rank deficiency warning mixed model lmer. Ben Bolker wspomniał także o caret::findLinearCombos, w szczególności dlatego, że OP chce samodzielnie rozwiązać problem braku.

Dzisiaj pojawia się jeszcze jedno pytanie na ten temat: rank defficient model reports an error when doing post hoc analysis. A mój komentarz tam:

Look, ponieważ masz zmuszany zarówno POS i DISTANCE do czynnika, istnieje wysokie prawdopodobieństwo, że pewien poziom POS jest zagnieżdżony w jakimś poziomie DISTANCE. Jeśli weźmiesz pod uwagę model liniowy w części o stałym efekcie fit <- lm(total ~ DISTANCE + POS, data = dat) (użyłem zmiennej dat dla twoich danych), zobaczysz 2 NA współczynników!

+0

Dziękuję bardzo za bardzo dobrze wyjaśnioną odpowiedź! Chociaż muszę przyznać, że wciąż jest nad moją głową.Pozwól mi zobaczyć, czy mam to prawo: Krótka wersja jest to, że jedna z moich zmiennych predykcyjnych jest skorelowana z inną, ale nie powinienem się tym martwić. Właściwe jest użycie czynników, prawda? I nadal mogę porównywać modele z 'anova()' lub patrząc na BIC? – Lisa

2

Ta response wykonuje doskonałą pracę wyjaśniając, jaki niedobór rang jest i jakie mogą być przyczyny.

Viz:

  1. zbyt mało danych: nie można jednoznacznie oszacowania parametrów n mniej niż n punktów danych
  2. zbyt wiele punktów są powtórzeniach.
  3. Informacje w niewłaściwych miejscach.
  4. Skomplikowany wzór (zbyt wiele zmiennych)
  5. Jednostki i skalowanie
  6. różnice w liczbach: 12,001 vs 12,005 & 44566 vs 44555
  7. precyzja danych: Nawet Zmienne podwójnej precyzji mają limity