Berücksichtigen Sie die Schlafstudiendaten, die in lme4 enthalten sind. Bates diskutiert dies in seinem Online- Buch über lme4. In Kapitel 3 betrachtet er zwei Modelle für die Daten.
M0 : Reaktion ∼ 1 + Tage + ( 1 | Betreff ) + ( 0 + Tage | Betreff )
und
MA : Reaktion ∼ 1 + Tage + ( Tage | Betreff )
Die Studie umfasste 18 Probanden, die über einen Zeitraum von 10 Tagen ohne Schlaf untersucht wurden. Die Reaktionszeiten wurden zu Beginn und an den folgenden Tagen berechnet. Es gibt einen deutlichen Effekt zwischen der Reaktionszeit und der Dauer des Schlafentzugs. Es gibt auch signifikante Unterschiede zwischen den Probanden. Modell A erlaubt die Möglichkeit einer Wechselwirkung zwischen zufälligen Intercept- und Slope-Effekten: Stellen Sie sich vor, dass Menschen mit schlechten Reaktionszeiten stärker unter den Auswirkungen von Schlafentzug leiden. Dies würde eine positive Korrelation in den Zufallseffekten implizieren.
In Bates 'Beispiel gab es keine offensichtliche Korrelation aus dem Gitterplot und keinen signifikanten Unterschied zwischen den Modellen. Um die oben gestellte Frage zu untersuchen, entschloss ich mich jedoch, die angepassten Werte der Schlafstudie zu verwenden, die Korrelation zu verbessern und die Leistung der beiden Modelle zu untersuchen.
Wie Sie auf dem Bild sehen können, sind lange Reaktionszeiten mit einem größeren Leistungsverlust verbunden. Die für die Simulation verwendete Korrelation betrug 0,58
Ich habe 1000 Proben mit der Simulationsmethode in lme4 simuliert, basierend auf den angepassten Werten meiner künstlichen Daten. Ich passte M0 und Ma aneinander an und schaute mir die Ergebnisse an. Der ursprüngliche Datensatz enthielt 180 Beobachtungen (10 für jede von 18 Personen), und die simulierten Daten hatten dieselbe Struktur.
Das Fazit ist, dass es sehr wenig Unterschiede gibt.
- Die festen Parameter haben bei beiden Modellen exakt die gleichen Werte.
- Die zufälligen Effekte sind leicht unterschiedlich. Für jede simulierte Stichprobe gibt es 18 zufällige Intercept- und 18 Slope-Effekte. Für jede Stichprobe müssen diese Effekte zu 0 addiert werden, was bedeutet, dass der mittlere Unterschied zwischen den beiden Modellen (künstlich) 0 beträgt. Die Varianzen und Kovarianzen unterscheiden sich jedoch. Die mittlere Kovarianz unter MA betrug 104 gegenüber 84 unter M0 (tatsächlicher Wert 112). Die Varianzen der Steigungen und Abschnitte waren unter M0 größer als unter MA, vermutlich um den zusätzlichen Spielraum für Wackelbewegungen zu erhalten, der ohne einen freien Kovarianzparameter benötigt wird.
- Die ANOVA-Methode für lmer gibt eine F-Statistik zum Vergleichen des Slope-Modells mit einem Modell mit nur einem zufälligen Achsenabschnitt an (keine Auswirkung aufgrund von Schlafentzug). Offensichtlich war dieser Wert bei beiden Modellen sehr groß, aber er war bei MA typischerweise (aber nicht immer) größer (Mittelwert 62 gegenüber Mittelwert 55).
- Die Kovarianz und Varianz der festen Effekte sind unterschiedlich.
- Etwa die Hälfte der Zeit weiß es, dass MA richtig ist. Der mittlere p-Wert zum Vergleichen von M0 mit MA beträgt 0,0442. Trotz des Vorhandenseins einer aussagekräftigen Korrelation und 180 ausgewogener Beobachtungen würde das richtige Modell nur in etwa der Hälfte der Fälle ausgewählt.
- Die vorhergesagten Werte unterscheiden sich bei beiden Modellen, jedoch nur geringfügig. Die mittlere Differenz zwischen den Vorhersagen beträgt 0 mit einem SD von 2,7. Der sd der vorhergesagten Werte selbst beträgt 60,9
Warum passiert das? @gung vermutete vernünftigerweise, dass das Versäumnis, die Möglichkeit einer Korrelation zu berücksichtigen, dazu führt, dass die zufälligen Effekte unkorreliert bleiben. Vielleicht sollte es so sein; Bei dieser Implementierung können die zufälligen Effekte jedoch korreliert werden, was bedeutet, dass die Daten die Parameter unabhängig vom Modell in die richtige Richtung ziehen können. Die Unrichtigkeit des falschen Modells zeigt sich in der Wahrscheinlichkeit, weshalb Sie die beiden Modelle auf dieser Ebene (manchmal) unterscheiden können. Das Mixed-Effects-Modell passt im Grunde genommen lineare Regressionen an jedes Subjekt an, die davon abhängen, wie das Modell sie für angebracht hält. Das falsche Modell erzwingt die Anpassung weniger plausibler Werte als das richtige Modell. Letztendlich werden die Parameter jedoch von der Anpassung an die tatsächlichen Daten bestimmt.
Hier ist mein etwas klobiger Code. Die Idee war, die Schlafstudiendaten anzupassen und dann einen simulierten Datensatz mit den gleichen Parametern, aber einer größeren Korrelation für die zufälligen Effekte zu erstellen. Dieser Datensatz wurde in simulate.lmer () eingespeist, um 1000 Proben zu simulieren, von denen jede in beide Richtungen angepasst wurde. Sobald ich angepasste Objekte gepaart hatte, konnte ich mithilfe von T-Tests oder was auch immer verschiedene Merkmale der Anpassung herausziehen und vergleichen.
# 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)
}