Model Import¶
NeoPKPD can import models from other pharmacometrics platforms, enabling migration and interoperability.
Supported Formats¶
-
NONMEM
Parse NONMEM control stream files (.ctl, .mod)
-
Monolix
Parse Monolix project files (.mlxtran)
-
CDISC Data
Import CDISC/SDTM formatted data
NONMEM Import¶
Supported Features¶
| Feature | Support | Notes |
|---|---|---|
| ADVAN1 (1-comp IV) | ✅ Full | Direct mapping |
| ADVAN2 (1-comp oral) | ✅ Full | Ka, CL, V |
| ADVAN3 (2-comp IV) | ✅ Full | CL, V1, Q, V2 |
| ADVAN4 (2-comp oral) | ✅ Full | Ka, CL, V1, Q, V2 |
| ADVAN11 (3-comp IV) | ✅ Full | Full three-comp |
| ADVAN12 (3-comp oral) | ✅ Full | With absorption |
| TRANS parameters | ✅ Full | TRANS1-4 |
| $THETA | ✅ Full | Fixed effects |
| $OMEGA | ✅ Full | Random effects |
| $SIGMA | ✅ Full | Residual error |
| $ERROR | ⚠️ Partial | Common patterns |
| $PK | ⚠️ Partial | Standard code |
Quick Start¶
using NeoPKPD
# Import NONMEM control stream
model = import_nonmem("run001.ctl")
# Access parsed components
println("Model type: ", model.advan)
println("THETA: ", model.theta)
println("OMEGA: ", model.omega)
# Convert to NeoPKPD ModelSpec
spec = to_model_spec(model)
CLI Usage¶
Monolix Import¶
Supported Features¶
| Feature | Support |
|---|---|
| Structural models | ✅ Full |
| Parameter definitions | ✅ Full |
| Random effects | ✅ Full |
| Covariate models | ⚠️ Partial |
| Error models | ✅ Full |
Quick Start¶
# Import Monolix project
model = import_monolix("project.mlxtran")
# Convert to NeoPKPD
spec = to_model_spec(model)
CDISC Data Import¶
Supported Domains¶
| Domain | Description | Support |
|---|---|---|
| PC | Pharmacokinetic Concentrations | ✅ Full |
| EX | Exposure (Dosing) | ✅ Full |
| DM | Demographics | ✅ Full |
| VS | Vital Signs | ⚠️ Partial |
| LB | Laboratory | ⚠️ Partial |
Quick Start¶
# Import CDISC data
data = import_cdisc(
pc_path = "pc.csv",
ex_path = "ex.csv",
dm_path = "dm.csv",
format = :csv # or :xpt for SAS transport
)
# Access standardized data
println("Subjects: ", length(unique(data.usubjid)))
println("Observations: ", length(data.dv))
Data Structure¶
struct CDISCData
# Subject identifiers
usubjid::Vector{String}
subjid::Vector{Int}
# Time and observations
times::Vector{Float64}
dv::Vector{Float64}
# Dosing
doses::Vector{DoseEvent}
dose_times::Vector{Float64}
dose_amounts::Vector{Float64}
# Demographics
age::Vector{Float64}
sex::Vector{Symbol}
weight::Vector{Float64}
# Metadata
study::String
analyte::String
end
Migration Workflow¶
NONMEM to NeoPKPD¶
graph LR
A[NONMEM .ctl] --> B[import_nonmem]
B --> C[ParsedModel]
C --> D[to_model_spec]
D --> E[NeoPKPD ModelSpec]
E --> F[Simulate/Estimate]
Step-by-Step¶
-
Parse control stream
-
Review parsed model
-
Convert to NeoPKPD
-
Validate with simulation
-
Compare to NONMEM output
Limitations¶
NONMEM¶
- Custom \(PK/\)ERROR blocks may not parse correctly
- User-defined ADVAN/TRANS not supported
- Complex conditional logic requires manual conversion
Monolix¶
- Custom structural models need adaptation
- Some advanced features may not translate
Workarounds¶
For unsupported features:
- Simplify the NONMEM code before import
- Manually define the NeoPKPD model
- Use the CLI
--validateflag to check import accuracy
Next Steps¶
- NONMEM Details - Complete NONMEM import guide
- Monolix Details - Monolix project import
- CDISC Details - CDISC data format support