Je souhaiterais obtenir des intervalles de confiance à 95% sur les prédictions d'un nlme
modèle mixte non linéaire . Étant donné que rien de standard n'est fourni pour le faire à l'intérieur nlme
, je me demandais s'il était correct d'utiliser la méthode des "intervalles de prédiction de population", comme indiqué dans le chapitre du livre de Ben Bolker dans le contexte de modèles ajustés avec une probabilité maximale , basée sur l'idée de rééchantillonner les paramètres d'effets fixes sur la base de la matrice variance-covariance du modèle ajusté, simuler des prédictions basées sur cela, puis prendre les 95% des centiles de ces prédictions pour obtenir les intervalles de confiance à 95%?
Le code pour ce faire ressemble à ceci: (J'utilise ici les données 'Loblolly' du nlme
fichier d'aide)
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
Maintenant que j'ai mes limites de confiance, je crée un graphique:
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,])
Voici l'intrigue avec les intervalles de confiance à 95% obtenus de cette façon:
Cette approche est-elle valide ou existe-t-il d'autres ou de meilleures approches pour calculer des intervalles de confiance à 95% sur les prédictions d'un modèle mixte non linéaire? Je ne suis pas tout à fait sûr de savoir comment gérer la structure à effet aléatoire du modèle ... Faut-il peut-être faire une moyenne sur les niveaux d'effet aléatoire? Ou serait-il OK d'avoir des intervalles de confiance pour un sujet moyen, ce qui semble être plus proche de ce que j'ai maintenant?