NCA Tutorial

Yingbo Ma
July 19, 2019

Introduction

This is an introduction to NCA.jl, a software for noncompartmental analysis (NCA). In this tutorial we will show how to use NCA.jl to analysis data.

Installation

Currently, NCA.jl is a submodule in Pumas.jl, so you only need to install Pumas.jl, and everything will be ready to go.

Getting Started

To load the package, use

using Pumas.NCA

First, let's load the example NCA data inside Pumas.jl. This data have $24$ individuals, and each of them has $16$ data points.

using Pumas, CSV

file = Pumas.example_nmtran_data("nca_test_data/dapa_IV")
data = CSV.read(file);

here is what the dataset looks like

first(data, 6) # take first 6 rows

6 rows × 7 columns

IDTIMETADCObsAMT_IVAMT_ORALFormulation
Int64Float64Float64Float64Float64Float64String
110.00.0157.0215000.00.0IV
210.050.05141.8920.00.0IV
310.350.35116.2280.00.0IV
410.50.5109.3530.00.0IV
510.750.7566.48140.00.0IV
611.01.074.75320.00.0IV

Efficient Computation of Multiple NCA Diagnostics

AUC and AUMC

We can compute the area under the curve (AUC) from the first observation time to infinity. Below we are accessing the concentration and corresponding time array for the first individual. By default, the auc function computes the AUC from initial time to infinity (AUCinf).

NCA.auc(data[:CObs][1:16], data[:TIME][1:16])
263.792662196049
NCA.auc(data[:CObs][1:16], data[:TIME][1:16], method=:linuplogdown)
257.8792837435675

the keyword argument method can be :linear, :linuplogdown, or :linlog, and it defaults to :linear. This is a simple interface, however it is not efficient if you want to compute many quantities. The recommended way is to create an NCASubject or an NCAPopulation object first and then call the respective NCA diagnostic on the data object. To parse data to an NCAPopulation object one can call the read_nca function and assign the corresponding data to column names: id, time, conc (concentration), amt (dosage), and route. Note that, by default, the lower limit of quantization (LLQ) is $0$, and concentrations that are below LLQ (BLQ) are dropped. Also, we can add units by providing timeu, concu, and amtu.

timeu = u"hr"
concu = u"mg/L"
amtu  = u"mg"
data.id = data.ID
data.time = data.TIME
data.conc = data.CObs
data.amt = data.AMT_IV
data.route = "iv"
pop = read_nca(data, llq=0concu, timeu=timeu, concu=concu, amtu=amtu)
NCAPopulation (24 subjects):
  ID: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2
0, 21, 22, 23, 24]
    concentration: mg L^-1
    time:          hr
    auc:           mg hr L^-1
    aumc:          mg hr^2 L^-1
    λz:            hr^-1
    dose:          mg

Here, each element of pop has the type NCASubject. It is a lazy data structure and actual computations are not performed. When we are instantiating NCASubject, it only performs data checking and cleaning. To calculate AUC, one can do:

NCA.auc(pop)

24 rows × 2 columns

idauc
Int64Unitful…
11263.793 mg hr L^-1
22323.253 mg hr L^-1
33339.848 mg hr L^-1
44373.361 mg hr L^-1
55132.145 mg hr L^-1
66303.86 mg hr L^-1
77380.275 mg hr L^-1
88279.126 mg hr L^-1
99239.831 mg hr L^-1
1010260.862 mg hr L^-1
1111146.864 mg hr L^-1
1212359.489 mg hr L^-1
1313522.905 mg hr L^-1
1414262.988 mg hr L^-1
1515378.993 mg hr L^-1
1616206.926 mg hr L^-1
1717341.551 mg hr L^-1
1818195.925 mg hr L^-1
1919433.443 mg hr L^-1
2020214.27 mg hr L^-1
2121232.537 mg hr L^-1
2222471.515 mg hr L^-1
2323292.413 mg hr L^-1
2424170.305 mg hr L^-1

AUClast is the area under the curve from the first observation to the last observation. To compute AUClast on the second individual, one would do:

NCA.auc(pop[2], auctype=:last)
302.24594 mg hr L^-1

Or to compute the AUC on every individual, one would do:

NCA.auc(pop, auctype=:last)

24 rows × 2 columns

