Skip to content

MSDLLCpapers/adp

Repository files navigation

Automated Dose Prediction (ADP) Library

A Python library for preclinical human dose projection based on pharmacokinetic (PK) data and compound properties using compartmental models and allometric scaling, in support of the publication Large-Scale Compartmental Model-Based Study of Preclinical Pharmacokinetic Data and Its Impact on Compound Triaging in Drug Discovery at https://pubs.acs.org/doi/10.1021/acs.molpharmaceut.4c00813.

License: MIT Python 3.8+

Table of Contents

Overview

The Automated Dose Prediction (ADP) library performs preclinical human dose projection, based on pharmacokinetic (PK) data and compound properties. It aims to predict the required dose of a compound to achieve a specific target concentration (e.g., average steady-state concentration - Cssavg, or trough concentration - Ctrough) in a target species (animal or human).

For an in-depth understanding of the ADP prediction and the project behind it, refer to our published article Large-Scale Compartmental Model-Based Study of Preclinical Pharmacokinetic Data and Its Impact on Compound Triaging in Drug Discovery.

Why ADP Exists

Reliable and robust human dose prediction plays a pivotal role in drug discovery. By predicting human dose early in the drug discovery process, it is possible to reduce the time and resources spent on studying compounds that may not have a safe, effective, and commercially viable dosage in humans. Human dose prediction is crucial for:

  • Compound triaging and prioritization: Identifying and prioritizing compounds with the highest probability of success for further discovery and development
  • Early decision-making: Reducing drug attrition in clinical development by integrating information from in vitro assays, in vivo animal experiments, and in silico models
  • Resource optimization: Avoiding investment in compounds that require impractically high doses or have unfavorable PK properties
  • Clinical trial planning: Providing data-driven starting doses for first-in-human studies

The Challenge

Traditional approaches to preclinical PK data analysis typically use noncompartmental analysis (NCA) for routine and large-scale animal PK data analysis. While NCA is straightforward and easy to implement, it has significant limitations:

  • Loss of information: NCA does not capture the shape of the PK curve, assuming a monoexponential decline in concentrations
  • Limited applicability: For compounds with multiexponential PK behavior, NCA provides insufficient description
  • Simulation constraints: NCA cannot support dose simulations with two-compartmental models, as it provides no information on the kinetics of distribution

Compartmental analysis offers a more comprehensive interpretation by conceptualizing the body as interconnected compartments, capturing the full shape of observed PK data. However, it has historically been impractical for large-scale compound triaging because:

  • Manual compartmental analysis is too time-consuming to keep pace with active drug discovery programs
  • Commercial software requires individual scientist intervention and cannot be scaled to thousands of compounds

The ADP Solution

ADP addresses these challenges by enabling automated and efficient large-scale compartmental modeling and simulation for discovery compound triaging. Working in conjunction with the Compartmental PK (CPK) tool for automated PK data fitting, ADP performs:

  1. Automated translation: Scaling animal PK parameters to human using allometric scaling with protein binding correction
  2. Compartmental simulation: Predicting human dose through one- and two-compartmental model simulations
  3. High-throughput processing: Handling thousands of compounds to support compound triaging decisions
  4. Integration of best information: Incorporating the latest data on absorption, distribution, metabolism, and clearance

This approach has been validated on approximately 50,000 IV PK studies for around 37,000 compounds, demonstrating that while different methods have minimal impact on estimating animal PK parameters, they significantly affect predicted human dose, exposure, and Cmax. ADP therefore enables efficient, complex human dose predictions at scale while maintaining the rigor of compartmental analysis.

For an in-depth understanding of the ADP prediction and the project behind it, refer to our published article: Large-Scale Compartmental Model-Based Study of Preclinical Pharmacokinetic Data and Its Impact on Compound Triaging in Drug Discovery.

Features

Pharmacokinetic Models

  • One-compartment model: For compounds with simple distribution kinetics
  • Two-compartment model: For compounds with distinct distribution and elimination phases
  • Single-dose and steady-state: Supports both dosing paradigms

Allometric Scaling

  • Species supported: Rat, Dog, Monkey, Mouse → Human
  • Fraction unbound correction: Adjusts for protein binding differences
  • Single-species allometry (SSA): Empirically derived scaling factors for clearance

PK Targets

  • Ctrough: Trough concentration at the end of dosing interval
  • Cssavg: Average steady-state concentration

Flexible Input

  • Command-line interface: Run predictions directly from terminal
  • Python API: Integrate into workflows and pipelines
  • Batch processing: Handle multiple compounds via JSON or CSV

Output Metrics

  • Target human dose (mg)
  • Pharmacokinetic parameters (half-life, Cmax, AUC, tmax)
  • Volume Ligand Efficiency (VLE)
  • Scaled human PK parameters (V1, V2, CL, CL2)

