[R-sig-ME] lme and prediction intervals
D Chaws
cat.dev.urandom at gmail.com
Fri Feb 26 06:32:14 CET 2010
And the saga continues...
I checked on the SAS website to see how they compute standard errors
for predictions in LSMEANS, just for giggles. According to
http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/statug_mixed_sect014.htm
SE = L(X'V-1X)-L'
or in R terms
SE = Designmat %*% solve(formXtViX(extract.lme.cov2(fm1, Orthodont),
extract.lmeDesign(fm1)$X), t(Designmat))
which is, yes...you guessed it, the exact same thing as Designmat %*%
fm1$varFix %*% t(Designmat).
And of course, the SE's don't match those in LSMEANS. Any thoughts?
I can't believe a solution to this has never come up. I don't care
about replicating LSMEANS, I just want to be confident that the SE's I
present are accurate and meaningful. Since they currently leave out
random-effects variance, I suspect something important is missing.
-- DC
On Thu, Feb 18, 2010 at 12:25 PM, D Chaws <cat.dev.urandom at gmail.com> wrote:
> Dear lme(r) users,
>
> I have seen this issue come up many times over the years, but haven't
> come across an answer as of yet.
> Take for example the growth model:
>
> fm1 <- lme(distance ~ age*Sex, random = ~ 1 + age | Subject, data = Orthodont)
>
> Distance increases with age, but more so in Males.
>
> I want to obtain the model predicted values of distance at each age
> (c(8,10,12,14)) for males and female separately to explore this
> interaction.
>
> So,
>
> newdat <- expand.grid(age=c(8,10,12,14), Sex=c("Male","Female"))
> newdat$pred <- predict(fm1, newdat, level = 0)
>
> R# newdat
> age Sex pred
> 1 8 Male 22.62
> 2 10 Male 24.18
> 3 12 Male 25.75
> 4 14 Male 27.32
> 5 8 Female 21.21
> 6 10 Female 22.17
> 7 12 Female 23.13
> 8 14 Female 24.09
>
> Yup, males have a steeper increase with age than females.
>
> The question is, how to go about getting prediction intervals around
> these predictions. It seems reasonable to need to know
> the precision of these predictions, and of course most journals
> require the reporting of error bars etc... However, predict.lme
> doesn't
> have a se.fit or intervals argument.
>
> The only answer I have found at the moment is to use the design matrix
> and $varFix from the model.
>
> So,
>
> Designmat <- model.matrix(eval(eval(fm1$call$fixed)[-2]), newdat[-3])
> R# Designmat
> (Intercept) age SexFemale age:SexFemale
> 1 1 8 0 0
> 2 1 10 0 0
> 3 1 12 0 0
> 4 1 14 0 0
> 5 1 8 1 8
> 6 1 10 1 10
> 7 1 12 1 12
> 8 1 14 1 14
>
> newdat$SE <- sqrt(diag(Designmat %*% fm1$varFix %*% t(Designmat)))
> R# newdat
> age Sex pred SE
> 1 8 Male 22.62 0.5265
> 2 10 Male 24.18 0.4848
> 3 12 Male 25.75 0.5021
> 4 14 Male 27.32 0.5730
> 5 8 Female 21.21 0.6350
> 6 10 Female 22.17 0.5847
> 7 12 Female 23.13 0.6056
> 8 14 Female 24.09 0.6910
>
> Are these true pointwise prediction intervals?
>
> Any help would be greatly appreciated. I refuse to use SAS for this!
>
> -- D. Chaws
>
More information about the R-sig-mixed-models
mailing list