[R-sig-ME] Nonlinear mixed models with nlme::nlme() and lme4::nlmer()

David Sirl d@v|d@@|r|@uk @end|ng |rom gm@||@com
Thu Nov 21 22:12:09 CET 2024


Hi R-sig-mixed-models-ers,

I'm fairly new to working with mixed models (and only have a couple of 
years of working with R behind me) and have reason to want to fit some 
nonlinear mixed models, so I'm working through the analysis of the 
Soybean data that's in Sec 6.3 of Pinheiro & Bates' book "Mixed-Effects 
Models in S and S-plus" (2000, Springer series on Statistics & Computing).

To help learn about these models I've been reproducing this analysis 
using both nlme::nlme() (as P&B use, though in S rather than R) and 
lme4::nlmer() (which I understand to have broadly similar functionality 
but with better numerics in some places) and the results from the two 
different packages agreed fairly well for the first analyses I did. But 
now I have tried to fit a particular model (to the same data) using 
these two methods and I get results that (i) suggest I really am fitting 
the same model to the same data, (ii) in some respects agree closely, 
but (iii) in other respects differ wildly.

A couple of colleagues have checked my code and don't see any issues, so 
I wonder if anyone here might be able to suggest what's going wrong with 
either one of these functions (which I presume is not very likely) or my 
use of these functions (presumably much more likely!) please?

I've set out what I've done below; and I'd be very grateful for any 
suggestions that anyone can offer re what has gone wrong and where.

Best wishes,
Dave


*A first sanity check*

First I'll just write out the key parts of the calls I make to these 
functions, in case I've been really daft and not noticed that my calls 
should not be expected to fit the same model:

nlme::nlme(weight ~ SSlogis(Time, Asym, xmid, scal),
            data = ...,
            fixed = Asym+xmid+scal~1,
            random = Asym~1,
            groups = ~Plot,
            start = ...)

lme4::nlmer(weight ~ SSlogis(Time, Asym, xmid, scal) ~ (Asym + xmid + 
scal) + (Asym|Plot),
             data = ...,
             start = ...)


*Some more detail*

Assuming/hoping that the code above suggests that I am fitting the same 
model with both methods, here's a bit more detail of the context, what 
I'm trying to do and what's happening that suggests to me something is 
going wrong.

The dataset is Soybean (has "weight" recorded at 8-10 values of "Time" 
for each of 48 values of the grouping factor "Plot") and the model I'm 
trying to fit is of logistic growth using SSlogis(Time, Asym, xmid, 
scal) with a random effect for Asym only (and fixed effects for all 
three parameters).

The starting parameter values I use are the (marginal) medians of the 
parameter estimates for group-wise OLS fits of a logistic function to 
the data for each Plot (fitted using nlme::olsList()) - I've omitted 
this and entered the values explicitly here:

startParams = c(Asym=19.813031, xmid=56.243394, scal=8.718537)

fm3Soy.nlme =
nlme::nlme(weight ~ SSlogis(Time, Asym, xmid, scal),
              data = nlme::Soybean
              fixed = Asym+xmid+scal~1,
              random = Asym~1,
              groups = ~Plot,
              start = startParams)


fm3Soy.nlmer =
lme4::nlmer(weight ~ SSlogis(Time, Asym, xmid, scal) ~ (Asym + xmid + 
scal) + (Asym|Plot),
               data = nlme::Soybean
               start = startParams)

 From the summary() of each fit I get what appear to be exactly the same 
parameters being estimated / reported on, and they're very much in 
agreement regarding likelihood/AIC/BIC values, variances of random 
effects, point estimates of fixed effects. But they are qualitatively 
very different in terms of standard errors and correlations for fixed 
effects. The standard errors differ by a factor of ~100 and the 
correlations are in the range 0.3 - 0.7 vs -0.3 - 0.0 and, based on what 
I know of the data (and the output in P&B's book!)  I'm fairly confident 
that the results from lme4::nlmer() which are incorrect.

A further suggestion of things going wrong arises if I try to find CIs 
for model parameters [using intervals(fm3Soy.nlme) and 
confint(fm3Soy.nlmer)]. The latter gives an error message "Error in 
eval(expr, envir, enclos): step factor reduced below 0.001 without 
reducing pwrss" which I don't understand and for which my Google-ing 
doesn't yield any help - I only see help for when this error arises in 
fitting the model.

Another possibly relevant point is that this is not a model that's 
actually fitted in P&B (the first thing they do is deal with the 
non-constant error variance). But even if some of the model assumptions 
are violated I am still fitting the same model to the same data, so I 
feel quite un-nerved by the big discrepancy in the results from the two 
methods.

The fits both seem reasonably good in the sense that the augmented 
predictions [e.g. with nlme::augPred(fm3Soy.nlme, level=0:1) |> plot()] 
for both methods agree with each other and, visually, agree fairly well 
to the data. (It's only standard errors and correlations of fixed 
effects that differ.)

(I have also fitted the model in a Bayesian way using brms::brm() and 
get results that are in keeping with those from nlme::nlme() above.)

Thanks very much if you've read this far. I hope I've included all 
relevant information to help track down what might be happening, but if 
someone is interested in helping and would like some more information 
then please do let me know.

	[[alternative HTML version deleted]]



More information about the R-sig-mixed-models mailing list