Considera i dati di sleepstudy, inclusi in lme4. Bates ne parla nel suo libro online su lme4. Nel capitolo 3, considera due modelli per i dati.
M0 : Reazione ∼ 1 + Giorni + ( 1 | Oggetto ) + ( 0 + Giorni | Oggetto )
e
MUN : Reazione ∼ 1 + Giorni + ( Giorni | Oggetto )
Lo studio ha coinvolto 18 soggetti, studiati per un periodo di 10 giorni privati del sonno. I tempi di reazione sono stati calcolati al basale e nei giorni successivi. C'è un chiaro effetto tra il tempo di reazione e la durata della privazione del sonno. Ci sono anche differenze significative tra i soggetti. Il modello A prevede la possibilità di un'interazione tra l'intercettazione casuale e gli effetti di pendenza: immagina, diciamo, che le persone con scarsi tempi di reazione soffrano più acutamente degli effetti della privazione del sonno. Ciò implicherebbe una correlazione positiva negli effetti casuali.
Nell'esempio di Bates, non vi era alcuna correlazione apparente dal diagramma Lattice e nessuna differenza significativa tra i modelli. Tuttavia, per indagare sulla domanda posta sopra, ho deciso di prendere i valori adeguati dello sleepstudy, aumentare la correlazione e guardare le prestazioni dei due modelli.
Come puoi vedere dall'immagine, i lunghi tempi di reazione sono associati a una maggiore perdita di prestazioni. La correlazione utilizzata per la simulazione era 0,58
Ho simulato 1000 campioni, usando il metodo simulate in lme4, basato sui valori adattati dei miei dati artificiali. Ho adattato M0 e Ma a ciascuno e ho guardato i risultati. Il set di dati originale aveva 180 osservazioni (10 per ciascuna di 18 soggetti) e i dati simulati hanno la stessa struttura.
La linea di fondo è che c'è poca differenza.
- I parametri fissi hanno esattamente gli stessi valori in entrambi i modelli.
- Gli effetti casuali sono leggermente diversi. Ci sono 18 effetti di intercettazione e 18 pendenze casuali per ciascun campione simulato. Per ogni campione, questi effetti sono costretti ad aggiungere a 0, il che significa che la differenza media tra i due modelli è (artificialmente) 0. Ma le varianze e le covarianze differiscono. La covarianza mediana sotto MA era 104, contro 84 sotto M0 (valore reale, 112). Le variazioni di pendenze e intercettazioni erano maggiori sotto M0 rispetto a MA, presumibilmente per ottenere lo spazio di manovra extra necessario in assenza di un parametro di covarianza libera.
- Il metodo ANOVA per lmer fornisce una statistica F per confrontare il modello Slope con un modello con solo un'intercettazione casuale (nessun effetto a causa della privazione del sonno). Chiaramente, questo valore era molto grande in entrambi i modelli, ma in genere era (ma non sempre) maggiore in MA (media 62 vs media di 55).
- La covarianza e la varianza degli effetti fissi sono diverse.
- Circa la metà delle volte, sa che MA è corretto. Il valore p mediano per confrontare M0 con MA è 0,0442. Nonostante la presenza di una correlazione significativa e 180 osservazioni equilibrate, il modello corretto verrebbe scelto solo circa la metà del tempo.
- I valori previsti differiscono tra i due modelli, ma leggermente. La differenza media tra le previsioni è 0, con sd di 2.7. La sd dei valori previsti stessi è 60.9
Allora perché succede? @gung ha indovinato, ragionevolmente, che la mancata inclusione della possibilità di una correlazione costringe a non correlare gli effetti casuali. Forse dovrebbe; ma in questa implementazione, gli effetti casuali possono essere correlati, il che significa che i dati sono in grado di tirare i parametri nella giusta direzione, indipendentemente dal modello. L'erroneità del modello sbagliato si manifesta con probabilità, motivo per cui è possibile (a volte) distinguere i due modelli a quel livello. Il modello di effetti misti fondamentalmente adatta regressioni lineari a ciascun soggetto, influenzato da ciò che il modello pensa che dovrebbero essere. Il modello sbagliato impone l'adattamento di valori meno plausibili di quelli ottenuti con il modello giusto. Ma i parametri, alla fine della giornata, sono regolati dall'adattamento ai dati reali.
Ecco il mio codice un po 'goffo. L'idea era di adattare i dati dello studio del sonno e quindi creare un set di dati simulato con gli stessi parametri, ma una maggiore correlazione per gli effetti casuali. Quel set di dati è stato fornito a simulate.lmer () per simulare 1000 campioni, ognuno dei quali era adatto in entrambi i modi. Dopo aver accoppiato oggetti adattati, ho potuto estrarre diverse caratteristiche dell'adattamento e confrontarle, usando i test t o qualsiasi altra cosa.
# Fit a model to the sleep study data, allowing non-zero correlation
fm01 <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=sleepstudy, REML=FALSE)
# Now use this to build a similar data set with a correlation = 0.9
# Here is the covariance function for the random effects
# The variances come from the sleep study. The covariance is chosen to give a larger correlation
sigma.Subjects <- matrix(c(565.5,122,122,32.68),2,2)
# Simulate 18 pairs of random effects
ranef.sim <- mvrnorm(18,mu=c(0,0),Sigma=sigma.Subjects)
# Pull out the pattern of days and subjects.
XXM <- model.frame(fm01)
n <- nrow(XXM) # Sample size
# Add an intercept to the model matrix.
XX.f <- cbind(rep(1,n),XXM[,2])
# Calculate the fixed effects, using the parameters from the sleep study.
yhat <- XX.f %*% fixef(fm01 )
# Simulate a random intercept for each subject
intercept.r <- rep(ranef.sim[,1], each=10)
# Now build the random slopes
slope.r <- XXM[,2]*rep(ranef.sim[,2],each=10)
# Add the slopes to the random intercepts and fixed effects
yhat2 <- yhat+intercept.r+slope.r
# And finally, add some noise, using the variance from the sleep study
y <- yhat2 + rnorm(n,mean=0,sd=sigma(fm01))
# Here is new "sleep study" data, with a stronger correlation.
new.data <- data.frame(Reaction=y,Days=XXM$Days,Subject=XXM$Subject)
# Fit the new data with its correct model
fm.sim <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=new.data, REML=FALSE)
# Have a look at it
xyplot(Reaction ~ Days | Subject, data=new.data, layout=c(6,3), type=c("p","r"))
# Now simulate 1000 new data sets like new.data and fit each one
# using the right model and zero correlation model.
# For each simulation, output a list containing the fit from each and
# the ANOVA comparing them.
n.sim <- 1000
sim.data <- vector(mode="list",)
tempReaction <- simulate(fm.sim, nsim=n.sim)
tempdata <- model.frame(fm.sim)
for (i in 1:n.sim){
tempdata$Reaction <- tempReaction[,i]
output0 <- lmer(Reaction ~ 1 + Days +(1|Subject)+(0+Days|Subject), data = tempdata, REML=FALSE)
output1 <- lmer(Reaction ~ 1 + Days +(Days|Subject), data=tempdata, REML=FALSE)
temp <- anova(output0,output1)
pval <- temp$`Pr(>Chisq)`[2]
sim.data[[i]] <- list(model0=output0,modelA=output1, pvalue=pval)
}