È un modo accettabile per analizzare i modelli di effetti misti con lme4 in R?


14

Ho un set di dati di misure ripetute sbilanciate da analizzare e ho letto che il modo in cui la maggior parte dei pacchetti statistici gestisce questo con ANOVA (ovvero la somma dei quadrati di tipo III) è sbagliato. Pertanto, vorrei utilizzare un modello di effetti misti per analizzare questi dati. Ho letto molto su modelli misti in R, ma sono ancora molto nuovo Re modelli di effetti misti e non sono molto sicuro di fare le cose nel modo giusto. Nota che non posso ancora completamente divorziare da me stesso con metodi "tradizionali", e ho ancora bisogno di valori e test post hoc.p

Vorrei sapere se il seguente approccio ha un senso o se sto facendo qualcosa di orribilmente sbagliato. Ecco il mio codice:

# load packages
library(lme4)
library(languageR)
library(LMERConvenienceFunctions)
library(coda)
library(pbkrtest)

# import data
my.data <- read.csv("data.csv")

# create separate data frames for each DV & remove NAs
region.data <- na.omit(data.frame(time=my.data$time, subject=my.data$subject, dv=my.data$dv1))

# output summary of data
data.summary <- summary(region.data)

# fit model
# "time" is a factor with three levels ("t1", "t2", "t3")
region.lmer <- lmer(dv ~ time + (1|subject), data=region.data)

# check model assumptions
mcp.fnc(region.lmer)

# remove outliers (over 2.5 standard deviations)
rm.outliers <- romr.fnc(region.lmer, region.data, trim=2.5)
region.data <- rm.outliers$data
region.lmer <- update(region.lmer)

# re-check model assumptions
mcp.fnc(region.lmer)

# compare model to null model
region.lmer.null <- lmer(dv ~ 1 + (1|subject), data=region.data)
region.krtest <- KRmodcomp(region.lmer, region.lmer.null)

# output lmer summary
region.lmer.summary <- summary(region.lmer)

# run post hoc tests
t1.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)

region.lmer <- lmer(dv ~ relevel(time,ref="t2") + (1|subject), data=region.data)
t2.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)

region.lmer <- lmer(dv ~ relevel(time,ref="t3") + (1|subject), data=region.data)
t3.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)

# Get mcmc mean and 50/95% HPD confidence intervals for graphs
# repeated three times and stored in a matrix (not shown here for brevity)
as.numeric(t1.pvals$fixed$MCMCmean)
as.numeric(t1.pvals$fixed$HPD95lower)
as.numeric(t1.pvals$fixed$HPD95upper)
HPDinterval(as.mcmc(t1.pvals$mcmc),prob=0.5)
    HPDinterval(as.mcmc(t1.pvals$mcmc),prob=0.5)

Alcune domande specifiche che ho:

  1. È un modo valido di analizzare modelli di effetti misti? In caso contrario, cosa dovrei fare invece.
  2. Le critiche fornite da mcp.fnc sono abbastanza buone per verificare i presupposti del modello o dovrei prendere ulteriori provvedimenti?
  3. Ritengo che affinché i modelli misti siano validi, i dati devono rispettare i presupposti di normalità e omoscedasticità. Come giudicare ciò che è "approssimativamente normale" e cosa no osservando i grafici delle critiche generati da mcp.fnc? Devo solo avere un'idea di questo, o è il loro modo prescritto di fare le cose? Quanto sono robusti i modelli misti rispetto a questi presupposti?
  4. Devo valutare le differenze tra i tre punti temporali per ~ 20 caratteristiche (biomarcatori) dei soggetti nel mio campione. Adattare e testare modelli separati per ciascuno accettabile purché riporti tutti i test intrapresi (significativi o meno) o ho bisogno di qualsiasi forma di correzione per confronti multipli.

Per essere un po 'più precisi riguardo all'esperimento, ecco alcuni dettagli in più. Abbiamo seguito un certo numero di partecipanti longitudinalmente durante il trattamento. Abbiamo misurato un numero di biomarcatori prima dell'inizio del trattamento e in due momenti successivi. Quello che mi piacerebbe vedere è se ci sono differenze in questi biomarcatori tra i tre punti temporali.

