一、控制文件的总体逻辑
`NONMEM` 控制文件的核心任务,是把药代动力学假设翻译成一套可估计、可诊断、可扩展的模型表达。对已经能够独立跑模型的读者来说,真正需要进一步掌握的,是控制文件的结构逻辑、各模块的职责分工,以及从一室到三室、从静脉到口服时,哪些部分保持不变,哪些部分需要随结构变化而调整。
二、各模块的作用
$PROB 用于说明模型名称和特征;$INPUT 定义数据列名;$DATA 指定数据文件;$SUBROUTINES 选择求解器;$MODEL 声明房室结构;$PK 定义典型值、个体值和协变量;$DES 写微分方程;$ERROR 写观测误差;$THETA/$OMEGA/$SIGMA 分别定义固定效应、个体间变异和残差误差。
如果把整个控制文件看成一条流水线,这些模块就是按顺序串联起来的:数据进入,结构建立,参数赋值,误差叠加,最后由估计过程找到最优解。
写控制文件时,最容易出问题的地方往往不是某个公式本身,而是事件编码、房室映射和单位是否统一。
三、一室模型
一室模型是所有复杂模型的起点。它适用于药物分布相对简单,或者数据并不支持更复杂结构的场景。静脉一室模型和口服一室模型的差别,主要在于是否需要吸收过程。
静脉一室模型
$PROB IV one-compartment model
$INPUT ID TIME AMT DV EVID MDV CMT
$DATA data.csv IGNORE=@
$SUBROUTINES ADVAN1 TRANS2
$PK
CL = THETA(1)*EXP(ETA(1))
V = THETA(2)*EXP(ETA(2))
S1 = V
$ERROR
IPRED = F
Y = IPRED*(1+EPS(1))
$THETA
(0, 5)
(0,50)
$OMEGA
0.1
0.1
$SIGMA
0.04
这版模型最适合做数据核查,也常作为后续二室、三室模型的起点。
口服一室模型比静脉模型多出一个吸收过程。若峰前采样不足,`KA` 往往比 `CL` 和 `V` 更难稳定估计。
四、二室模型
二室模型适用于存在明显分布相的药物。它的核心是中央室和外周室之间的交换。若一室模型不能同时解释早期快速下降和末端缓慢下降,二室模型通常更合理。
口服二室模型
$PROB Oral two-compartment model
$INPUT ID TIME AMT DV EVID MDV CMT
$DATA data.csv IGNORE=@
$SUBROUTINES ADVAN4 TRANS4
$PK
CL = THETA(1)*EXP(ETA(1))
V1 = THETA(2)*EXP(ETA(2))
KA = THETA(3)*EXP(ETA(3))
Q = THETA(4)*EXP(ETA(4))
V2 = THETA(5)*EXP(ETA(5))
S2 = V1
$ERROR
IPRED = F
Y = IPRED*(1+EPS(1))
$THETA
(0, 5)
(0,50)
(0, 1)
(0,10)
(0,100)
$OMEGA
0.1
0.1
0.1
0.1
0.1
$SIGMA
0.04
口服二室是临床药代分析中最常见的实战模型之一,但它也最容易出现参数混淆,尤其是 `KA`、`Q` 和 `V2`。如果早期和末端数据不足,模型往往“能跑”却不一定可辨识。
五、三室模型
三室模型用于描述更复杂的分布过程。它的优势在于更灵活,但代价是参数更多、可辨识性更差、对数据质量要求更高。通常只有在二室模型仍不足以解释数据时才考虑上三室。
静脉三室模型
$PROB IV three-compartment model
$INPUT ID TIME AMT DV EVID MDV CMT
$DATA data.csv IGNORE=@
$SUBROUTINES ADVAN11 TRANS4
$PK
CL = THETA(1)*EXP(ETA(1))
V1 = THETA(2)*EXP(ETA(2))
Q2 = THETA(3)*EXP(ETA(3))
V2 = THETA(4)*EXP(ETA(4))
Q3 = THETA(5)*EXP(ETA(5))
V3 = THETA(6)*EXP(ETA(6))
S1 = V1
$ERROR
IPRED = F
Y = IPRED*(1+EPS(1))
$THETA
(0, 5)
(0,50)
(0,10)
(0,20)
(0,10)
(0,30)
$OMEGA
0.1
0.1
0.1
0.1
0.1
0.1
$SIGMA
0.04
口服三室模型
$PROB Oral three-compartment model
$INPUT ID TIME AMT DV EVID MDV CMT
$DATA data.csv IGNORE=@
$SUBROUTINES ADVAN12 TRANS4
$PK
CL = THETA(1)*EXP(ETA(1))
V2 = THETA(2)*EXP(ETA(2))
KA = THETA(3)*EXP(ETA(3))
Q3 = THETA(4)*EXP(ETA(4))
V3 = THETA(5)*EXP(ETA(5))
Q4 = THETA(6)*EXP(ETA(6))
V4 = THETA(7)*EXP(ETA(7))
S2 = V2
$ERROR
IPRED = F
Y = IPRED*(1+EPS(1))
$THETA
(0, 5)
(0,50)
(0, 1)
(0,10)
(0,20)
(0,10)
(0,30)
$OMEGA
0.1
0.1
0.1
0.1
0.1
0.1
0.1
$SIGMA
0.04
三室模型的关键不只是“多一个外周室”,而是模型复杂度显著提高之后,数据支持、初值、参数相关性和诊断的重要性都会同步上升。
六、实战判断:什么时候加复杂度,什么时候停手
复杂度不是越高越好,而是越高越要谨慎。判断是否继续加室、加 `Tlag` 或加协变量,最重要的不是个人偏好,而是数据支持程度。
先看数据
峰前不足时,`KA` 和 `Tlag` 很容易混;末端不足时,`Q` 和 `V2/V3` 常常不稳。
先看结构,再看协变量
协变量不是救结构模型的工具。先把结构、残差和 IIV 理顺,再考虑解释个体差异。
不要只看 OFV
OFV 下降不等于模型更好。参数合理性、标准误、`CWRES`、ETA 收缩率和协方差同样重要。
先保守,再扩展
从核心参数开始放 IIV,再根据诊断逐步加复杂度,能让你知道每一步改动带来了什么。
七、经典协变量建模
协变量建模的目标不是单纯让 `OFV` 下降,而是让参数解释更合理、更稳定、更可推广。体重、年龄、肾功能、肝功能、性别、食物状态和合并用药,都是常见候选,但并不意味着都应当进入最终模型。
体重
体重是最经典也最常见的协变量。清除类参数常用 0.75 的异速生长指数,体积类参数常用 1.0:
CL = TVCL*(WT/70)**0.75*EXP(ETA(1))
V1 = TVV1*(WT/70)**1.0*EXP(ETA(2))
对于 `Q` 和 `V2`,是否加入体重协变量要更谨慎,最好有机制和数据双重支持。
协变量判断原则
- 有生理或临床机制意义。
- 加入后参数稳定性没有明显变差。
- 能解释个体差异,而不是单纯“凑显著”。
- 不会引入严重共线性。
- 在诊断和外部验证中表现合理。
八、模型诊断与常见报错排查
模型是否“能跑”和模型是否“可信”是两件不同的事。诊断要关注收敛、参数合理性、协方差、`CWRES`、`ETA shrinkage` 和参数相关性。
重点看什么
- 是否成功收敛,目标函数是否稳定。
- 参数是否落在边界上,标准误是否过大。
- `CWRES` 是否随机分布,是否存在时间趋势。
- `ETA shrinkage` 是否过高,尤其是 `KA`、`Q`、`V2/V3`。
- 协方差步骤是否成功,是否提示参数相关性过强。
常见问题
不收敛
通常先查初值、模型复杂度、数据支持和协变量数量,再考虑调整估计方法。
协方差失败
往往说明参数不可辨识或相关性过强,不要只重复跑一次,应回到模型结构本身。
参数跑边界
通常意味着这个参数没有被数据充分支持,或者边界和初值设得不合适。
残差图有趋势
常提示结构模型、残差模型或协变量模型还没解释到位,可能需要回头简化或重建。
九、结语
`NONMEM` 控制文件的经典写法,本质上是在用固定语法表达药代动力学假设。结构模型决定药物如何在体内移动,`ETA` 描述个体间差异,`EPS` 描述观测误差,协变量模型解释可识别的个体差别,而诊断则决定模型是否真正站得住。
对已经会跑模型的读者而言,真正需要建立的不是模板记忆,而是判断能力:什么时候该加室,什么时候该加协变量,什么时候该继续复杂化,什么时候该停在足够好的模型上。

文章评论