NONMEM Users Network Archive

Hosted by Cognigen

Re: [NMusers] Truncated normal distribution for continuous covariate with known mean and standard error

From: Yassine Kamal Lyauk <yassinekamallyauk_at_gmail.com>
Date: Thu, 10 Dec 2015 10:10:21 +0100

Dear Åsa,

Thank you very much for your suggestions.

I have tried both approaches and the one you prefer (using CALLSIMETA) is
more intuitive I also think. It seems to work fine.
In the code you suggest (using CALL RANDOM) a 70 kg weight for all subjects
is attained. I think this is due to R = 0 - when I remove it, I start
getting different weight values that are within the truncation limits.

Lastly, I am very interested in hearing more regarding your end comment on
correlation of the simulated covariates. Could you briefly specify what you
mean/how to implement this (i.e. how to preserve the same correlation
patern as in the original data set). I am simulating distributions for both
continuous (e.g. weight, age) and categorical (e.g. SEX, SNPs) covariates.
It is for the categorical covariates that I use separate CALL RANDOM blocks
while drawing from UNIFORM distributions.

Best regards,
Yassine




2015-12-08 14:22 GMT+01:00 Johansson, Åsa <asa.johansson_at_astrazeneca.c=
om>:

> Dear Yassine,
>
>
>
> I prefer the second option, where you simulate new ETAs until they fulfil=
l
> your requirements. THETA(1) is the mean value of WT while ETA(1) is a
> random variable with variance OMEGA. You should just add the known mean
> value of WT (e.g. 70) as the initial estimate of THETA(1) and the known
> variance of weight (stdev^2; e.g. 100) as the initial estimate of OMEGA f=
or
> ETA(1). The simulations will always be based on your initial estimates so
> there is no need to specify the actual values (i.e. mean 70 and standard
> deviation 10) directly in the code. By the way, I think you might need to
> add a .AND.NEWIND.NE.2 to the IF-statement (IF(ICALL.EQ.4.AND.NEWIND.NE.2=
).
>
>
>
> If you anyhow want to use the first option (simulate random numbers from =
a
> normal distribution), the CALL RANDOM(5, R) needs to be specified in the
> DOWHILE-loop. You want to simulate a new random variable if the first one
> doesn’t fulfill your requirements. This code could look something=
 like this:
>
>
>
> IF(ICALL.EQ.4.AND.NEWIND.NE.2) THEN
>
> R = 0
>
> WT =70+10*R
>
> DOWHILE (WT.LT.50.OR.WT.GT.100)
>
> CALL RANDOM(5,R)
>
> ENDDO
>
> ENDIF
>
> IF(ICALL.EQ.4) WT=70+10*R
>
>
>
> If the simulated weight is outside the specified limits (i.e. less than 5=
0
> or greater than 100), a new random value will be simulated until the weig=
ht
> is between these limits. I have not tried the code myself but I’m=
 pretty
> sure it should work.
>
>
>
> You write in your question that you have 4 different covariates which you
> want to simulate. Be aware that the simulated covariates need to be
> correlated in the same way as your original data to give valid results.
>
>
>
> Kind regards,
>
> Åsa
>
>
>
>
>
> *From:* owner-nmusers_at_globomaxnm.com [mailto:owner-nmusers_at_globomaxnm.com=
]
> *On Behalf Of *Yassine Kamal Lyauk
> *Sent:* den 8 december 2015 13:14
> *To:* nmusers_at_globomaxnm.com
> *Subject:* [NMusers] Truncated normal distribution for continuous
> covariate with known mean and standard error
>
>
>
> Dear NMUsers,
>
>
>
> I would like to implement a truncated normal distribution for weight for
> use in a simulation, with a pre-specified mean and standard deviation.
>
>
>
> What works so far is this (w.o. truncation, which I found in the NONMEM
> user guides):
>
>
>
> $PK
>
> IF (ICALL.EQ.4.AND.NEWIND.NE.2) THEN
>
> CALL RANDOM(5,R)
>
> ENDIF
>
> IF (ICALL.EQ.4) WT=70+10*R; mean of 70 with SD 10
>
>
>
> $SIM (12345) (...) (...) (...) (54676 NORMAL); I have a total of five
> random number generators i.e. 4 different covariates, which I want to
> simulate distributions for.
>
>
>
> Adding a DOWHILE loop does not seem to work (either I get error messages
> or NONMEM stagnates after performing the sims and never finishes) - I thi=
nk
> it's a coding issue on my part, in regard to the IF THEN ELSE statements
> and DOWHILE statement:
>
>
>
> IF (ICALL.EQ.4.AND.NEWIND.NE.2) THEN
>
> CALL RANDOM(5,R)
>
> ENDIF
>
> IF (ICALL.EQ.4) WT=70+10*R;
>
> DOWHILE (WT.GT.50.OR.WT.LT.100); truncation limits of 50 and 100
>
> ENDDO
>
>
>
> Other ways to generate a normal truncated distribution can be coded as
> (from Metrum Institute course 210):
>
>
>
> $PK
>
> IF (ICALL.EQ.4) THEN
>
> WT=THETA(1) + ETA(1)
>
> DOWHILE (WT.LT.20.OR.WT.GT.100)
>
> CALL SIMETA(ETA)
>
> WT=THETA(1) + ETA(1)
>
> ENDDO
>
> ENDIF
>
>
>
> $SIM (2345 NEW)
>
>
>
> Yet, I am unsure of how to incorporate my known mean and standard
> deviation using this approach.
>
>
>
> Hope you can help. Thanks in advance.
>
>
>
> Best regards,
>
>
>
> Yassine
>
>
>
>
>
>
>
>
>
>
>
>
>
> ------------------------------
>
> *Confidentiality Notice: *This message is private and may contain
> confidential and proprietary information. If you have received this messa=
ge
> in error, please notify us and remove it from your system and note that y=
ou
> must not copy, distribute or take any action in reliance on it. Any
> unauthorized use or disclosure of the contents of this message is not
> permitted and may be unlawful.
>
>


--
Best regards / Med venlig hilsen

Yassine Kamal Lyauk

Received on Thu Dec 10 2015 - 04:10:21 EST

The NONMEM Users Network is maintained by ICON plc. Requests to subscribe to the network should be sent to: nmusers-request@iconplc.com. Once subscribed, you may contribute to the discussion by emailing: nmusers@globomaxnm.com.