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 lme
para 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 predict
el 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, predict
regresa NA
.
¿Es este el comportamiento deseado predict
en esta situación? ¿Me estoy perdiendo algo realmente obvio?
model
Respuestas:
Si observa la ayuda
predict.lme
, verá que tiene unlevel
argumento 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 primerapredict
llamada (sinsubject
), dará la predicción a nivel de población y no necesitará un número de asunto.fuente