Aggiornamento maggio 2017 : A quanto pare, un po 'di quello che ho scritto qui è un po' sbagliato . Alcuni aggiornamenti sono fatti in tutto il post.
Concordo molto con quanto è già stato detto da Ben Bolker (grazie per il messaggio afex::mixed()
), ma lasciatemi aggiungere alcune considerazioni più generali e specifiche su questo tema.
Concentrati sugli effetti fissi rispetto a quelli casuali e su come segnalare i risultati
Per il tipo di ricerca sperimentale che è rappresentato nel set di dati di esempio di Jonathan Baron, la domanda importante è di solito se un fattore manipolato abbia o meno un effetto complessivo. Ad esempio, troviamo un effetto principale complessivo o l'interazione di Task
? Un punto importante è che in quei set di dati di solito tutti i fattori sono sotto controllo sperimentale completo e assegnati in modo casuale. Di conseguenza, il focus dell'interesse è di solito sugli effetti fissi.
Al contrario, i componenti degli effetti casuali possono essere visti come parametri "fastidiosi" che catturano la varianza sistematica (cioè differenze inter-individuali nella dimensione dell'effetto) che non sono necessariamente importanti per la domanda principale. Da questo punto di vista il suggerimento di utilizzare la massima struttura di effetti casuali come sostenuto da Barr et al. segue in qualche modo naturalmente. È facile immaginare che una manipolazione sperimentale non influisca su tutti gli individui nello stesso identico modo e noi vogliamo controllarlo. D'altra parte, il numero di fattori o livelli di solito non è troppo grande, per cui il pericolo di un eccesso di equipaggiamento sembra relativamente piccolo.
Di conseguenza, seguirei il suggerimento di Barr et al. e specifica una struttura di effetti casuali massima e riporta i test degli effetti fissi come i miei risultati principali. Per testare gli effetti fissi, suggerirei anche di usare afex::mixed()
in quanto riporta test di effetti o fattori (anziché test di parametri) e calcola tali test in modo un po 'sensato (ad esempio, utilizza la stessa struttura di effetti casuali per tutti i modelli in cui un il singolo effetto viene rimosso, usa i contrasti somma-zero, offre diversi metodi per calcolare i valori p , ...).
Che dire dei dati di esempio
Il problema con i dati di esempio forniti è che per questo set di dati la massima struttura di effetti casuali porta a un modello sovrasaturato in quanto esiste un solo punto dati per cella del progetto:
> 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
Di conseguenza, lmer
soffoca sulla struttura massima degli effetti casuali:
> 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
Purtroppo, per quanto ne so, non esiste un modo concordato per affrontare questo problema. Ma lasciami fare uno schizzo e discuterne alcuni:
Una prima soluzione potrebbe essere quella di rimuovere la pendenza casuale più alta e testare gli effetti per questo modello:
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
Tuttavia, questa soluzione è un po 'ad hoc e non eccessivamente motivata.
Aggiornamento maggio 2017: questo è l'approccio che sto attualmente approvando. Vedi questo post sul blog e la bozza del capitolo I am co-authoring , sezione "Strutture a effetti casuali per i disegni tradizionali ANOVA".
Una soluzione alternativa (e quella che potrebbe essere vista come sostenuta dalla discussione di Barr et al.) Potrebbe essere quella di rimuovere sempre le pendenze casuali per il minimo effetto. Questo ha due problemi però: (1) Quale struttura di effetti casuali utilizziamo per scoprire qual è l'effetto più piccolo e (2) R è riluttante a rimuovere un effetto di ordine inferiore come un effetto principale se effetti di ordine superiore come un interazione di questo effetto è presente (vedi qui ). Di conseguenza, bisognerebbe impostare manualmente questa struttura di effetti casuali e passare la matrice del modello così costruita alla chiamata lmer.
Una terza soluzione potrebbe essere quella di utilizzare una parametrizzazione alternativa della parte degli effetti casuali, vale a dire quella che corrisponde al modello RM-ANOVA per questi dati. Sfortunatamente (?), lmer
Non consente "varianze negative", quindi questa parametrizzazione non corrisponde esattamente a RM-ANOVA per tutti i set di dati , vedere la discussione qui e altrove (ad es. Qui e qui ). Il "lmer-ANOVA" per questi dati sarebbe:
> 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
Dati tutti questi problemi, semplicemente non userei lmer
per adattare set di dati per i quali esiste un solo punto dati per cella del progetto a meno che non sia disponibile una soluzione più concordata per il problema della struttura degli effetti casuali massima.
Invece, vorrei che Uno potesse ancora usare la classica ANOVA. L'uso di uno dei wrapper car::Anova()
nei afex
risultati sarebbe:
> 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
Si noti che afex
ora consente anche di restituire il modello dotato del aov
quale può essere passato lsmeans
per i test post-hoc (ma per il test degli effetti quelli riportati car::Anova
sono ancora più ragionevoli):
> 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