NT50, EC50, IC50的计算
在药物研究中,经常涉及到 NT50、EC50、IC50 等概念。
NT50(half maximal neutralization titre)是达到一半生物效应的稀释倍数,数字高代表少量药物即可达到药效,因此该数值越高越好。NT50 常用于无法确定初始浓度的场景,例如表征血浆对某抗原的中和能力。
EC50/ED50(half maximal effect concentration/dose)是达到一半生物效应的浓度或剂量,越低越好。IC50/ID50(half maximal inhibitory concentration/dose)与之类似,也是越低越好,常用于描述药物的抑制效应,例如中和抗体对病毒入侵细胞的抑制,或小分子抑制剂对靶点的阻断。
IC50 案例
获得 NT50、EC50 或 IC50 的方法是高度相似的。以 IC50 为例,在不同给药浓度或稀释梯度下定量检测生物学效应(比如使用荧光定量),可获得类似的表格:
x
为浓度、y
为反应强度,c
代表反应下限、d
代表反应上限,e
代表 IC50
,b
代表 IC50
处的斜率。
有时我们通过阴性对照、阳性对照或逻辑推理,可以确定反应上下限的值。本次抗体的假病毒中和实验中,反应上限就是不加抗体的对照,数值是 3154763;反应下限就是 AbX 中和力很强、加的剂量也足够多,完全阻断病毒,荧光定量是 0。因此,c, d
这两个参数我们可以直接输入模型,拟合 e, b
即可。
实现拟合的工具也有很多,这里介绍最常用的两种:使用 R 语言、使用 Prism
使用 R 语言拟合
R 语言的 drc 包可以很方便地实现拟合、可视化,本文使用的版本是 R v4.2.3
和 drc v3.0
。首先将实验结果构建为数据帧
然后使用 drm
函数拟合。LL.4
代表四参数逻辑斯蒂模型,names
指定结果中参数显示的名称,不影响计算。fixed
允许我们输入已知参数
拟合完毕后,打印 m
即可获得 IC50 的值,或者你也可以调用 ED(m, 50)
获得(Effective Dose)。后者在需要如 IC80, IC90
等数值的时候很有用。
使用 plot(m)
,即可获得曲线的基本图像,像这样
如果你更愿意通过 ggplot
绘图,以获得更高的自由度,则需要先用 predict
函数,借助模型生成一些连续的 x,y
数值对(比如 100 对),保证曲线的平滑度
然后调用 ggplot
绘图
可以看到,drc
是不区分 IC50、EC50 还是 NT50 的。
使用 Prism 拟合
使用 Prism v10.2.1
,在欢迎页选择 CREATE-XY
,选择第一个 Y 选项,点击创建
粘贴数据到 X、Y(Group A)
依次选择 Analyze, Regression and Curves, Nonlinear Regression (Curve Fit)
选择数据集,保持默认的 Data1 即可,确认
选择模型,在 Dose-response -Inhibition
下,找到 [Inhibitor] vs. response -- Variable slope (four parameters)
。可见,Prism 严格区分了 IC50(Inhibition)、EC50(Stimulation),并且也区分 x 是原始值([Inhibitor]
)还是对数值(log(inhibitor)
)。
紧接着,在 Constrain 选项卡下,输入已知的 Top 和 Bottom 数值,点击确定
于是得到所需的各项数值。IC50 为 0.3167,与 R 语言的结果一致。另外也给出了拟合优度(Goodness of Fit),可以看到 R^2 为 0.91,说明拟合得不错。
可能你也好奇选择数学形式完全相同的 Dose-response -Stimulation
会怎样。结果是拟合错误,显示 Bad initial values
,EC50 随便给了个数值,且不会给出拟合优度。
最后一个问题,NT50 应该用 Dose-response -Stimulation
还是 Dose-response -Inhibition
?判断标准很简单:如果随 x 数值增加,y 数值减少,用 Inhibition
,否则用 Stimulation
数值稳定性问题
如下例,id1 遇 id2 数值很接近,id3 与 id4 很接近。然而,如果不限制 top
参数做拟合,在 Prism 得到的 50% titer 分别是 2112, ~8.993, 1406, ~1.387
,明显不对
这可能是因为 id2、id4 在 80、20 两个 titer 间数值差别过大,导致 top
的拟合出现问题,从而影响到 50% titer
解决方法有两个,第一是指定 top
参数的值。第二是调整 titer,使用 -\lg \frac {1} {titer},这会让 titer 值更平滑
总结
以上,我们介绍了 NT50、IC50、EC50 的概念,并以 IC50 为例,使用 R 语言和 Prism 分别进行了计算。
由于实验条件、上下限设置的不同,同一个药物的 IC50 略有差异是正常现象,但一般少有数量级的变化。
如果你需要更深入的了解,可以去看 drc
包的原始参考文献:Dose-Response Analysis Using R | PLOS ONE