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.
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:
- È un modo valido di analizzare modelli di effetti misti? In caso contrario, cosa dovrei fare invece.
- Le critiche fornite da mcp.fnc sono abbastanza buone per verificare i presupposti del modello o dovrei prendere ulteriori provvedimenti?
- 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?
- 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:
- pertinente il fattore "tempo" per ottenere confronti t1-t2, t2-t3 e t1-t3 con pvals.fnc (dal pacchetto languageR)
- 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)
- Usa il pacchetto LMERConvenienceFunctions per controllare i presupposti e rimuovere gli outlier (perché ho letto che i modelli misti sono molto sensibili agli outlier)