Come scegliere la struttura di effetti casuali e fissi in modelli misti lineari?


19

Considera i seguenti dati da una progettazione bidirezionale all'interno dei soggetti:

df <- "http://personality-project.org/r/datasets/R.appendix4.data"
df <- read.table(df,header=T)
head(df)

Observation Subject Task Valence Recall
1           1     Jim Free     Neg      8
2           2     Jim Free     Neu      9
3           3     Jim Free     Pos      5
4           4     Jim Cued     Neg      7
5           5     Jim Cued     Neu      9
6           6     Jim Cued     Pos     10

Vorrei analizzarlo usando modelli lineari misti. Considerando tutti i possibili effetti fissi e casuali ci sono più possibili modelli:

# different fixed effects with random-intercept
a0 <- lmer(Recall~1 + (1|Subject), REML=F,df)
a1 <- lmer(Recall~Task + (1|Subject), REML=F,df)
a2 <- lmer(Recall~Valence + (1|Subject), REML=F,df)
a3 <- lmer(Recall~Task+Valence + (1|Subject), REML=F,df)
a4 <- lmer(Recall~Task*Valence + (1|Subject), REML=F,df)

# different fixed effects with random-intercept-random-slope
b0 <- lmer(Recall~1 + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b1 <- lmer(Recall~Task + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b2 <- lmer(Recall~Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b3 <- lmer(Recall~Task+Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b4 <- lmer(Recall~Task*Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)

# different fixed effects with random-intercept-random-slope including variance-covariance matrix
c0 <- lmer(Recall~1 + (1 + Valence + Task|Subject), REML=F,df)
c1 <- lmer(Recall~Task + (1 + Valence + Task|Subject), REML=F,df)
c2 <- lmer(Recall~Valence + (1 + Valence + Task|Subject), REML=F,df)
c3 <- lmer(Recall~Task+Valence + (1 + Valence + Task|Subject), REML=F,df)
c4 <- lmer(Recall~Task*Valence + (1 + Valence + Task|Subject), REML=F,df)
  1. Qual è il modo consigliato per selezionare il modello più adatto in questo contesto? Quando si utilizzano i test del rapporto di verosimiglianza, qual è la procedura consigliata? Generazione di modelli verso l'alto (dal modello null al modello più complesso) o verso il basso (dal modello più complesso al modello null)? Inclusione o esclusione graduale? Oppure si consiglia di mettere tutti i modelli in un test del rapporto di verosimiglianza e selezionare il modello con il valore p più basso? Come confrontare i modelli che non sono nidificati?

  2. Si consiglia di trovare prima la struttura degli effetti fissi appropriata e poi la struttura degli effetti casuali appropriata o viceversa (ho trovato riferimenti per entrambe le opzioni ...)?

  3. Qual è il modo consigliato di comunicare i risultati? Riportare il valore p dal test del rapporto di verosimiglianza confrontando il modello misto completo (con l'effetto in questione) con il modello ridotto (senza l'effetto in questione). Oppure è meglio usare il test del rapporto di verosimiglianza per trovare il modello di adattamento migliore e quindi utilizzare lmerTest per riportare i valori p dagli effetti nel modello di adattamento migliore?

Risposte:


18

Non sono sicuro che ci sia davvero una risposta canonica a questo, ma ci proverò.

Qual è il modo consigliato per selezionare il modello più adatto in questo contesto? Quando si utilizzano i test del rapporto di verosimiglianza, qual è la procedura consigliata? Generazione di modelli verso l'alto (dal modello null al modello più complesso) o verso il basso (dal modello più complesso al modello null)? Inclusione o esclusione graduale? Oppure si consiglia di mettere tutti i modelli in un test del rapporto di verosimiglianza e selezionare il modello con il valore p più basso? Come confrontare i modelli che non sono nidificati?

Dipende dai tuoi obiettivi.

  • In generale dovresti essere molto , molto attento alla selezione del modello (vedi ad esempio questa risposta , o questo post , o semplicemente Google "Harrell stepwise" ...).
  • Se siete interessati ad avere il vostro P-valori siano significativi (per esempio, si stanno facendo test di ipotesi di conferma), si dovrebbe non fare la selezione del modello. Tuttavia : non è così chiaro per me se le procedure di selezione del modello siano altrettanto cattive se si sta effettuando la selezione del modello su parti non focali del modello , ad esempio facendo la selezione del modello sugli effetti casuali se il proprio interesse primario è la deduzione sugli effetti fissi.
  • Non esiste una cosa come "mettere tutti i modelli in un test del rapporto di verosimiglianza": il test del rapporto di verosimiglianza è una procedura a coppie. Se volessi fare la selezione del modello (ad es.) Sugli effetti casuali, probabilmente consiglierei un approccio "tutto in una volta" usando i criteri di informazione come in questo esempio - che almeno evita alcuni dei problemi degli approcci graduali (ma non di selezione del modello più in generale).
  • Barr et al. 2013 "Keep it maximal" Journal of Memory and Language (doi: 10.1016 / j.jml.2012.11.001) consiglierebbe di utilizzare il modello massimo (solo).
  • Shravan Vasishth non è d'accordo , sostenendo che tali modelli saranno sottodimensionati e quindi problematici a meno che il set di dati non sia molto grande (e il rapporto segnale-rumore sia alto)
  • Un altro approccio ragionevolmente difendibile è quello di adattare un modello ampio ma ragionevole e quindi, se l'adattamento è singolare, rimuovere i termini fino a quando non lo è più
  • Con alcuni avvertimenti (elencati nelle FAQ GLMM ), è possibile utilizzare i criteri di informazione per confrontare i modelli non nidificati con diversi effetti casuali (anche se Brian Ripley non è d'accordo: vedere il fondo di p. 6 qui )

Si consiglia di trovare prima la struttura degli effetti fissi appropriata e poi la struttura degli effetti casuali appropriata o viceversa (ho trovato riferimenti per entrambe le opzioni ...)?

Non penso che qualcuno lo sappia. Vedi la risposta precedente sulla selezione del modello più in generale. Se potessi definire i tuoi obiettivi in ​​modo sufficientemente chiaro (cosa che poche persone fanno), la domanda potrebbe rispondere. Se hai riferimenti per entrambe le opzioni, sarebbe utile modificare la tua domanda per includerli ... (Per quello che vale, questo esempio (già citato sopra) usa criteri di informazione per selezionare la parte di effetti casuali, quindi evita la selezione sul parte del modello a effetto fisso.

Qual è il modo consigliato di comunicare i risultati? Riportare il valore p dal test del rapporto di verosimiglianza confrontando il modello misto completo (con l'effetto in questione) con il modello ridotto (senza l'effetto in questione). Oppure è meglio usare il test del rapporto di verosimiglianza per trovare il modello di adattamento migliore e quindi utilizzare lmerTest per riportare i valori p dagli effetti nel modello di adattamento migliore?

Questa è (purtroppo) un'altra domanda difficile. Se si segnalano gli effetti marginali come riportato da lmerTest, è necessario preoccuparsi della marginalità (ad esempio, se le stime degli effetti principali di Ae Bsono significative quando nel modello è presente un'interazione A-by B); questa è un'enorme lattina di worm, ma è un po ' mitigata se la usi contrasts="sum"come raccomandato da afex::mixed(). Anche i design bilanciati aiutano un po '. Se vuoi davvero scrivere su tutte queste crepe, penso che lo consiglierei afex::mixed, il che ti dà un output simile a lmerTest, ma cerca di affrontare questi problemi.


12

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, lmersoffoca 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:

  1. 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".

  2. 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.

  3. 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 (?), lmerNon 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 lmerper 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.

  1. Invece, vorrei che Uno potesse ancora usare la classica ANOVA. L'uso di uno dei wrapper car::Anova()nei afexrisultati 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 afexora consente anche di restituire il modello dotato del aovquale può essere passato lsmeansper i test post-hoc (ma per il test degli effetti quelli riportati car::Anovasono 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 

(+1) "Sfortunatamente, lmer non consente correlazioni negative" - ​​questo non dovrebbe essere "non consente varianze negative"? Inoltre, aggiornamento: potresti essere più esplicito su cosa sia esattamente "torto" in questa risposta?
ameba dice Ripristina Monica

(Ho letto il post collegato e sembra che il messaggio principale sia che l'approccio elencato qui come # 1 sia più kosher di quanto si pensasse. Corretto? Non è ancora chiaro se ora pensi che sia preferibile a # 3 o # 4 ).
ameba dice Ripristina Monica

@amoeba Sì, hai ragione. Ero troppo pigro per aggiornare la mia risposta qui di conseguenza.
Henrik,

@amoeba E hai anche delle giuste correlazioni. lmernon consente varianze negative ma ovviamente correlazioni negative tra i componenti di varianza.
Henrik,

1
Ho fatto alcune modifiche, potresti voler essere sicuro di non averti rappresentato male.
ameba dice di reintegrare Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.