2015-03-25 8 views
5

Ich versuche, ein Mixed-Effects-Modell anzupassen und dann dieses Modell zu verwenden, um Schätzungen für ein neues Dataset zu generieren, das verschiedene Ebenen haben kann. Ich erwartete, dass die Schätzungen für einen neuen Datensatz den Mittelwert der geschätzten Parameter verwenden würden, aber das scheint nicht der Fall zu sein. Hier ist ein Mindestarbeitsbeispiel:Vorhersage mit lme4 auf neuen Ebenen

library(lme4) 
d = data.frame(x = rep(1:10, times = 3), 
       y = NA, 
       grp = rep(1:3, each = 10)) 
d$y[d$grp == 1] = 1:10 + rnorm(10) 
d$y[d$grp == 2] = 1:10 * 1.5 + rnorm(10) 
d$y[d$grp == 3] = 1:10 * 0.5 + rnorm(10) 
fit = lmer(y ~ (1+x)|grp, data = d) 
newdata = data.frame(x = 1:10, grp = 4) 
predict(fit, newdata = newdata, allow.new.levels = TRUE) 

In diesem Beispiel, ich bin im Wesentlichen, die drei Gruppen mit unterschiedlichen Regressionsgleichungen (Steigungen von 1, 1,5 und 0,5). Wenn ich jedoch versuche, einen neuen Datensatz mit einem ungesehenen Wert vorherzusagen, bekomme ich eine konstante Schätzung. Ich hätte erwartet, dass der erwartete Wert der Steigung und des Abschnitts verwendet wird, um Vorhersagen für diese neuen Daten zu erstellen. Erwarte ich das Falsche? Oder, was mache ich falsch mit meinem Code?

+2

Ich glaube, 'predict.merMod' verwendet nur die Koeffizienten aus den Teilen der festen Effekte des Modells für neue Ebenen. 'y ~ x + (x | grp)' ist eine sinnvollere Modellspezifikation. – Roland

+0

Ah, das macht Sinn! Wenn Sie das als Antwort hinzufügen, akzeptiere ich es. –

Antwort

8

Ich würde im Allgemeinen keine zufällige Steigung ohne eine feste Steigung enthalten. Es scheint so, als ob predict.merMod mit mir übereinstimmt, denn es scheint einfach nur die fixierten Effekte zu verwenden, um neue Level vorherzusagen. In der Dokumentation heißt es: "Die Vorhersage verwendet die unbedingten Werte auf Populationsebene für Daten mit zuvor unbeobachteten Ebenen", aber diese Werte scheinen mit Ihrer Modellspezifikation nicht abgeschätzt zu sein.

So schlage ich vor, dieses Modell:

fit = lmer(y ~ x + (x|grp), data = d) 
newdata = data.frame(x = 1:10, grp = 4) 
predict(fit, newdata = newdata, allow.new.levels = TRUE) 
#  1   2   3   4   5   6   7   8   9  10 
#1.210219 2.200685 3.191150 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.124410 

Dies ist das gleiche wie nur den festen Effekte Teil des Modells:

t(cbind(1, newdata$x) %*% fixef(fit)) 
#   [,1]  [,2] [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] 
#[1,] 1.210219 2.200685 3.19115 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.12441 
5

Vielleicht ist es nicht klar genug, aber ich denke, das Dokumentation für ?predict.merMod Staaten (vernünftigerweise) klar, was passiert, wenn allow.new.levels=TRUE. Ich denke, die Mehrdeutigkeit sein könnte, in welcher "unconditional (Bevölkerungsebene) Werte" bedeutet ...

allow.new.levels: logisch, wenn eine neue Ebene (oder NA-Werte) in ‚newdata‘ sind erlaubt. Wenn FALSE (Standard), werden solche neuen Werte in 'newdata' einen Fehler auslösen; Wenn TRUE, verwendet die Vorhersage die unconditional (population-level) Werte für Daten mit zuvor unbeobachteten Ebenen (oder NAs).