Enterohepatic Recirculation

Hi, Has anyone ever tried to model a profile with enterohepatic recirulation in Phoenix? Specifically, as per PK model #32 (or 40 in the newer editions) from Gabrielson and Weiner’s book “Pharmacokinetic and Pharmacodynamic Data Analysis: Concepts and Applicatons” , how do you incorporate the bile empting interval into the overall model, using the graphical interface? Thanks John

John - did you look at the Modelling Language Reference guide; page 41 discusses this as an example of modelling discontinuous events. I think I have a full model somewhere. Simon.

Thanks Simon. Looking at it right now. Specifically I am trying to model a drug (oral administration) with a PK profile having enterohepatic recirculation. I was just wondering if the graphical interface of the model builder feature in Phonex is sufficient without going into writing/editing the equations. John

I have this code for PK40 from quite a while ago, so I’m not making any promises. But hopefully it will help. Regards, Linda Hughes PK40MODEL (){ # Bi-exponential model # Structural parameters are Vc, Cl, Cld, Vt # Differential equations # compartment amounts: ac=central, a1=peripheral, ag=gut, ab=bile # central cpt can receive doses dosepoint(ac) # define the flows, to simplify the ODEs flowAbs = ag * Ka flowElim = ac * Cl / Vc flowct = ac * Cld / Vc flowtc = a1 * Cld / Vt flowToBile = ac * K1g # there are two ways to do this: # METHOD 1: conditional expression: i.e. ( A ? B : C ) means “if A then B else C” # This is how you read it: # if t is greater than 10 and less than 10+ttom then flow from from bile is ab/ttom # otherwise it is zero. # flowFromBile = ( # t > 10 && t < (10 + ttom) # ? ab/ttom # : 0 # ) # (I just spread it out on multiple lines to make it more readable. # Except for comments, the syntax doesn’t care about lines. Note # this method is commented out.) # METHOD 2: sequence statement: # declare a variable called “enableReflux” will will be either 0 or 1 double (enableReflux) # make sure it is 1 only during the reflux interval, using a sequence statement sequence { enableReflux = 0 # make sure it is zero at time zero sleep(10) # after 10 time units have passed enableReflux = 1 # turn it on sleep(ttom) # after ttom time units have passed enableReflux = 0 # turn it off } # include it in the flow from bile as a switch flowFromBile = ab * (1/ttom) * enableReflux # Comparing the two methods: # Method 1 is simpler to express in the case of a single reflux event. # Method 2 runs much faster because the differential equations are recognized # to be linear, so matrix exponent kicks in. In population modeling, speed is important. # Method 2 can be more easily extended to the case of multiple reflux events. # Here are the differential equations deriv(ac = flowAbs - flowElim - flowct + flowtc - flowToBile ) deriv(a1 = flowct - flowtc ) deriv(ag = - flowAbs + flowFromBile) deriv(ab = flowToBile - flowFromBile) # define internal variables c = ac / Vc # define structural parameters, fixed effects and random effects stparm(Vc = tvVc * exp(nVc)) stparm(Cl = tvCl * exp(nCl)) stparm(Cld = tvCld * exp(nCld)) stparm(Vt = tvVt * exp(nVt)) stparm(Ka = tvKa * exp(nKa)) stparm(K1g = tvK1g * exp(nK1g)) stparm(ttom = tvttom * exp(nttom)) fixef( tvVc = c(0, 13, 35) tvCl = c(0, 1.2, 19) tvCld = c(0, 10, 20) tvVt = c(0, 35, 50) tvKa = c(0, 2.3, 10) tvK1g = c(0, 0.7, 10) tvttom = c(0, 2.8, 40) ) ranef(nVc, nCl, nCld, nVt, nKa, nK1g, nttom) # define observed quantity and error model error(eps) observe(F = c + c*eps) }

John, I heard from an NLME developer about this, and he says this cannot be done in a graphical model. You must use a textual model for this. Generally speaking, the built-in models are the least flexible, the graphical editor is more flexible, and textual models are the most flexible. Regards, Linda Hughes

Many thanks Linda. I will try it out. John