Installation and Usage

See QUICKSTART.md for detailed installation instructions and usage examples.

Quick install:

pip install -e .

Quick usage:

from adp import DosePredictor

predictor = DosePredictor(
    animal="RAT",
    pk_model="one_comp",
    parent_weight=450.5,
    bioavailability=0.85,
    absorption_rate_constant=0.5,
    human_fraction_unbound=0.1,
    animal_fraction_unbound=0.15,
    target_concentration=1.0,
    in_vitro_potency_uM=0.05,
    pk_target="Ctrough",
    tau=24.0,
    time_t=24.0,
    is_single_dose=False,
    animal_v1_L_per_kg=2.5,
    animal_cl_L_per_hr_per_kg=0.8
)

predictor.predict()
print(f"Target Dose: {predictor.target_dose_mg:.2f} mg")

Scientific Background

Compartmental Pharmacokinetics

ADP uses compartmental PK models that represent the body as one or more kinetically homogeneous compartments. These models describe drug concentration over time using differential equations.

One-Compartment Model:

  • Central compartment with first-order absorption and elimination
  • Suitable for compounds with rapid distribution
  • Parameters: V1 (volume), CL (clearance), ka (absorption rate)

Two-Compartment Model:

  • Central and peripheral compartments
  • Captures distribution phase followed by elimination phase
  • Parameters: V1, V2, CL, CL2 (intercompartmental clearance), ka

Allometric Scaling

Allometric scaling translates PK parameters across species based on body size:

Volume of Distribution:

Vd,human = Vd,animal × (fu,animal / fu,human)

Clearance:

CL,human = CL,animal × (fu,human / fu,animal) × SSA

Where:

  • fu = fraction unbound in plasma
  • SSA = single-species allometry factor (species-specific)

Intercompartmental Clearance:

CL2,human = CL2,animal × (fu,human / fu,animal) × (BW,human / BW,animal)^0.75

Volume Ligand Efficiency (VLE)

VLE is a compound optimization metric that combines potency and distribution:

VLE = -log10(EC50) - log10(Vd,u)

Where:

  • EC50 = in vitro potency (M)
  • Vd,u = unbound volume of distribution (L/kg)

Higher VLE indicates better compound efficiency (higher potency and/or smaller unbound volume).

Concentration-Time Equations

One-Compartment (Steady-State):

C(t) = (F × D × ka)/(V1 × (ka - ke)) × [exp(-ke × t)/(1 - exp(-ke × τ)) - exp(-ka × t)/(1 - exp(-ka × τ))]

Two-Compartment (Steady-State):

C(t) = A × exp(-α × t)/(1 - exp(-α × τ)) + B × exp(-β × t)/(1 - exp(-β × τ)) 
       - (A + B) × exp(-ka × t)/(1 - exp(-ka × τ))

Where:

  • F = bioavailability
  • D = dose
  • τ = dosing interval
  • ka = absorption rate constant
  • ke = elimination rate constant
  • α, β = distribution/elimination rate constants (two-comp)
  • A, B = pre-exponential coefficients

Core Concepts

Required Parameters

Parameter Description Units
animal Source species RAT, DOG, MONKEY, MOUSE
pk_model Compartment model one_comp, two_comp
parent_weight Molecular weight g/mol
bioavailability Fraction absorbed 0-1
absorption_rate_constant ka 1/hr
human_fraction_unbound fu,human 0-1
animal_fraction_unbound fu,animal 0-1
target_concentration Target C μM
in_vitro_potency_uM EC50/IC50 μM
pk_target PK metric Ctrough, Cssavg
tau Dosing interval hr
time_t Evaluation time hr
is_single_dose Dosing paradigm True/False

Animal PK Parameters (Optional)

If human PK parameters are not directly available, provide animal parameters for allometric scaling:

Parameter Description Units
animal_v1_L_per_kg Central volume L/kg
animal_cl_L_per_hr_per_kg Clearance L/hr/kg
animal_v2_L_per_kg Peripheral volume (two_comp) L/kg
animal_cl2_L_per_hr_per_kg Intercompartmental CL (two_comp) L/hr/kg

Output Attributes

After calling predict(), these attributes are populated:

Attribute Description Units
target_dose_mg Predicted human dose mg
half_life Elimination half-life hr
time_to_max_concentration Time to Cmax hr
max_concentration Peak concentration μM
mean_residence_time MRT hr
auc_tau AUC(0-τ) μM·hr
auc_infinity AUC(0-∞) single dose μM·hr
volume_ligand_efficiency VLE metric -
elimination_rate_constant ke 1/hr
human_v1_L_per_kg Human V1 L/kg
human_cl_L_per_hr_per_kg Human CL L/hr/kg
execution_comments Warnings/errors list

