Code covered by the BSD License  

Highlights from
Logistic curve fit

5.0
5.0 | 2 ratings Rate this file 45 Downloads (last 30 days) File Size: 3.85 KB File ID: #41781 Version: 1.8
image thumbnail

Logistic curve fit

by

James Conder (view profile)

 

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 (12)
05 May 2015 Sindy

Sindy (view profile)

sorry...I tried to use the "message" provided by mathwork to contact you. Is this the right way to email you?

Comment only
30 Apr 2015 James Conder

James Conder (view profile)

Sindy, the code doesn't do that as written, but could be modified at a handful of places to do it. Email me if you would like some help doing that.

Comment only
30 Apr 2015 Sindy

Sindy (view profile)

Thanks for the sharing!
There are 3 parameters which is returned from fitting. If one of the parameter is fixed, for example, Qinf=1, can this function still be used?
Many thanks!

Comment only
23 Apr 2015 Ingrid

Ingrid (view profile)

 
22 Apr 2015 James Conder

James Conder (view profile)

Note: Ingrid and I found the the reason for her straight line output. The function assumes that the tail begins at zero, while the initial tail of her data was at 7. It works as intended if the DC shift is removed from the data.

Comment only
21 Apr 2015 Ingrid

Ingrid (view profile)

Does not work on my data (just gives me a straight line). Finally used the built in function nlinfit and this did work fine

12 Feb 2014 James Conder

James Conder (view profile)

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.

Comment only
10 Feb 2014 Andrew

Andrew (view profile)

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

Comment only
28 May 2013 James Conder

James Conder (view profile)

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.

Comment only
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

Comment only
23 May 2013 James Conder

James Conder (view profile)

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.

Comment only
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];

Comment only
Updates
17 May 2013 1.1

Fixed signs of coefficients for decreasing logistic.

20 May 2013 1.2

Fixed signs of coefficients for decreasing logistic and added screenshot

24 May 2013 1.3

Fixed instability for short or long time frames

28 May 2013 1.4

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

28 May 2013 1.5

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

13 Feb 2014 1.7

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

14 Feb 2014 1.8

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

Contact us