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