Come eseguire un ANOVA misto 4 per 4 con contrasti tra e all'interno dei soggetti usando R?


11

Utente principiante di R qui alle prese con una ripetuta ANOVA misure.

Ho un set di dati composto da un fattore tra i soggetti con 4 livelli (codificato in una singola variabile chiamata "gruppi") e uno all'interno di un fattore dei soggetti con 4 livelli (codificato in quattro variabili separate "DV1", "DV2", "DV3 ',' DV4 ').

Ho i seguenti obiettivi:

  1. Eseguire un ANOVA misure ripetute complessive.
  2. Confronta i gruppi utilizzando contrasti personalizzati (come in un comando LMATRIX in SPSS).
  3. Confronta i diversi livelli di DV usando contrasti personalizzati (come in un comando MMATRIX in SPSS).
  4. Fai una combinazione di 2) e 3) contemporaneamente, quindi sto confrontando solo determinati gruppi a determinati livelli del fattore entro soggetti.
  5. Esegui una serie di contrasti che NON si sommano a zero.

So di poterlo fare in SPSS senza troppi problemi, ma non riesco ad avere un'idea chiara di come farlo in R. Ho visto come parti di questo potrebbero funzionare in pacchetti diversi, ma non l'ho fatto visto da lontano come ciò potrebbe funzionare all'interno di una procedura o di una serie di procedure correlate in R.

Risposte:


18

Uno schizzo di una soluzione (per un'altra vedi sotto):

  1. I dati devono essere nel formato lungo (ovvero, sul valore per riga) anziché nel formato largo come in SPSS (ovvero, un soggetto per riga), vedere il pacchetto di risagoma, oppure ?reshape. Ciò include che deve essere presente una variabile che indica l'identificatore del soggetto (ovvero, id soggetto).
  2. Tutti i fattori (incluso l'identificatore del soggetto) devono essere di classe (esegui stril tuo frame di dati per verificarlo). Se non lo fai, i tuoi risultati saranno sbagliati.
  3. Se si desidera ottenere somme di quadrati di tipo III, impostare i contrasti predefiniti per effettuare la codifica:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Specificare il modello desiderato con lmedal nlmepacchetto (installare e caricare il pacchetto in anticipo tramite install.packages("nlme")e library(nlme)) utilizzando una struttura di correlazione simmetrica di compund. Vedi la risposta e soprattutto il mio commento alla risposta accettata a questa domanda. Nel tuo caso potrebbe essere qualcosa del genere (se avessi fornito dati di esempio, che è fortemente raccomandato, avresti ricevuto il codice corretto):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. Usa la anovafunzione generica per ottenere la tabella anova (vedi ?anova.lme):
    anova(my.anova)
    Per ottenere somme di quadrati di tipo III usa il anovacomando con argomento typeimpostato su "marginal"(funziona solo se i contrasti sono impostati sulla codifica degli effetti, vedi punto 3):
    anova(my.anova, type = "marginal")
  6. L'oggetto di tipo montato lmeora consente a diverse funzioni di eseguire contrasti. La soluzione più flessibile (ma piuttosto invariata) è l' Largomento in una chiamata a anova.lme(vedi di nuovo ?anova.lme).
    Altre soluzioni richiedono anche un lmeoggetto adattato come argomento:
    anche la estimablefunzione del pacchetto gmodels è molto flessibile . Questo pacchetto offre anche la fit.contrastsfunzione.
    Il pacchetto multcomp consente i contrasti utilizzando la regolazione degli errori alfa (ma è possibile eseguire i contrasti solo utilizzando uno dei fattori), utilizzando la glhtfunzione.
    Un approccio nuovo e promettente è il pacchetto di contrasto , tuttavia, finora non sembra privilegiare tutti i possibili contrasti.

Una soluzione alternativa è quella di utilizzare lo standard ANOVA tramite la combinazione di afexe lsmeanscome indicato nella afex-vignette .


(+1) Risposta eccezionale e molto istruttiva. Aspettando il post sul blog ...
chl

?anova.lmenon funziona per me e lo methods(anova)elenca come una funzione non visibile.
Giovanni,

@John Hai caricato nlmeprima? In caso contrario, esegui library(nlme), quindi dovrebbe funzionare. Se non funziona ancora, per install.packages("nlme")prima cosa.
Henrik,

ah ... a quanto pare non avevo, solo lme4
John,

@ Henrick, posso andare al passaggio 5, ma non sono in grado di impostare contrasti confrontando specifici fattori tra soggetti a specifici livelli di fattore all'interno del soggetto. Tutta la documentazione online che ho visto ha a che fare con il test delle differenze a diversi livelli di fattori tra soggetti. Hai qualche codice di esempio? Posso solo aspettare il post sul blog se lo coprirai lì.
aquadhere,
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.