Re: [NMusers] Time varying volume of distribution implementation

From: Alison Boeckmann <alisonboeckmann_at_fastmail.fm>
Date: Fri, 13 May 2016 12:39:04 -0700

The code cannot be used when any WT values are missing.
In order to interpolate appropriately in $DES, WT should be present
on every event record.
$PK sees only the current and previous record.
If WT is missing from the current record, $PK has no way of knowing
what WT will be on the next record.

The code in NONMEM 7.3 help file INFN_INTERPOLATION EXAMPLE 2
(infn2.exa)
can be used to fill in missing WT values in the event records.
The idea is that the $INFN block does two passes through the data set.
After the first pass, it knows what the WT values are on all the event
records, so that it can interpolate to fill in a missing WT.

The finedata utility (fine1.exa) can also be used to fill in
the missing values, and performs interpolation if necessary.

BTW, the code for $PK and $DES will be a new help item in
Nonmem 7.4 INTERPOLATION IN $DES (desinterp.exa)

On Wed, May 11, 2016, at 04:18 AM, SIMON Nicolas wrote:
> Dear Alison,
>
> Perhaps I miss something but is it possible to use your code for
> interpolating WT when some WT are missing in the dataset for an
> individual?
>
> Best regards
> Nicolas
>
>
> -----Message d'origine-----
> De : owner-nmusers_at_globomaxnm.com [mailto:owner-nmusers_at_globomaxnm.c=
om]
> De la part de Alison Boeckmann
> Envoyé : mardi 10 mai 2016 20:06
> À : Nick Holford; nmusers; thorsten.lehr_at_mx.uni-saarland.de
> Objet : Re: [NMusers] Time varying volume of distribution implementa=
tion
>
> Dear Nick, Thorsten and others,
>
> Nick's example is very good.
> He models WT so that it increases linearly with TIME:
> DWT_T=WT_ZERO + WT_ALPHA*T
> where WT_ZERO and WT_ALPHA are thetas.
>
> It occurs to me that some users may not have a model for WT vs. T, but
> have only observed values of WT at fixed points.
> In this case, WT can be interpolated within the $DES block.
>
> Here is a small example of code that can be used to interpolate WT
> between values that are recorded on the data records.
> All the code in $PK to compute OLDTIME and OLDWT and SLOPE, and the code
> for D_WT in $DES, could be copied to user's control stream.
> Other code (for integrating D_WT in $DES and the analytic solution in
> $ERROR)
> is for testing and would not be part of the user's control stream.
>
> Here is the control file:
>
> $PROB INTERPOLATE WT IN $DES
> ; this example shows how to interpolate WT in $DES.
> ; it is assumed that WT is recorded on every data record.
> ; As a test, the value of D_WT in $DES is integrated to obtain AUC of WT
> VS. T ; This is also calculated analytically in $ERROR.
>
> $INPUT ID TIME WT DV
> $DATA desinterp.dat
>
> $SUBROUTINES ADVAN6 TOL=5
> $MODEL
> COMP=(AUC_WT DEFOBS)
>
> $PK
> ; initialize OLDTIME and OLDWT
> IF (NEWIND.LE.1) THEN
> OLDTIME=TIME
> OLDWT=WT
> ENDIF
>
> ; calculate the slope for $DES
> DELTA_TIME=TIME-OLDTIME
> DELTA_WT=WT-OLDWT
>
> IF (DELTA_TIME>0) THEN
> SLOPE=DELTA_WT/DELTA_TIME
> ELSE
> SLOPE=0.
> ENDIF
>
> ; save wt and time for next $PK record
> OLDTIME=TIME
> OLDWT=WT
>
> $DES
> D_WT=OLDWT+SLOPE*(T-OLDTIME) ; D_WT is the value of WT at time T
> DADT(1)=D_WT ; compute AUC of D_WT as a test
>
> $ERROR
> Y=F+ETA(1)+EPS(1)
>
> ; Compute analytic solution as a test.
> ; Does not use compartment amounts.
> ; Uses only the values of WT and TIME on event records.
> ; Suppose WT vs T looks like this:
> ;
> ;
> ; WT
> ; |
> ; | w3 w4
> ; | w2 w5
> ; | w1
> ; |
> ; --------------------------------> TIME
> ; t1 t2 t3 t4 t5
> ;
> ; at t2, the contribution to the sum is
> ; the rectangle w1 x (t2-t1)
> ; plus the triangular piece
> ; (w2-w1)/(t2-t1) / 2
> ;
> ; w2
> ; /|
> ; / |
> ; /__|
> ; w1 |
> ; | |
> ; | |
> ; ------------
> ; t1 t2
> IF (NEWIND.LE.1) THEN
> PREV_WT=WT ; Initialize WT from previous data record
> SUM=0
> ELSE
> SUM=SUM+PREV_WT*DELTA_TIME+DELTA_WT*DELTA_TIME/2
> ENDIF
> PREV_WT=WT ; save WT from previous data record
>
> $OMEGA 1
> $SIGMA 1
>
> $TABLE ID TIME WT PRED=AUC_WT SUM FILE=desinterp.tbl NOPRINT NOAPPEN=
D ;
> The following two values should always be equal:
> ; PRED (which is the AUC of WT obtained by integrating WT) ; SUM (which
> is the analytic solution) computed in $ERROR
>
> Here is the data file for the first subject. Note that WT sometimes is
> constant and sometimes decreases:
> 1 0. 10 0
> 1 1. 20 0
> 1 2. 35 0
> 1 2. 35 0
> 1 4. 45 0
> 1 5. 40 0
>
> Here is the table file:
> TABLE NO. 1
> ID TIME WT AUC_WT SUM
> 1.0000E+00 0.0000E+00 1.0000E+01 0.0000E+00 0.0000E+00
> 1.0000E+00 1.0000E+00 2.0000E+01 1.5000E+01 1.5000E+01
> 1.0000E+00 2.0000E+00 3.5000E+01 4.2500E+01 4.2500E+01
> 1.0000E+00 2.0000E+00 3.5000E+01 4.2500E+01 4.2500E+01
> 1.0000E+00 4.0000E+00 4.5000E+01 1.2250E+02 1.2250E+02
> 1.0000E+00 5.0000E+00 4.0000E+01 1.6500E+02 1.6500E+02
>
> On Sat, Apr 23, 2016, at 01:43 AM, Nick Holford wrote:
> > Thorsten,
> >
> > Time varying V is no different from time varying CL (or any other
> > parameter). You should use the variable T in $DES, not TIME, in order
> > to have the time at the instant the DEQ solver evaluates $DES. T may
> > occur anywhere in the interval between the previous record TIME and
> > the current record TIME. TIME in $PK, $DES and $ERROR is the time at
> > the end of the $DES solution interval.
> >
> > The other thing that you may wish to do is to assign the random effect=
 
