I am a computer science student and I'm in an internship at a genomics and biotechnologies research institute. My current task is to calculate the IC50 and the EC50 given a set of data as a table.

enter image description here

The thing is, I am required to find a way to automate these calculations, currently working in excel. Which proves to be really difficult for me having no biology background. I have asked around and the people there kindly explained to me what the IC50 is and why it is needed, how the data is gathered, what tools they use to gather it and so on. My problem though, is that what I need is a way to calculating it. A mathematical way, something I could use to write a formula in excel, or preferably a software I could write.(Once I know how to calculate it) During my research I found this video on how to calculate the IC50 using an excel macro function, but I do not know if it actually works, having been provided a limited ammount of test data. (I am not sure on how reliable that algorithm is either)


Can someone please help me with an actual mathematical way to calculate the IC50/EC50? My reading seems to not be of very much help no matter how much I try to use the internet's free resources to gather theoretical information about the topic.

Ok the question seems to have been marked as off-topic homework because I didn't present my way of solving it. First of all, it's not homework, it's a work problem I've encountered and need help with. Second, here is my attempt at solving it using an excel Macro

Function HalfWay(Ys As Range) As Double
    Dim pMin As Double, pMax As Double
    pMin = WorksheetFunction.Min(Ys)
    pMax = WorksheetFunction.Max(Ys)
    HalfWay = pMax - (pMax - pMin) / 2 
    End Function  
Function ECIC(X As Range, Y As Range) As Variant 
    Dim iRow1 As Integer, iRow2 As Integer, Asc As Integer, X1 As String, Y1 As String
    If Y.Cells(1, 1) < Y.Cells(2, 1) Then Asc = 1 Else Asc = -1
    iRow1 = WorksheetFunction.Match(Y50, Y, Asc)
    iRow2 = WorksheetFunction.Match(Y50, Y, Asc) + 1
    X1 = X.Cells(iRow1, 1).Address & ":" & X.Cells(iRow2, 1).Address
    Y1 = Y.Cells(iRow1, 1).Address & ":" & Y.Cells(iRow2, 1).Address
    ECIC = WorksheetFunction.Trend(Range(X1), Range(Y1), Y50) 
    End Function

This code basically draws a line in memory between the points that are before and after the IC50/EC50 point on the graph and calculates the EC/IC's corresponding concentration based on its actual effectiveness. I am not sure how reliable this method is though.

  • $\begingroup$ Hm... Does it answer your question - youtube.com/watch?v=fMghQw2Ry2c $\endgroup$
    – Ilan
    Commented Jul 22, 2015 at 13:50
  • $\begingroup$ I'm voting to close this question as off-topic because it is poorly researched. Formula's can be found o'plenty by a simple google search. As a computer-science student, implementing a few numbers into a regression based on a known function should be peanuts. $\endgroup$
    – AliceD
    Commented Jul 22, 2015 at 14:19
  • $\begingroup$ See wiki pages on IC50 and EC50. $\endgroup$
    – AliceD
    Commented Jul 22, 2015 at 14:22
  • $\begingroup$ I have been through that, Ilan, but there's the IP and the SP there that I cannot gather from my data so that's a dead end for me aswell. And thanks for the links AliceD, but I've already gone through them with no significant breaktrough. I mean seriously, who doesn't look at wikipedia first... $\endgroup$ Commented Jul 22, 2015 at 15:25
  • 1
    $\begingroup$ I am not voting to reopen - the homework vote to close is not just used for homework (biology.stackexchange.com/help/how-to-ask), but those showing poor research effort. You ask for a "mathematical way to calculate the IC50/EC50" - the script you've posted doesn't really show an attempt of self help, try finding the calculations for yourself, then show the maths - not a computer script, and tell us what you don't get. Also as it stands the question is only accessible to those familiar with excel macros $\endgroup$
    – rg255
    Commented Jul 23, 2015 at 11:49

1 Answer 1


As I understand, what you really asking is:

What is the mathematical model one can use to fit drug lethality/efficiency data?

With answer to that you can go to stackexchange and bug them for fitting solution in language of your choice. However, answer to that is quite complicated, it depends on your system and experiment. And also, how well you want to model your observation.

I'd suggest start with something like 4-parameter sigmoid, which in your case will degrade to two-parameter sigmoid: LD50 (shift along X) and steepness (how fast you transition from life to death) with edge cases that are either 0 or 1.

Now, this paper discusses one model (4-parameter sigmoid). It looks roughly like $y=\frac{x}{1+e^{\alpha(x-LD50)}}$, where $\alpha$ is steepness parameter

Another way to do such fit is to use error function. That is an integral of gaussian distribution. I do like that approach (theoretically) because normal distribution is important in data analysis of independent observations, and many random values in biology behave normally.

Let me reiterate. You have to have a model for your data in the first place. Maybe lethality drops down a little after LD50. Maybe you have some other weird stuff. What you can do is to pick a model and then see how well it describes your data.

  • $\begingroup$ The drfit and drc packages in R provide tools for such fitting of dose-response curves. Working with these R tools may be more efficient than writing new code or trying to force Excel to do things it really isn't meant to do. $\endgroup$
    – EdM
    Commented Jul 24, 2015 at 13:43
  • $\begingroup$ @EdM It is not about what software you are using to implement the model. What is important is to understand or formulate a model and aaaaaa is talking about an example model. $\endgroup$
    Commented Jul 25, 2015 at 5:40
  • $\begingroup$ @WYSIWYG : agreed, but the OP seemed so focused on the implementation that I hoped that knowing tools were available would allow more focus on the model. $\endgroup$
    – EdM
    Commented Jul 25, 2015 at 13:39
  • $\begingroup$ that is useful, also those pages discuss models. $\endgroup$ Commented Jul 25, 2015 at 15:22

Not the answer you're looking for? Browse other questions tagged .