Exercise PK48 - One Compartment Michaelis Menten Kinetics, Drug and metabolite in Urine

2020-11-12

Background

  • Structural model - One Compartment Michaelis Menten Kinetics, Drug and metabolite in Urine

  • Route of administration - IV bolus

  • Dosage Regimen - 500 micromol IV

  • Number of Subjects - 1

PK48

Learning Outcome

In this model, you will learn -

  • To build One Compartment model for the drug given Intravenous Bolus dosage, following Michaelis Menten Kinetics.

  • To estimate the fundamental parameters involved in building the model.

  • To apply differential equation in the model as per the compartment model.

  • To design the dosage regimen for the subjects and simulate the plot.

Objectives

In this tutorial, you will learn how to build One Compartment Michaelis Menten Kinetics, with Drug and Metabolite in Urine

Libraries

call the "necessary" libraries to get started

using Pumas
using Plots
using CSV
using StatsPlots
using Random

Model

In this One compartment model, we administer dose on Central compartment.

pk_48        = @model begin
  @param begin
    tvvmax    RealDomain(lower=0)
    tvkm      RealDomain(lower=0)
    tvclr     RealDomain(lower=0)
    tvvc      RealDomain(lower=0)
    Ω         PDiagDomain(4)
    σ²_prop   RealDomain(lower=0)
  end

  @random begin
    η        ~ MvNormal(Ω)
  end

  @pre begin
    Vmax     = tvvmax * exp(η[1])
    Km       = tvkm * exp(η[2])
    Clr      = tvclr * exp(η[3])
    Vc       = tvvc * exp(η[4])
  end

  @vars begin
    VMKM    := Vmax*(Central/Vc)/(Km + (Central/Vc))
  end

  @dynamics begin
    Central' = -VMKM - (Clr/Vc)* Central
    UrineP'  = (Clr/Vc) * Central
    UrineM'  =  VMKM
  end

  @derived begin
    cp       = @. Central/Vc
    ae_p     = @. UrineP
    ae_m     = @. UrineM
    dv       ~ @. Normal(cp, sqrt(cp^2*σ²_prop))
    dv_aep   ~ @. Normal(ae_p, sqrt(cp^2*σ²_prop))
    dv_aem   ~ @. Normal(ae_m, sqrt(cp^2*σ²_prop))
  end
end
PumasModel
  Parameters: tvvmax, tvkm, tvclr, tvvc, Ω, σ²_prop
  Random effects: η
  Covariates: 
  Dynamical variables: Central, UrineP, UrineM
  Derived: cp, ae_p, ae_m, dv, dv_aep, dv_aem
  Observed: cp, ae_p, ae_m, dv, dv_aep, dv_aem

Parameters

The parameters are as given below. tv represents the typical value for parameters.

  • Vmax - Maximum rate of metabolism (uM/hr)

  • Km - Michaelis Menten Constant (uM)

  • Clr - Renal Clearance (L/hr)

  • Vc - Central Volume of Distribution (L)

  • Ω - Between Subject Variability

  • σ - Residual error

param = (tvvmax    = 51.4061,
         tvkm      = 5.30997,
         tvclr     = 2.46764,
         tvvc      = 24.5279,
         Ω         = Diagonal([0.0,0.0,0.0,0.0]),
         σ²_prop   = 0.02)
(tvvmax = 51.4061, tvkm = 5.30997, tvclr = 2.46764, tvvc = 24.5279, Ω = [0.
0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0], σ²_prop 
= 0.02)

Dosage Regimen

Intravenous bolus dosing of 500 micromol to a single subject at time=0.

ev1    = DosageRegimen(500, cmt=1, time=0)
sub1   = Subject(id=1, events=ev1)
Subject
  ID: 1
  Events: 1

Simulation & Plot

Lets simulate for plasma concentration with the specific observation time points after IV bolus dose.

Random.seed!(123)
sim_sub1 = simobs(pk_48,sub1,param,obstimes=0:0.1:15)
df1      = DataFrame(sim_sub1)

Dataframe & Plots

Use the dataframe for plotting

  • cp - Predicted drug concentration in plasma

  • ae_p - Predicted amount excreted in urine (Parent)

  • ae_m - Predicted amount excreted in urine (Metabolite)

  • dv - Observed drug concentration in plasma

  • dv_aep - Observed amount excreted in urine (Parent)

  • dv_aem - Observed amount excreted in urine (Metabolite)

df1_dv = filter(x -> x.time in [0,1,2,3,4,5,6,7,8,10,12,14,15], df1)
df2_dv = filter(x -> x.time in [2,4,6,8,10,12,14,15], df1)

@df df1 plot(:time, :cp, yaxis=:log, legend=:bottomleft, linewidth=3,
             label="Pred-Parent Plasma Conc", title="Plasma Drug Concentration & Amount Excreted in Urine",
              xlabel= "Time (Hrs)", ylabel="Concentration (umol/L) & Amount (umol)",
              xlims=(0,16), xticks=[0,2,4,6,8,10,12,14,16], ylims=[0.1,1000])
@df df1_dv plot!(:time, :ae_p, label="Pred-Parent Amt", linewidth=3 )
@df df1_dv plot!(:time, :ae_m, label="Pred-Metabolite Urine Amt",linewidth=3)
@df df1_dv scatter!(:time, :dv, label="Obs-Conc", color=:red)
@df df2_dv scatter!(:time, :dv_aep, color=:red, label=false)
@df df2_dv scatter!(:time, :dv_aem, color=:red, label=false)