File Exchange

image thumbnail


version (2.13 KB) by Ritchie Smith
Plots dose/response curve and calculates EC50 and Hill Coefficient.


Updated 13 Nov 2011

View License

Plots dose/response data as mean responses to a dose with standard errors. Fits sigmoidal curve to data, calculating EC50 and the Hill Coefficient, then plots the sigmoid along with a label indicating the EC50.

Cite As

Ritchie Smith (2020). doseResponse (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (8)

Paul-Enguerrand Fady

Works beautifully, very useful and elegant function

William Redwine

What if I have many EC50 curves to generate, all at the same concentrations? What would be the best way to iterate this script across those samples?


a. Several minor issues in this code:
1. in the help documents, line 6: 'man' should be 'mean'
2. as Spencer Scott pointed out, the initial guess for the ec50 should not be midResponse

b. The issue Katie raised is worth clarifying. The doubt that x should be the denominator is solved by the parameters beta(1) and beta(2). It is easy to see that by a transformation, these two forms of the sigmoid equation are equivalent. It is just that you get different beta(1) and beta(2) with different meanings. However, this code should specify this fact.

c. The normalization method (simply dividing the response by mean response at 0) does not seems to be specifically necessary. Including those points in the dose response curve seems to be a better option.


In addition to the the beta(3) problem mentioned before, it looks to me that the sigmoid model might also be incorrect.

In the file, it is:


But reading through literature, it seems like x should be the denominator instead of the numerator in the fraction, so it should read:


I'm new to this subject, so please feel free to advise if I am wrong.

Mohanad Al-Bayati

Spencer Scott

I had some problems with this probably because my response *increases* as my dose increases. However, it seems to have worked when I changed beta(3) to not be *midResponse*, but rather *midDose* which is actually what EC50 should be anyway. (EC50 = dosage at half response, not just half response)

Erin Henslee

Came across this as I am looking for a Matlab solution to MTT assay measurements for IC50.

I have run this code, with the response being the live cell count and getting really weird results (negative numbers) and I know the numbers work with the excel model provided to me by the MTT assay tech.

I am guessing my inputs are not correct for this code and was wondering if you could clarify. Thanks!

Lasse Norfeldt

It's very easy to use and the developer responded very quickly and fixed a bug within 1 hour - Now that's what I call great service!
Thank you very much for sharing this code.


The dose vector may now contain 0 values. These are handled as controls, and the average value of the corresponding responses will be used to normalise all other responses.

Updated to smooth drawing of sigmoid over all ranges of concentrations, with thanks to Lasse Nørfeldt for pointing it out.

MATLAB Release Compatibility
Created with R2010b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired by: dose_response