С некоторыми изменениями это кажется последовательным.Доверительные интервалы действительно больше, но не намного больше.Имейте в виду, что ggplot подходит для очень другой модели;он подбирает отдельные линейные (не линейные смешанные) модели с помощью обработки, которая игнорирует (1) повторные измерения и (2) влияние дня.
Кажется странным подгонять модель со случайными наклонами, но без уровня населениянаклон (например, здесь ), поэтому я добавил фиксированный эффект Days
:
m.sleep <- lmer(Reaction ~ Treatment*height + Days +
(1 + Days|Subject),
data=sleepstudy)
Я немного реорганизовал код построения:
theme_set(theme_bw())
gg0 <- ggplot(sleepstudy, aes(height, colour=Treatment)) +
geom_point(aes(y=Reaction))+
geom_smooth(aes(y=pred), method="lm")
- Если вы хотите вычислить доверительные интервалы (которые были бы сопоставимы с тем, что делает
lm()
/ ggplot2
), то вам, вероятно, следует не добавить VarCorr(m.sleep)$Subject[1]
к дисперсии (tvar1
переменная из примера часто задаваемых вопросов предназначена для создания интервалов прогнозирования , а не доверительных интервалов ...) - , так как у меня было
Days
в модели выше, я добавилmean(sleepstudy$Days)
к кадру данных прогноза.
newdf <- expand.grid(height=seq(165, 185, 1),
Treatment=c("Control","Drug"),
Days=mean(sleepstudy$Days))
newdf$Reaction <- newdf$pred <- predict(m.sleep, newdf, re.form=NA)
modmat <- model.matrix(terms(m.sleep), newdf)
pvar1 <- diag(modmat %*% tcrossprod(vcov(m.sleep), modmat))
tvar1 <- pvar1
cmult <- 1.96
newdf <- data.frame(newdf
,plo = newdf$Reaction-cmult*sqrt(pvar1)
,phi = newdf$Reaction+cmult*sqrt(pvar1)
,tlo = newdf$Reaction-cmult*sqrt(tvar1)
,thi = newdf$Reaction+cmult*sqrt(tvar1))
gg0 +
geom_point(data=newdf,aes(y=Reaction)) +
geom_ribbon(data=newdf,
aes(ymin=plo, ymax=phi, fill=Treatment), alpha=0.4,
colour=NA)
Сравнение с оценочными уклонами и стандартными ошибками:
m0 <- lm(Reaction~height*Treatment,sleepstudy)
ff <- function(m) {
print(coef(summary(m))[-1,c("Estimate","Std. Error")],digits=2)
}
> ff(m0)
## Estimate Std. Error
## height -0.3 0.94
## TreatmentDrug -602.2 234.01
## height:TreatmentDrug 3.5 1.34
ff(m.sleep)
## Estimate Std. Error
## TreatmentDrug -55.03 425.3
## height 0.41 1.7
## Days 10.47 1.5
## TreatmentDrug:height 0.33 2.4
Это выглядит последовательно / примерно правильно: смешанная модель дает большую стандартную ошибкуrs для склона относительно высоты и высоты: взаимодействие лечения.(Основные эффекты TreatmentDrug
выглядят сумасшедшими, потому что они ожидаемые эффекты лечения при height==0
...)
В качестве перекрестной проверки я могу получить аналогичные ответы от sjPlot::plot_model()
...
library(sjPlot)
plot_model(m.sleep, type="pred", terms=c("height","Treatment"))