[R-sig-ME] algal nonlinear mixed effects problem
Reinhold Kliegl
reinhold.kliegl at gmail.com
Tue Jan 1 21:26:11 CET 2013
I agree that the estimates are not acceptable; I was just trying to
show that one can get rid of the nlmer() error messages. I also put up
data to show that, in principle, one can get interpretable results
with nlmer() for "well-behaved" data, but apparently the program is
not quite ready for prime time.
As far as the present set of data is concerned, first I would probably
remove the asymp.R1 variance component, but I am not sure in which
direction to take the model from there. I doubt that the logistic
function is a good reference for all three groups; I only see the
logistic function justified for the t2-group. I know about "borrowing
strength", but in this case, I would probably rather borrow strength
to fit the t2-group to the other two. I did not study your ADMB
results in detail, but if your happy with them, this probably is a
defensible solution.
On Tue, Jan 1, 2013 at 8:30 PM, Ben Bolker <bbolker at gmail.com> wrote:
> On 13-01-01 05:17 AM, Reinhold Kliegl wrote:
>> Thanks, Ben, for the illustration of how to use derive(), deparse(),
>> and eval() for setting up such functions. The following is based on
>> lme4_0.999999-0.
>>
>> I modified Ben's attempt at a fit in two ways to get convergence.
>> (1) The start argument threw an Error; I provide the values in a
>> vector rather than a list. This might be related to differences
>> between nlmer implementations.
>> (2) The start value for asymp.R2 had to be moved away from 0.
>>
>> The result suggests that there is no reliable evidence for the
>> variance component associated with "Individual asymp.R1"
>
> The results are crazy, though -- take a look at the fixed effect
> coefficients, or the predicted values ...
>
>>
>> A part of the protocol is listed below.
>> Happy New Year to everyone.
>>
>> Reinhold Kliegl
>>
>> Here is the protocol:
>>> # 4. Attempt the fit
>>> nlmerfit2 <- nlmer(
>> + X ~ fpl(Day, asymp.L, asymp.R1, asymp.R2, asymp.R3, xmid, scale) ~
>> + asymp.R1|Individual,
>> + start = list(nlpars=c(asymp.L=0.7,
>> + asymp.R1=0.6,asymp.R2=0,asymp.R3=0,xmid=5,scale=1)),data=d)
>> Fehler: length(start$fixef) > 0 is not TRUE
>>> # ERROR: length(start$fixef) > 0 is not TRUE
>>>
>>> nlmerfit2a <- nlmer(
>> + X ~ fpl(Day, asymp.L, asymp.R1, asymp.R2, asymp.R3, xmid, scale) ~
>> + asymp.R1|Individual,
>> + start = c(asymp.L=0.6,
>> asymp.R1=0,asymp.R2=0,asymp.R3=0,xmid=5,scale=1),data=d)
>> Fehler in mer_finalize(ans) : Downdated X'X is not positive definite, 5.
>>> # Fehler in mer_finalize(ans) : Downdated X'X is not positive definite, 5.
>>>
>>> nlmerfit2b <- nlmer(
>> + X ~ fpl(Day, asymp.L, asymp.R1, asymp.R2, asymp.R3, xmid, scale) ~
>> + asymp.R1|Individual,
>> + start = c(asymp.L=0.6,
>> asymp.R1=.1,asymp.R2=0,asymp.R3=0,xmid=5,scale=1),data=d)
>>> nlmerfit2b
>> Nonlinear mixed model fit by the Laplace approximation
>> Formula: X ~ fpl(Day, asymp.L, asymp.R1, asymp.R2, asymp.R3, xmid,
>> scale) ~ asymp.R1 | Individual
>> Data: d
>> AIC BIC logLik deviance
>> 16.11 32.02 -0.05555 0.1111
>> Random effects:
>> Groups Name Variance Std.Dev.
>> Individual asymp.R1 8.9101e-22 2.985e-11
>> Residual 2.0575e-03 4.536e-02
>> Number of obs: 54, groups: Individual, 9
>>
>> Fixed effects:
>> Estimate Std. Error t value
>> asymp.L -2.173e+02 2.187e+05 -0.001
>> asymp.R1 6.140e+01 5.002e+04 0.001
>> asymp.R2 -1.917e-02 4.370e+00 -0.004
>> asymp.R3 -1.207e-01 2.752e+01 -0.004
>> xmid 6.152e+03 6.167e+06 0.001
>> scale 4.807e+03 3.610e+06 0.001
>>
>> Correlation of Fixed Effects:
>> asym.L asy.R1 asy.R2 asy.R3 xmid
>> asymp.R1 -0.357
>> asymp.R2 -0.677 -0.446
>> asymp.R3 -0.677 -0.446 1.000
>> xmid -1.000 0.357 0.677 0.677
>> scale -0.597 0.962 -0.185 -0.185 0.597
>>
>>
>> On Mon, Dec 31, 2012 at 10:09 PM, Ben Bolker <bbolker at gmail.com> wrote:
>>> Ben Bolker <bbolker at ...> writes:
>>>
>>>>
>>>>
>>>> Inspired by a recent question of Diego Pujoni's on the list
>>>> ( http://article.gmane.org/gmane.comp.lang.r.lme4.devel/9363/match= ),
>>>> I started working on the problem, with two realizations:
>>>>
>>>> 1. the problem really needs a nonlinear fit: see
>>>> http://rpubs.com/bbolker/3363
>>>>
>>>> 2. I have no idea how to do an nlmer fit with a non-trivial
>>>> fixed-effects model (e.g. in nlme we could do
>>>>
>>>> nlmefit1 <- nlme(model = X ~ SSfpl(Day, asymp.L, asymp.R,
>>>> xmid, scale),
>>>> fixed = list(asymp.R ~ Group, xmid + scale + asymp.L ~ 1),
>>>> random = asymp.R ~ 1 | Individual, ...)
>>>>
>>>> This was raised earlier on stack overflow:
>>>>
>>>>
>>> http://stackoverflow.com/questions/11056625/how-to-add-fixed-effect-to-four-parameter-logistic-model-in-nlmer
>>>>
>>>
>>> Reinhold Kliegl e-mailed off-list to say that he was able to do
>>> it / had to do it by hacking up an objective function that accounts
>>> for the grouping (i.e., more or less doing it by hand). I have
>>> implemented this and updated http://rpubs.com/bbolker/3363 , which
>>> also shows a solution with AD Model Builder; it turns out that at
>>> least the development version of nlmer is a little too fragile to
>>> fit the model I wanted to fit (I haven't tested with the stable
>>> version).
>>>
>>> _______________________________________________
>>> R-sig-mixed-models at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
>
More information about the R-sig-mixed-models
mailing list