如何在R绘制的剂量反应曲线中获取指定Y值对应的X轴剂量?
降解实验剂量反应曲线:Y=50对应X值的计算问题
我用R绘制降解实验的剂量反应曲线,想要像GraphPad PRISM那样获取底物剩余百分比为50%(Y=50)对应的X轴剂量浓度值。目前用代码预测的拐点EC50和GraphPad结果一致,但GraphPad给出Y=50对应的X值是195.391 nM,而我用drc包的ED()函数得到的还是拐点EC50值(129.998 nM)。所有响应值已基于DMSO归一化到100%,请问哪里操作错了?
使用R计算的代码及输出
library(drc) df <- data.frame( x = c(1,3.2,10,32,100,320,1000,3200,10000113.891531792259), y = c(108.505,119.305,98.01,89.275,65.305,39.87,21.95,7.32,8.695)) model <- drm(y~x, data=df, fct=LL.4(names = c("Slope", "Lower Limit", "Upper Limit", "EC50 at IP"))) plot(model, type="all", col = "blue", ylab = "% Remaining", xlab = "Concentration (nM)") axis(2, at = seq(0, 120, 5), labels = F) axis(1, at = seq(100, 1000, 100), labels = F) summary(model)
输出:
Model fitted: Log-logistic (ED50 as parameter) (4 parms) Parameter estimates: Estimate Std. Error t-value p-value Slope:(Intercept) 0.82802 0.16507 5.0160 0.004049 ** Lower Limit:(Intercept) 3.47712 6.15672 0.5648 0.596627 Upper Limit:(Intercept) 115.18939 5.38586 21.3874 0.000004144 *** EC50 at IP:(Intercept) 129.99815 32.25388 4.0305 0.010017 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 5.507845 (5 degrees of freedom)
ED(model, 50)
输出:
Estimated effective doses Estimate Std. Error e:1:50 129.998 32.254
问题原因与解决方案
核心差异
你使用的LL.4模型是4参数log-logistic模型,其中的EC50参数是曲线拐点处的浓度(斜率最大点对应的X值);而GraphPad中Y=50对应的X值,是响应值达到绝对数值50%时的浓度,两者定义完全不同:
ED(model, 50)默认计算的是「相对于基线(Lower Limit)的有效剂量」,即(Y - Lower Limit)/(Upper Limit - Lower Limit) = 50%对应的X- 你需要的是「Y=50」这个绝对剩余百分比对应的X
正确计算代码
直接基于拟合模型的参数解方程,求解Y=50对应的X值:
# 提取模型拟合参数 params <- coef(model) slope <- params[1] lower_limit <- params[2] upper_limit <- params[3] ec50_inflection <- params[4] # 代入4参数log-logistic公式解方程 x_y50 <- exp( log(ec50_inflection) + (1/slope)*log( (upper_limit - lower_limit)/(50 - lower_limit) - 1 ) ) x_y50
运行后会得到与GraphPad一致的结果(约195.39 nM)。
额外注意
你的数据中x向量最后一个值为10000113.891531792259,明显是输入错误(推测应为10000),该错误会影响模型拟合精度,建议修正后重新拟合模型再计算。
内容的提问来源于stack exchange,提问作者RanonKahn
相关产品推荐
相关产品推荐

