Me gustaría obtener intervalos de confianza del 95% en las predicciones de un nlme
modelo mixto no lineal . Como no se proporciona nada estándar para hacer esto dentro nlme
, me preguntaba si es correcto usar el método de "intervalos de predicción de población", como se describe en el capítulo del libro de Ben Bolker en el contexto de modelos ajustados con la máxima probabilidad , basados en la idea de remuestreo de parámetros de efectos fijos basados en la matriz de varianza-covarianza del modelo ajustado, simulando predicciones basadas en esto y luego tomando los percentiles del 95% de estas predicciones para obtener los intervalos de confianza del 95%.
El código para hacer esto tiene el siguiente aspecto: (Aquí uso los datos 'Loblolly' del nlme
archivo de ayuda)
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
Ahora que tengo mis límites de confianza, creo un gráfico:
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,])
Aquí está la gráfica con los intervalos de confianza del 95% obtenidos de esta manera:
¿Es válido este enfoque, o existen otros enfoques mejores para calcular los intervalos de confianza del 95% en las predicciones de un modelo mixto no lineal? No estoy del todo seguro de cómo lidiar con la estructura de efecto aleatorio del modelo ... ¿Debería uno promediar tal vez por encima de los niveles de efecto aleatorio? ¿O estaría bien tener intervalos de confianza para un sujeto promedio, que parece estar más cerca de lo que tengo ahora?
fuente
Respuestas:
Lo que has hecho aquí parece razonable. La respuesta corta es que, en su mayor parte, los problemas de predicción de intervalos de confianza a partir de modelos mixtos y de modelos no lineales son más o menos ortogonales , es decir, debe preocuparse por ambos conjuntos de problemas, pero no es así (eso sé) de) interactuar de alguna manera extraña.
En todo momento, supondré que está prediciendo a nivel de población y construyendo intervalos de confianza como el nivel de población; en otras palabras, está tratando de trazar los valores pronosticados de un grupo típico , y no incluye la variación entre grupos en su confianza intervalos. Esto simplifica los problemas del modelo mixto. Las siguientes gráficas comparan tres enfoques (ver más abajo el volcado de código):
También podríamos hacer bootstrapping paramétrico ...
Aquí están los IC trazados junto con los datos ...
... pero apenas podemos ver las diferencias.
Acercarse restando los valores predichos (rojo = bootstrap, azul = PPI, cian = método delta)
En este caso, los intervalos de arranque son realmente más estrechos (p. Ej., Presumiblemente, las distribuciones de muestreo de los parámetros son en realidad un poco más delgadas que las normales), mientras que los intervalos PPI y del método delta son muy similares entre sí.
fuente