idauc
Int64Unitful…
11246.932 mg hr L^-1
22302.246 mg hr L^-1
33288.58 mg hr L^-1
44333.804 mg hr L^-1
55129.061 mg hr L^-1
66291.951 mg hr L^-1
77333.994 mg hr L^-1
88259.967 mg hr L^-1
99233.643 mg hr L^-1
1010242.719 mg hr L^-1
1111141.435 mg hr L^-1
1212311.005 mg hr L^-1
1313427.174 mg hr L^-1
1414246.329 mg hr L^-1
1515311.131 mg hr L^-1
1616196.672 mg hr L^-1
1717319.297 mg hr L^-1
1818185.399 mg hr L^-1
1919403.216 mg hr L^-1
2020202.64 mg hr L^-1
2121222.77 mg hr L^-1
2222364.756 mg hr L^-1
2323265.663 mg hr L^-1
2424156.806 mg hr L^-1

One can also compute AUC on a certain interval. To compute AUC on the interval $[10, \infty]$ on the first individual

NCA.auc(pop[1], interval=(10,Inf).*timeu)
27.824427196048966 mg hr L^-1

Note that we need to apply the time unit to the interval for units compatibility. One can also specify multiple intervals

NCA.auc(pop[1], interval=[(10,Inf).*timeu, (10, 15).*timeu])
2-element Array{Unitful.Quantity{Float64,𝐌*𝐓*𝐋^-3,Unitful.FreeUnits{(mg, hr
, L^-1),𝐌*𝐓*𝐋^-3,nothing}},1}:
 27.824427196048966 mg hr L^-1
          4.6593795 mg hr L^-1

In many cases, the AUC commands may need to extrapolate in order to cover the desired interval. To see the percentage of extrapolation ($\frac{\text{extrapolated AUC}}{\text{Total AUC}}\cdot 100$), you can use the command:

NCA.auc_extrap_percent(pop[1])
6.391564517256502

Area under the first moment of the concentration (AUMC) is

\[ \int_{t_0}^{t_1} t\cdot\text{concentration}(t) dt. \]

The interface of computing AUMC is exactly the same with AUC, and one needs to change auc to aumc for calculating AUMC or related quantities. For instance,

NCA.aumc_extrap_percent(pop[1])
NCA.aumc(pop[1])
1411.6198735770822 mg hr^2 L^-1

Terminal Rate Constant ($\lambda z$)

The negative slope for concentration vs time in log-linear scale is the terminal rate constant, often denoted by $\lambda z$. To compute $\lambda z$, one can call

NCA.lambdaz(pop[1])
0.03876710923615265 hr^-1

To get the coefficient of determination ($r^2$), the adjusted coefficient of determination ($adjr^2$), the $y$-intercept, the first time point used, and the number of points used while computing $\lambda z$, one can do:

NCA.lambdazr2(pop)
NCA.lambdazadjr2(pop)
NCA.lambdazintercept(pop)
NCA.lambdaztimefirst(pop)
NCA.lambdaznpoints(pop)

24 rows × 2 columns

idlambdaznpoints
Int64Int64
115
223
335
446
555
6610
774
884
997
10104
11116
12125
13134
14146
15153
16166
17174
18185
19197
20203
21215
22223
23234
24243

By default, $\lambda z$ calculation checks last $10$ or less data points, one can change it by providing the keyword threshold, e.g.

NCA.lambdaz(pop[1], threshold=3)
0.029877467931765923 hr^-1

One can also specify the exact data points by passing their indices

NCA.lambdaz(pop[1], idxs=[10, 15, 16])
0.10617388957053892 hr^-1

You can also pass their time points

NCA.lambdaz(pop[1], slopetimes=[1,2,3].*timeu)
0.5387479621404708 hr^-1

Simple functions

T_max is the time point at which the maximum concentration (C_max) is observed, and they can be computed by:

NCA.tmax(pop[1])
NCA.cmax(pop[1])
NCA.cmax(pop[1], interval=(20, 24).*timeu)
NCA.cmax(pop[1], interval=[(20, 24).*timeu, (10, 15).*timeu])
2-element Array{Unitful.Quantity{Float64,𝐌*𝐋^-3,Unitful.FreeUnits{(mg, L^-1
),𝐌*𝐋^-3,nothing}},1}:
 0.653632 mg L^-1
  1.10532 mg L^-1

Note that cmax returns C_max and normalized C_max if dose is provided. If dose is provided in the NCASubject, that dose will be used by all computations where dose can be used.

