Ich versuche, die Ergebnisse eines nlme
Objekts ohne Erfolg zu visualisieren. Wenn ich dies mit einem lmer
Objekt mache, wird das richtige Diagramm erstellt. Mein Ziel ist es, nlme
zu verwenden und eine angepasste Wachstumskurve für jedes Individuum mit ggplot2
zu visualisieren. Die predict()
Funktion scheint mit nlme
und lmer
Objekten anders zu funktionieren.Multilevel-Wachstumsmodell mit nlme/ggplot2 vs lme4/ggplot2 visualisieren
Modell:
#AR1 with REML
autoregressive <- lme(NPI ~ time,
data = data,
random = ~time|patient,
method = "REML",
na.action = "na.omit",
control = list(maxlter=5000, opt="optim"),
correlation = corAR1())
nlme
Visualisierung Versuch:
data <- na.omit(data)
data$patient <- factor(data$patient,
levels = 1:23)
ggplot(data, aes(x=time, y=NPI, colour=factor(patient))) +
geom_point(size=1) +
#facet_wrap(~patient) +
geom_line(aes(y = predict(autoregressive,
level = 1)), size = 1)
wenn ich benutze:
data$fit<-fitted(autoregressive, level = 1)
geom_line(aes(y = fitted(autoregressive), group = patient))
es ret Urnen die gleichen angepassten Werte für jedes Individuum und so erzeugt ggplot für jedes die gleiche Wachstumskurve. Running test <-data.frame(ranef(autoregressive, level=1))
gibt verschiedene Abschnitte und Steigungen nach Patient ID zurück. Interessanterweise, wenn ich das Modell mit lmer
anpasse und den untenstehenden Code ausführe, wird die korrekte Darstellung zurückgegeben. Warum funktioniert predict()
anders mit nlme
und lmer
Objekten?
timeREML <- lmer(NPI ~ time + (time | patient),
data = data,
REML=T, na.action=na.omit)
ggplot(data, aes(x = time, y = NPI, colour = factor(patient))) +
geom_point(size=3) +
#facet_wrap(~patient) +
geom_line(aes(y = predict(timeREML)))
Mit "visualisieren Sie die vom Modell geschätzten zufälligen Effekte" meinen Sie die angepasste Wachstumskurve für jedes Individuum?Ich denke, du könntest 'geom_line (aes (y = angepasst (autoregressiv), group = id)' 'ändern oder mit' data $ fit <-fited (autoregressiv) beginnen '' – Niek
Vielen Dank für die Antwort von @Niek. Ich habe versucht, 'fitted()' zu verwenden, aber es liefert die gleichen angepassten Werte für jedes Individuum. Ich habe meine Frage oben aktualisiert. Vielen Dank! –
Haben Sie ein reproduzierbares Beispiel? Ohne deine Daten kann ich nicht sehen. Versuchen Sie, das Problem mit zufällig generierten Daten oder einem öffentlichen Datensatz zu reproduzieren. –