Skip to content
Prev 9 / 20628 Next

New version of lme4 - memory error

On 1/27/07, Andrew Robinson <A.Robinson at ms.unimelb.edu.au> wrote:
Thanks for including that traceback, Andrew.  As Martin indicated, it
is difficult for us to diagnose the problem because we are unable to
reproduce it.

I can tell you what should be happening at that point in the lmer2
function.  Perhaps you could use

debug(lmer2)

and check under your system what is happening for you.

As I'm sure you can determine just be looking at this traceback, this
is the point in lmer2 where the REML or ML criterion is to be
optimized using the optimizer nlminb.  The object 'mer', of class
'mer2', is the internal representation of a mixed-effects model.  It
is described in the Implementation vignette.

The ST slot is a list whose number of components is equal to the
number of random effects expressions in the model formula.  In this
case it should have one component and that component should be a 2x2
matrix (it's a matrix, not a Matrix from the Matrix package).  The C
code for mer2_getPars allocates a numeric vector of the correct length
and fills it out with elements of the lower triangles of these
matrices starting with the diagonal elements of each matrix.  (The
diagonal elements are the elements of the scale matrices S and the
elements of the strict lower triangle are the non-trivial elements of
the unit triangular matrices T.)

I enclose some of the debugger output from my system.  Once the mer
object is created I check that the 'dims' slot has the expected
entries.  In particular the element labeled 'nf' (number of grouping
factors) should be 1 and the nc slot should be an integer vector of
length 1 and the first element should be 2.

If the 'dims', 'nc' and 'ST' slots all have the expected contents then
it would be very mysterious how mer2_getPars managed to fail.  I
suspect that the problem originates one step back in the call to
mer2_create.  In either case it may be necessary to go in and examine
the execution of the compiled code using a symbolic debugger in order
to exactly what's going on.
-------------- next part --------------
Browse[1]> 
debug: mer <- .Call(mer2_create, fl, Zt, t(X), as.double(Y), method == 
    "REML", nc, cnames, fr$offset, fr$weights)
Browse[1]> 
debug: const <- unlist(lapply(mer at nc, function(n) rep(1:0, c(n, (n * 
    (n - 1))/2))))
Browse[1]> mer at ST
$Subject
          [,1]       [,2]
[1,] 0.5163978 0.00000000
[2,] 0.0000000 0.09673017
Browse[1]> mer at dims
  nf    n    p    q REML glmm 
   1  180    2   36    1    0 
Browse[1]> mer at nc
Subject 
      2 
Browse[1]> .Call("mer2_getPars", mer, PACKAGE = "lme4")
[1] 0.51639778 0.09673017 0.00000000