T_last is the time of the last observed concentration value above the lower limit of quantization (LLQ), and the corresponding concentration value is (C_last). They can be computed by the command

NCA.tlast(pop[1])
NCA.clast(pop[1])
0.653632 mg L^-1

The half-life can be computed by:

NCA.thalf(pop[1])
1.2865889604594312 hr

One may need to interpolate or to extrapolate the concentration-time data. For example, if you wanted to interpolate the concentration at $t=12$ using linear interpolation, you would do:

NCA.interpextrapconc(pop[1], 12timeu, method=:linear)
0.911367 mg L^-1

method can be :linear, :linuplogdown, or :linlog.

Plots and Summary

To generate linear and log-linear plots, one can do:

using Plots # load the plotting library
plot(pop)

to only generate the linear plot:

plot(pop, loglinear=false)

Similarly, to generate log-linear plot:

plot(pop, linear=false)

To calculate all NCA quantities, one can do

report = NCAReport(pop)
NCAReport
  keys: Symbol[:id, :lambda_z, :half_life, :tmax, :cmax, :c0, :clast, :clas
t_pred, :auclast, :tlast, :aucinf_obs, :vz_obs, :cl_obs, :aucinf_pred, :vz_
pred, :cl_pred, :vss_obs, :vss_pred, :tmin, :cmin, :cminss, :cmax_d, :aucla
st_d, :aucinf_d_obs, :auc_extrap_obs, :auc_back_extrap_obs, :aucinf_d_pred,
 :auc_extrap_pred, :auc_back_extrap_pred, :aumclast, :aumcinf_obs, :aumc_ex
trap_obs, :aumcinf_pred, :aumc_extrap_pred, :mrtlast, :mrtinf_obs, :mrtinf_
pred, :n_samples, :rsq, :rsq_adjusted, :corr_xy, :no_points_lambda_z, :lamb
da_z_intercept, :lambda_z_lower, :lambda_z_upper, :span, :route]

The NCAReport object holds all quantities, and one can call NCA.to_dataframe to get a DataFrame object.

reportdf = NCA.to_dataframe(report)
first(reportdf,6) # Print only the first 6 rows

6 rows × 48 columns

