2016-11-19 1 views
1

Ich verwende ein LMEM (lineares Mixed-Effects-Modell) für einige Daten und vergleiche die Modelle (in Paaren) mit der Anova-Funktion. Bei einer bestimmten Teilmenge der Daten erhalte ich jedoch Unsinnsergebnisse.LMEM: Chi-Quadrat = 0, prob = 1 - Was ist los mit meinem Code?

Das ist mein voller Modell:

m3_full <- lmer(totfix ~ psource + cond + psource:cond + 
    1 + cond | subj) + (1 + psource + cond | object), data, REML=FALSE) 

Und das ist das Modell, das ich es zu vergleichen bin: (im Grunde ein Herausfallen einer der wichtigsten Effekte)

m3_psource <- lmer (totfix ~ psource + cond + psource:cond - 
psource + (1 + cond | subj) + (1 + psource + cond | object), 
    data, REML=FALSE) 

Ausführen der Funktion anova() (anova(m3_full, m3_psource) gibt zurück Chisq = 0, pr> (Chisq) = 1

Ich mache das gleiche für ein paar andere LMEMs und alles scheint in Ordnung, es ist nur diese besondere resp Onse-Wert, der mir die seltsamen Chi-Quadrat- und Wahrscheinlichkeitswerte gibt. Jeder hat eine Idee warum und wie ich es beheben kann? Jede Hilfe wird sehr geschätzt!

Antwort

1

Dies ist nicht wirklich eine gemischte Modell-spezifische Frage: Es hat vielmehr damit zu tun, wie R Modellmatrizen aus Formeln konstruiert (und möglicherweise mit der Logik Ihres Modellvergleichs).

Let schmalen es nach unten auf den Vergleich zwischen

form1 <- ~ psource + cond + psource:cond 

und

form2 <- ~ psource + cond + psource:cond - psource 

(die zu ~cond + psource:cond äquivalent ist). Diese zwei Formeln ergeben äquivalente Modellmatrizen, d. H. Modellmatrizen mit der gleichen Anzahl von Spalten, die den gleichen Entwurfsraum überspannen und die gleiche Gesamtgüte der Anpassung ergeben.

Einen minimalen Datensatz bis erkunden:

dd <- expand.grid(psource=c("A","B"),cond=c("a","b")) 

Was konstruiert Variablen haben wir mit jeder Formel erhalten?

colnames(model.matrix(form1,data=dd)) 
## [1] "(Intercept)" "psourceB"  "condb"   "psourceB:condb" 

colnames(model.matrix(form2,data=dd)) 
## [1] "(Intercept)" "condb"   "psourceB:conda" "psourceB:condb" 

Wir erhalten die gleiche Anzahl von Kontrasten.

Es gibt zwei mögliche Antworten auf dieses Problem.

  1. Es ist eine Schule des Denkens (verkörpert durch Nelder, Venables, etc .: siehe zB Venables' berühmt (?), Aber nicht veröffentlichten exegeses on linear models, Abschnitt 5, Wikipedia auf dem principle of marginality), die besagt, dass es doesn‘ Es ist sinnvoll, zu versuchen, Haupteffekte in der Gegenwart von Interaktionstermen zu testen, was Sie gerade versuchen.

  2. Es gibt gelegentliche Situationen (zB in einem Vorher-Nachher-control-Impact Design, bei dem die ‚vor‘ Unterschied zwischen Kontrolle und Wirkung bekannt ist Null aufgrund Versuchsprotokoll zu sein), wo Sie wirklich tun wollen dieser Vergleich. In diesem Fall müssen Sie Ihre eigenen Dummy-Variablen erstellen und sie zu Ihren Daten hinzufügen, z.

## set up model matrix and drop intercept and "psourceB" column 
dummies <- model.matrix(form1,data=dd)[,-(1:2)] 
## d='dummy': avoid colons in column names 
colnames(dummies) <- c("d_cond","d_source_by_cond") 
colnames(model.matrix(~d_cond+d_source_by_cond,data.frame(dd,dummies))) 
## [1] "(Intercept)"  "d_cond"   "d_source_by_cond" 

Dies ist ein Ärgernis. Meine Vermutung über den Grund dafür, dass dies schwierig ist, liegt darin, dass die ursprünglichen Autoren von R und S davor von der Denkschule # 1 stammten und dachten, dass im Allgemeinen, wenn Leute versuchten, dies zu tun, dies ein Fehler war; Sie haben es nicht unmöglich gemacht, aber sie haben nicht alles getan, um es einfach zu machen.

+0

Danke! Wenn ich zwei andere Modelle (ohne einen Haupteffekt gegen die volle) für eine andere Antwortvariable aus demselben Datensatz vergleiche, bekomme ich nicht das gleiche Problem (chisq und Wahrscheinlichkeiten sind normal). Ich bekomme die chisq = 0 und prob = 1, wenn ich einen Haupteffekt herausnehme, und wenn ich mit einem Modell mit nur den zufälligen Effekten und nur für die Antwortvariable 'totfix' vergleiche. Ich hätte auch hinzufügen sollen, dass ich eine Abweichungscodierung für die Faktoren "psource" und "cond" vorgenommen habe (weiß nicht, wie relevant das ist). Irgendeine Idee warum das sein könnte? Ich werde versuchen, die Dummy-Codierung, obwohl, hoffentlich wird es das Problem beheben! – Liritha

+0

Hmmm, nicht sicher, ohne ins Detail zu gehen. Der erste Satz Ihres Kommentars ist allerdings etwas überraschend ... sollte meiner Argumentation zufolge nur von Prädiktorvariablen abhängen (numeric vs factor, main vs interaction). * Wenn * Sie Ihre Interaktion manuell codieren oder auf numerischen Eingabevariablen basieren, würde ich denken, dass es funktionieren sollte. (Aber behalte die Idee, die oben in Punkt 1 beschrieben wurde, im Hinterkopf ...) –