Re: NonlinearFit-Logistic Function-CalcCenter 3
- To: mathgroup at smc.vnet.net
- Subject: [mg60544] Re: NonlinearFit-Logistic Function-CalcCenter 3
- From: dh <dh at metrohm.ch>
- Date: Tue, 20 Sep 2005 05:18:58 -0400 (EDT)
- References: <dgitnd$2e2$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hello Oddur,
You are wundering why NonlinearFit does give different answers if you
replace a parameter by its negative.
Well, there does not exists a numerical non-linear fitting routine that
always returns optimal parameters. All depends of your starting point.
To see why, consider the fitting error (e.g. sum of squares of
difference between fitted and given data points) as a function of your
parameters. Assume the axis of the error magnitude upwards. Then this
function describes a surface and you try to locate parameter values for
the lowest point on this surface. That is easy for e.g. a "cup" sized
function with one minimum. This is the case for linear fits. Nonlinear
fits on the contrary can have any number of dimpels and holes. If you
have no idea where the deepest hole is, it is not possible to write a
program that always gives the lowest point on the surface for an
arbitrary model function. However, quit many numerical algorithms exist,
that will try to find the lowest point in the neighberhood of some
starting value. The range of sophistication is quit broad here. From the
simple "go down hill" (steepes descent) to procedures like "simulated
annealing" that tries to find the deepest hole in the negihberhood,
there exists a broad palette of algorithms.
They all have in common that they need a starting point in some way, and
the result may depend on this point.
Back to your example. If you do not specify a starting point,
NonlinearFit, assumes a starting point of 1. Therefore, by changing a to
-a, you are actually changing the starting point and, not astonishing,
you may get another result.
You can specify a starting point in NonlinearFit by replacing the
parameter, say a, by: {a,startingpoint}. You may even give an intervall
from where to try different starting points (see manual) by: {a,min,max}.
You can get the same answer from NonlinearFit independetn of
parametrization, if you specify corresponding starting points.
But you should always check the results of any nonlinear fit routine if
it is feasible.
sincerely, Daniel
Oddur Bjarnason wrote:
> I thank Bob Hanlon and Valeri Astanoff for their prompt reply and am following their suggestions.
>
> Purely by chance I found a solution to the problem I had using CalcCenter 3 for nonlinear fitting of data to a logistic function.
>
> By fitting
>
> data2={{-0.08,0.05},{0.96,-3.19},
> {1.93,-6.4},{2.98,-10.32},
> {3.97,-11.8},{5.92,-13.98},
> {7.88,-14.12},{11.85,-15.34},
> {15.79,-14.61},{19.7,-15.43},
> {23.67,-15.83}};
>
> by NonlinearFit[data2, -a/(1 + b*Exp[-c*t]), t, {a, b, c}]
>
> instead of
>
> NonlinearFit[data2, a/(1 + b*Exp[-c*t]), t, {a, b, c}]
>
> that is by changing the sign of a
>
> I obtained the function
>
> -14.917794621733984/(1 + 10.284628991516529*Exp[-1.0072061447043623*t]
>
> Presumably this method can also be used in Mathematica.
>
> I must admit that I have not as yet found out why this works.
>
> Regards,
>
> Oddur Bjarnason
>
>