Re: Extracting Parameter Values from NonlinearModelFit
- To: mathgroup at smc.vnet.net
 - Subject: [mg127916] Re: Extracting Parameter Values from NonlinearModelFit
 - From: Alexei Boulbitch <Alexei.Boulbitch at iee.lu>
 - Date: Sat, 1 Sep 2012 02:26:46 -0400 (EDT)
 - Delivered-to: l-mathgroup@mail-archive0.wolfram.com
 - Delivered-to: l-mathgroup@wolfram.com
 - Delivered-to: mathgroup-newout@smc.vnet.net
 - Delivered-to: mathgroup-newsend@smc.vnet.net
 
Hi,
I'm modelling a series (>2000) of data points (5x2 lists) using NonlinearModelFit, and trying to extract the Fitted Parameter Values to separate lists using the following code:
model = a Exp[-k x];
i = 1;
For[i = 1, i <= Length[data],
  {nlm = NonlinearModelFit[data[[i]], {model, k<1}, {a, b}, x]["BestFitParameters"];
   aValues = Append[aValues, nlm[[1, 2]]];
   kValues = Append[kValues, nlm[[2, 2]]]},
  i++
  ];
I'm able to determine the Parameters via nlm, but can't extract the parameter values.
Any thoughts?
Thanks in advance!
C
Hi,
The problem comes from the fact that in the model you use parameter k, and in the fitting operator - parameter b. The second source of an inconvenience (not really a problem) is the use of the loop, which is generally not recommended in Mathematica. Your aim can be achieved in a more easy way. For example, like follows.
Here I construct something like the data points to be fitted (to have something to play with). The points are contained in the list entitled tab2:
tab1 = Transpose@{RandomReal[{0, 1}, {5}], RandomReal[{-1, 0}, {5}]};
tab2 = Table[{x,
    tab1[[i, 1]]*Exp[tab1[[i, 2]]*x] + RandomReal[{-0.01, 0.01}]}, {i,
     1, 5}, {x, 0, 1, 0.1}];
For example its first sublist is:
tab2[[1]]
{{0., 0.639913}, {0.1, 0.614459}, {0.2, 0.588334}, {0.3,
  0.569105}, {0.4, 0.54342}, {0.5, 0.516209}, {0.6, 0.504349}, {0.7,
  0.490187}, {0.8, 0.459}, {0.9, 0.446124}, {1., 0.421486}}
And there are 5 such different sublists.
This is the list tab3 containing solutions for the parameters a and b of your model:
model = a Exp[-b x];
tab3 = Table[
  FindFit[tab2[[i]], model, {a, b}, x], {i, 1, 5}]
{{a -> 0.568633, b -> 0.364295}, {a -> 0.433001,
  b -> 0.319931}, {a -> 0.286261, b -> 0.397863}, {a -> 0.88219,
  b -> 0.0503344}, {a -> 0.80377, b -> 0.843876}}
If you execute this, you will visualize the fitting:
Table[Show[{ListPlot[tab2[[i]], PlotStyle -> Red],
   Plot[model /. tab3[[i]], {x, 0, 1}]}], {i, 1, 5}]
Have fun, Alexei
Alexei BOULBITCH, Dr., habil.
IEE S.A.
ZAE Weiergewan,
11, rue Edmond Reuter,
L-5326 Contern, LUXEMBOURG
Office phone :  +352-2454-2566
Office fax:       +352-2454-3566
mobile phone:  +49 151 52 40 66 44
e-mail: alexei.boulbitch at iee.lu