iddoseamtlambda_zhalf_lifetmaxcmaxc0clastclast_predauclasttlastaucinf_obsvz_obscl_obsaucinf_predvz_predcl_predvss_obsvss_predtmincmincminsscmax_dauclast_daucinf_d_obsauc_extrap_obsauc_back_extrap_obsaucinf_d_predauc_extrap_predauc_back_extrap_predaumclastaumcinf_obsaumc_extrap_obsaumcinf_predaumc_extrap_predmrtlastmrtinf_obsmrtinf_predn_samplesrsqrsq_adjustedcorr_xyno_points_lambda_zlambda_z_interceptlambda_z_lowerlambda_z_upperspanroute
Int64Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…Float64Float64Unitful…Float64Float64Unitful…Unitful…Float64Unitful…Float64Unitful…Unitful…Unitful…Int64Float64Float64Float64Int64Float64Unitful…Unitful…Float64String
115000.0 mg0.0387671 hr^-117.8798 hr0.0 hr157.021 mg L^-1157.021 mg L^-10.653632 mg L^-10.600675 mg L^-1246.932 mg hr L^-124.0 hr263.793 mg hr L^-1488.927 L18.9543 L hr^-1262.427 mg hr L^-1491.472 L19.0529 L hr^-1101.429 L97.5492 L20.0 hr0.624201 mg L^-10.624201 mg L^-1157.021 mg L^-10.0493864 hr L^-10.0527585 hr L^-16.391560.00.0524853 hr L^-15.904290.0572.051 mg hr^2 L^-11411.62 mg hr^2 L^-159.47551343.6 mg hr^2 L^-157.42392.31663 hr5.35125 hr5.1199 hr160.8765850.8354470.93626150.42070910.0 hr24.0 hr0.783008IVBolus
225000.0 mg0.0817121 hr^-18.48279 hr0.05 hr66.354 mg L^-159.7702 mg L^-11.71656 mg L^-11.70205 mg L^-1302.246 mg hr L^-124.0 hr323.253 mg hr L^-1189.296 L15.4677 L hr^-1323.076 mg hr L^-1189.4 L15.4762 L hr^-1111.445 L111.26 L24.0 hr1.71656 mg L^-11.71656 mg L^-166.354 mg L^-10.0604492 hr L^-10.0646507 hr L^-16.498740.00.0646151 hr L^-16.447340.01567.78 mg hr^2 L^-12329.05 mg hr^2 L^-132.68582322.61 mg hr^2 L^-132.49935.18709 hr7.20502 hr7.18906 hr160.997980.995960.99898932.4929216.0 hr24.0 hr0.943086IVBolus
335000.0 mg0.0397477 hr^-117.4387 hr0.0 hr165.733 mg L^-1165.733 mg L^-12.0378 mg L^-11.9785 mg L^-1288.58 mg hr L^-124.0 hr339.848 mg hr L^-1370.146 L14.7125 L hr^-1338.356 mg hr L^-1371.778 L14.7773 L hr^-1156.561 L154.742 L24.0 hr2.0378 mg L^-12.0378 mg L^-1165.733 mg L^-10.0577159 hr L^-10.0679696 hr L^-115.08570.00.0676712 hr L^-114.71130.01096.17 mg hr^2 L^-13616.46 mg hr^2 L^-169.68943543.12 mg hr^2 L^-169.0623.7985 hr10.6414 hr10.4716 hr160.9749580.966610.98739951.6362810.0 hr24.0 hr0.802813IVBolus
445000.0 mg0.0581041 hr^-111.9294 hr0.0 hr133.911 mg L^-1133.911 mg L^-12.29842 mg L^-12.07868 mg L^-1333.804 mg hr L^-124.0 hr373.361 mg hr L^-1230.481 L13.3919 L hr^-1369.579 mg hr L^-1232.839 L13.5289 L hr^-1107.108 L103.606 L24.0 hr2.29842 mg L^-12.29842 mg L^-1133.911 mg L^-10.0667608 hr L^-10.0746722 hr L^-110.59480.00.0739158 hr L^-19.679960.01355.97 mg hr^2 L^-12986.13 mg hr^2 L^-154.59112830.28 mg hr^2 L^-152.09064.06218 hr7.99798 hr7.65813 hr160.8753830.8442290.93561962.126238.0 hr24.0 hr1.34122IVBolus
555000.0 mg0.0662631 hr^-110.4605 hr0.0 hr94.9497 mg L^-194.9497 mg L^-10.204331 mg L^-10.212578 mg L^-1129.061 mg hr L^-124.0 hr132.145 mg hr L^-1571.015 L37.8373 L hr^-1132.269 mg hr L^-1570.478 L37.8017 L hr^-1100.826 L102.027 L24.0 hr0.204331 mg L^-10.204331 mg L^-194.9497 mg L^-10.0258122 hr L^-10.026429 hr L^-12.333520.00.0264539 hr L^-12.425420.0231.587 mg hr^2 L^-1352.13 mg hr^2 L^-134.2326356.995 mg hr^2 L^-135.12891.79439 hr2.66473 hr2.699 hr160.9902720.9870290.99512450.041868610.0 hr24.0 hr1.33837IVBolus
665000.0 mg0.146807 hr^-14.72149 hr0.35 hr61.846 mg L^-157.5621 mg L^-11.74827 mg L^-11.15121 mg L^-1291.951 mg hr L^-124.0 hr303.86 mg hr L^-1112.086 L16.455 L hr^-1299.793 mg hr L^-1113.606 L16.6782 L hr^-1100.45 L96.2222 L24.0 hr1.74827 mg L^-11.74827 mg L^-161.846 mg L^-10.0583902 hr L^-10.0607719 hr L^-13.919130.00.0599585 hr L^-12.615710.01487.99 mg hr^2 L^-11854.92 mg hr^2 L^-119.78121729.61 mg hr^2 L^-113.96945.09672 hr6.10452 hr5.76934 hr160.9545610.9488810.977016103.664182.0 hr24.0 hr4.65954IVBolus

Multiple doses

The interface of doing NCA with multiple doses is the same as doing single dose NCA. To load the data with multiple doses, one can do

multiple_doses_file = Pumas.example_nmtran_data("nca_test_data/dapa_IV_ORAL")
mdata = CSV.read(multiple_doses_file)

timeu = u"hr"
concu = u"mg/L"
amtu  = u"mg"
mdata.id = mdata.ID
mdata.time = mdata.TIME
mdata.conc = mdata.COBS
mdata.amt = mdata.AMT
mdata.route = replace(mdata.FORMULATION, "IV"=>"iv", "ORAL"=>"ev")
mdata.occasion = mdata.OCC
mpop = read_nca(mdata, timeu=timeu, concu=concu, amtu=amtu)
NCAPopulation (24 subjects):
  ID: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2
