Antworten:
Für einen Vortrag habe ich das folgende Bild verwendet, das auf dem sleepstudy
Datensatz aus dem Paket lme4 basiert . Die Idee bestand darin, den Unterschied zwischen unabhängigen Regressionsanpassungen aus themenspezifischen Daten (grau) und Vorhersagen aus Zufallseffektmodellen zu veranschaulichen , insbesondere, dass (1) vorhergesagte Werte aus Zufallseffektmodellen Schrumpfungsschätzer sind und dass (2) einzelne Trajektorien gemeinsam sind eine gemeinsame Neigung mit einem Zufallsschnittmodell (orange). Die Verteilungen der Subjektabschnitte werden als Kerndichteschätzungen auf der y-Achse ( R-Code ) gezeigt.
(Die Dichtekurven erstrecken sich über den Bereich der beobachteten Werte hinaus, da relativ wenige Beobachtungen vorliegen.)
Eine "konventionellere" Grafik könnte die nächste sein, die von Doug Bates stammt (verfügbar auf R-forge-Site für lme4 , z. B. 4Longitudinal.R ), wo wir in jedem Panel individuelle Daten hinzufügen könnten.
Also etwas, das nicht "extrem elegant" ist, sondern zufällige Abschnitte und Steigungen mit R zeigt. (Ich denke, es wäre noch cooler, wenn die tatsächlichen Gleichungen auch gezeigt würden.)
N =100; set.seed(123);
x1 = runif(N)*3; readings1 <- 2*x1 + 1.0 + rnorm(N)*.99;
x2 = runif(N)*3; readings2 <- 3*x2 + 1.5 + rnorm(N)*.99;
x3 = runif(N)*3; readings3 <- 4*x3 + 2.0 + rnorm(N)*.99;
x4 = runif(N)*3; readings4 <- 5*x4 + 2.5 + rnorm(N)*.99;
x5 = runif(N)*3; readings5 <- 6*x5 + 3.0 + rnorm(N)*.99;
X = c(x1,x2,x3,x4,x5);
Y = c(readings1,readings2,readings3,readings4,readings5)
Grouping = c(rep(1,N),rep(2,N),rep(3,N),rep(4,N),rep(5,N))
library(lme4);
LMERFIT <- lmer(Y ~ 1+ X+ (X|Grouping))
RIaS <-unlist( ranef(LMERFIT)) #Random Intercepts and Slopes
FixedEff <- fixef(LMERFIT) # Fixed Intercept and Slope
png('SampleLMERFIT_withRandomSlopes_and_Intercepts.png', width=800,height=450,units="px" )
par(mfrow=c(1,2))
plot(X,Y,xlab="x",ylab="readings")
plot(x1,readings1, xlim=c(0,3), ylim=c(min(Y)-1,max(Y)+1), pch=16,xlab="x",ylab="readings" )
points(x2,readings2, col='red', pch=16)
points(x3,readings3, col='green', pch=16)
points(x4,readings4, col='blue', pch=16)
points(x5,readings5, col='orange', pch=16)
abline(v=(seq(-1,4 ,1)), col="lightgray", lty="dotted");
abline(h=(seq( -1,25 ,1)), col="lightgray", lty="dotted")
lines(x1,FixedEff[1]+ (RIaS[6] + FixedEff[2])* x1+ RIaS[1], col='black')
lines(x2,FixedEff[1]+ (RIaS[7] + FixedEff[2])* x2+ RIaS[2], col='red')
lines(x3,FixedEff[1]+ (RIaS[8] + FixedEff[2])* x3+ RIaS[3], col='green')
lines(x4,FixedEff[1]+ (RIaS[9] + FixedEff[2])* x4+ RIaS[4], col='blue')
lines(x5,FixedEff[1]+ (RIaS[10]+ FixedEff[2])* x5+ RIaS[5], col='orange')
legend(0, 24, c("Group1","Group2","Group3","Group4","Group5" ), lty=c(1,1), col=c('black','red', 'green','blue','orange'))
dev.off()
Diese Grafik aus der Matlab-Dokumentation von nlmefit scheint mir ein gutes Beispiel für das Konzept von zufälligen Abschnitten und Steigungen zu sein. Wahrscheinlich wäre auch etwas, das Gruppen von Heteroskedastizität in den Resten eines OLS-Diagramms zeigt, ziemlich Standard, aber ich würde keine "Lösung" geben.