Re: simultaneous nonlinear regression of a lot of data

*To*: mathgroup at smc.vnet.net*Subject*: [mg65453] Re: [mg65427] simultaneous nonlinear regression of a lot of data*From*: "Carl K. Woll" <carlw at wolfram.com>*Date*: Sun, 2 Apr 2006 05:00:13 -0400 (EDT)*References*: <200603311109.GAA15091@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

dantimatter wrote: > Hello all, > > I have a question about using the nonlinear regression function on a > large data set. Perhaps some of you have suggestions, and can point me > in another direction if this is not the best way to solve this problem. > > > Basically I have ~100 data sets of ~200 points each, and I'd like to > fit each set to the following function: > > G(t) = 1/N * [ y / (1+t/m1) + (1-y) / (1+t/m2) ] > > For each data set, the numbers N and y are different, but the numbers > m1 and m2 are the same for all data sets. The problem is that I only > know m1, and not m2. I am hoping to simultaneously solve all these > data sets to come up with a value for m2, but I'm not entirely sure how > to code it. I can come up with a reasonable m2 to start any > regression. > > Any thoughts? > > Thanks! Why don't you just augment your data sets with the n and y information, so that it looks like: data = { {n1, y1, t1, G[t1]}, (* data set 1 *) {n1, y1, t2, G[t2]}, ... {n10, y10, t1, G[t1]}, (* data set 10 *) {n10, y10, t2, G[t2]}, ... } Then, use FindFit in the usual way FindFit[data, 1/n * (y/(1+t/m1) + (1-y)/(1+t/m2)), {m2}, {n, y, t}] where of course you substitute the known value of m1. With this approach you can even use NonlinearRegress, and obtain regression statistics for the fit. I tested this with a sample of 100 sets of 200 data points for a total of 20000 data points, and FindFit found the fit in .2 seconds. Carl Woll Wolfram Research