0, 21, 22, 23, 24]
    concentration: mg L^-1
    time:          hr
    auc:           mg hr L^-1
    aumc:          mg hr^2 L^-1
    λz:            hr^-1
    dose:          mg

Note that to read multiple doses files, in addition to single dose inputs, one also needs to provide the occasion column.

To plot:

plot(mpop)

To compute AUC and $\lambda z$:

df = NCA.auc(mpop)
first(df,6) # Print only the first 6 rows

6 rows × 3 columns

idoccasionauc
Int64Int64Unitful…
111263.793 mg hr L^-1
212202.165 mg hr L^-1
313421.956 mg hr L^-1
4141049.24 mg hr L^-1
521323.253 mg hr L^-1
622252.969 mg hr L^-1

To get a summary, we need to provide a reference dose. In this example, we are going to let the first dose be the reference dose.

rep = NCAReport(mpop, ithdose=1)
reportdf = NCA.to_dataframe(rep)
first(reportdf,6) # Print only the first 6 rows

6 rows × 54 columns

idoccasiondoseamtlambda_zhalf_lifetmaxtlagcmaxc0clastclast_predauclasttlastaucinf_obsvz_obscl_obsvz_f_obscl_f_obsaucinf_predvz_predcl_predvz_f_predcl_f_predvss_obsvss_predtmincmincminsscmax_dauclast_daucinf_d_obsauc_extrap_obsauc_back_extrap_obsaucinf_d_predauc_extrap_predauc_back_extrap_predaumclastaumcinf_obsaumc_extrap_obsaumcinf_predaumc_extrap_predmrtlastmrtinf_obsmrtinf_predn_samplesrsqrsq_adjustedcorr_xyno_points_lambda_zlambda_z_interceptlambda_z_lowerlambda_z_upperspanroute
Int64Int64Unitful…Unitful…Unitful…Unitful…Unitful…⍰Unitful…Unitful…⍰Unitful…Unitful…Unitful…Unitful…Unitful…Unitful…⍰Unitful…⍰Unitful…⍰Unitful…⍰Unitful…Unitful…⍰Unitful…⍰Unitful…⍰Unitful…⍰Unitful…Unitful…Unitful…Unitful…⍰Unitful…⍰Unitful…Unitful…Unitful…Float64Float64⍰Unitful…Float64Float64⍰Unitful…Unitful…Float64Unitful…Float64Unitful…Unitful…Unitful…Int64Float64Float64Float64Int64Float64Unitful…Unitful…Float64String
1115000 mg0.0387671 hr^-117.8798 hr0.0 hrmissing157.021 mg L^-1157.021 mg L^-10.653632 mg L^-10.600675 mg L^-1246.932 mg hr L^-124.0 hr263.793 mg hr L^-1488.927 L18.9543 L hr^-1missingmissing262.427 mg hr L^-1491.472 L19.0529 L hr^-1missingmissing101.429 L97.5492 L20.0 hr0.624201 mg L^-10.624201 mg L^-1157.021 mg L^-10.0493864 hr L^-10.0527585 hr L^-16.391560.00.0524853 hr L^-15.904290.0572.051 mg hr^2 L^-11411.62 mg hr^2 L^-159.47551343.6 mg hr^2 L^-157.42392.31663 hr5.35125 hr5.1199 hr160.8765850.8354470.93626150.42070910.0 hr24.0 hr0.783008IVBolus
2125000 mg0.192171 hr^-13.60693 hr1.0 hr0.0 hr86.3231 mg L^-1missing0.543704 mg L^-10.18412 mg L^-1199.335 mg hr L^-124.0 hr202.165 mg hr L^-1missingmissing128.699 L24.7323 L hr^-1200.294 mg hr L^-1missingmissing129.902 L24.9634 L hr^-173.9874 L68.5656 L0.0 hrmissingmissing86.3231 mg L^-10.0398671 hr L^-10.0404329 hr L^-11.39949missing0.0400587 hr L^-10.47835missing522.156 mg hr^2 L^-1604.781 mg hr^2 L^-113.662550.136 mg hr^2 L^-15.086052.61948 hr2.99153 hr2.74665 hr160.756550.7261190.869799102.919942.0 hr24.0 hr6.09938EV
31310000 mg0.0320026 hr^-121.6591 hr0.75 hr0.0 hr161.098 mg L^-1missing0.958538 mg L^-10.962079 mg L^-1392.004 mg hr L^-124.0 hr421.956 mg hr L^-1missingmissing740.539 L23.6992 L hr^-1422.066 mg hr L^-1missingmissing740.345 L23.693 L hr^-1150.752 L151.016 L0.0 hrmissingmissing161.098 mg L^-10.0392004 hr L^-10.0421956 hr L^-17.09835missing0.0422066 hr L^-17.1227missing1029.32 mg hr^2 L^-12684.08 mg hr^2 L^-161.6512690.19 mg hr^2 L^-161.73822.62579 hr6.36105 hr6.37387 hr160.9975170.9950330.99875830.72940416.0 hr24.0 hr0.36936EV
41425000 mg0.0244296 hr^-128.3732 hr0.5 hr0.0 hr385.549 mg L^-1missing2.38801 mg L^-12.37009 mg L^-1951.491 mg hr L^-124.0 hr1049.24 mg hr L^-1missingmissing975.322 L23.8267 L hr^-11048.51 mg hr L^-1missingmissing976.004 L23.8434 L hr^-1200.284 L199.481 L0.0 hrmissingmissing385.549 mg L^-10.0380596 hr L^-10.0419697 hr L^-19.31631missing0.0419403 hr L^-19.25287missing2472.44 mg hr^2 L^-18819.77 mg hr^2 L^-171.96718772.14 mg hr^2 L^-171.81492.59849 hr8.40585 hr8.3663 hr160.8555360.7833040.92495241.4492412.0 hr24.0 hr0.422934EV
5215000 mg0.0817121 hr^-18.48279 hr0.05 hrmissing66.354 mg L^-159.7702 mg L^-11.71656 mg L^-11.70205 mg L^-1302.246 mg hr L^-124.0 hr323.253 mg hr L^-1189.296 L15.4677 L hr^-1missingmissing323.076 mg hr L^-1189.4 L15.4762 L hr^-1missingmissing111.445 L111.26 L24.0 hr1.71656 mg L^-11.71656 mg L^-166.354 mg L^-10.0604492 hr L^-10.0646507 hr L^-16.498740.00.0646151 hr L^-16.447340.01567.78 mg hr^2 L^-12329.05 mg hr^2 L^-132.68582322.61 mg hr^2 L^-132.49935.18709 hr7.20502 hr7.18906 hr160.997980.995960.99898932.4929216.0 hr24.0 hr0.943086IVBolus
6225000 mg0.102657 hr^-16.75204 hr1.0 hr0.0 hr42.9419 mg L^-1missing1.22754 mg L^-11.17944 mg L^-1241.011 mg hr L^-124.0 hr252.969 mg hr L^-1missingmissing192.536 L19.7653 L hr^-1252.5 mg hr L^-1missingmissing192.894 L19.802 L hr^-1132.233 L131.485 L0.0 hrmissingmissing42.9419 mg L^-10.0482022 hr L^-10.0505938 hr L^-14.72692missing0.0505 hr L^-14.55015missing1288.94 mg hr^2 L^-11692.41 mg hr^2 L^-123.83971676.6 mg hr^2 L^-123.12165.34806 hr6.69018 hr6.63999 hr160.99240.98860.99619342.6288212.0 hr24.0 hr1.77724EV
using PumasTutorials
PumasTutorials.tutorial_footer(WEAVE_ARGS[:folder],WEAVE_ARGS[:file])

