Wie führe ich eine 4 x 4 gemischte ANOVA mit Kontrasten zwischen und innerhalb von Subjekten mit R durch?

11

Anfänger Benutzer von R hier kämpfen mit einer ANOVA mit wiederholten Messungen.

Ich habe einen Datensatz, der aus einem Faktor zwischen Subjekten mit 4 Ebenen (codiert in einer einzelnen Variablen namens "Gruppen") und einem Faktor innerhalb von Probanden mit 4 Ebenen (codiert in vier separaten Variablen "DV1", "DV2", "DV3") besteht ',' DV4 ').

Ich habe folgende Ziele:

  1. Führen Sie eine ANOVA mit wiederholten Messungen durch.
  2. Vergleichen Sie Gruppen mit benutzerdefinierten Kontrasten (wie in einem LMATRIX-Befehl in SPSS).
  3. Vergleichen Sie verschiedene DV-Ebenen mithilfe benutzerdefinierter Kontraste (wie bei einem MMATRIX-Befehl in SPSS).
  4. Machen Sie eine Kombination aus 2) und 3) gleichzeitig, damit ich nur bestimmte Gruppen auf bestimmten Ebenen des Faktors innerhalb der Subjekte vergleiche.
  5. Führen Sie eine Reihe von Kontrasten aus, die NICHT Null ergeben.

Ich weiß, dass ich dies in SPSS ohne große Probleme tun kann, aber ich kann keine klare Vorstellung davon bekommen, wie dies in R zu tun ist. Ich habe gesehen, wie Teile davon in verschiedenen Paketen funktionieren könnten, aber ich habe es nicht weit gesehen, wie dies innerhalb eines Verfahrens oder einer Reihe verwandter Verfahren in R funktionieren könnte.

Aquadhere
quelle

Antworten:

18

Eine Skizze einer Lösung (für eine andere siehe unten):

  1. Daten müssen im Langformat (dh im Wert pro Zeile) anstatt im Breitformat wie in SPSS (dh einem Betreff pro Zeile) vorliegen (siehe Umformungspaket oder) ?reshape. Dazu gehört, dass es eine Variable geben muss, die die Subjektkennung angibt (dh die Subjekt-ID).
  2. Alle Faktoren (einschließlich der Subjektkennung) müssen vom Klassenfaktor sein ( strauf Ihrem Datenrahmen ausführen , um dies zu überprüfen). Wenn Sie dies nicht tun, sind Ihre Ergebnisse falsch.
  3. Wenn Sie Quadratsummen vom Typ III erhalten möchten, legen Sie die Standardkontraste für die Codierung fest:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Geben Sie das gewünschte Modell mit lmeaus dem nlmePaket an (installieren und laden Sie das Paket vorher über install.packages("nlme")und library(nlme)) unter Verwendung einer symmetrischen Korrelationsstruktur. Siehe die Antwort und insbesondere meinen Kommentar zur akzeptierten Antwort auf diese Frage. In Ihrem Fall könnte dies so etwas sein (wenn Sie Beispieldaten angegeben hätten, was dringend empfohlen wird, hätten Sie den richtigen Code erhalten):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. Verwenden Sie die generische anovaFunktion, um die Anova-Tabelle zu erhalten (siehe ?anova.lme):
    anova(my.anova)
    Um Quadratsummen vom Typ III zu erhalten, verwenden Sie den anovaBefehl mit dem Argument typeauf "marginal"(dies funktioniert nur, wenn Kontraste auf Effektcodierung eingestellt sind, siehe Punkt 3):
    anova(my.anova, type = "marginal")
  6. Das angepasste Objekt des Typs lmeermöglicht es nun verschiedenen Funktionen, Kontraste auszuführen. Die flexibelste (aber eher unhandliche) Lösung ist das LArgument in einem Aufruf von anova.lme(siehe noch einmal ?anova.lme).
    Andere Lösungen erfordern ebenfalls ein angepasstes lmeObjekt als Argument:
    Ebenfalls sehr flexibel ist die estimableFunktion aus dem Paket gmodels . Dieses Paket bietet auch die fit.contrastsFunktion.
    Das Multcomp- Paket ermöglicht Kontraste mithilfe der Alpha-Fehleranpassung (Sie können Kontraste jedoch nur mit einem Ihrer Faktoren ausführen), indem Sie die glhtFunktion verwenden.
    Ein neuer und vielversprechender Ansatz ist das Kontrastpaket , das jedoch bisher nicht alle möglichen Kontraste zu erkennen scheint.

Eine alternative Lösung besteht darin, eine Standard-ANOVA über die Kombination von afexund lsmeanswie in der afexVignette beschrieben zu verwenden .

Henrik
quelle
(+1) Großartige und sehr lehrreiche Antwort. Warten auf den Blog-Beitrag ...
chl
?anova.lmefunktioniert bei mir nicht und methods(anova)listet es als nicht sichtbare Funktion auf.
John
@ John Hast du schon mal geladen nlme? Wenn nicht, laufen library(nlme), dann sollte es funktionieren. Wenn es immer noch nicht funktioniert, install.packages("nlme")zuerst.
Henrik
ah ... ich hatte anscheinend nicht nur lme4
John
@ Henrick, ich kann mit Schritt 5 fortfahren, aber ich kann keine Kontraste einrichten, die bestimmte Faktoren zwischen Subjekten auf bestimmten Faktoren innerhalb des Subjekts vergleichen. Die gesamte Online-Dokumentation, die ich gesehen habe, hat mit dem Testen von Unterschieden auf verschiedenen Ebenen von Faktoren zwischen Subjekten zu tun. Haben Sie einen Beispielcode? Ich kann einfach auf den Blog-Beitrag warten, wenn Sie ihn dort behandeln.
Aquadhere