Dies scheint ein Wachstumsmodellszenario zu sein. Angenommen, wir hatten die folgenden Variablen:
occasion
: Mit Werten 1
, 2
, 3
, 4
, um 5
die Gelegenheit zu reflektieren , dass Test genommen wurde, 1
die erste oder Basislinie zu sein.
ID
: die Kennung jedes Teilnehmers.
score
: das Testergebnis für diesen Teilnehmer bei dieser Testgelegenheit.
Zufällige Abschnitte für ID
kümmern sich um die verschiedenen Basislinien (sofern genügend Teilnehmer vorhanden sind.
Ein einfaches lineares Mischeffektmodell für diese Daten lautet daher (unter Verwendung der lme4
Syntax):
score ~ occasion + (1|ID)
oder
score ~ occasion + (occasion|ID)
wobei letzteres ermöglicht, dass die lineare Steigung des Anlasses zwischen den Teilnehmern variiert
Für das spezielle Beispiel im OP haben wir jedoch das zusätzliche Problem, dass die score
Variable oben durch die maximale Punktzahl im Test begrenzt ist. Um dies zu ermöglichen, müssen wir nichtlineares Wachstum berücksichtigen. Dies könnte auf verschiedene Weise erreicht werden, wobei die einfachste die Hinzufügung quadratischer und möglicherweise kubischer Terme zum Modell ist:
score ~ occasion + I(occasion^2) + I(occasion^3) + (1|ID)
Schauen wir uns ein Spielzeugbeispiel an:
require(lme4)
require(ggplot2)
dt2 <- structure(list(occasion = c(0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4), score = c(55.5, 74.5, 92.5, 97.5, 98.5, 54.5, 81.5, 94.5, 97.5, 98.5, 47.5, 68.5, 86.5, 96.5, 98.5, 56.5, 86.5, 91.5, 97.5, 98.5, 60.5, 84.5, 95.5, 97.5, 99.5, 73.5, 87.5, 96.5, 98.5, 99.5), ID = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("1", "2", "3", "4", "5", "6"), class = "factor")), .Names = c("occasion", "score", "ID"), row.names = c(25L, 26L, 27L, 28L, 29L, 31L, 32L, 33L, 34L, 35L, 37L, 38L, 39L, 40L, 41L, 43L, 44L, 45L, 46L, 47L, 49L, 50L, 51L, 52L, 53L, 55L, 56L, 57L, 58L, 59L), class = "data.frame")
m1 <- lmer(score~occasion+(1|ID),data=dt2)
fun1 <- function(x) fixef(m1)[1] + fixef(m1)[2]*x
ggplot(dt2,aes(x=occasion,y=score, color=ID)) + geom_line(size=0.65) + geom_point() +
stat_function(fun=fun1, geom="line", size=1, colour="black")
Hier haben wir Diagramme für 6 Teilnehmer, die über 5 aufeinanderfolgende Gelegenheiten gemessen wurden, und wir haben die festen Effekte mit der durchgezogenen schwarzen Linie aufgezeichnet. Dies ist eindeutig kein gutes Modell für diese Daten. Daher führen wir nach dem Zentrieren der Daten einen quadratischen und dann einen kubischen Term ein, um die Kollinearität zu verringern:
dt2$occasion <- dt2$occasion - mean(dt2$occasion)
m2 <- lmer(score~occasion + I(occasion^2) + (1|ID),data=dt2)
fun2 <- function(x) fixef(m2)[1] + fixef(m2)[2]*x + fixef(m2)[3]*(x^2)
m3 <- lmer(score~occasion + I(occasion^2) + I(occasion^3) + (1|ID),data=dt2)
fun3 <- function(x) fixef(m3)[1] + fixef(m3)[2]*x + fixef(m3)[3]*(x^2) + fixef(m3)[4]*(x^3)
p2 <- ggplot(dt2,aes(x=occasion,y=score, color=ID)) + geom_line(size=0.5) + geom_point()
p2 + stat_function(fun=fun2, geom="line", size=1, colour="black")
Hier sehen wir, dass das quadratische Modell eine offensichtliche Verbesserung gegenüber dem Nur-Linear-Modell darstellt, aber nicht ideal ist, da es die Ergebnisse für die endgültige Messung unterschätzt und für die vorherige überschätzt.
Das kubische Modell scheint dagegen sehr gut zu funktionieren:
p2 + stat_function(fun=fun3, geom="line", size=1, colour="black")
Ein etwas ausgefeilterer Ansatz besteht darin, die Explizität der oberen Grenze zu erkennen und (zum Beispiel) ein logistisches Wachstumskurvenmodell zu verwenden. Eine Möglichkeit, dies zu erreichen, besteht darin, das Ergebnis in einen Anteil (der Obergrenze) umzuwandeln, z. B. und dann das Logit dieses Anteils als Ergebnis eines linearen Mischeffektmodells zu modellieren . Zusätzlich zum Erkennen der Obergrenze hat dies den zusätzlichen Vorteil, dass die Heteroskastizität in den Residuen der nicht transformierten Daten modelliert wird, da es wahrscheinlich ist, dass bei aufeinanderfolgenden Tests (unter der Annahme, dass die Ergebnisse besser werden) weniger Varianz auftritt.ππ/(1−π)
Wenn dies wie erwartet in die Praxis umgesetzt wird, wird auch der allgemeine Trend in den Daten sehr gut modelliert:
pi <- dt2$score/100
dt2$logitpi <- log(pi/(1-pi))
m0 <- lmer(logitpi~occasion+(1|ID),data=dt2)
funlogis <- function(x) 100*exp(fixef(m0)[1] + fixef(m0)[2]*x)/(1+exp(fixef(m0)[1] + fixef(m0)[2]*x))
p2 + stat_function(fun=funlogis, geom="line", size=0.5, colour="black")
Das Folgende zeigt den kubischen Modus und die logistischen Wachstumsmodelle, die zusammen dargestellt sind, und wir sehen nur einen sehr geringen Unterschied zwischen ihnen, obwohl wir, wie oben erwähnt, das logistische Wachstumsmodell aufgrund des Problems der Heteroskedastizität bevorzugen könnten:
p2 + stat_function(fun=fun3, geom="line", size=1, colour="black") +
stat_function(fun=funlogis, geom="line", size=1, colour="blue")
Ein differenzierterer Ansatz wäre immer noch die Verwendung eines nichtlinearen Modells mit gemischten Effekten, bei dem die logistische Wachstumskurve explizit modelliert wird, wodurch zufällige Variationen der Parameter der logistischen Funktion selbst ermöglicht werden.