Parallel Study Design

The Getting started example assumes a crossover design where every subject receives both the IV reference and the oral test formulations. This guide demonstrates a parallel design where one group receives IV only and a separate group receives the oral formulations. Since oral subjects have no individual IV data, UIR fitting uses the mean_uir_fallback=true option to apply the mean UIR from the IV group.

Simulated data

Group A (subjects 1–10) receives only the IV bolus. Group B (subjects 11–20) receives three oral formulations but no IV data.

first(pk_df, 8)
8×4 DataFrame
Rowidformulationtimeconc
Int64StringFloat64Float64
11IV0.08.84915
21IV0.57.86636
31IV1.06.99273
41IV1.56.21611
51IV2.05.52575
61IV2.54.91207
71IV3.04.36653
81IV3.53.88159
first(diss_df, 8)
8×3 DataFrame
Rowformulationtimediss
StringFloat64Float64
1FormA0.00.0
2FormA0.50.0432318
3FormA1.00.117503
4FormA1.50.20518
5FormA2.00.297811
6FormA2.50.389884
7FormA3.00.477703
8FormA3.50.558902

Running the pipeline with mean_uir_fallback

The key parameter is mean_uir_fallback=true: oral subjects (who lack IV data) are deconvolved using the population-mean UIR computed from the IV-only group.

result = run_ivivc(
    pk_df,
    diss_df;
    fast_formulation = "IV",
    validation_formulation = "FormB",
    times = collect(range(0.0, 48.0, length = 101)),
    mean_uir_fallback = true,
);

UIR fits

Only the IV-group subjects have individual UIR fits. The mean UIR is applied to the oral-group subjects during deconvolution.

first(result.uir_df, 8)
8×3 DataFrame
Rowidformulationuir
AnyStringPolyExpo…
13IVPolyExponential{Float64, Float64}([9.87871], [0.199118], 1.0, 1.0)
22IVPolyExponential{Float64, Float64}([10.0916], [0.183047], 1.0, 1.0)
31IVPolyExponential{Float64, Float64}([8.84915], [0.235451], 1.0, 1.0)
44IVPolyExponential{Float64, Float64}([12.5107], [0.198256], 1.0, 1.0)
55IVPolyExponential{Float64, Float64}([8.84737], [0.204248], 1.0, 1.0)
66IVPolyExponential{Float64, Float64}([8.72146], [0.230911], 1.0, 1.0)
78IVPolyExponential{Float64, Float64}([9.39545], [0.203476], 1.0, 1.0)
87IVPolyExponential{Float64, Float64}([9.70289], [0.192404], 1.0, 1.0)

Model parameters

coeftable(result.model)
4×3 DataFrame
Rowparameterconstantestimate
SymbolBoolFloat64
1abs_scalefalse1.0482
2abs_interceptfalse0.0101697
3time_scalefalse0.793854
4time_shiftfalse-0.170846

Plots

concentration_profiles(result)
Example block output
dissolution_profiles(result)
Example block output
absorption_profiles(result)
Example block output
levy_plot(result)
Example block output
ivivc_correlation(result)
Example block output