[R] extracting nested variances from lme4 model

Douglas Bates bates at stat.wisc.edu
Sun Oct 15 17:44:25 CEST 2006


On 10/14/06, Spencer Graves <spencer.graves at pdf.com> wrote:
>       You want to estimate a different 'cs' variance for each level of
> 'trth', as indicated by the following summary from your 'fake data set':
>
>  > tapply(dtf$x, dtf$trth, sd)
>    FALSE     TRUE
> 1.532251 8.378206
>
>       Since var(x[trth]) > var(x[!trth]), I  thought that the following
> should produce this:
>
>       mod1.<-lmer( x ~  (1|rtr)+ (trth|cs) , data=dtf)
>
>       Unfortunately, this generates an error for me:
>
> Error in lmer(x ~ (1 | rtr) + (trth | cs), data = dtf) :
>     the leading minor of order 1 is not positive definite
>
>       I do not understand this error, and I don't have other ideas about
> how to get around it using 'lmer'.

Hmm.  It's an interesting problem.  I can tell you where the error
message originates but I can't yet tell you why.

The error message originates when Cholesky decompositions of the
variance-covariance matrices for the random effects are generated at
the initial estimates.  It looks as if one of the model matrices is
not being formed correctly for some reason.  I will need to do more
debugging.


> It seems to me that 'lme' in
> library(nlme) should also be able to handle this problem, but 'lme' is
> designed for nested factors, and your 'rtr' and 'cs' are crossed.  If it
> were my problem, I think I'd study ch. 4 and possibly ch. 5 of Pinheiro
> and Bates (2000) Mixed-Effects Models in S and S-Plus (Springer) on
> 'pdMat' and 'corrStruct' classes, because I believe those may support
> models with crossed random effects like in your example AND might also
> support estimating different variance components for different levels of
> a fixed effect like 'trth' in your example.
>
>       If we are lucky, someone else might educate us both.
>
>       I'm sorry I couldn't answer your question, but I hope these
> comments might help in some way.
>
>       Spencer Graves
>
> Frank Samuelson wrote:
> > I have a model:
> > mod1<-lmer( x ~  (1|rtr)+ trth/(1|cs) , data=dtf)  #
> >
> > Here, cs and rtr are crossed random effects.
> > cs 1-5 are of type TRUE, cs 6-10 are of type FALSE,
> > so cs is nested in trth, which is fixed.
> > So for cs I should get a fit for 1-5 and 6-10.
> >
> > This appears to be the case from the random effects:
> >  > mean( ranef(mod1)$cs[[1]][1:5] )
> > [1] -2.498002e-16
> >  > var( ranef(mod1)$cs[[1]][1:5] )
> > [1] 23.53083
> >  > mean( ranef(mod1)$cs[[1]][6:10] )
> > [1] 2.706169e-16
> >  > var( ranef(mod1)$cs[[1]][6:10] )
> > [1] 1.001065
> >
> > However VarCorr(mod1) gives me only
> > a single variance estimate for the cases.
> > How do I get the other variance estimate?
> >
> > Thanks for any help.
> >
> > -Frank
> >
> >
> >
> > My fake data set:
> > -------------------------------------------
> > data:
> > $frame
> >               x rtr  trth cs
> > 1   -4.4964808   1  TRUE  1
> > 2   -0.6297254   1  TRUE  2
> > 3    1.8062857   1  TRUE  3
> > 4    2.7273275   1  TRUE  4
> > 5   -0.6297254   1  TRUE  5
> > 6   -1.3331767   1 FALSE  6
> > 7   -0.3055796   1 FALSE  7
> > 8    1.3331767   1 FALSE  8
> > 9    0.1574314   1 FALSE  9
> > 10  -0.1574314   1 FALSE 10
> > 11  -3.0958803   2  TRUE  1
> > 12  12.4601615   2  TRUE  2
> > 13  -5.2363532   2  TRUE  3
> > 14   1.5419810   2  TRUE  4
> > 15   7.7071005   2  TRUE  5
> > 16  -0.3854953   2 FALSE  6
> > 17   0.7673098   2 FALSE  7
> > 18   2.9485984   2 FALSE  8
> > 19   0.3854953   2 FALSE  9
> > 20  -0.3716558   2 FALSE 10
> > 21  -6.4139940   3  TRUE  1
> > 22  -3.8162344   3  TRUE  2
> > 23 -11.0518554   3  TRUE  3
> > 24   2.7462631   3  TRUE  4
> > 25  16.2543990   3  TRUE  5
> > 26  -1.7353668   3 FALSE  6
> > 27   1.3521369   3 FALSE  7
> > 28   1.3521369   3 FALSE  8
> > 29   0.2054067   3 FALSE  9
> > 30  -1.7446691   3 FALSE 10
> > 31  -6.7468356   4  TRUE  1
> > 32 -11.3228243   4  TRUE  2
> > 33 -18.0088554   4  TRUE  3
> > 34   4.6264891   4  TRUE  4
> > 35   9.2973991   4  TRUE  5
> > 36  -4.1122576   4 FALSE  6
> > 37  -0.5091994   4 FALSE  7
> > 38   1.2787085   4 FALSE  8
> > 39  -1.6867089   4 FALSE  9
> > 40  -0.5091994   4 FALSE 10
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>



More information about the R-help mailing list