Time-Varying Bioavailability on Zero-Order Infusion

4 messages 4 people Latest: Mar 16, 2018
Hi NONMEMers, Is there a good way to assign a time-varying bioavailabilty on a zero-order rate of infusion in NONMEM? The best I’ve been able to come up with is something like the below. It seems like something that should be easier than what I’m doing below (I adjusted it from the real example as I was typing it into the email—I could have introduced a bug in the process). And importantly, -9998 is well before any time in my database. (dosing into CMT=1 with an IV infusion) $MODEL COMP=(CENTRAL DEFDOSE DEFOBS) ; central COMP=(P1) ; peripheral 1 COMP=(P2) ; peripheral 2 $PK ; Normal stuff and ... ; Record the dosing time IF (NEWIND.LT.2) THEN TDOSE = -9999 DOSEEND = -9998 DOSE = -999 DOSERATE = 0 ENDIF IF ((EVID.EQ.1 .OR. EVID.EQ.4) .AND. RATE.GT.0) THEN TDOSE = TIME DOSEEND = TIME + AMT/RATE DOSERATE=RATE MTDIFF=1 ENDIF MTIME(1)=TDOSE MTIME(2)=DOSEEND F1 = 0 ; Bioavailability is zero so that the $DES block has full control over the rate. RATEADJTAU=THETA(10) RATEADJMAX=THETA(11) $DES ; Manually control the infusion RATEIN = 0 IF (MTIME(1).LE.T .AND. T.LE.MTIME(2)) THEN RATEADJCALC = RATEADJMAX * EXP(-(T – MTIME(1)) * RATEADJTAU) RATEIN = DOSERATE - RATEADJCALC ENDIF DADT(1) = RATEIN - K10*A(1) - K12*A(1) + K21*A(2) - K13*A(1) + K31*A(3) DADT(2) = K12*A(1) - K21*A(2) DADT(3) = K13*A(1) - K31*A(3) Thanks, Bill
Hi, I would suggest the following solution which should also work if you want to apply some covariate effect on bioavailability: * On the dataset side, set your RATE variable to -1 and store the actual infusion rates into another variable, eg IVRATE * On the model side: $PK ... ; assuming the IV infusion are made in compartment 1 F1 = <whatever time varying function> R1 = F1*IVRATE Voila, NONMEM should take care of the dosing in the background as usual. Sebastien
Quoted reply history
From: "Bill Denney" <[email protected]> To: "NMUsers" <[email protected]> Sent: Tuesday, March 13, 2018 8:58:41 PM Subject: [NMusers] Time-Varying Bioavailability on Zero-Order Infusion Hi NONMEMers, Is there a good way to assign a time-varying bioavailabilty on a zero-order rate of infusion in NONMEM? The best I’ve been able to come up with is something like the below. It seems like something that should be easier than what I’m doing below (I adjusted it from the real example as I was typing it into the email—I could have introduced a bug in the process). And importantly, -9998 is well before any time in my database. (dosing into CMT=1 with an IV infusion) $MODEL COMP=(CENTRAL DEFDOSE DEFOBS) ; central COMP=(P1) ; peripheral 1 COMP=(P2) ; peripheral 2 $PK ; Normal stuff and ... ; Record the dosing time IF (NEWIND.LT.2) THEN TDOSE = -9999 DOSEEND = -9998 DOSE = -999 DOSERATE = 0 ENDIF IF ((EVID.EQ.1 .OR. EVID.EQ.4) .AND. RATE.GT.0) THEN TDOSE = TIME DOSEEND = TIME + AMT/RATE DOSERATE=RATE MTDIFF=1 ENDIF MTIME(1)=TDOSE MTIME(2)=DOSEEND F1 = 0 ; Bioavailability is zero so that the $DES block has full control over the rate. RATEADJTAU=THETA(10) RATEADJMAX=THETA(11) $DES ; Manually control the infusion RATEIN = 0 IF (MTIME(1).LE.T .AND. T.LE.MTIME(2)) THEN RATEADJCALC = RATEADJMAX * EXP(-(T – MTIME(1)) * RATEADJTAU) RATEIN = DOSERATE - RATEADJCALC ENDIF DADT(1) = RATEIN - K10*A(1) - K12*A(1) + K21*A(2) - K13*A(1) + K31*A(3) DADT(2) = K12*A(1) - K21*A(2) DADT(3) = K13*A(1) - K31*A(3) Thanks, Bill
Hi Bill, I think the proposed original solution is the only one if you would like to implement it exactly. May be it can be approximated somehow? What is the real reason for this questions? What is the biology behind the time-variant IV bioavailability? Or what is the model mis-fit that you are trying to fix? Leonid
Quoted reply history
On 3/13/2018 9:16 PM, Sebastien Bihorel wrote: > Hi, > > I would suggest the following solution which should also work if you want to apply some covariate effect on bioavailability: * On the dataset side, set your RATE variable to -1 and store the actual infusion rates into another variable, eg IVRATE > > * On the model side: > $PK > ... > > ; assuming the IV infusion are made in compartment 1 > F1 = <whatever time varying function> > R1 = F1*IVRATE > > Voila, NONMEM should take care of the dosing in the background as usual. > > Sebastien > > ------------------------------------------------------------------------ > *From: *"Bill Denney" <[email protected]> > *To: *"NMUsers" <[email protected]> > *Sent: *Tuesday, March 13, 2018 8:58:41 PM > *Subject: *[NMusers] Time-Varying Bioavailability on Zero-Order Infusion > > Hi NONMEMers, > > Is there a good way to assign a time-varying bioavailabilty on a zero-order rate of infusion in NONMEM? The best I’ve been able to come up with is something like the below. It seems like something that should be easier than what I’m doing below (I adjusted it from the real example as I was typing it into the email—I could have introduced a bug in the process). And importantly, -9998 is well before any time in my database. > > (dosing into CMT=1 with an IV infusion) > > $MODEL > > COMP=(CENTRAL DEFDOSE DEFOBS) ; central > > COMP=(P1) ; peripheral 1 > > COMP=(P2) ; peripheral 2 > > $PK > > ; Normal stuff and ... > > ; Record the dosing time > > IF (NEWIND.LT.2) THEN > > TDOSE = -9999 > > DOSEEND = -9998 > > DOSE = -999 > > DOSERATE = 0 > > ENDIF > > IF ((EVID.EQ.1 .OR. EVID.EQ.4) .AND. RATE.GT.0) THEN > > TDOSE = TIME > > DOSEEND = TIME + AMT/RATE > > DOSERATE=RATE > > MTDIFF=1 > > ENDIF > > MTIME(1)=TDOSE > > MTIME(2)=DOSEEND > > F1 = 0 ; Bioavailability is zero so that the $DES block has full control over the rate. > > RATEADJTAU=THETA(10) > > RATEADJMAX=THETA(11) > > $DES > > ; Manually control the infusion > > RATEIN = 0 > > IF (MTIME(1).LE.T .AND. T.LE.MTIME(2)) THEN > > RATEADJCALC = RATEADJMAX * EXP(-(T – MTIME(1)) * RATEADJTAU) > > RATEIN = DOSERATE - RATEADJCALC > > ENDIF > > DADT(1) = RATEIN - K10*A(1) - K12*A(1) + K21*A(2) - K13*A(1) + K31*A(3) > > DADT(2) = K12*A(1) - K21*A(2) > > DADT(3) = K13*A(1) - K31*A(3) > > Thanks, > > Bill
I'll take a look at it.
Quoted reply history
On Tue, Mar 13, 2018, at 7:08 PM, Bill Denney wrote: > Hi Leonid, > > The biology behind it is that during a long (many day) infusion, there > appears to be adsorption to the infusion tubing and/or catheter. The real > model I'm developing is more complex in the adsorption part (there may be > saturable adsorption as shown with the dynamics in the first days), and I > want it to be accurate as a continuous time variant IV bioavailability > because I'm trying to predict different infusion rates and durations. > > The model mis-fit is both a dose-related apparent bioavailability change > (much simpler to implement than what is here) and a dose- and time-related > apparent change in bioavailability during the first portion of the dosing > due to the potential saturation of the adsorption. The kinetics after the > end of the infusion all appear to be linear over a moderate-to-large dose > range, so I don't think that it's more complex human biology. > > And for the current data set, the model runs quickly (it isn't that I'm > having to sit around forever for the solution). The technical question was > if there was some part of NONMEM that I didn't know related to controlling > infusion rates in the $DES block. (Feature request to Bob and Alison: Maybe > in NONMEM 7.5, the user could set R1 = -1 in $PK and have continuous control > of R1 in $DES-- generalized to include all compartments.) > > Thanks, > > Bill > > -----Original Message----- > From: Leonid Gibiansky <[email protected]> > Sent: Tuesday, March 13, 2018 9:34 PM > To: Sebastien Bihorel <[email protected]>; Bill Denney > <[email protected]> > Cc: NMUsers <[email protected]> > Subject: Re: [NMusers] Time-Varying Bioavailability on Zero-Order Infusion > > Hi Bill, > > I think the proposed original solution is the only one if you would like to > implement it exactly. May be it can be approximated somehow? What is the > real reason for this questions? What is the biology behind the time-variant > IV bioavailability? Or what is the model mis-fit that you are trying to fix? > > Leonid > > > > > On 3/13/2018 9:16 PM, Sebastien Bihorel wrote: > > Hi, > > > > I would suggest the following solution which should also work if you > > want to apply some covariate effect on bioavailability: > > * On the dataset side, set your RATE variable to -1 and store the > > actual infusion rates into another variable, eg IVRATE > > * On the model side: > > $PK > > ... > > > > ; assuming the IV infusion are made in compartment 1 > > F1 = <whatever time varying function> > > R1 = F1*IVRATE > > > > Voila, NONMEM should take care of the dosing in the background as usual. > > > > Sebastien > > > > ---------------------------------------------------------------------- > > -- > > *From: *"Bill Denney" <[email protected]> > > *To: *"NMUsers" <[email protected]> > > *Sent: *Tuesday, March 13, 2018 8:58:41 PM > > *Subject: *[NMusers] Time-Varying Bioavailability on Zero-Order > > Infusion > > > > Hi NONMEMers, > > > > Is there a good way to assign a time-varying bioavailabilty on a > > zero-order rate of infusion in NONMEM? The best I’ve been able to > > come up with is something like the below. It seems like something > > that should be easier than what I’m doing below (I adjusted it from > > the real example as I was typing it into the email—I could have > > introduced a bug in the process). And importantly, -9998 is well > > before any time in my database. > > > > (dosing into CMT=1 with an IV infusion) > > > > $MODEL > > > > COMP=(CENTRAL DEFDOSE DEFOBS) ; central > > > > COMP=(P1) ; peripheral 1 > > > > COMP=(P2) ; peripheral 2 > > > > $PK > > > > ; Normal stuff and ... > > > > ; Record the dosing time > > > > IF (NEWIND.LT.2) THEN > > > > TDOSE = -9999 > > > > DOSEEND = -9998 > > > > DOSE = -999 > > > > DOSERATE = 0 > > > > ENDIF > > > > IF ((EVID.EQ.1 .OR. EVID.EQ.4) .AND. RATE.GT.0) THEN > > > > TDOSE = TIME > > > > DOSEEND = TIME + AMT/RATE > > > > DOSERATE=RATE > > > > MTDIFF=1 > > > > ENDIF > > > > MTIME(1)=TDOSE > > > > MTIME(2)=DOSEEND > > > > F1 = 0 ; Bioavailability is zero so that the $DES block has full > > control over the rate. > > > > RATEADJTAU=THETA(10) > > > > RATEADJMAX=THETA(11) > > > > $DES > > > > ; Manually control the infusion > > > > RATEIN = 0 > > > > IF (MTIME(1).LE.T .AND. T.LE.MTIME(2)) THEN > > > > RATEADJCALC = RATEADJMAX * EXP(-(T – MTIME(1)) * RATEADJTAU) > > > > RATEIN = DOSERATE - RATEADJCALC > > > > ENDIF > > > > DADT(1) = RATEIN - K10*A(1) - K12*A(1) + K21*A(2) - K13*A(1) + > > K31*A(3) > > > > DADT(2) = K12*A(1) - K21*A(2) > > > > DADT(3) = K13*A(1) - > > K31*A(3) > > > > Thanks, > > > > Bill > > > > > -- Alison Boeckmann [email protected]