Predicción sobre modelos de efectos mixtos: ¿qué hacer con los efectos aleatorios?

13

Consideremos este conjunto de datos hipotético:

set.seed(12345)

num.subjects <- 10

dose <- rep(c(1,10,50,100), num.subjects)
subject <- rep(1:num.subjects, each=4)
group <- rep(1:2, each=num.subjects/2*4)

response <- dose*dose/10 * group + rnorm(length(dose), 50, 30)

df <- data.frame(dose=dose, response=response, 
                 subject=subject, group=group)

podemos usar lmepara modelar la respuesta con un modelo de efectos aleatorios:

require(nlme)
model <- lme(response ~ dose + group + dose*group, 
             random = ~1|subject, df)

Me gustaría utilizar predictel resultado de este modelo para obtener, por ejemplo, la respuesta de un sujeto genérico del grupo 1 a una dosis de 10:

pred <- predict(model, newdata=list(dose=10, group=1))

Sin embargo, con este código me sale el siguiente error:

Error in predict.lme(model, newdata = list(dose = 10, group = 1)) : 
cannot evaluate groups for desired levels on 'newdata'

Para deshacerme de él, debo hacer, por ejemplo

pred <- predict(model, newdata=list(dose=10, group=1, subject=5))

Sin embargo, esto realmente no tiene mucho sentido para mí ... el tema es un factor molesto en mi modelo, entonces, ¿qué sentido tiene incluirlo predict? Si pongo un número de sujeto que no está presente en el conjunto de datos, predictregresa NA.

¿Es este el comportamiento deseado predicten esta situación? ¿Me estoy perdiendo algo realmente obvio?

nico
fuente
modelXβ+Zγynorte(Xβ+Zγ,σ2yo)Z
usεr11852 dice Reinstate Monic
@ user11852: solo para aclarar, estoy pensando en esto como un modelo para ser utilizado, por ejemplo, en caso de medidas repetidas para el mismo tema.
nico
Z
2
@ user11852: no estoy buscando una estimación sobre el mismo tema. Hago medidas repetidas sobre varios temas para obtener estimaciones de población. No me importan los sujetos que ya probé porque ya tengo la respuesta experimental ... Quiero poder predecir cómo responderá un nuevo sujeto de un grupo específico al estímulo. La respuesta de Greg resuelve el problema de hecho.
nico

Respuestas:

17

Si observa la ayuda predict.lme, verá que tiene un levelargumento que determina en qué nivel realizar las predicciones. El valor predeterminado es el más alto o más interno, lo que significa que si no especifica el nivel, está tratando de predecir el nivel del sujeto. Si especificaslevel=0 como parte de su primera predictllamada (sin subject), dará la predicción a nivel de población y no necesitará un número de asunto.

Greg Snow
fuente