lme4:: raport lmer "fixed-effect model matrix is rank deficient", Czy potrzebuję poprawki i jak to zrobić?

Próbuję uruchomić model o mieszanych efektach, który przewiduje F2_difference z resztą kolumn jako predyktorami, ale dostaję komunikat o błędzie, który mówi

Macierz modelu Fixed-effect ma braki rank, więc spada 7 kolumn / współczynników.

Z tego linku, Model Fixed-effects jest wadliwy , myślę, że powinienem użyć findLinearCombos w pakiecie R caret. Jednak, gdy próbuję findLinearCombos(data.df), wyświetla mi się komunikat o błędzie

Błąd w qr.default ( object): NA/NaN / Inf in foreign function call (arg 1) Ponadto: komunikat ostrzegawczy: W qr.default (object): NAs introduced by coercion

Moje dane nie mają serwera NAs - co może być tego przyczyną? (Przepraszam, jeśli odpowiedź jest różnie oczywista - jestem nowy Na 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: Tu jest więcej kodu, jeśli to pomoże.

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

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

Editor edit:

OP nie dostarczył wystarczającej liczby danych testowych, aby umożliwić rzeczywiste uruchomienie modelu w lmer dla czytnika. Ale to nie jest zbyt duży problem. To jest nadal bardzo dobry post!

Author: Community, 2016-05-07

2 answers

Jesteś nieco zaniepokojony komunikatem ostrzegawczym:

Fixed-effect model macierz jest rank deficient więc spada 7 kolumn / współczynniki.

To Ostrzeżenie, a nie błąd. Nie ma ani nadużycia lmer, ani złej specyfikacji wzoru modelu, w ten sposób uzyskasz model szacunkowy. Ale aby odpowiedzieć na twoje pytanie, postaram się je wyjaśnić.

Podczas wykonywania lmer, twoja formuła modelu jest podzielona na stały efekt wzór i efekt losowy wzór , a dla każdego skonstruowana jest macierz modelu. Konstrukcja dla stałej jest za pomocą standardowego konstruktora macierzy modelu model.matrix; konstrukcja dla losowej jest skomplikowana, ale nie ma związku z twoim pytaniem, więc po prostu go pomijam.

Dla Twojego modelu możesz sprawdzić, jak wygląda matryca modelu o stałym efekcie:

fix.formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
               type * vowelLabel + nasal * type

X <- model.matrix (fix.formula, data.df)

Wszystkie Twoje zmienne są współczynnikiem, więc X będą binarne. Choć model.matrix stosuje contrasts dla każdy czynnik i jego interakcja, jest nadal możliwe, że X nie kończy się pełnym rankiem kolumny, ponieważ kolumna może być kombinacją liniową niektórych innych (, która może być dokładna lub liczbowo bliska). W Twoim przypadku, niektóre poziomy jednego czynnika mogą być zagnieżdżone w niektórych poziomach innego .

Niedobór rangi może pojawić się na wiele różnych sposobów. druga odpowiedź dzieli krzyżową odpowiedź oferując istotne dyskusje, na których będę skomentuj.

  • Dla Przypadku 1, ludzie mogą rzeczywiście zrobić model wyboru funkcji za pomocą powiedzmy, LASSO.
  • przypadki 2 i 3 są związane z procesem gromadzenia danych. Dobry projekt eksperymentu jest najlepszym sposobem na zapobieganie niedoborowi rangi, ale dla wielu osób, które budują modele, dane są już tam i żadna poprawa (jak uzyskanie większej ilości danych) nie jest możliwa. Chciałbym jednak podkreślić, że nawet w przypadku zbioru danych bez niedoboru rangi, nadal możemy uzyskać ten problem, jeśli nie używaj go ostrożnie. Na przykład Walidacja krzyżowa jest dobrą metodą porównywania modeli. Aby to zrobić, musimy podzielić kompletny zestaw danych na treningowy i testowy, ale bez opieki możemy uzyskać model z niedoborem rangi z zestawu danych treningowych.
  • przypadek 4 to duży problem, który może być całkowicie poza naszą kontrolą. Być może naturalnym wyborem jest zmniejszenie złożoności modelu, ale alternatywą jest próba ukaranej regresji.
  • przypadek 5 jest zagadnieniem liczbowym prowadzącym do szereg numeryczny-niedobór i to {[62] } jest dobrym przykładem.
  • przypadki 6 i 7 mówią o tym, że obliczenia numeryczne są wykonywane w skończonej precyzji. Zazwyczaj nie będzie to problemem, jeśli sprawa 5 zostanie rozpatrzona prawidłowo.

Tak więc, czasami możemy obejść niedobór, ale nie zawsze jest to możliwe do osiągnięcia. Tak więc każdy dobrze napisany model dopasowania, jak lm, glm, mgcv::gam, zastosuje rozkład QR dla X, aby używać tylko jego podprzestrzeni pełnowartościowej, tj. maksymalny podzbiór X kolumn, który daje przestrzeń pełnowartościową, dla estymacji, ustalanie współczynników związanych z resztą kolumn na 0 lub NA. To Ostrzeżenie sugeruje to. Istnieją pierwotnie ncol(X) współczynniki do oszacowania, ale z powodu niedoboru, tylko ncol(X) - 7 będą oszacowane, a reszta wynosi 0 lub NA. Takie numeryczne obejście zapewnia, że rozwiązanie o najmniejszych kwadratach można uzyskać w najbardziej stabilny sposób.


Aby lepiej możesz użyć lm, aby dopasować model liniowy z fix.formula.

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

method = "qr" i {[23] } są domyślne, więc nie musimy ich ustawiać. Ale jeśli określimy singular.ok = FALSE, lm zatrzyma się i narzeka na brak rangi.

lm(fix.formula, data.df, method = "qr", singular.ok = FALSE)
#Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
#  singular fit encountered

Możesz następnie sprawdzić zwrócone wartości w fix.fit.

p <- length(coef)
coef <- fix.fit$coef
no.NA <- sum(is.na(coef))
rank <- fix.fit$rank

Jest gwarantowane, że p = ncol(X), ale powinieneś zobaczyć no.NA = 7 i rank + no.NA = p.

Dokładnie to samo dzieje się wewnątrz lmer. lm nie zgłosi braków podczas Tak. Jest to w rzeczywistości pouczające, ponieważ zbyt często widzę ludzi pytających dlaczego lm zwraca NA dla niektórych współczynników.


Aktualizacja 1 (2016-05-07):

Zobaczmy, czy mam to prawo: krótka wersja jest taka, że jedna z moich zmiennych predykcyjnych jest skorelowana z inną, ale nie powinienem się tym martwić. Właściwe jest stosowanie czynników, prawda? I nadal mogę porównywać modele z anova lub patrząc na BIC?

Nie martw się o zastosowaniu summary lub anova. Metody są napisane w taki sposób, że poprawna liczba parametrów (stopień swobody) zostanie użyta do wytworzenia poprawnych statystyk sumarycznych.

Aktualizacja 2 (2016-11-06):

Posłuchajmy również, jaki autor pakietu lme4 powiedziałby: ostrzeżenie o niedoborze rangi mixed model lmer . Ben Bolker wspomniał też o caret::findLinearCombos, szczególnie dlatego, że tamtejszy OP chce rozwiązać problem niedoborów.

Aktualizacja 3 (2018-07-27):

Niedobór rangi nie jest problemem dla poprawnego oszacowania i porównania modelu, ale może być zagrożeniem w przewidywaniu. Niedawno napisałem szczegółową odpowiedź z symulowanymi przykładami na Crossvalided: R lm, Czy ktoś mógłby mi podać przykład mylącego przypadku na "przewidywanie z niedoboru rangi"?więc, tak, w teorii powinniśmy unikać szacowania braku Rang. Ale w rzeczywistości nie ma tak zwanego "prawdziwego modelu": staramy się uczyć to z danych. Nigdy nie możemy porównać modelu szacowanego do "prawdy"; najlepszym rozwiązaniem jest wybór najlepszego z wielu modeli, które zbudowaliśmy. Jeśli więc "najlepszy" model skończy się brakiem rangi, możemy być sceptyczni co do tego, ale prawdopodobnie nic nie możemy zrobić od razu.

 36
Author: 李哲源,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-27 22:10:55

Ta odpowiedź doskonale wyjaśnia, czym jest niedobór rangi i jakie mogą być możliwe przyczyny.

Viz:

  1. zbyt mało danych: nie można jednoznacznie oszacować n parametrów z mniej niż n punktów danych
  2. zbyt wiele punktów jest replikowanych.
  3. informacje w niewłaściwych miejscach.
  4. skomplikowany model (zbyt wiele zmiennych)
  5. jednostki i skalowanie
  6. Zmiana liczb: 12.001 vs. 12.005 & 44566 vs 44555
  7. Dane precyzja: nawet zmienne o podwójnej precyzji mają granice
 6
Author: Mox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 16:42:39