Re: Re: Fitting question

*To*: mathgroup at smc.vnet.net*Subject*: [mg51695] Re: [mg51670] Re: Fitting question*From*: János <janos.lobb at yale.edu>*Date*: Fri, 29 Oct 2004 03:39:45 -0400 (EDT)*References*: <clco37$q7i$1@smc.vnet.net> <200410280345.XAA09855@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

On Oct 27, 2004, at 11:45 PM, Ray Koopman wrote: > János <janos.lobb at yale.edu> wrote in message > news:<clco37$q7i$1 at smc.vnet.net>... >> I have two lists. One of them contains the running total of some >> quantity per cycles, the other contains the totals per cycles. Here >> they are: >> >> In[35]:= runtotpergen = {1, 23, 136, 568, 1735, 4382, 9099, >> 16384, 25993, 36694, 47752, 58044, 66761, >> 73534, 78429, 81753, 83750, 84873, 85482, >> 85779, 85937, 86025, 86069, 86081, 86087} >> >> In[36]:= totpergen = {1, 22, 113, 432, 1167, 2647, 4717, 7285, >> 9609, 10701, 11058, 10292, 8717, 6773, 4895, >> 3324, >> 1997, 1123, 609, 297, 158, 88, 44, 12, 6} >> >> I am trying to find out the analytical form of a function which fits >> best totpergen. [...] >> >> totpergen is not symmetrical, [...] >> >> I feel that Mathematica has the capability to find the best fitting >> function without too much manual trials. Any hint how to do that ? > > This fits a shifted gamma density to the first three moments of > totpergen. > It handles the asymmetry naturally and fits well. > > In[1]:= n = Last[runtotpergen = {1, 23, 136, 568, 1735, 4382, 9099, > 16384, 25993, 36694, 47752, 58044, 66761, 73534, 78429, 81753, > 83750, 84873, 85482, 85779, 85937, 86025, 86069, 86081, 86087}] > Out[1]= 86087 > > In[2]:= m = Length[totpergen = {1, 22, 113, 432, 1167, 2647, 4717, > 7285, > 9609, 10701, 11058, 10292, 8717, 6773, 4895, 3324, 1997, 1123, > 609, 297, 158, 88, 44, 12, 6}] > Out[2]= 25 > > In[3]:= <<Statistics`ContinuousDistributions`; > #@GammaDistribution[a,b]&/@{Mean,Variance,Skewness} //InputForm > Out[4]//InputForm= {a*b, a*b^2, 2/Sqrt[a]} > > In[5]:= f[a_,b_,c_,x_] := PDF[GammaDistribution[a,b],x-c] /; x >= c > > In[6]:= N@{mean = totpergen.Range[m]/n, > var = totpergen.(Range[m]-mean)^2/n, > skew = totpergen.(Range[m]-mean)^3/n * var^(-3/2)} > {a = 4./skew^2, b = Sqrt[var/a], c = mean - a*b} > Out[6]= {11.2316, 9.49626, 0.305409} > Out[7]= {42.8842, 0.470574, -8.94861} > > In[8]:= Plot[n*f[a,b,c,x],{x,1,m}, Epilog->{PointSize[.015], > Point/@Transpose@{Range@m,totpergen}}]; > Wow !! That is amazing ! One must wonder how long exposure to Mathematica allow one to have that kind of insight demonstrated here. It is time for me to read on some serious Statistics` :) My humble trials used to end like this: FindFit::cvmit: Failed to converge to the requested accuracy or precision \ within 10000000 iterations Old Hungarian proverb: "More with brain than muscle". I do not give up on hope :) Thanks you all who responded. I learned a lot. Ray, thanks again. János ------------------------------------------------ ``Our enemies are innovative and resourceful, and so are we. They never stop thinking about new ways to harm our country and our people, and neither do we.'' -- George W. Bush

**References**:**Re: Fitting question***From:*koopman@sfu.ca (Ray Koopman)