Update Mai 2017 : Wie sich herausstellt, ist eine Menge von dem, was ich hier geschrieben habe, irgendwie falsch . Einige Aktualisierungen werden im gesamten Beitrag vorgenommen.
Ich stimme dem, was Ben Bolker bereits gesagt hat, sehr zu (danke für den Gruß an afex::mixed()
), aber lassen Sie mich noch einige allgemeine und spezifische Gedanken zu diesem Thema hinzufügen.
Konzentrieren Sie sich auf feste oder zufällige Effekte und wie Sie Ergebnisse melden
Für die Art der experimentellen Forschung, die im Beispieldatensatz von Jonathan Baron dargestellt ist, verwenden Sie in der Regel die wichtige Frage, ob eine Manipulation vorliegt oder nicht Faktor eine Gesamtwirkung hat . Finden wir zum Beispiel einen Gesamteffekt oder eine Wechselwirkung von Task
? Ein wichtiger Punkt ist, dass in diesen Datensätzen normalerweise alle Faktoren unter vollständiger experimenteller Kontrolle stehen und zufällig zugewiesen werden. Folglich liegt der Schwerpunkt des Interesses in der Regel auf den festen Effekten.
Im Gegensatz dazu können die Zufallseffektkomponenten als "störende" Parameter angesehen werden, die systematische Varianz erfassen (dh interindividuelle Unterschiede in der Größe des Effekts), die für die Hauptfrage nicht unbedingt wichtig sind. Unter diesem Gesichtspunkt wurde vorgeschlagen, die von Barr et al. folgt etwas natürlich. Es ist leicht vorstellbar, dass eine experimentelle Manipulation nicht alle Individuen auf die gleiche Weise beeinflusst, und wir möchten dies kontrollieren. Andererseits ist die Anzahl der Faktoren oder Stufen in der Regel nicht zu groß, so dass die Gefahr einer Überanpassung vergleichsweise gering erscheint.
Infolgedessen würde ich dem Vorschlag von Barr et al. und spezifiziere eine maximale zufällige Effektstruktur und berichte Tests der festen Effekte als meine Hauptergebnisse. Um die festen Effekte zu testen, würde ich auch vorschlagen, afex::mixed()
Tests von Effekten oder Faktoren (anstelle von Parametertests) zu verwenden und diese Tests auf eine etwas vernünftige Weise zu berechnen (z. B. für alle Modelle, in denen a Einzeleffekt wird entfernt, verwendet Summen-zu-Null-Kontraste, bietet verschiedene Methoden zur Berechnung von p- Werten, ...).
Was ist mit den Beispieldaten?
Das Problem mit den Beispieldaten, die Sie angegeben haben, ist, dass für diesen Datensatz die maximale Zufallseffektstruktur zu einem übersättigten Modell führt, da es nur einen Datenpunkt pro Zelle des Designs gibt:
> with(df, table(Valence, Subject, Task))
, , Task = Cued
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
, , Task = Free
Subject
Valence Faye Jason Jim Ron Victor
Neg 1 1 1 1 1
Neu 1 1 1 1 1
Pos 1 1 1 1 1
Folglich lmer
Drosseln auf der maximalen zufälligen Effektstruktur:
> lmer(Recall~Task*Valence + (Valence*Task|Subject), df)
Error: number of observations (=30) <= number of random effects (=30) for term
(Valence * Task | Subject); the random-effects parameters and the residual variance
(or scale parameter) are probably unidentifiable
Leider gibt es meines Wissens keinen vereinbarten Weg, um mit diesem Problem umzugehen. Aber lassen Sie mich einige skizzieren und diskutieren:
Eine erste Lösung könnte darin bestehen, die höchste zufällige Steigung zu entfernen und die Auswirkungen für dieses Modell zu testen:
require(afex)
mixed(Recall~Task*Valence + (Valence+Task|Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 6.56 1 4.00 1.00 .06
2 Valence 0.80 2 3.00 0.75 .53
3 Task:Valence 0.42 2 8.00 1.00 .67
Diese Lösung ist jedoch ein wenig ad-hoc und nicht übermotiviert.
Update Mai 2017: Dies ist der Ansatz, den ich derzeit befürworte. Siehe diesen Blog-Beitrag und den Entwurf des Kapitels, an dem ich mitarbeite , Abschnitt "Random Effects Structures for Traditional ANOVA Designs".
Eine alternative Lösung (und eine, die von Barr et al. Als befürwortet angesehen werden könnte) könnte darin bestehen, immer die zufälligen Steigungen für den kleinsten Effekt zu entfernen. Dies hat jedoch zwei Probleme: (1) Welche zufällige Effektstruktur verwenden wir, um herauszufinden, was der kleinste Effekt ist, und (2) R zögert, einen Effekt niedrigerer Ordnung wie einen Haupteffekt zu entfernen, wenn Effekte höherer Ordnung wie ein Wechselwirkung dieses Effektes vorhanden ist (siehe hier ). Infolgedessen müsste man diese Zufallseffektstruktur von Hand aufbauen und die so aufgebaute Modellmatrix an den früheren Aufruf übergeben.
Eine dritte Lösung könnte darin bestehen, eine alternative Parametrisierung des Teils mit zufälligen Effekten zu verwenden, nämlich eine, die dem RM-ANOVA-Modell für diese Daten entspricht. Leider lmer
erlaubt (?) Keine "negativen Varianzen", so dass diese Parametrisierung nicht für alle Datensätze genau der RM-ANOVA entspricht , siehe Diskussion hier und anderswo (zB hier und hier ). Die "lmer-ANOVA" für diese Daten wäre:
> mixed(Recall~Task*Valence + (1|Subject) + (1|Task:Subject) + (1|Valence:Subject), df)
Effect F ndf ddf F.scaling p.value
1 Task 7.35 1 4.00 1.00 .05
2 Valence 1.46 2 8.00 1.00 .29
3 Task:Valence 0.29 2 8.00 1.00 .76
Angesichts all dieser Probleme würde ich einfach nicht lmer
zum Anpassen von Datensätzen verwenden, für die es nur einen Datenpunkt pro Zelle des Entwurfs gibt, es sei denn, es ist eine besser abgestimmte Lösung für das Problem der maximalen Zufallseffektstruktur verfügbar.
Stattdessen würde ich auch noch die klassische ANOVA verwenden können. Mithilfe des auf Wrapper car::Anova()
in afex
den Ergebnissen wäre:
> aov4(Recall~Task*Valence + (Valence*Task|Subject), df)
Effect df MSE F ges p
1 Valence 1.44, 5.75 4.67 1.46 .02 .29
2 Task 1, 4 4.08 7.35 + .07 .05
3 Valence:Task 1.63, 6.52 2.96 0.29 .003 .71
Beachten Sie, dass es afex
jetzt auch möglich ist, das Modell, mit aov
dem es ausgestattet ist, lsmeans
für Post-Hoc-Tests zurückzugeben (aber für die Prüfung der Auswirkungen sind die von gemeldeten car::Anova
noch vernünftiger):
> require(lsmeans)
> m <- aov4(Recall~Task*Valence + (Valence*Task|Subject), df, return = "aov")
> lsmeans(m, ~Task+Valence)
Task Valence lsmean SE df lower.CL upper.CL
Cued Neg 11.8 1.852026 5.52 7.17157 16.42843
Free Neg 10.2 1.852026 5.52 5.57157 14.82843
Cued Neu 13.0 1.852026 5.52 8.37157 17.62843
Free Neu 11.2 1.852026 5.52 6.57157 15.82843
Cued Pos 13.6 1.852026 5.52 8.97157 18.22843
Free Pos 11.0 1.852026 5.52 6.37157 15.62843
Confidence level used: 0.95