Ich möchte 95% -Konfidenzintervalle für die Vorhersagen eines nichtlinearen gemischten nlme
Modells erhalten. Da dies innerhalb von nichts Standardmäßigem vorgesehen ist, habe nlme
ich mich gefragt, ob es richtig ist, die Methode der "Bevölkerungsvorhersageintervalle" zu verwenden, die in Ben Bolkers Buchkapitel im Kontext von Modellen beschrieben wird , die auf der Idee von mit maximaler Wahrscheinlichkeit passen Resampling von festen Effektparametern basierend auf der Varianz-Kovarianz-Matrix des angepassten Modells, Simulation von darauf basierenden Vorhersagen und anschließende Ermittlung der 95% -Perzentile dieser Vorhersagen, um die 95% -Konfidenzintervalle zu erhalten?
Der Code dafür sieht folgendermaßen aus: (Ich verwende hier die 'Loblolly'-Daten aus der nlme
Hilfedatei.)
library(effects)
library(nlme)
library(MASS)
fm1 <- nlme(height ~ SSasymp(age, Asym, R0, lrc),
data = Loblolly,
fixed = Asym + R0 + lrc ~ 1,
random = Asym ~ 1,
start = c(Asym = 103, R0 = -8.5, lrc = -3.3))
xvals=seq(min(Loblolly$age),max(Loblolly$age),length.out=100)
nresamp=1000
pars.picked = mvrnorm(nresamp, mu = fixef(fm1), Sigma = vcov(fm1)) # pick new parameter values by sampling from multivariate normal distribution based on fit
yvals = matrix(0, nrow = nresamp, ncol = length(xvals))
for (i in 1:nresamp)
{
yvals[i,] = sapply(xvals,function (x) SSasymp(x,pars.picked[i,1], pars.picked[i,2], pars.picked[i,3]))
}
quant = function(col) quantile(col, c(0.025,0.975)) # 95% percentiles
conflims = apply(yvals,2,quant) # 95% confidence intervals
Jetzt, da ich meine Vertrauensgrenzen habe, erstelle ich ein Diagramm:
meany = sapply(xvals,function (x) SSasymp(x,fixef(fm1)[[1]], fixef(fm1)[[2]], fixef(fm1)[[3]]))
par(cex.axis = 2.0, cex.lab=2.0)
plot(0, type='n', xlim=c(3,25), ylim=c(0,65), axes=F, xlab="age", ylab="height");
axis(1, at=c(3,1:5 * 5), labels=c(3,1:5 * 5))
axis(2, at=0:6 * 10, labels=0:6 * 10)
for(i in 1:14)
{
data = subset(Loblolly, Loblolly$Seed == unique(Loblolly$Seed)[i])
lines(data$age, data$height, col = "red", lty=3)
}
lines(xvals,meany, lwd=3)
lines(xvals,conflims[1,])
lines(xvals,conflims[2,])
Hier ist die grafische Darstellung mit den so erhaltenen 95% -Konfidenzintervallen:
Ist dieser Ansatz gültig, oder gibt es andere oder bessere Ansätze, um 95% -Konfidenzintervalle für die Vorhersagen eines nichtlinearen gemischten Modells zu berechnen? Ich bin mir nicht ganz sicher, wie ich mit der zufälligen Effektstruktur des Modells umgehen soll ... Sollte man vielleicht über zufällige Effektniveaus mitteln? Oder wäre es in Ordnung, Konfidenzintervalle für ein durchschnittliches Thema zu haben, die näher an dem zu liegen scheinen, was ich jetzt habe?
quelle
Antworten:
Was Sie hier getan haben, sieht vernünftig aus. Die kurze Antwort lautet, dass die Probleme bei der Vorhersage von Konfidenzintervallen aus gemischten Modellen und aus nichtlinearen Modellen größtenteils mehr oder weniger orthogonal sind auf seltsame Weise interagieren.
Ich gehe davon aus, dass Sie auf Bevölkerungsebene Vorhersagen treffen und Konfidenzintervalle als Bevölkerungsebene konstruieren - mit anderen Worten, Sie versuchen, die vorhergesagten Werte einer typischen Gruppe zu zeichnen , ohne die Unterschiede zwischen den Gruppen in Ihrem Vertrauen einzubeziehen Intervalle. Dies vereinfacht die Probleme mit gemischten Modellen. In den folgenden Darstellungen werden drei Ansätze verglichen (siehe unten für Codedump):
Wir könnten auch parametrisches Bootstrapping durchführen ...
Hier sind die CIs zusammen mit den Daten aufgetragen ...
... aber wir können kaum Unterschiede erkennen.
Vergrößern durch Abziehen der vorhergesagten Werte (Rot = Bootstrap, Blau = PPI, Cyan = Delta-Methode)
In diesem Fall sind die Bootstrap-Intervalle tatsächlich am engsten (z. B. sind die Stichprobenverteilungen der Parameter vermutlich tatsächlich etwas dünner als normal), während die Intervalle für die PPI- und Delta-Methode einander sehr ähnlich sind.
quelle