> > expression for V and CL in $PK so that you can estimate the random
> > variability after accounting for the fixed effect variability in WT.
> > An expression involving ETA() cannot be used in $DES so it has to be
> > assigned in $PK.
> >
> > e.g.
> >
> > $PK
> > POP_V=THETA(1)
> > POP_CL=THETA(2)
> > WT_ZERO=THETA(3)
> > WT_ALPHA=THETA(4)
> > PPV_V=EXP(ETA(1)) ; random effect for V (PPV_V=population parameter=
 
> > variability for V)
> > PPV_CL=EXP(ETA(2)) ; random effect for CLT (PPV_CL=population
> > parameter variability for CL)
> >
> > $DES
> > ;Variable names e.g. DWT_T are used in $DES because the same variable
> > names cannot be assigned in both $DES and in $ERROR
> >
> > DWT_T=WT_ZERO + WT_ALPHA*T ; fixed effect prediction of WT at T
> >
> > ; Biology requires V and CL must both be functions of WT
> > DGRP_V=POP_V*DWT_T/70
> > DV=DGRP_V*PPV_V ; "individual" V at T using random effect for V
> >
> > DGRP_CL=POP_CL*(DWT_T/70)**(3/4)
> > DCL=DGRP_CL*PPV_CL ; "individual" CL at T using random effect for CL
> >
> > DADT(1)= -DCL*A(1)/DV
> >
> > $ERROR
> >
> > WT_T=WT_ZERO + WT_ALPHA*TIME ; fixed effect prediction of WT at the
> > TIME of the current record
> >
> > GRP_V=POP_V*WT_T/70
> > GRP_CL=POP_CL*(WT_T/70)**(3/4)
> >
> > V=VT*PPV_V ; "individual" V at the TIME of the current record
> > CL=GRP_CL*PPV_CL ; "individual" CL at the TIME of the current record
> >
> > C=A(1)/V
> >
> > You may, of course, add random effects to WT_ZERO and/or WT_ALPHA as
> > well as having random effects on V and CL.
> >
> > BTW You should consider using the term postmenstrual age rather than
> > gestational age. Gestational age is a single value defined at the time=
 
