# [ADMB Users] The importance of parameterizing a nonlinear model well

Anders Nielsen fishfollower at gmail.com
Tue Aug 20 00:04:13 PDT 2013

```Hi Dave,

I agree completely.

The intention (from my side) was to show that this problem, which had been
reported too difficult for most other optimizers(!), was simple to solve in
ADMB. The reason for it being difficult was less important in this
exercise.

Point is that in larger problems we may not be able to find a
parametrization, which make them trivial, so it is nice to have an
optimizer which is stable enough to handle somewhat poor parametrizations.

Cheers,

Anders.

On Tue, Aug 20, 2013 at 1:48 AM, dave fournier <davef at otter-rsch.com> wrote:

> I came across the following  simple 3 parameter logistics problem
> describing
> how difficult it was to fit a small "weeds" data set.
>
> https://groups.nceas.ucsb.edu/**non-linear-modeling/projects/**
> weeds/WRITEUP/weeds.pdf<https://groups.nceas.ucsb.edu/non-linear-modeling/projects/weeds/WRITEUP/weeds.pdf>
>
> there are 12 data points
>
> t   weeds
> 1 5.308
> 2 7.24
> 3 9.638
> 4 12.866
> 5 17.069
> 6 23.192
> 7 31.443
> 8 38.558
> 9 50.156
> 10 62.948
> 11 75.995
> 12 91.972
>
> The model to be fit is
>
>      y = b_1/(1+b_2*exp(-b_3*t))
>
> We are told several times how difficult this data set is to fit.
>
> In fact is is a trivial data set to fit as I shall show.  The
> problem is that the parametrization used is a very poor one.
>
> Consider the parameter b_1.  This is the number of weeds at t=infinity.
>
> It appears to be somewhat greater than 91, but how much?  It is not really
> obvious.
> the parameter b_2 is even less intuitive.
>
> we shall replace b_1 and b_2 with two parameters whose value is almost
> obvious,
> namely the number of weeds at time t_1=1, and t_n=12.  Call thes parameter
> y_1 and y_n.
>
> clearly   y_1 is close to 5.308 and y_n is close to 91.9
>
> Given values for y_1, y_2, and b_3  it is a simple matter to solve for b_2
> and b_1.
>
> The code in the tpl file is
>
>   b3=exp(logb3);
>   dvariable gamma1=exp(-b3*t(1));
>   dvariable gamman=exp(-b3*t(noObs));
>   b2=(yn-y1)/(y1*gamma1-yn***gamman);  // solve for b2
>   b1=y1*(1.0+b2*gamma1);   // solve for b1
>
> For both models the sum of squares is   rss 2.58728
>
> Now lets make the data a bit more challenging.  we change the 12'th data
> point to
> 110.
>
> For Ander's verion the sum of squares is    rss 60.6799
>
> while for my version  it is rss 55.8948
>
> Now change the 12'th data point to 125.
>
> For Ander's version the sum of squares is    rss 237.054
> and for mine  rss 133.582
>
> So maybe we should think more about how to parameterize these models.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> Users mailing list