In addition to running NCA independently on a dataset, Pumas provides the ability to integrate NCA analysis as part of the model by annotating the observed variables of interest with
@nca in the
observed block, see @observed: Sampled observations. In adition to the standard columns required as per PumasNDF, to perform integrated NCA it is required to pass
route column to compute dose NCA parameters that require dosage information, the column should have (not case sensitive) "iv" or "ev" or "inf" for bolus, extravascular and infusion modes of administration respectively, if the Dosage Regimen Terminology is used for specifying the dosage, the
route field should be specified.
parmet = @model begin @param begin θ ∈ VectorDomain(5) Ω ∈ PDiagDomain(4) σ_prop ∈ RealDomain(lower = 0.0001) end @random begin η ~ MvNormal(Ω) end @pre begin CL = θ * exp(η) Vc = θ * exp(η) CLM = θ * exp(η) VM = θ * exp(η) fm = θ K = (fm * (CL / Vc)) KPM = ((1 - fm) * (CL / Vc)) KM = (CLM / VM) end @dynamics begin Central' = -K * Central - KPM * Central Metabolite' = KPM * Central - KM * Metabolite end @derived begin cp = @. Central / Vc cm = @. Metabolite / VM dv_cp ~ @. Normal(cp, abs(cp) * σ_prop) dv_cm ~ @. Normal(cm, abs(cm) * σ_prop) end @observed begin ncas := @nca dv_cp dv_cm auccp, auccm = @. NCA.auc(ncas) thalfcp, thalfcm = @. NCA.thalf(ncas) cmaxcp, cmaxcm = @. NCA.cmax(ncas) tlagcp, tlagcm = @. NCA.tlag(ncas) end end ev = DosageRegimen(2000, ii=24, addl=3, route = NCA.IVBolus) ev1 = [Subject(id=i, events=ev) for i in 1:4] p = (θ = [ 11.5, #CL 50.0, #V 10.0, #CLM 8.0, #VM 0.7, ], Ω = diagm(0 => [0.04, 0.04, 0.04, 0.04]), σ_prop = 0.01, )
The NCA functions can take any additional arguments discussed in The NCA Functions, same as when used directly on data. The NCA results are obtained as part of the simulation output and can be accessed directly for each subject or by converting the simulation result into a
sim = simobs(parmet, ev1, p) sim.observations.auccp # AUC for cp of first subject sim.observations.cmaxcp # Cmax for cp of first subject simdf = DataFrame(sim)