Re: RE: Implementing a Kalman Filter based optimization in NONMEM

From: Alison Boeckmann Date: September 16, 2015 technical Source: cognigen.com
John and nmusers: I think something more needs to be said about this topic. (1) The concept of "state variables ai" exists in PREDPP (along with $MODEL, $PK, $ERROR). With a user-written $PRED, there are no reserved variables other than Y. The user defines all the variables explicitly. (2) The help entry for abbreviated discusses the difference between random and non-random variables when it comes to retaining their values. Consider two cases in which the following statements are the only ones defining TVK and K, respectively: IF (WT.GT.0) TVK=THETA(1)*WT If the condition is false, the non-random variable TVK retains the value set with the previous data record. IF (WT.GT.0) K=THETA(1)*WT*EXP(ETA(1)) If the condition is false, the value of the random variable K is set to zero. NM-TRAN prints a warning message when it detects such code. In $PK, $ERROR, and $PRED records, recursion code may be used in an explicit manner, so that with: IF (WT.GT.0) THEN K=THETA(1)*WT*EXP(ETA(1)) ELSE K=K ENDIF if the condition is false, K retains its value set with the previous data record. ------- Here is an example with a $PRED control stream. Recursive code is needed to retain a variable (and its eta partials) from one record to the next. ------- var.dat ------ 1 . 1 . ------- var.ctl ------- $PROB variables in $PRED ; illustrates the difference between non-random and random variables $INPUT ID DV $DATA var.dat $PRED IF (NEWIND.LE.1) THEN VAR1=THETA(1) ; a non-random variable VAR2=THETA(2)*EXP(ETA(2)) ; a non-recursive random variable. ENDIF IF (NEWIND.LE.1) THEN VAR3=THETA(3)*EXP(ETA(3)) ; a random variable that is defined recursively ELSE VAR3=VAR3 ENDIF Y=VAR1+VAR2+VAR3+EPS(1) $THETA 1 2 3 $OMEGA 1 2 3 $SIGMA 1 $TABLE VAR1 VAR2 VAR3 PRED G21 G31 NOAPPEND NOPRINT FILE=var.tbl ------ var.tbl ------- VAR1 VAR2 VAR3 PRED G21 G31 1.0000E+00 2.0000E+00 3.0000E+00 6.0000E+00 2.0000E+00 3.0000E+00 1.0000E+00 0.0000E+00 3.0000E+00 4.0000E+00 0.0000E+00 3.0000E+00 ------------ Note that all three are set with the first record. VAR2 is 0 with subsequent records. VAR1 (non-random) and VAR3 (random, defined recursively) retain their values (and eta partials) with subsequent records. (G21=partial of F w.r.t. eta(2)) (G31=partial of F w.r.t. eta(3)) I hope this makes the situation more clear.
Quoted reply history
On Mon, Sep 14, 2015, at 08:36 AM, John Warner wrote: > Thanks Again Erik > I think your solution solves the problem. I just did a quick > experiment and, at least in the simple case that I tried, pred-defined > variables do seem to be persistent between calls. So I am not even > sure that saving the state variables to ai’s is necessary as long as I > do all my work in user defined code as opposed to subroutine calls. > > So all of this may have been a tempest in a tea pot. > > Nonetheless your advice was right on and I thank you for it. > > Also thanks to all Kevin and Jason for their helpful comments. > Best > John > > John H. Warner, PhD, MBA > Director, Biostatistics > CHDI Management / CHDI Foundation > 155 Village Boulevard, Suite 200 > Princeton, NJ, 08540 > (609) 945-9644: office > (609) 751-7345: cell > (609) 452-2160: fax > john.warner_at_CHDIfoundation.org > > From: E.Olofsen_at_lumc.nl [mailto:E.Olofsen_at_lumc.nl] Sent: Monday, > September 14, 2015 11:21 AM To: John Warner; nmusers_at_globomaxnm.com > Subject: RE: Implementing a Kalman Filter based optimization in NONMEM > > John, > > My understanding is that the variables to be used recursively should be referenced, so the simplest form is Ai = Ai. (Note that if ETAs are involved, also the derivatives of the Ai with respect to the ETAs need to be tracked, but NM-TRAN does this for you). > > Best regards, > > Erik > From: John Warner [John.Warner_at_chdifoundation.org] Sent: Monday, > September 14, 2015 4:38 PM To: Olofsen, E. (ANST); > nmusers_at_globomaxnm.com Subject: RE: Implementing a Kalman Filter > based optimization in NONMEM > Thanks again Erik > I think my code would work with the Ai’s alone provided that they > persist unchanged between calls to $pred. Do they? > > I guess the general question for me is when do user-defined variables > persist unchanged between calls to $pred? If the answer is always” > they I am in good shape. > Best > John > > John H. Warner, PhD, MBA > Director, Biostatistics > CHDI Management / CHDI Foundation > 155 Village Boulevard, Suite 200 > Princeton, NJ, 08540 > (609) 945-9644: office > (609) 751-7345: cell > (609) 452-2160: fax > john.warner_at_CHDIfoundation.org > > From: E.Olofsen_at_lumc.nl [mailto:E.Olofsen_at_lumc.nl] Sent: Monday, > September 14, 2015 10:31 AM To: John Warner; nmusers_at_globomaxnm.com > Subject: RE: Implementing a Kalman Filter based optimization in NONMEM > > John, > > Would your Kalman filter implementation work with just a $PRED, so without a $MODEL? While the A(i) are the amounts in compartments defined in $MODEL, the Ai are user-defined variables. > > Best regards, > > Erik > From: John Warner [John.Warner_at_chdifoundation.org] Sent: Monday, > September 14, 2015 4:09 PM To: Olofsen, E. (ANST); > nmusers_at_globomaxnm.com Subject: RE: Implementing a Kalman Filter > based optimization in NONMEM > Thanks Eric > Yours seems like a very straight-forward and complete solution. > However, if I am not mistaken, the Ai variables are created by $model > and I am not sure that $model can be used by a user supplied $pred. > If it can, there remains the problem of calling the model subroutine. > I assume that this would be done with verbatim code but I am not sure > where to put such a call in my control stream. The documentation > (html help files) states that $model is called only once by the PREDPP > subroutines that use it. Perhaps I could put such a call in the > $input or $pk records? $PK would seem more logical but it is not > clear that this record is available outside of predPP. > > I am very interested to hear any additional responses to this. > > Thanks again. > > John > John H. Warner, PhD, MBA > Director, Biostatistics > CHDI Management / CHDI Foundation > 155 Village Boulevard, Suite 200 > Princeton, NJ, 08540 > (609) 945-9644: office > (609) 751-7345: cell > (609) 452-2160: fax > john.warner_at_CHDIfoundation.org > > From: E.Olofsen_at_lumc.nl [mailto:E.Olofsen_at_lumc.nl] Sent: Monday, > September 14, 2015 4:40 AM To: John Warner; nmusers_at_globomaxnm.com > Subject: RE: Implementing a Kalman Filter based optimization in NONMEM > > Dear John, > > In the code by Tornoe et al., state variables A(i) are stored in the Ai variables, and retrieved by statements Ai = Ai. Such recursive code is described in NONMEM's help on abbreviated code. Although the A(i) are associated with differential equations, you could perhaps still use such recursive statements, indicating that you want to store and retrieve information? > > Best regards, > > Erik > From: owner-nmusers_at_globomaxnm.com [owner-nmusers_at_globomaxnm.com] on > behalf of John Warner [John.Warner_at_chdifoundation.org] Sent: Sunday, > September 13, 2015 11:24 PM To: nonmem usersgroup Subject: [NMusers] > Implementing a Kalman Filter based optimization in NONMEM > Dear NONMEM users > I am attempting to implement a Kalman Filter based optimization in > NONMEM using $PRED directly. The method I am attempting to implement > is similar in spirit to that presented in Tornoe et. al. (2005) (and > the NONMEM 7.3 manual) except that I have no need for a differential > equations solver. In effect I can solve the differential equations > analytically but I still need to estimate a random walk error term. > Adapting the procedure of Tornoe et. al. 2005 seems straight-forward > except that, it seems to me, I need to find a way to store the state > vector and associated partial derivatives at the end of a call to > $PRED and to retrieve them at the beginning of the next call for the > same subject. I assume that something like this must be done by > ADVAN6 when differential equations are solved. > > I would be very grateful for any advice on this. > > Best > John > > > Tornoe et. al. Stochastic Differential Equations in NONMEM : > Implementation, Application, and Comparison with Ordinary > Differential Equations Pharmaceutical Research, Vol. 22, No. 8, > August 2005 2005) > > > > John H. Warner, PhD, MBA > Director, Biostatistics > CHDI Management / CHDI Foundation > 155 Village Boulevard, Suite 200 > Princeton, NJ, 08540 > (609) 945-9644: office > (609) 751-7345: cell > (609) 452-2160: fax > john.warner_at_CHDIfoundation.org > -- Alison Boeckmann alisonboeckmann_at_fastmail.fm