Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.


Math Forum » Discussions » Software » comp.soft-sys.math.mathematica

Topic: Dancing "a la Levenberg-Marquardt" to get the best Logistic Model.
Replies: 2   Last Post: Feb 9, 2012 5:42 AM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View  
Gilmar Rodriguez-pierluissi

Posts: 18
Registered: 5/4/11
Re: Dancing "a la Levenberg-Marquardt" to get the best Logistic Model.
Posted: Feb 9, 2012 5:42 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

Thank you for your valuable help Dr. Glosemeyer!
Sincerely,
Gilmar Rodriguez Pierluissi

From: Darren Glosemeyer <darreng@wolfram.com>
To: Gilmar Rodriguez-pierluissi <peacenova@yahoo.com>
Cc: mathgroup@smc.vnet.net
Sent: Wednesday, February 8, 2012 10:45 AM
Subject: Re: Dancing "a la Levenberg-Marquardt" to get the best Logistic Model.

On 2/8/2012 4:33 AM, Gilmar Rodriguez-pierluissi wrote:
> Dear Math Group:
> (**I start with the following population values between 1972 to 2008:**)
> In[2]:= popvalues = {217928, 219129, 221577, 227481, 231748, 233514,
>    232857, 233664, 235228, 240526, 243310, 249587, 250128, 253383,
>    257751, 261999, 258229, 262567, 263272, 267643, 272468, 274035,
>    276154, 278323, 282606, 289505, 295243, 293956, 294410, 296399,
>    297382, 298289, 299248, 296785, 299359, 300184, 299993};
> In[3]:= L = Length[popvalues];
> (** The highest (projected) value that the population can reach is: **)
> In[4]:= pop2020 = 304909;
> (** Assemble the data to do build a "scatter plot" **)
> In[5]:= popvalues2D =
>    Join[Table[{i, popvalues[[i]]}, {i, 1, L}], {{49, pop2020}}];
> In[6]:= plt1 = ListPlot[popvalues2D]
> Out[6]= (** Plot ommited **)
> (** Let: **)
> In[7]:= K = pop2020
> Out[7]= 304909
> In[8]:=
>  Subscript[P, 1] = popvalues[[1]]
> Out[8]= 217928
> (** I'm attempting to use a Population Logistic model similar to one \
> found in (where else?) Wikipedia:
> http://en.wikipedia.org/wiki/Logistic_function under the title: "In \
> ecology: modeling population growth". **)
> (** Since I need this model to satisfy Logistic[1]= Subscript[P, 1] \
> and Lim t ->  Infinity Logistic[t] = K; I came up with the following \
> version of the Logistic Model to handle the above data set \
> appropriately: **)
> (** Logistic[t_]=(K Subscript[P, 1]Exp[rt])/(K Exp[r]+ Subscript[P, \
> 1](Exp[er]-Exp[r])); **)
> (** If you inspect this model ("by hand") you will see that \
> Logistic[1]= Subscript[P, 1] (the first population data point). Using \
> L'Hopital's Rule; one can show that Lim t ->  Infinity (Logistic[t]) = \
> K; by taking the derivative of the numerator and denominator with \
> respect to t and performing the appropriate cancellations. Again; K \
> is the highest value that the population can reach "by design".  **)
> (** Logistic[t_]=(Subscript[P, 1] E^(r*t))/(E^r+ Subscript[P, 1] \
> (E^(r*t)- E^r)/K); **)
> (** The model is equivalent to: **)\[AliasDelimiter]
> In[13]:= Logistic[t_] = ( Subscript[P, 1] Exp[r t])/(
>    Exp[r] + Subscript[P, 1] (Exp[r t] - Exp[r])/K);
> (** I' m expecting Logistic[1] = 217928 and indeed : )
> In[14]:= Logistic[1]
> Out[14]= 217928
> (** but, unfortunately; **)
> In[16]:= Limit[Logistic[t], t ->  Infinity]
>  Out[16]= Limit[(217928 E^(r t))/(
>  E^r + (217928 (-E^r + E^(r t)))/304909), t ->  \[Infinity]]
> (** and: **)
> In[15]:= Logistic[49]
> Out[15]=
> = (217928 E^(49 r))/(E^r + (217928 (-E^r + E^(49 r)))/304909)
> (** I can see the the function Logistic[t] requires to be "herded" \
> (somehow) so that cancellations of terms can take place. Perhaps \
> using "Hold[]" and "ReleaseHold[]; I just don't know how. **)
> (** I need to overcome the above hurdle before evaluating:  **)
> logisticnlm = NonlinearModelFit[popvalues2D, Logistic[t, r], {r}, t]
> (** I want to use the initial point Subscript[P, 1] and end point \
> Subscript[P, 49] as "pivot points" and use NonlinearModelFit to get \
> the Best Fit Non-Linear Regression via a "dance a la Levenberg-Marquardt" \
> similar to the dance shown here:
> http://www.numerit.com/samples/nlfit/doc.htm **)
> (** Thank you for your help! **)


The model given to NonlinearModelFit has 2 arguments, but Logistic is only defined for 1 argument. If we use Logistic[t], the estimation works fine.

logisticnlm = NonlinearModelFit[popvalues2D, Logistic[t], {r}, t]
Show[plt1, Plot[logisticnlm[t], {t, 1, 49}]]

You could simplify the model if you wish.

logisticnlm2 = NonlinearModelFit[popvalues2D, Logistic[t] // Simplify, {r}, t]
Show[plt1, Plot[logisticnlm2[t], {t, 1, 49}]]

A look at the difference of the 2 fitted functions shows that they match to within numerical error, though.

Plot[logisticnlm2[t] - logisticnlm[t], {t, 1, 49}]


Darren Glosemeyer
Wolfram Research








Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.