Examples

Example 1: One-Compartment Model

from adp import DosePredictor

predictor = DosePredictor(
    animal="RAT",
    pk_model="one_comp",
    parent_weight=450.5,
    bioavailability=0.85,
    absorption_rate_constant=0.5,
    human_fraction_unbound=0.1,
    animal_fraction_unbound=0.15,
    target_concentration=1.0,
    in_vitro_potency_uM=0.05,
    pk_target="Ctrough",
    tau=24.0,
    time_t=24.0,
    is_single_dose=False,
    animal_v1_L_per_kg=2.5,
    animal_cl_L_per_hr_per_kg=0.8
)

predictor.predict()

print(f"Target Dose: {predictor.target_dose_mg:.2f} mg")
print(f"Half-life: {predictor.half_life:.2f} hr")
print(f"VLE: {predictor.volume_ligand_efficiency:.4f}")

Example 2: Two-Compartment Model

predictor = DosePredictor(
    animal="DOG",
    pk_model="two_comp",
    parent_weight=550.8,
    bioavailability=0.75,
    absorption_rate_constant=0.8,
    human_fraction_unbound=0.08,
    animal_fraction_unbound=0.12,
    target_concentration=2.5,
    in_vitro_potency_uM=0.1,
    pk_target="Cssavg",
    tau=12.0,
    time_t=12.0,
    is_single_dose=False,
    animal_v1_L_per_kg=1.8,
    animal_v2_L_per_kg=1.2,
    animal_cl_L_per_hr_per_kg=0.5,
    animal_cl2_L_per_hr_per_kg=0.3
)

predictor.predict()

Example 3: Command-Line Interface

Single prediction:

adp --animal RAT --pk-model one_comp --parent-weight 450.5 \
    --bioavailability 0.85 --absorption-rate-constant 0.5 \
    --human-fraction-unbound 0.1 --animal-fraction-unbound 0.15 \
    --target-concentration 1.0 --in-vitro-potency-uM 0.05 \
    --pk-target Ctrough --tau 24.0 --time-t 24.0 \
    --animal-v1-L-per-kg 2.5 --animal-cl-L-per-hr-per-kg 0.8

Batch from JSON:

adp --input-json compounds.json --output-json results.json

Batch from CSV:

adp --input-csv compounds.csv --output-csv results.csv

API Reference

DosePredictor Class

class DosePredictor:
    """Main class for dose prediction."""
    
    def __init__(self, animal: str, pk_model: str, ...):
        """Initialize with PK parameters and compound properties."""
    
    def predict(self) -> None:
        """Execute dose prediction workflow."""
    
    def add_comment(self, comment: str) -> None:
        """Add execution comment."""

Constants Module

# Body weights (kg)
HUMAN_BW = 70
RAT_BW = 0.25
DOG_BW = 12
MONKEY_BW = 8
MOUSE_BW = 0.025

# Single-species allometry factors
RAT_SSA = 0.152
DOG_SSA = 0.410
MONKEY_SSA = 0.407

def get_default_body_weight_and_ssa(organism: str) -> Tuple[float, float]:
    """Get body weight and SSA for a species."""

Command-Line Interface

# Show help
adp --help

# Single prediction
adp --animal ANIMAL --pk-model MODEL [options...]

# Batch from JSON
adp --input-json INPUT.json --output-json OUTPUT.json

# Batch from CSV
adp --input-csv INPUT.csv --output-csv OUTPUT.csv

Contributing

We welcome contributions from the community! Here's how you can help:

Reporting Issues

If you encounter bugs, have feature requests, or need help:

  1. Open an issue on the GitHub repository
  2. Provide a clear description of the problem or suggestion
  3. Include relevant details:
    • Python version
    • Operating system
    • Code snippet to reproduce (if applicable)
    • Error messages

Getting Help

  • GitHub Issues: For bug reports and feature requests
  • Email: Contact us at the address in the Contact section
  • Documentation: Check QUICKSTART.md for usage examples

Development Guidelines

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes with clear commit messages
  4. Add tests if applicable
  5. Update documentation
  6. Submit a pull request

Citation

If you use ADP in your research, please cite our paper:

@article{ADP2024,
  title={Large-Scale Compartmental Model-Based Study of Preclinical Pharmacokinetic Data and Its Impact on Compound Triaging in Drug Discovery},
  journal={Molecular Pharmaceutics},
  year={2024},
  doi={10.1021/acs.molpharmaceut.4c00813},
  url={https://pubs.acs.org/doi/10.1021/acs.molpharmaceut.4c00813}
}

License

This project is licensed under the MIT License - see the LICENCE file for details.

Contact


Version: 1.0.0

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages