Re: [NMusers] Easier IOV modeling

From: Jeroen Elassaiss-Schaap (PD-value) <"Jeroen>
Date: Thu, 17 Jan 2019 11:27:33 +0100

Hi Sebastien,

Ok that settles it than: NMTRAN does not accept subscripts to ETA. I clearly=
 misread the nm73 guide: ”Subscripts may be used with user-defined v=
ariables that are declared to be arrays using the $ABBR DECLARE record, and a=
lso with certain reserved variables such as THETA”. It would be gre=
at if Bob Bauer or Alison Boeckman could revisit this for a next version. =


One can get a bit of that behavior using the following code (now tested):

$ABBR DECLARE OCC(3)
$ABBR DECLARE DOWHILE I
$ABBR DECLARE INTEGER IOCC
$PK
CALLFL=-2
IF(NEWIND<2)IOCC=1
IF(AMT>0 .and. TIME>0) IOCC=IOCC+1
 
I=1
DOWHILE (I<4)
  IF(I==IOCC) OCC(I)=1
  I=I+1
ENDDO
 
IOCE=OCC(1)*ETA(3) + OCC(2)*ETA(4) + OCC(3)*ETA(5)
CL=EXP(THETA(1)+ETA(1)+IOCE)

But this is not very elegant unfortunately. For a long number of occasions i=
t might perhaps be worthwhile.

Best,
Jeroen

http://pd-value.com
jeroen_at_pd-value.com
_at_PD_value
+31 6 23118438
-- More value out of your data!

> Op 16 jan. 2019 om 14:14 heeft Sebastien Bihorel <sebastien.bihorel_at_cognig=
encorp.com> het volgende geschreven:
>
> Hi Jeroen,
>
> In NONMEM 7.3, I actually tried a couple of variants using DECLARE and REP=
LACE before posting to NMusers and got error messages (see below; assumed th=
at there were 3 ETAs for IIV in various PK parameters).
>
> There might a trick though... at least I hope
>
>
> $ABBREVIATED REPLACE ETA(OCC_CL)=ETA(4,5,6)
>
> $PK
>
> CALLFL = -2
> OCC = 1
> ; some if conditions defining alternative values of OCC between 1 and 3
> ;...
>
> ETAOCC = OCC + 3
> CL = THETA(1)*EXP(ETA(1) + ETA(OCC_CL))
>
>
> AN ERROR WAS FOUND ON LINE 45 AT THE APPROXIMATE POSITION NOTED:
> $ABBREVIATED REPLACE ETA(OCC_CL)=ETA(4,5,6)
> X
> 635 $ABBR: IMPLIED SELECT VARIABLE IS NOT A DATA ITEM.
>
>
> ------------------------
>
> $ABBR DECLARE INTEGER OCC
> $ABBR DECLARE INTEGER ETAOCC
>
> $PK
>
> CALLFL = -2
> IF (NEWIND < 2) NDOSE = 0
> IF (AMT > 0 .AND. CMT == 1) THEN
> NDOSE = NDOSE + 1
> ENDIF
>
> OCC = 1
> ; some if conditions defining alternative values of OCC between 1 and 3
> ;...
>
> ETAOCC = OCC + 3
> CL = THETA(1)*EXP(ETA(1) + ETA(ETAOCC))
>
>
> AN ERROR WAS FOUND ON LINE 76 AT THE APPROXIMATE POSITION NOTED:
> CL = TVCL*EXP(ETA(1) + ETA(ETAOCC))
> X
> THE CHARACTERS IN ERROR ARE: ETA
> 484 SUBSCRIPT MUST BE AN INTEGER CONSTANT.
>
>
> ----- Original Message -----
> From: "Jeroen Elassaiss-Schaap (PD-value B.V.)" <jeroen_at_pd-value.com>
> To: "Sebastien Bihorel" <sebastien.bihorel_at_cognigencorp.com>, nmusers_at_glob=
omaxnm.com
> Sent: Wednesday, January 16, 2019 3:14:53 AM
> Subject: Re: [NMusers] Easier IOV modeling
>
> Hi Sebastien,
>
> Interesting notion, thanks. It should be possible from NM7.3 onwards
> using MOD or DECLARE as described in the sections just below the one you =

> referenced.
>
> With DECLARE it could look like this:
>
> $ABBR DECLARE INTEGER IOCC
> $PK
> CALLFL=-2
> IF (NEWIND < 2) IOCC=0
> IF (AMT > 0 .and. CMT==1) THEN
> IOCC = IOCC + 1
> ENDIF
> IF (IOCC>MAXOCC) IOCC = MAXOCC ; define MAXOCC in the dataset or in code=
 
> to prevent referencing more than defined in $OMEGA
> ...
> IOVCL = ETA( 1 + IOCC*3 ) ; first dose occasion will get assigned eta(4)=
 
> as below, than 7, 10 etc...
> CL = TVCL * EXP( ETA(1) + IOVCL )
>
>
> And using MOD on TIME, assuming regular nominal daily dosing, it could
> look like:
>
> $ABBR DECLARE INTEGER IOCC
> $PK
> IOCC = ( TIME - MOD( TIME, 24) )/24 + 1 ; assume TIME in hours and
> starting at zero
> IOVCL = ETA( 3 + IOCC*3 ) ; first day will get assigned eta(4) as below,=
 
> than 7, 10 etc...
> CL = TVCL * EXP( ETA(1) + IOVCL )
>
>
> And therefore I think it could be possible indeed. I however do not
> think it is easier, and I see OCC coding in the dataset as more robust. =

> But in cases where it is not possible to modify the dataset, such an
> approach might be an option. As a reclaimer: the above code snippets are =

> heavily leaning on the userguide examples and completely untested.
> Please test before use.
>
> Hope this helps,
>
> Jeroen
>
> http://pd-value.com
> jeroen_at_pd-value.com
> _at_PD_value
> +31 6 23118438
> -- More value out of your data!
>
>> On 16-01-19 04:06, Sebastien Bihorel wrote:
>> Hi
>>
>> The Introduction to NONMEM 7.x documents include a section entitled "Easi=
er Inter-occasion variability modeling" which describes a quicker way to cod=
e IOV.
>>
>> $ABBR REPLACE ETA(OCC_CL)=ETA(4,7,10)
>> ;when OCC=1, eta(4) to be used: when OCC=2, eta(7) to be used, etc.
>>
>> ...
>>
>> $PK
>> CL=TVCL*EXP(ETA(1)+ETA(OCC_CL))
>>
>> When this approach is used, OCC must be a data item defined in $INPUT.
>>
>> Is there a similar way to code ETAs using a dynamic variable defined in $=
PK?
>>
>> Thanks
>>
>> Sebastien
>>
>>
>

Received on Thu Jan 17 2019 - 05:27:33 EST

This archive was generated by hypermail 2.3.0 : Fri Sep 27 2019 - 17:02:18 EDT