[R-sig-ME] New version of lme4 - memory error
Douglas Bates
bates at stat.wisc.edu
Sun Jan 28 18:18:56 CET 2007
On 1/27/07, Andrew Robinson <A.Robinson at ms.unimelb.edu.au> wrote:
> Thanks, Martin. It was vanilla.
>
>
> > traceback()
> 4: .Call(mer2_getPars, mer)
> 3: as.double(start)
> 2: nlminb(.Call(mer2_getPars, mer), function(x) .Call(mer2_deviance,
> .Call(mer2_setPars, mer, x), as.integer(0)), lower = ifelse(const,
> 0, -Inf), control = list(trace = cv$msVerbose, iter.max = cv$msMaxIter,
> rel.tol = abs(0.001/.Call(mer2_deviance, mer, 0))))
> 1: lmer2(Reaction ~ Days + (Days | Subject), sleepstudy)
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.
>
>
> (I will add it to my list of New Year's Resolutions!)
>
>
>
> Andrew
>
>
>
> On Sat, Jan 27, 2007 at 04:20:30PM +0100, Martin Maechler wrote:
> > >>>>> "Andrew" == Andrew Robinson <A.Robinson at ms.unimelb.edu.au>
> > >>>>> on Sat, 27 Jan 2007 10:27:14 +1100 writes:
> >
> > Andrew> Hi Doug, sorry, it's me having problems again :(
> >
> > Andrew> I can install and load the new lme4 package with no
> > Andrew> trouble, but when I try to run the examples, I get:
> >
> > >> require(lme4)
> > Andrew> Loading required package: lme4
> > Andrew> Loading required package: Matrix
> > Andrew> Loading required package: lattice
> > Andrew> [1] TRUE
> > >> sessionInfo()
> > Andrew> R version 2.4.1 Patched (2007-01-25 r40572)
> > Andrew> i386-unknown-freebsd6.1
> >
> > Andrew> locale:
> > Andrew> C
> >
> > Andrew> attached base packages:
> > Andrew> [1] "stats" "graphics" "grDevices" "utils" "datasets"
> > Andrew> "methods"
> > Andrew> [7] "base"
> >
> > Andrew> other attached packages:
> > Andrew> lme4 Matrix lattice
> > Andrew> "0.9975-11" "0.9975-8" "0.14-16"
> > >> fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
> > >> fm1 <- lmer2(Reaction ~ Days + (Days|Subject), sleepstudy)
> > Andrew> Error in as.double(start) : Calloc could not allocate (169499040 of 4)
> > Andrew> memory
> >
> > Hmm, I can't replicate your problem. I get
> >
> > > system.time( fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy))
> > [1] 0.112 0.001 0.124 0.000 0.000
> > > system.time( fm1.2 <- lmer2(Reaction ~ Days + (Days|Subject), sleepstudy))
> > [1] 0.056 0.000 0.056 0.000 0.000
> > > summary(fm1.2)
> > Linear mixed-effects model fit by REML
> > AIC BIC logLik MLdeviance REMLdeviance
> > 1754 1770 -871.8 1752 1744
> > Random effects:
> > Groups Name Variance Std.Dev. Corr
> > Subject (Intercept) 612.114 24.7409
> > Days 35.072 5.9222 0.066
> > Residual 654.937 25.5917
> > Number of obs: 180, groups: Subject, 18
> >
> > Fixed effects:
> > Estimate Std. Error t value
> > (Intercept) 251.405 6.825 36.84
> > Days 10.467 1.546 6.77
> >
> > Correlation of Fixed Effects:
> > (Intr)
> > Days -0.138
> > >
> >
> >
> >
> > Andrew> Does anyone else find this? Please let me know what else I can do to
> > Andrew> help.
> >
> > You can type
> > traceback()
> >
> > after the error (which you should get a habit of doing ;-)
> > which might be revealing though I doubt it a bit in this case.
> >
> > Are you sure that you started R as "R --vanilla", i.e.
> > that you have *not* loaded an .RData of a previous session
> > accidentally?
> >
> > Regards,
> > Martin
> >
> > Andrew> Cheers,
> > Andrew> Andrew
>
> --
> Andrew Robinson
> Department of Mathematics and Statistics Tel: +61-3-8344-9763
> University of Melbourne, VIC 3010 Australia Fax: +61-3-8344-4599
> http://www.ms.unimelb.edu.au/~andrewpr
> http://blogs.mbs.edu/fishing-in-the-bay/
>
-------------- 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
More information about the R-sig-mixed-models
mailing list