Code covered by the BSD License  

Highlights from
Logistic curve fit

Be the first to rate this file! 44 Downloads (last 30 days) File Size: 3.85 KB File ID: #41781
image thumbnail

Logistic curve fit

by

 

17 May 2013 (Updated )

Fit a time series to a best-fitting logistic function.

| Watch this File

File Information
Description

Fit time series Q(t) to a logistic function.
Inputs (vectors of same size): t (time) & Q
Outputs: Qpre (logistic model fit to data) and three independent parameters: thalf, Qinf, and a, describing the logistic
Q(t) = Qinf/(1 + exp(-a*(t-thalf)))
Qinf is value as t --> infinity
thalf is time of symmetric inflection point
a is time decay constant
Written by James Conder, Southern Illinois University, Oct. 2010
Cleaned up for publishing May 16, 2013

MATLAB release MATLAB 8.1 (R2013a)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (6)
12 Feb 2014 James Conder

Andrew, I spent some time looking at it, and think I have fixed the problem. I just uploaded a newer version. Once it is up, please try your dataset on it and let me know how it goes.

10 Feb 2014 Andrew

James,

Great function, thank you. I too have the issue with outputting a constant value for Qpre, and, as with Darren, changing the scaling of the value for t fixes this. My t values scale between 0 and 1 in steps of 0.001.

Many thanks

28 May 2013 James Conder

Hi Darren,

Sorry about the plotting calls. I realized that I forgot to remove them just after resubmitting. I guess the follow up submission with those removed is still moving though the system.

Good catch on reversing t. It is one of those bugs introduced when addressing a different problem. I'll fix that bug and put a test example in the help comments in new submission later today.

27 May 2013 Darren Rowland

Hey James,

I've tested out the new code and it works a lot better for my case. One problem I've now identified is that you are not re-reversing t at the end of the function, so the calculated Qpre can be in error.

Other than this, I would suggest for you to include a brief usage example within the Help comments, e.g. constructing data from known parameters, adding some random error and obtaining parameter estimates. Just a few lines to help someone getting started.

Also, you should turn the various plotting calls off by default then have an extra (optional) input parameter for people to use to turn them on.

Hope that helps,
Darren

23 May 2013 James Conder

Thanks for the feedback, Darren. I've made a fix based on your idea of rescaling the vector internally, and submitted an update. It isn't completely obvious to me why Qpre goes to the mean of Q for some scalings of t. In any case, I hope my fix is general and not limited to your special case. Keep me posted.

22 May 2013 Darren Rowland

Hi James,

This is a nice function but there is a failure condition to be aware of.

When I run the function on the following data, Qpre = 169.35 for all t. However, if I multiply t by 100, the function returns a better result.

Perhaps you can detect these cases and scale the vector internally to correct.

Darren

t = [0.8753
0.9267
0.9499
0.9678
0.9875
1.0206];
Q = [ 48.3871
96.7742
145.1613
193.5484
241.9355
290.3226];

Updates
17 May 2013

Fixed signs of coefficients for decreasing logistic.

20 May 2013

Fixed signs of coefficients for decreasing logistic and added screenshot

24 May 2013

Fixed instability for short or long time frames

28 May 2013

accidentally included debugging code in last update. update is debugged AND cleaned version

28 May 2013

Fixed bug for reversing time when fitting a decreasing logistic.
Added an example in help comments.

13 Feb 2014

Added a check to avoid the flatlining (Qpre goes to the mean) that has occasionally occurred.

14 Feb 2014

1) condensed output of three individual parameters: thalf, Qinf, and alpha into one 3 element vector, p
2) fixed typo in comments

Contact us