I would like to have the initial mass in the central compartment as a parameter to be estimated. Maybe @billg, @yizhang, or @charlesm93 could help.

Thanks a lot.

Torsten is from Metrum, not from the Stan project. Youâ€™ve pinged the right people who work on both projects. I couldnâ€™t find a mailing list or forum for Torsten itself, in which case, it feels like fair game to open an issue:

Hi linas,

It doesnâ€™t look like there is a straightforward way of specifying the initial mass in the central compartment, as in you canâ€™t pass the initial condition to a Torsten function.

One way would be to specify a â€śdosingâ€ť event at time t=0, which sets an initial drug mass in the central compartment. However, Iâ€™m not sure if we support passing a dosing event as a parameter (I think it has to be data but not 100% certain). This is definitely a feature we can change. I agree with @Bob_Carpenter creating the issue is the right move.

It might also be possible to change the ODE itself, with a condition at time t=0 or close to 0.

@billg and @yizhang may know another approach. If not, we need to add a feature to Torsten.

Hi Linas,

Non-zero initial conditions are readily handled by changing the variables in the ODEs from the original scale to difference from initial value. For example if dx/dt = f(x) where x(0) = x0, rewrite the ODE in terms of z = x - x0. Then the new ODE system becomes dz/dt = f(z + x0) where z(0) = 0. This approach allows you to make x0 a parameter in your Stan model.

Feel free to contact me at Metrum Research Group if you would like a worked example of this method.

Cheers,

Bill Gillespie

Also as a follow up to @charlesm93 's reply, the `amt`

argument *may* be passed as a parameter, so you can specify an initial mass in any compartment by setting `amt`

at `time`

= 0 for the desired compartment (the `cmt`

argument) to that initial mass. That is probably the best way to handle it with Torsten functions that use analytic solutions, e.g., `pmx_solve_onecpt`

and `pmx_solve_twocpt`

. I prefer the approach I mentioned above with Torsten functions that numerically solve the ODEs and require the user to specify the system of ODEs as a function.

I like to use analytic solutions because they are faster. Can you please give me an example of this approach? I donâ€™t understand how amt[1] can be a parameter while remaining amt elements are data.

See: 3.2 Partially known parameters | Stan Userâ€™s Guide

The section about partially missing data is 3.2.

Hi Linas,

Hereâ€™s a worked example. I constructed it by modifying the `pk2cpt`

example provided in the `example_models`

folder of the Torsten distribution. Itâ€™s just a simple 2 compartment model with first order absorption fit to data from a single individual. The same approach works for a population data set, but requires a bit more data bookkeeping. I modify the data set by adding a record prior to the first record in the original data set. It is a dosing record for dosing into compartment 2 (the central compartment). The model is then modified by copying the data array called `amt`

into a parameter array called `amt_par`

and then making the assignment `amt_par[1] = amt[1] + x2_init`

. This is consistent with Stan Userâ€™s Guide section that @Bob_Carpenter cited.

pk2cpt.stan (1.9 KB)

run.R (6.4 KB)

Fantastic!!! Thanks a lot.