Sto basando la maggior parte di ciò che sto facendo qui in questo tutorial , ma ho apportato alcune modifiche in base alle mie esigenze e cose che ho letto. Le modifiche che ho apportato sono:

  1. pertinente il fattore "tempo" per ottenere confronti t1-t2, t2-t3 e t1-t3 con pvals.fnc (dal pacchetto languageR)
  2. confronta il mio modello misto con il modello nullo usando un F-test approssimativo basato sull'approccio di Kenward-Roger (usando il pacchetto pbkrtest) piuttosto che un test del rapporto di verosimiglianza (perché ho letto che Kenward-Roger è meglio considerato in questo momento)
  3. Usa il pacchetto LMERConvenienceFunctions per controllare i presupposti e rimuovere gli outlier (perché ho letto che i modelli misti sono molto sensibili agli outlier)

1
(+1) Domande (multiple) ben formulate.
chl

Risposte:


22

Le tue domande sono un po '"grandi", quindi inizierò con alcuni commenti e suggerimenti generali.

Qualche lettura di base e pacchetti utili

Probabilmente dovresti dare un'occhiata ad alcune delle introduzioni al tutorial sull'uso di modelli misti, consiglierei di iniziare con Baayen et al (2008) - Baayen è l'autore di languageR. Barr et al (2013) discutono alcuni problemi con la struttura degli effetti casuali e Ben Bolker è uno degli sviluppatori attuali di lme4. Baayen et al. Sono particolarmente utili per le tue domande perché trascorrono molto tempo a discutere l'uso dei test di bootstrap / permutazione (le cose dietro mcp.fnc).

Letteratura

Florian Jaeger ha anche un sacco di cose sul lato pratico dei modelli misti sul suo laboratorio blog .

Esistono anche numerosi pacchetti R utili per visualizzare e testare modelli misti, come lmerTesteeffects . Il effectspacchetto è particolarmente bello perché ti permette di tracciare la regressione lineare e gli intervalli di confidenza che si svolgono dietro le quinte.

Bontà di adattamento e modelli a confronto

plmerTest

anova()merχ2χ2p-valori per confrontare direttamente due modelli. L'aspetto negativo di questo è che non è immediatamente chiaro quanto sia buona la tua vestibilità.

tsummary()|t|>2fixef()

Dovresti anche assicurarti che nessuno dei tuoi effetti fissi sia troppo fortemente correlato: la multicollinearità viola i presupposti del modello. Florian Jaeger ha scritto un po ' su questo, così come alcune possibili soluzioni.

Confronti multipli

Affronterò la tua domanda n. 4 un po 'più direttamente. La risposta è sostanzialmente la stessa delle buone pratiche dell'ANOVA tradizionale, sfortunatamente questo sembra essere un punto in cui c'è molta incertezza per la maggior parte dei ricercatori. (È lo stesso dell'ANOVA tradizionale perché sia ​​i modelli lineari ad effetti misti che ANOVA sono basati sul modello lineare generale, è solo che i modelli misti hanno un termine in più per gli effetti casuali.) Se stai assumendo che le finestre temporali creino un differenza e vuoi confrontare gli effetti del tempo, dovresti includere il tempo nel tuo modello. Questo, per inciso, fornirà anche un modo conveniente per giudicare se il tempo ha fatto la differenza: esiste un effetto principale (fisso) per il tempo? L'aspetto negativo di percorrere questa strada è che il tuo modello diventerà MOLTO più complesso e il singolo "super" il modello con il tempo come parametro sarà probabilmente più lungo per il calcolo di tre modelli più piccoli senza tempo come parametro. In effetti, il classico esempio di tutorial per modelli misti èsleepstudy che usa il tempo come parametro.

tforeachlme4χ2

Se le tue caratteristiche sono la variabile dipendente, dovrai comunque calcolare diversi modelli e quindi puoi utilizzare AIC e BIC per confrontare i risultati.


Grazie per la risposta dettagliata! Ho letto alcuni dei riferimenti forniti, ma sicuramente darò un'occhiata agli altri. Per quanto capisca il male dei valori di p, sfortunatamente spesso i recensori la pensano diversamente (almeno per ora). Come raccomandato da Bates, sto usando il campionamento mcmc, che dalla mia comprensione elude parte del problema (cioè che non è possibile stimare correttamente i gradi di libertà per un modello lmer). Le caratteristiche sono un DV, aggiungerò qualche informazione in più per chiarire.
ダ ン ボ ー
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.