I would instead just create profile likelihood confidence intervals. They’re reliable, and very easy to calculate using the ‘lme4’ package. Example:
> library(lme4)
> fm = lmer(Reaction ~ Days + (Days | Subject),
data=sleepstudy)
> summary(fm)
[…]
Random effects:
Groups Name Variance Std.Dev. Corr
Subject (Intercept) 612.09 24.740
Days 35.07 5.922 0.07
Residual 654.94 25.592
You can now calculate the profile likelihood confidence intervals with the confint()
function:
> confint(fm, oldNames=FALSE)
Computing profile confidence intervals ...
2.5 % 97.5 %
sd_(Intercept)|Subject 14.381 37.716
cor_Days.(Intercept)|Subject -0.482 0.685
sd_Days|Subject 3.801 8.753
sigma 22.898 28.858
(Intercept) 237.681 265.130
Days 7.359 13.576
You can also use the parametric bootstrap to calculate confidence intervals. Here’s the R syntax (using the parm
argument to restrict which parameters we want confidence intervals for):
> confint(fm, method="boot", nsim=1000, parm=1:3)
Computing bootstrap confidence intervals ...
2.5 % 97.5 %
sd_(Intercept)|Subject 11.886 35.390
cor_Days.(Intercept)|Subject -0.504 0.929
sd_Days|Subject 3.347 8.283
The results will naturally vary somewhat for each run. You can increase nsim
to decrease this variation, but this will also increase the time it takes to estimate the confidence intervals.