Nonmem报错及经验分享

我发现一个问题,同样的参数定义写在$DES里面和写在$ERROR里面,输出到tab的数值不一样,比如:
$DES里面定义: CA = A(2)/VSR1000/MW1
$ERROR里面定义:CA_TAB = A(2)/VSR
1000/MW1

输出到$TABLE里面CA≠CA_TAB,我查了下:

  1. DES 主要是 ODE 求解区域,里面的变量是在 ODE solver 推进时间时计算的,不保证在每一个数据记录、尤其是同一 TIME 下的 dosing/event record 上重新计算。这时候要注意NM会报一个warning: (WARNING 48) DES-DEFINED ITEMS ARE COMPUTED ONLY WHEN EVENT TIME
    INCREASES. E.G., DISPLAYED VALUES ASSOCIATED WITH THE FIRST EVENT RECORD
    OF AN INDIVIDUAL RECORD ARE COMPUTED WITH (THE LAST ADVANCE TO) AN EVENT
    TIME OF THE PRIOR INDIVIDUAL RECORD.
  2. $ERROR 是按数据记录执行的,所以用当前记录对应的房室状态,所以应该是用$ERROR的东西输出出去

相差有多大呢?可以看下面这张图,左边是$ERROR中输出数据画的图,右边是$DES定义参数输出画的图,两者在0时刻的浓度相差非常大,即使我在$PK里面规定了A_0(2) = 0,将房室0时刻房室里面为0了,所以明显右边的曲线就不对,这是为什么我会去找这个问题的原因。

1 个赞

NONMEM报错分享2:

原报错信息:

AN ERROR WAS FOUND IN THE CONTROL STATEMENTS.

414 $TABLE: NOPRINT OPTION REQUIRED WITH MORE THAN 12 ITEMS.

Not restarting this model.

F:1 ..

execute done

解决办法:

NONMEM 在 $TABLE 超过 12 个 item 时,要求显式加:NOPRINT

因为我之前的写法是:

$TABLE REP ID TIME DV CPS_TAB CAS_TAB CTP_TAB CTA_TAB CMT EVID MDV DOSE CYCLE IPRED PRED NOHEADER NOAPPEND FILE=sim19

输出了15个参数,而如果超过12个参数的时候,就需要改成下面这种:

$TABLE REP ID TIME DV CPS_TAB CAS_TAB CTP_TAB CTA_TAB CMT EVID MDV DOSE CYCLE IPRED PRED
NOPRINT NOHEADER NOAPPEND FILE=sim19

NONMEM报错分享3:

准确的说,这也不是一个报错,是NONMEM内置的默认问题,先说下怎么发现的吧

我的原始数据集是来自医院的HIS系统,ID很容易超过5位数,所以这时候我在写$TABLE的时候还是默认的,只加了

$TABLE ID TIME TADTIME DV PRED IPRED CWRES CIWRES ONEHEADER NOPRINT NOAPPEND FILE=SDTAB1

这就会导致一旦你的ID个数超过5位,比如6位数的时候,由于NONMEM 7.5对于$TABLE的默认格式是FORMAT=s1PE11.4,也就是用科学计数法保留小数点后4位数,如果你是6位数,具体的意义就在于:

  1. s:字段之间用 space 分隔
  2. 1P:科学计数法的 scale factor
  3. E:科学计数法
  4. w=11:整个数字占 11 个字符
  5. d=4:小数点后 4 位

则很容易四舍五入,举个例子:

ID = 1234567,那么$TABLE里面就会显示位1.2346E6这样显示,就会导致sdtab里面的ID值和原始数据集里面的ID值对不上的情况

怎么去解决呢,也很简单,可以看下NONMEM的官方手册里面的,每一个$TABLE后面写一个FORMAT就行,但是ID最多是14位数字