哪种方法是计算IC50的最佳方法

时间:2019-04-23 16:48:52

标签: r drc

我有这样的数据

df<- structure(list(Conc = c(0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 
0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 0.03125, 0.0625, 0.125, 
0.25, 0.5, 1, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 0.03125, 
0.0625, 0.125, 0.25, 0.5, 1, 0.03125, 0.0625, 0.125, 0.25, 0.5, 
1), 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.7112462, 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)), class = "data.frame", row.names = c(NA, 
-36L))

一旦我尝试设置参数而不知道我在做什么

library(drc)

fit <- drm(formula = Response ~ Conc, data = df,
               fct = LL.4(names=c("Slope","Lower Limit","Upper Limit", "EC50")))

一旦我让包裹为我选择它而又不知道它在做什么

fit2 <- drm(formula = Response ~ Conc, data = df, 
           fct = LL.4(names=c("Slope","Lower Limit","Upper Limit", "EC50")),
           lowerl = c(-Inf, 0, min(df$Response), 0), 
           upperl = c(Inf, min(df$Conc), max(df$Conc), Inf))

有人可以帮助我理解这一点吗?

然后我看到结果完全不同,而且我个人不知道选择参数的方式

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

1 个答案:

答案 0 :(得分:0)

通过在upperllowerl中设置限制,可以约束参数估计。此处fit2中“上限”参数的上限被设置为下限(请参见曲线为平线)。如果您将其调整为更接近所观察到的数据,则EC-50估算值将更接近fit

fit3 <- drm(formula = Response ~ Conc, data = df, 
            fct = LL.4(names=c("Slope","Lower Limit","Upper Limit", "EC50")),
            lowerl = c(-Inf, 0, min(df$Response), 0), 
            upperl = c(Inf, min(df$Conc), max(df$Response) - 10, Inf))

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

当我使用drc::drm()时,我很少设置这些限制。设置它们的唯一原因是,如果您对剂量响应的行为有先验/专业知识,而模型估计则违反了这一点。在这种情况下,如果您在上高原和下高原都有值,则默认参数会很好地估计EC-50。