Appendix

These tutorials are part of the PumasTutorials.jl repository, found at: https://github.com/JuliaDiffEq/DiffEqTutorials.jl

To locally run this tutorial, do the following commands:

using PumasTutorials
PumasTutorials.weave_file("nca","basic_nca.jmd")

Computer Information:

Julia Version 1.1.1
Commit 55e36cc308 (2019-05-16 04:10 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, skylake)
Environment:
  JULIA_EDITOR = "C:\Users\accou\AppData\Local\atom\app-1.38.2\atom.exe"  -a
  JULIA_NUM_THREADS = 4

Package Information:

Status `C:\Users\accou\.julia\environments\v1.1\Project.toml`
[621f4979-c628-5d54-868e-fcf4e3e8185c] AbstractFFTs 0.4.1
[c52e3926-4ff0-5f6e-af25-54175e0327b1] Atom 0.8.8
[f0abef60-9ec0-11e9-27de-db6506a91768] AutoOffload 0.1.0
[6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf] BenchmarkTools 0.4.2
[4ece37e6-a012-11e8-38cd-91247efc2c34] Bioequivalence 0.1.0
[336ed68f-0bac-5ca0-87d4-7b16caf5d00b] CSV 0.5.9
[c5f51814-7f29-56b8-a69c-e4d8f6be1fde] CUDAdrv 3.0.1
[be33ccc6-a3ff-5ff2-a52e-74243cff1e17] CUDAnative 2.2.1
[49dc2e85-a5d0-5ad3-a950-438e2897f1b9] Calculus 0.5.0
[7057c7e9-c182-5462-911a-8362d720325c] Cassette 0.2.5
[34da2185-b29b-5c13-b0c7-acf172513d20] Compat 2.1.0
[3a865a2d-5b23-5a0f-bc46-62713ec82fae] CuArrays 1.1.0
[667455a9-e2ce-5579-9412-b964f529a492] Cubature 1.4.0
[a93c6f00-e57d-5684-b7b6-d8193f3e46c0] DataFrames 0.18.4
[82cc6244-b520-54b8-b5a6-8a565e85f1d0] DataInterpolations 0.2.0
[31a5f54b-26ea-5ae9-a837-f05ce5417438] Debugger 0.5.0
[bcd4f6db-9728-5f36-b5f7-82caef46ccdb] DelayDiffEq 5.9.1
[2b5f629d-d688-5b77-993f-72d75c75574e] DiffEqBase 5.16.3
[ebbdde9d-f333-5424-9be2-dbf1e9acfb5e] DiffEqBayes 1.2.0
[31c91b34-3c75-11e9-0341-95557aab0344] DiffEqBenchmarks 0.1.0
[459566f4-90b8-5000-8ac3-15dfb0a30def] DiffEqCallbacks 2.5.2+
[f3b72e0c-5b89-59e1-b016-84e28bfd966d] DiffEqDevTools 2.13.0
[01453d9d-ee7c-5054-8395-0335cb756afa] DiffEqDiffTools 0.14.0
[aae7a2af-3d4f-5e19-a356-7da93b79d9d0] DiffEqFlux 0.5.2
[071ae1c0-96b5-11e9-1965-c90190d839ea] DiffEqGPU 0.1.0
[c894b116-72e5-5b58-be3c-e6d8d4ac2b12] DiffEqJump 6.1.1+
[8f2b45d5-b17b-5532-9e92-98ae0077e2e3] DiffEqMachineLearning 0.1.0
[78ddff82-25fc-5f2b-89aa-309469cbf16f] DiffEqMonteCarlo 0.15.1
[77a26b50-5914-5dd7-bc55-306e6241c503] DiffEqNoiseProcess 3.3.1
[9fdde737-9c7f-55bf-ade8-46b3f136cc48] DiffEqOperators 3.5.0
[055956cb-9e8b-5191-98cc-73ae4a59e68a] DiffEqPhysics 3.2.0
[a077e3f3-b75c-5d7f-a0c6-6bc4c8ec64a9] DiffEqProblemLibrary 4.3.0
[41bf760c-e81c-5289-8e54-58b1f1f8abe2] DiffEqSensitivity 3.3.0
[6d1b261a-3be8-11e9-3f2f-0b112a9a8436] DiffEqTutorials 0.1.0
[0c46a032-eb83-5123-abaf-570d42b7fbaa] DifferentialEquations 6.6.0
[31c24e10-a181-5473-b8eb-7969acd0382f] Distributions 0.20.0
[e30172f5-a6a5-5a46-863b-614d45cd2de4] Documenter 0.23.0
[587475ba-b771-5e3f-ad9e-33799f191a9c] Flux 0.8.3
[f6369f11-7733-5829-9624-2563aa707210] ForwardDiff 0.10.3+
[ba82f77b-6841-5d2e-bd9f-4daf811aec27] GPUifyLoops 0.2.5
[c91e804a-d5a3-530f-b6f0-dfbca275c004] Gadfly 1.1.0
[bc5e4493-9b4d-5f90-b8aa-2b2bcaad7a26] GitHub 5.1.1
[7073ff75-c697-5162-941a-fcdaad2a7d2a] IJulia 1.18.1
[42fd0dbc-a981-5370-80f2-aaf504508153] IterativeSolvers 0.8.1
[033835bb-8acc-5ee8-8aae-3f567f8a3819] JLD2 0.1.2
[e5e0dc1b-0480-54bc-9374-aad01c23163d] Juno 0.7.0
[2d691ee1-e668-5016-a719-b2531b85e0f5] LIBLINEAR 0.5.1
[7f56f5a3-f504-529b-bc02-0b1fe5e64312] LSODA 0.4.0
[6f1fad26-d15e-5dc8-ae53-837a1d7b8c9f] Libtask 0.3.0
[c7f686f2-ff18-58e9-bc7b-31028e88f75d] MCMCChains 0.3.10
[33e6dc65-8f57-5167-99aa-e5a354878fb2] MKL 0.0.0
[961ee093-0014-501f-94e3-6117800e7a78] ModelingToolkit 0.5.0
[4886b29c-78c9-11e9-0a6e-41e1f4161f7b] MonteCarloIntegration 0.0.1
[2774e3e8-f4cf-5e23-947b-6d7e65073b56] NLsolve 4.0.0
[8faf48c0-8b73-11e9-0e63-2155955bfa4d] NeuralNetDiffEq 0.1.0
[09606e27-ecf5-54fc-bb29-004bd9f985bf] ODEInterfaceDiffEq 3.3.1
[1dea7af3-3e70-54e6-95c3-0bf5283fa5ed] OrdinaryDiffEq 5.12.0
[65888b18-ceab-5e60-b2b9-181511a3b968] ParameterizedFunctions 4.2.0
[14b8a8f1-9102-5b29-a752-f990bacb7fe1] PkgTemplates 0.6.1
[91a5bcdd-55d7-5caf-9e0b-520d859cae80] Plots 0.25.3
[92933f4c-e287-5a05-a399-4b506db050ca] ProgressMeter 1.0.0
[d7b8c89e-ad89-52e0-b9fd-d0ed321fa021] Pumas 0.1.0
[b7b41870-aa11-11e9-048a-09266ec4a62f] PumasTutorials 0.0.1
[438e738f-606a-5dbb-bf0a-cddfbfd45ab0] PyCall 1.91.2
[d330b81b-6aea-500a-939a-2ce795aea3ee] PyPlot 2.8.1
[1fd47b50-473d-5c70-9696-f719f8f3bcdc] QuadGK 2.1.0
[612083be-0b0f-5412-89c1-4e7c75506a58] Queryverse 0.3.1
[6f49c342-dc21-5d91-9882-a32aef131414] RCall 0.13.3
[731186ca-8d62-57ce-b412-fbd966d074cd] RecursiveArrayTools 0.20.0
[37e2e3b7-166d-5795-8a7a-e32c996b4267] ReverseDiff 0.3.1
[295af30f-e4ad-537b-8983-00126c2a3abe] Revise 2.1.6
[2b6d1eac-7baa-5078-8adc-e6a3e659f14f] SingleFloats 0.1.3
[47a9eef4-7e08-11e9-0b38-333d64bd3804] SparseDiffTools 0.4.0
[90137ffa-7385-5640-81b9-e52037218182] StaticArrays 0.11.0
[4c63d2b9-4356-54db-8cca-17b64c39e42c] StatsFuns 0.8.0
[f3b207a7-027a-5e70-b257-86293d7955fd] StatsPlots 0.11.0
[9672c7b4-1e72-59bd-8a11-6ac3964bc41f] SteadyStateDiffEq 1.5.0
[789caeaf-c7a9-5a7d-9973-96adeb23e2a0] StochasticDiffEq 6.6.0
[c3572dad-4567-51f8-b174-8c6c989267f4] Sundials 3.6.1
[fd094767-a336-5f1f-9728-57cf17d0bbfb] Suppressor 0.1.1
[6fc51010-71bc-11e9-0e15-a3fcc6593c49] Surrogates 0.1.0
[9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c] Tracker 0.2.2
[fce5fe82-541a-59a6-adf8-730c64b5f9a0] Turing 0.6.18
[1986cc42-f94f-5a68-af5c-568840ba703d] Unitful 0.16.0
[44d3d7a6-8a23-5bf8-98c5-b353f8df5ec9] Weave 0.9.1
[e88e6eb3-aa80-5325-afca-941959d7151f] Zygote 0.3.2