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
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.
In this tutorial, you will learn how to build One Compartment Michaelis Menten Kinetics, with Drug and Metabolite in Urine
call the "necessary" libraries to get started
using Pumas using Plots using CSV using StatsPlots using Random
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
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)
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
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)
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)