Vorrei ottenere intervalli di confidenza al 95% sulle previsioni di un nlmemodello misto non lineare . Dato che non viene fornito nulla di standard per farlo all'interno di questo nlme, mi chiedevo se fosse corretto utilizzare il metodo degli "intervalli di previsione della popolazione", come indicato nel capitolo del libro di Ben Bolker nel contesto di modelli adatti alla massima probabilità , basati sull'idea di ricampionamento dei parametri degli effetti fissi in base alla matrice varianza-covarianza del modello adattato, simulando previsioni basate su questo, e quindi prendendo i percentili al 95% di queste previsioni per ottenere gli intervalli di confidenza al 95%?
Il codice per fare ciò appare come segue: (Qui uso i dati "Loblolly" dal nlmefile della guida)
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
Ora che ho i miei limiti di confidenza, creo un grafico:
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,])
Ecco la trama con gli intervalli di confidenza al 95% ottenuti in questo modo:

Questo approccio è valido o esistono altri approcci o migliori per calcolare gli intervalli di confidenza al 95% sulle previsioni di un modello misto non lineare? Non sono del tutto sicuro di come gestire la struttura degli effetti casuali del modello ... Forse una media dovrebbe superare i livelli di effetti casuali? O sarebbe OK avere intervalli di confidenza per un soggetto medio, che sembrerebbe essere più vicino a quello che ho adesso?

