Dear NMusers,
I'm seeking inputs/advice on some M3 related questions. Any comments and
suggestions would be appreciated.
I have some Phase 1 data on a drug, which I want to model with a M3
method. The LLQ is 10 and peak level is about 80 (it's a cytokine and
can't ask assay people to do a better job).
I'm using NONMEM 7, therefore, can use PHI function directly.
Below you can see my initial code (Code 1). I first modeled SIG as a
separate THETA(5). The estimated THETA(5) turned out to be 1.14E6.
Therefore, all the PREDs=0.5 with TYPE==2. I had to admire NONMEM because
it makes (LOQ-IPRE)/SIG close to zero and give me a politically golden
answer (Prob=0.5) on my LLQ data.
Since SIG represents the variance of F, in my second try, I set SIG=SD*SD
and modeled log-tranformed data, because I'm using exponential model on
the ERROR. The code is following the initial code (Code 2).
Here's my questions.
1. Is code 2 a theoretically correct approach? How is SIG generally
modeled based on your experience?
2. Currently, I only included one BLQ post Tmax. The rest were ignored
(MDV=1). If I include one BLQ timepoint before Tmax, the model won't run.
If I include every BLQ time points after Tmax, the model won't run. Is
this acceptable? What's the general practice?
3. What are the diagnostic tools for BLQ from the M3 method?
4. If I model SIG using all the data, and fix it in the subsequent runs,
which use the same code as Code 1 with SIG fixed, will this be acceptable?
Code 1:
$SUBROUTINES ADVAN2
$PK
MU_1=THETA(1)
MU_2=THETA(2)
MU_3=THETA(3)
MU_4=THETA(4)
SD=MU_4
KA=EXP(MU_1+ETA(1))
V=EXP(MU_2+ETA(2))
CL=EXP(MU_3+ETA(3))
K=CL/V
S2=V/1000
$ERROR
SIG=THETA(5)
LOQ=10
IPRE=F
IF(SIG==0) EXIT
DUM=(LOQ-IPRE)/SIG
CUMD=PHI(DUM)
IF(TYPE.EQ.1) THEN
F_FLAG=0
Y= F*EXP(SD*ERR(1))
ENDIF
IF(TYPE.EQ.2) THEN
F_FLAG=1
Y=CUMD
ENDIF
$THETA
-1.868;[KA]
11.9 ;[V]
10;[CL]
0.523;[SD]
0.2
$OMEGA
0.258
0.177
0.227
$SIGMA
1 FIX
$EST METHOD=COND LAP INTERACTION MAXEVAL=9999 PRINT=5 FILE=PK.M3.COND.ext
Code 2
$SUBROUTINES ADVAN2
$PK
MU_1=THETA(1)
MU_2=THETA(2)
MU_3=THETA(3)
MU_4=THETA(4)
SD=MU_4
SIG=SD*SD
KA=EXP(MU_1+ETA(1))
V=EXP(MU_2+ETA(2))
CL=EXP(MU_3+ETA(3))
K=CL/V
S2=V/1000; DOSE IN 1000 U, CONC in U, VOLUME IN mL
$ERROR
LOQ=LOG(10)
IF(F==0) THEN
IPRE=0
ELSE
IPRE=LOG(F)
ENDIF
IF(SIG==0) EXIT
DUM=(LOQ-IPRE)/SIG
CUMD=PHI(DUM)
IF(TYPE.EQ.1) THEN
F_FLAG=0
Y= LOG(F)+SD*ERR(1)
ENDIF
IF(TYPE.EQ.2) THEN
F_FLAG=1
Y=CUMD
ENDIF
$THETA
-1.868;[KA]
11.9 ;[V]
10;[CL]
0.523;[SD]
$OMEGA
0.258
0.177
0.227
$SIGMA
1 FIX
$EST METHOD=COND LAP INTERACTION MAXEVAL=9999 PRINT=5 FILE=PK.LOG.COND.ext
Sample Data for code 1:
Sample Data for code 2:
Best regards,
Xiao Hu (Shelley), Ph.D.
Scientist,
Development Pharmacokinetics & Disposition
Biogen Idec, Inc.
14 Cambridge Center
Cambridge, MA 02142
Phone: 617-679-3586
Fax: 617-679-3463
PKM3.csv
Description:
Binary data
PK_M3_log.csv
Description:
Binary data
Questions about M3
2 messages
2 people
Latest: Apr 29, 2010
Xiao Hu,
Please see comments inserted within your code examples below.
Regards,
Luann Phillips
Xiao Hu wrote:
> Dear NMusers,
>
> I'm seeking inputs/advice on some M3 related questions. Any comments and suggestions would be appreciated.
>
> I have some Phase 1 data on a drug, which I want to model with a M3 method. The LLQ is 10 and peak level is about 80 (it's a cytokine and can't ask assay people to do a better job).
>
> I'm using NONMEM 7, therefore, can use PHI function directly. Below you can see my initial code (Code 1). I first modeled SIG as a separate THETA(5). The estimated THETA(5) turned out to be 1.14E6. Therefore, all the PREDs=0.5 with TYPE==2. I had to admire NONMEM because it makes (LOQ-IPRE)/SIG close to zero and give me a politically golden answer (Prob=0.5) on my LLQ data.
>
> Since SIG represents the variance of F, in my second try, I set SIG=SD*SD and modeled log-tranformed data, because I'm using exponential model on the ERROR. The code is following the initial code (Code 2).
>
> Here's my questions.
>
> 1. Is code 2 a theoretically correct approach? How is SIG generally modeled based on your experience? 2. Currently, I only included one BLQ post Tmax. The rest were ignored (MDV=1). If I include one BLQ timepoint before Tmax, the model won't run. If I include every BLQ time points after Tmax, the model won't run. Is this acceptable? What's the general practice?
>
> 3. What are the diagnostic tools for BLQ from the M3 method?
>
> 4. If I model SIG using all the data, and fix it in the subsequent runs, which use the same code as Code 1 with SIG fixed, will this be acceptable?
>
> Code 1:
> $SUBROUTINES ADVAN2
> $PK
> MU_1=THETA(1)
> MU_2=THETA(2)
> MU_3=THETA(3)
> MU_4=THETA(4)
> SD=MU_4
> KA=EXP(MU_1+ETA(1))
> V=EXP(MU_2+ETA(2))
> CL=EXP(MU_3+ETA(3))
> K=CL/V
> S2=V/1000
> $ERROR
*******SIG = SD of variance which is defined as SD=MU_4 above
******* so I think you should have SIG=MU_4 or SIG=SD
******* instead of THETA(5)
******* Your code was using a separate estimate of variance for the
LOQ concentrations than for the > LOQ concentrations.
References show using the same variance for both types.
> SIG=THETA(5)
> LOQ=10
> IPRE=F
> IF(SIG==0) EXIT
*****I would move the calculations for DUM and CUMD inside the
IF statement for TYPE.EQ.2 to prevent unnecessary calculations.
****DUM = (LOQ-IPRE) / SQRT(Variance)
Since you are using a exponential error model which is equivalent
to the constant CV error model (Y=F+F*ERR) in NM, the SQRT(variance)
would be F*SIG so DUM=(LOQ-IPRE)/(F*SIG)
> DUM=(LOQ-IPRE)/SIG
> CUMD=PHI(DUM)
> IF(TYPE.EQ.1) THEN
> F_FLAG=0
> Y= F*EXP(SD*ERR(1))
> ENDIF
> IF(TYPE.EQ.2) THEN
> F_FLAG=1
> Y=CUMD
> ENDIF
> $THETA
> -1.868;[KA]
> 11.9 ;[V]
> 10;[CL]
>
> 0.523;[SD] 0.2
>
> $OMEGA
>
> 0.258 0.177
>
> 0.227
> $SIGMA
> 1 FIX
>
> $EST METHOD=COND LAP INTERACTION MAXEVAL=9999 PRINT=5 FILE=PK.M3.COND.ext
>
> Code 2
> $SUBROUTINES ADVAN2
> $PK
> MU_1=THETA(1)
> MU_2=THETA(2)
> MU_3=THETA(3)
> MU_4=THETA(4)
> SD=MU_4
> SIG=SD*SD
> KA=EXP(MU_1+ETA(1))
> V=EXP(MU_2+ETA(2))
> CL=EXP(MU_3+ETA(3))
> K=CL/V
> S2=V/1000; DOSE IN 1000 U, CONC in U, VOLUME IN mL
> $ERROR
> LOQ=LOG(10)
*****IF F=0 then LOG(F)= -Infinity so you probably don't want
to change IPRE=LOG(0) to 0. LOG(F)=0 corresponds to F=1.
You may want to try IPRE= -10 or -20 instead.
> IF(F==0) THEN
> IPRE=0
> ELSE
> IPRE=LOG(F)
> ENDIF
> IF(SIG==0) EXIT
*****In this case because the error model becomes additive,
DUM=(LOQ-IPRE)/SIG is correct.
> DUM=(LOQ-IPRE)/SIG
> CUMD=PHI(DUM)
> IF(TYPE.EQ.1) THEN
> F_FLAG=0
> Y= LOG(F)+SD*ERR(1)
> ENDIF
> IF(TYPE.EQ.2) THEN
> F_FLAG=1
> Y=CUMD
> ENDIF
> $THETA
> -1.868;[KA]
> 11.9 ;[V]
> 10;[CL]
>
> 0.523;[SD] $OMEGA 0.258 0.177
>
> 0.227
> $SIGMA
> 1 FIX
> $EST METHOD=COND LAP INTERACTION MAXEVAL=9999 PRINT=5 FILE=PK.LOG.COND.ext
>
> Sample Data for code 1:
> Sample Data for code 2:
>
> Best regards,
>
> Xiao Hu (Shelley), Ph.D.
> Scientist,
> Development Pharmacokinetics & Disposition
> Biogen Idec, Inc.
> 14 Cambridge Center
> Cambridge, MA 02142
> Phone: 617-679-3586
> Fax: 617-679-3463