Strange ED50 with drc

747 Views Asked by At

I am trying to estimate IC50 values with the drc package. Plotting the model works fine. But when I use the ED I get unreasonable results.

Plot of DRC Modell

In my understanding the IC50 should by around the inflection point of the model. In this case I estimate around 0.25. But the ED calculate it as -1.43. Do I use ED wrong or did I missed something?

Thanks

Minial example with data:

# Create Data
Conc <- c(0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000)
Response <- c(167.11246201, 53.96960486, 128.42857143, 43.67173252, 4.51975684, 0.34042553, 120.10334347, 101.14589666, 155.17629179, 35.31306991, 8.56534954, 1.71124620, 146.34954407, 108.50151976, 163.60182371, 64.70212766, 2.88145897, 0.50759878, 82.92401216, 109.80547112, 116.69300912, 26.85410334, 3.01519757, 0.37386018, 87.06990881, 84.82978723, 118.36474164, 27.52279635, 2.34650456, 0.10638298, 89.47720365, 109.47112462, 85.43161094, 17.69300912, 2.31306991, 0.07294833)

df <- data.frame(Conc = Conc, Response = Response)


# Make Modell
library(drc)

drm <- drm(Response ~ Conc, data = df, fct = LL2.4())

plot(drm, main = paste("ED(drm, 50):", ED(drm, 50)[[1]]))


# Calculate ED50 (IC50)
ED(drm, 50)
1

There are 1 best solutions below

0
On BEST ANSWER

I hope it is not too late for this response.

Because you called LL2.4() without fixing c and d parameters, the algorithm comes out with estimates for them; therefore, the mid-point between the estimated c and d needs to be calculated.

I do not know why, but when you add logBase=exp(1) to the call of ed, the results align with your expectation.

Conc = c(0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000, 0.03125, 0.06250, 0.12500, 0.25000, 0.50000, 1.00000)
Response = c(167.11246201, 53.96960486, 128.42857143, 43.67173252, 4.51975684, 0.34042553, 120.10334347, 101.14589666, 155.17629179, 35.31306991, 8.56534954, 1.71124620, 146.34954407, 108.50151976, 163.60182371, 64.70212766, 2.88145897, 0.50759878, 82.92401216, 109.80547112, 116.69300912, 26.85410334, 3.01519757, 0.37386018, 87.06990881, 84.82978723, 118.36474164, 27.52279635, 2.34650456, 0.10638298, 89.47720365, 109.47112462, 85.43161094, 17.69300912, 2.31306991, 0.07294833)

df = data.frame(Conc = Conc, Response = Response)

ll24fit = drm(Response ~ Conc, data = df, fct = LL2.4())

# Calculate ED50 (IC50)
coefValues = summary(ll24fit)[["coefficients"]]
midPoint = mean(coefValues[2:3])
ed50 = ED(ll24fit, 50,logBase=exp(1), interval="delta")
plot(ll24fit, log="", main = paste("ED(drm, 50):", ED(ll24fit, 50, logBase=exp(1))[[1]]))
abline(v=ed50[1], col="#666666", lty="longdash", lwd=0.75)
abline(h=midPoint, col="#666666", lty="longdash", lwd=0.75)

enter image description here