Structural model - Estimation of inhibitory rate constant in non-competitive enzyme inhibition model
Number of subjects - 1
Number of componds - 1
To get an understanding about inhibitory models
To understand the relationship between rate of metabolite formation and concentration
To analyze enzyme data by means of simulteneous nonlinear regression
call the necessary 'libraries' to get started
using Pumas using Plots using CSV using StatsPlots using Random
pk_44_nim = @model begin @param begin tvvmax ∈ RealDomain(lower=0) tvkm ∈ RealDomain(lower=0) tvki ∈ RealDomain(lower=0) Ω ∈ PDiagDomain(2) σ_add ∈ RealDomain(lower=0) end @random begin η ~ MvNormal(Ω) end @covariates conc I @pre begin Vmax = tvvmax * exp(η[1]) Km = tvkm * exp(η[2]) Ki = tvki _conc = conc _I = I end @derived begin ## Noncompetitive Inhibition Model rate_nim = @. ((Vmax * _conc/(Km + _conc)) * (Ki / (Ki + _I))) dv_rate_nim ~ @. Normal(rate_nim, σ_add) end end
PumasModel Parameters: tvvmax, tvkm, tvki, Ω, σ_add Random effects: η Covariates: conc, I Dynamical variables: Derived: rate_nim, dv_rate_nim Observed: rate_nim, dv_rate_nim
Parameters provided for simulation are as below.tv
represents the typical value for parameters.
Vmax - Maximum metabolic rate (μM*gm_protein/min)
Km - Michaelis-Mentons constant (μmol/L)
Ki - Inhibitory constant (μmol/L)
I - Inhibitor concentration/Exposure
param = ( tvvmax = 122.827, tvkm = 42.7053, tvki = 98.8058, Ω = Diagonal([0.0,0.0]), σ_add = 2.256)
(tvvmax = 122.827, tvkm = 42.7053, tvki = 98.8058, Ω = [0.0 0.0; 0.0 0.0], σ_add = 2.256)
In this dataset we will be having time, concentration data and Exposure(I) which will be used to estimate the rate of metabolite concentration
df_sub1 = map(i -> DataFrame(id=i,time = 1:1:1000, dv_rate_nim = missing, conc = 1:1:1000, I=0), 1:6) df = vcat(DataFrame.(df_sub1)...) df[(df[:id] .== 2), :I] = 10 df[(df[:id] .== 3), :I] = 25 df[(df[:id] .== 4), :I] = 50 df[(df[:id] .== 5), :I] = 75 df[(df[:id] .== 6), :I] = 100 df_sub1 = df sub1 = read_pumas(df_sub1, observations=[:dv_rate_nim], covariates=[:conc, :I], event_data=false)
Population Subjects: 6 Covariates: conc, I Observables: dv_rate_nim
We will now simulate the rate of metabolite formation
Random.seed!(123) sim_sub1 = simobs(pk_44_nim, sub1, param) df1 = DataFrame(sim_sub1)
Use the DataFrame for plotting
df1_dv = filter(x -> x.conc in [1,5,10,15,26,104,251,502,1000], df1) @df df1 plot(:conc, :rate_nim, group=:I, title = "Rate of Metabolite formation vs Concentration", xlabel = "Concentration (uM)", ylabel = "Metabolic rate (nmol/min/mg protein)", linewidth=3, legend=:bottomright, labeltitle="Exposure", xticks=[0,100,200,300,400,500,600,700,800,900,1000], xlims=(-5,1010), yticks=[0,20,40,60,80,100,120], ylims=(0,120)) @df df1_dv scatter!(:conc, :dv_rate_nim, label=false)
@df df1 plot(:conc, :rate_nim, group=:I, xaxis=:log, title = "Rate of Metabolite formation vs Concentration", labeltitle="Exposure", xlabel = "Concentration (uM)", ylabel = "Metabolic rate (nmol/min/mg protein)", linewidth=3, legend=:topleft, xticks=[1,10,100,1000], xlims=(0.95,1010), yticks=[0,20,40,60,80,100,120], ylims=(0,120)) @df df1_dv scatter!(:conc, :dv_rate_nim, label=false)