Vamos considerar este conjunto de dados hipotéticos:
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 a resposta com um modelo de efeito aleatório:
require(nlme)
model <- lme(response ~ dose + group + dose*group,
random = ~1|subject, df)
Eu gostaria de usar predict
o resultado desse modelo para obter, por exemplo, a resposta de um sujeito genérico do grupo 1 a uma dose de 10:
pred <- predict(model, newdata=list(dose=10, group=1))
No entanto, com este código, recebo o seguinte erro:
Error in predict.lme(model, newdata = list(dose = 10, group = 1)) :
cannot evaluate groups for desired levels on 'newdata'
Para me livrar disso, preciso fazer, por exemplo
pred <- predict(model, newdata=list(dose=10, group=1, subject=5))
Isso, no entanto, realmente não faz muito sentido para mim ... o assunto é um fator incômodo no meu modelo, então em que sentido ele tem que incluí-lo predict
? Se eu colocar um número de assunto não presente no conjunto de dados, predict
retornará NA
.
Esse é o comportamento desejado predict
nessa situação? Estou perdendo algo realmente óbvio?
model
Respostas:
Se você olhar para a ajuda
predict.lme
, verá que ele possui umlevel
argumento que determina em qual nível fazer as previsões. O padrão é o mais alto ou o mais interno, o que significa que, se você não especificar o nível, ele estará tentando prever no nível do assunto. Se você especificarlevel=0
como parte de sua primeirapredict
chamada (semsubject
), ela fornecerá a previsão no nível da população e não precisará de um número de assunto.fonte