Skip to content

Do Users of Nonlinear Mixed Effects Models Know Whether Their Software Really Works?

I’ve been learning more about the lmer function (part of Doug Bates’s lme4 package) in R–it’s just so convenient, I think I’ll be using it more and more as a starting point in my analyses (which I can then check using Bugs and, as necessary, Umacs). Anyway, I came across this interesting recent discussion in the R help archive:

Dave Fournier describes an example where lmer and also various other package software from SAS and others give bad answers, and AD Model Builder performs better. Following the thread, there is some discussion of how to evaluate these programs, and whether it might make more sense to use a fake data simulation, where the correct answer is known ahead of time.

In my recent experience on this very topic, both fake-data and real-data checks are helpful. Fake-data simulations are a good place to start, to get things debugged, but real data can reveal problems that just don’t occur in fake data. Problems with model fitting often lead to problems in computation.


What does “lmer” stand for? “linear mixed effects r…?” Actually, one thing I like about the lmer() format is that the model statement does not separate out so-called “fixed” and “random” effects (see here for why I hate these terms), which I think takes us one step further towards a fully Bayesian world.


I’d also like (approximate) posterior simulations from the lmer() objects. I could do it myself but that’s a lot of work and I’m hoping that someone has already done it…


  1. Bob O'H says:

    I thought "lmer" was explained somewhere (in R-help, probably). The lme stands for Linear Mixed Effects.

    Ah, a quick search reveals…

    "One distinguishing feature of the 0.95 series of releases of this package is the absence of the lme and GLMM functions. They have been replaced by a single function called lmer (pronounced "Elmer"). The name could stand for "lme revised" or for "lme for R"."

    So, there you go.


  2. Hadley says:

    Does mcmcsamp ( do what you want in terms of simulating from the posterior?

  3. Andrew says:


    The mcmcsamp() function does some stuff, and I've written a wrapper called mcsamp() which calls mcsamp() and runs multiple chains and monitors convergence; see here. The plan is to clean it up a bit and eventually fold it in with lmer().