> > of delivery according to the American Academy of Pediatrics (Engle et
> > al 2004). Postmenstrual age is a continuous variable which may be used=
 
> > during pregnancy and after birth to represent the biological age of
> > the fetus/child.
> >
> > Best wishes,
> >
> > Nick
> >
> > Engle WA. Age terminology during the perinatal period. Pediatrics.
> > 2004;114(5):1362-4.
> >
> >
> > On 22-Apr-16 23:34, Thorsten Lehr wrote:
> > >
> > > Dear NMusers,
> > >
> > > I'm modeling a compound where body weight has a known impact on the
> > > volume of distribution. This compound is investigated in pregnant
> > > women over a long period (from gestational age of 8 weeks until they=
 
> > > give birth). Consequently, the body weight changes over time and I
> > > have a decent formula to describe the individual body weight change.
> > > The PK model has to be coded by ODEs. Does anyone has experience how=
 
> > > to integrate a time varying volume of distribution if differential
> > > equations are used?
> > >
> > > Best regards
> > >
> > > Thorsten
> > >
> > > --
> > >
> > > Thorsten Lehr, PhD
> > > Junior Professor of Clinical Pharmacy Saarland University Campus C2
> > > 2
> > > 66123 Saarbrücken
> > > Germany
> > >
> > > Office: +49/681/302-70255
> > > Mobile: +49/151/22739489
> > > thorsten.lehr_at_mx.uni-saarland.de
> > > www.clinicalpharmacy.me
> >
> > --
> > Nick Holford, Professor Clinical Pharmacology Dept Pharmacology &
> > Clinical Pharmacology, Bldg 503 Room 302A University of Auckland,85
> > Park Rd,Private Bag 92019,Auckland,New Zealand
> > office:+64(9)923-6730 mobile:NZ+64(21)46 23 53 FR+33(6)62 32 46 72
> > email: n.holford_at_auckland.ac.nz
> > http://holford.fmhs.auckland.ac.nz/
> >
> > "Declarative languages are a form of dementia -- they have no memory
> > of events"
> >
> > Holford SD, Allegaert K, Anderson BJ, Kukanich B, Sousa AB, Steinman
> > A, Pypendop, B., Mehvar, R., Giorgi, M., Holford,N.H.G.
> > Parent-metabolite pharmacokinetic models - tests of assumptions and
> > predictions. Journal of Pharmacology & Clinical Toxicology. 2014;2(2):1=
023-34.
> > Holford N. Clinical pharmacology = disease progression + drug action.=
 
> > Br J Clin Pharmacol. 2015;79(1):18-27.
> >
>
>
> --
> Alison Boeckmann
> alisonboeckmann_at_fastmail.fm


--
  Alison Boeckmann
  alisonboeckmann_at_fastmail.fm
Received on Fri May 13 2016 - 15:39:04 EDT

This archive was generated by hypermail 2.3.0 : Fri Sep 27 2019 - 16:50:31 EDT