Research Associate @ Institute of Labor, Occupational Safety And Health, Ministry of Labor
Postdoctoral Research Associate @ Texas A&M University
Associate Toxicologist @ California Environmental Protection Agency
My Research: Computational Toxicology & Risk Assessment
Interest: Software Development
Why We Need to Do
Computational Modeling
in Toxicology?
Why We Need to Do
Computational Modeling
in Toxicology?
"Prediction"
The study of the movement of chemicals in and out of the body (“what the body does to the chemical”)
ADME process
Absorption - How will it get in?
Distribution - Which tissue organ it will go?
Metabolism - How is it broken down and transformation?
Excretion - How it leave the body?
Kinetics: rates of change
PK is focus on TIME (t) and CONCENTRATION (C)
Pharmacokinetics is the study of the fate of chemical in a living organism through ADME process (absorption, distribution, metabolism, and elimination).
"PK" focus on DOSE to CONCENTRATION / "PD" focus on Concentration to Response
t: Time
C: Concentration
Cmax: The peak concentration
tmax: Time to reach Cmax
t1/2: Elimination half- life
AUC: Area under the curve
During the continous dose administered
Css: The averaged concentration
Cmin: The lowest concentration that a drug reaches
https://en.wikipedia.org/wiki/Pharmacokinetics
Bioavailability ia a key factor for substance becomes available to the target tissue after administration.
Different exposure route can related to different PK profile
Transfer of the chemical between general circulation and tissues
Important toxicologically because tissue concentration drives toxicity
Factors affecting tissue distribution
Tissue distribution (For chemicals that rapidly diffuse through membranes)
Enzyme systems, etc. covered in separate class.
Key issues relevant to risk assessment
Metabolism process
Initial conjugation with GSH
Subsequent biotransformation occurs in multiple tissues via both Phase I and Phase II metabolism
Lash, L.H., et al. 2014. Trichloroethylene biotransformation and its role in mutagenicity.
Excretion and elimination are often confused
The elimination is independent with internal chemical dose
The elimination is dependent with internal chemical dose
Concentration prediction
Identifying the toxicologically active agent(s)
Providing a basis for extrapolating from experimental studies to humans
Characterizing how humans may vary in their response to exposure due to differences in internal dose
Pharmaceutical research
Drug development
Health risk assessment
. . .
According to Toxic Substances Control Act (TSCA), to address thousands of chemicals, we need to use new approach methodologies (NAMs) to prioritize the existing and new chemicals for testing.
source: USEPA
Numerical
dAdt=−ke⋅A
Analytical
A(t)=A0⋅e−ke⋅t
A: Amount in body (mass); A0 initial amount (mass); t: time; ke: Elimination rate constant (/time)
The basic meaning of elimination rate is that the decreasing speed is the propotion of current concentration.
Numerical
dAdt=−ke⋅A
Analytical
At=A0⋅e−ke⋅t
A_0 <- 10t <- c(0,1,2,4,8,10)k_e <- 0.5A_t <- A_0*exp(-k_e*t) plot(t, A_t, type = "b")
C(t)=F⋅D⋅kaV(ka−ke)⋅(e−ket−e−kat)
D: Dose (mass)
F: Bioavailability (-)
Ka Absorption rate constant (/time)
ke Elimination rate constant (/time)
V: Distribution Volume (Vol)
Can continue adding compartments to fit more complex concentration-time profiles.
Can provide useful descriptions of the data.
Luo, Y.S., Hsieh, N.H., Soldatow, V.Y., Chiu, W.A. and Rusyn, I., 2018. Comparative Analysis of Metabolism of Trichloroethylene and Tetrachloroethylene among Mouse Tissues and Strains. Toxicology, 409, pp.33-43.
Mathematically transcribing anatomical, physiological, physical, and chemical descriptions of the phenomena involved in the complex ADME processes.
There are some processes that empirical models have difficulty simulating – such as inhalation exposures.
We know a lot about the physiology/anatomy of the organisms we study and want to protect.
By developing a model, we can incorporate that information to help us make inferences beyond the experimental data at hand.
Decide on what compartments are needed
Specify the (interrelated) equations for each compartment
Specify parameter values
Set up the inputs (doses, exposure concentrations, etc.) and outputs (blood, tissue, exhaled breath concentrations).
Solve using numerical differential equation solver and compare with data
Iteration may be needed for refining model and/or conducting additional experiments
Model Construction
Parameter Estimates
PBPK modeling
Chen et al. (2015) Physiologically based pharmacokinetic modeling of zinc oxide nanoparticles and zinc nitrate in mice.
Flow in and out of “storage” compartments involve only blood flow
Key parameters/variables
Qi = tissue blood flow
Pi = tissue-blood partition coefficient
Vi = volume of tissue
Ca = arterial blood concentration
CVi = venous blood concentration leaving tissue
Ai = amount in tissue
Ci = concentration in tissue
The model equations follow the principles of mass transport, fluid dynamics, and biochemistry in order to simulate the fate of a substance in the body.
rate in =QiCart & rate out =QiCVT=Qi⋅Ci/Pi (Unit: mass/time)
Change in amount = rate in – rate out
dAidt=Qi(Cart−AiPiVi)
or
dCidt=QiVi(Cart−CiPiVi)
Ai is amount of chemical, Qi is blood flow, Cart incoming arterial blood concentration, Pi the tissue over blood partition coefficient, and Vi the volume of compartment i.
Cart=Qpul(1−rds)Cinh+QtotCvenQpul(1−rds)/Pair+Qtot
dAivdt=Qliv(Cart−AlivPlivVliv)−kmetAliv+Ring
A: quantity; Q: flow rate; rds: deadspace ratio; C: concentration; Ring: administration rate; P partition coefficient; k rate constant
Bois F.Y., Brochot C. (2016) Modeling Pharmacokinetics. In: Benfenati E. (eds) In Silico Methods for Predicting Drug Toxicity. Methods in Molecular Biology
Simulation package, which allows you to:
design and run simulation models (using algebraic or differential equations)
perform Monte Carlo stochastic simulations
do Bayesian inference through Markov Chain Monte Carlo simulations
has faster computing speed than other simulation software/packages (e.g., Asclx, Berkeley Madonna, RStan)
Programming language that allows you to:
conduct statistical analysis (summarization, estimation)
visualize simulation results
use various packages to analyze results (e.g., CODA, BOA, rstan)
perform sensitivity analysis (e.g., sensitivity, pksensi)
access community support (e.g., Stack Overflow, R User groups)
"Free and Open Source Software" under GNU General Public License
- The freedom to run the program as you wish, for any purpose (freedom 0).
- The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.
- The freedom to redistribute copies so you can help others (freedom 2).
- The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.
"Parallel computing"
Reproducibility and Replicability in Science (2019) http://nap.edu/25303
Implement a wide variety of statistical and graphical techniques
Comprehensive research workflow and toolkits (e.g., RMarkdown)
Integration with low-level language (e.g., C, C++, Fortran)
Highly extensible through the use of user-submitted packages
Webapp development (e.g., http://webpopix.org/shiny/ShinyExamples.html)
GNU MCSim is a general purpose modeling and simulation program which can performs "standard" or "Markov chain" Monte Carlo simulations. It allows you to specify a set of linear or nonlinear algebraic equations or ordinary differential equations. They are solved numerically using parameter values you choose or parameter values sampled from statistical distributions. Simulation outputs can be compared to experimental data for Bayesian parameter estimation (model calibration).
Founder: Frédéric Y. Bois
Staff Toxicologist (Specialist),
Reproductive and Cancer Hazard Assessment Section,
CalEPA, Berkeley, USA, 1991-96
This project mainly focus on using GNU MCSim
This founder of this project is Dr. Frédéric Y. Bois. He had been worked in CalEPA as Staff Toxicologist for 5 years.
The GNU MCSim consists in two pieces, a model generator and a simulation engine:
The model generator, "mod"
C
(model.c
).The simulation engine, "sim"
mcsim.model
). After that, you can run simulations of your model under a variety of conditions, specify an associated statistical model, and perform simulations.Simple simulation
Used to: Model testing when building the model (e.g., mass balance)
Monte Carlo simulations
Used to: Check possible simulation (under given parameter distributions) results before model calibration
SetPoints simulation
Used to: Posterior analysis, Local/global sensitivity analysis
httk: R Package for High-Throughput Toxicokinetics
Robert G. Pearce, R. Woodrow Setzer, Cory L. Strope, Nisha S. Sipes, John F. Wambaugh
MCSim (Bois and Maszle 1997) was used for converting the model equations into C code, which is used with deSolve (Soetaert et al. 2016) in solving each system of equations.
Journal of Statistical Software; http://dx.doi.org/10.18637/jss.v079.i04
GNU MCSim model code C code deSolve package Prediction
pksensi: R Package for Global Sensitivity Analysis in Pharmacokinetic Modeling
Nan-Hung Hsieh, Brad Reisfeld, Weihsueh A. Chiu
pksensi implements the global sensitivity analysis workflow to investigate the parameter uncertainty and sensitivity in pharmacokinetic (PK) models, especially the physiologically based pharmacokinetic (PBPK) model with multivariate outputs.
Two types of model solver
solve_fun()
GNU MCSim model code
C code
deSolve package
Prediction
solve_mcsim()
GNU MCSim model code
Prediction
Note: solve_mcsim()
is faster than solve_fun()
The efficient way to conduct parallel computing
The open source Unix-like operating systems for high performance research computing
Basic pharmacokinetics
Role of pharmacokinetics in risk assessment
Pharmacokinetic modelling
Computational toolkits
Task 1. Exploratory analysis of PK data (code
: https://rpubs.com/Nanhung/SRP19_1)
Task 2. PK model development (code
: https://rpubs.com/Nanhung/SRP19_2)
Task 3. Parameter setting and model simulation (code
https://rpubs.com/Nanhung/SRP19_3)
Task 4. PBPK model development (code
https://rpubs.com/Nanhung/SRP19_4)
Task 5. Application of PBPK model (code
https://rpubs.com/Nanhung/SRP19_5)
Theoph
data frame has 132 rows and 5 columns of data from an experiment on the pharmacokinetics of theophylline. Then, find the Cmax and Tmax for each individual. head(Theoph)
## Subject Wt Dose Time conc## 1 1 79.6 4.02 0.00 0.74## 2 1 79.6 4.02 0.25 2.84## 3 1 79.6 4.02 0.57 6.57## 4 1 79.6 4.02 1.12 10.50## 5 1 79.6 4.02 2.02 9.66## 6 1 79.6 4.02 3.82 8.58
C(t)=F⋅D⋅kaV(ka−ke)⋅(e−ket−e−kat)
dAgutdt=−kaAgut
dAdt=kaAgut−keAe C=A/V
Extract the chemical information from httk package
library(httk)parms <- httk::parameterize_1comp(chem.name = "theophylline")
Use the parameters in the developed model and conduct the simulation
Instead of simple PK model, in this exercise we want to apply the well developed PBPK model for 1,3 butadiene.
First, reproduce the simulation result from the published paper*.
[*] Bois F.Y., Brochot C. (2016) Modeling Pharmacokinetics. In: Benfenati E. (eds) In Silico Methods for Predicting Drug Toxicity. Methods in Molecular Biology, vol 1425. Humana Press, New York, NY
C_inh <- approxfun(x = c(0, 120), y=c(10,0), method = "constant", f = 0, rule = 2)
plot(C_inh(1:300), type="l", xlab = "Time (min)", ylab = "Butadiene inhaled concentration (ppm)")
parameters <- c("BDM" = 73, # Body mass (kg) "Height" = 1.6, # Body height (m) "Age" = 40, # in years "Sex" = 1, # code 1 is male, 2 is female "Flow_pul" = 5, # Pulmonary ventilation rate (L/min) "Pct_Deadspace" = 0.7, # Fraction of pulmonary deadspace "Vent_Perf" = 1.14, # Ventilation over perfusion ratio "Pct_LBDM_wp" = 0.2, # wp tissue as fraction of lean mass "Pct_Flow_fat" = 0.1, # Fraction of cardiac output to fat "Pct_Flow_pp" = 0.35, # ~ to pp "PC_art" = 2, # Blood/air partition coefficient "PC_fat" = 22, # Fat/blood ~ "PC_wp" = 0.8, # wp/blood ~ "PC_pp" = 0.8, # pp/blood ~ "Kmetwp" = 0.25) # Rate constant for metabolism
y <- c("Q_fat" = 0, # Quantity of butadiene in fat (mg) "Q_wp" = 0, # ~ in well-perfused (mg) "Q_pp" = 0, # ~ in poorly-perfused (mg) "Q_met" = 0) # ~ metabolized (mg)
# Define the model equationsbd.model <- function(t, y, parameters) { with (as.list(y), { with (as.list(parameters), { # Define constants # Calculate flow and volumes # Calculate the tissue, blood, and air # Differentials for quantities # The function bd.model must return at least the derivatives list(c(dQ_fat, dQ_wp, dQ_pp, dQ_met), # derivatives c("C_ven" = C_ven, "C_art" = C_art)) # extra outputs }) # end with parameters }) # end with y} # end bd.model
Known constants
# Known constantsHeight = 1.6 # use to calculate fraction of body fatAge = 40 # use to calculate fraction of body fatSex = 1 # use to calculate fraction of body fatMW_bu = 54.0914 # butadiene molecular weight (in grams)
Conversions from/to ppm
ppm_per_mM = 24450 # ppm to mM under normal conditionsppm_per_mg_per_l = ppm_per_mM / MW_bumg_per_l_per_ppm = 1 / ppm_per_mg_per_l
Air and blood flow
# Calculate Flow_alv from total pulmonary flowFlow_alv = Flow_pul * (1 - Pct_Deadspace)# Calculate total blood flow from Flow_alv and the V/P ratioFlow_tot = Flow_alv / Vent_Perf# Calculate fraction of body fatPct_BDM_fat = (1.2 * BDM / (Height * Height) - 10.8 *(2 - Sex) + 0.23 * Age - 5.4) * 0.01# Calculate actual blood flows from total flow and percent flowsFlow_fat = Pct_Flow_fat * Flow_totFlow_pp = Pct_Flow_pp * Flow_totFlow_wp = Flow_tot * (1 - Pct_Flow_pp - Pct_Flow_fat)
Volumes
# Actual volumes, 10% of body mass (bones…) get no butadieneEff_V_fat = Pct_BDM_fat * BDMEff_V_wp = Pct_LBDM_wp * BDM * (1 - Pct_BDM_fat)Eff_V_pp = 0.9 * BDM - Eff_V_fat - Eff_V_wp
# Calculate the concentrationsC_fat = Q_fat / Eff_V_fatC_wp = Q_wp / Eff_V_wpC_pp = Q_pp / Eff_V_pp# Venous blood concentrations at the organ exitCout_fat = C_fat / PC_fatCout_wp = C_wp / PC_wpCout_pp = C_pp / PC_pp# Sum of Flow * Concentration for all compartmentsdQ_ven = Flow_fat * Cout_fat + Flow_wp * Cout_wp + Flow_pp * Cout_ppC_inh.current = C_inh(t) # to avoid calling C_inh() twice# Arterial blood concentration# Convert input given in ppm to mg/l to match other unitsC_art = (Flow_alv * C_inh.current * mg_per_l_per_ppm + dQ_ven) / (Flow_tot + Flow_alv / PC_art)# Venous blood concentration (mg/L)C_ven = dQ_ven / Flow_tot
# Alveolar air concentration (mg/L)C_alv = C_art / PC_art# Exhaled air concentration (ppm)if (C_alv <= 0) { C_exh = 10E-30 # avoid round off errors} else { C_exh = (1 - Pct_Deadspace) * C_alv * ppm_per_mg_per_l + Pct_Deadspace * C_inh.current}
# Quantity metabolized in liver (included in well-perfused)dQmet_wp = Kmetwp * Q_wp# Differentials for quantitiesdQ_fat = Flow_fat * (C_art - Cout_fat)dQ_wp = Flow_wp * (C_art - Cout_wp) - dQmet_wpdQ_pp = Flow_pp * (C_art - Cout_pp)dQ_met = dQmet_wp
# Define the computation output timest <- seq(from=0, to=1440, by=10)# Solve ODElibrary(deSolve)out <- ode(times=t, func=bd.model, y=y, parms=parameters)head(out)
## time Q_fat Q_wp Q_pp Q_met C_ven C_art## [1,] 0 0.00000000 0.00000000 0.00000000 0.00000000 0.000000000 0.01606403## [2,] 10 0.02293618 0.03724892 0.07427798 0.06645654 0.003338318 0.01819035## [3,] 20 0.04722954 0.04026245 0.14189019 0.16431358 0.004379098 0.01885327## [4,] 30 0.07221315 0.04152080 0.20176415 0.26661643 0.005210310 0.01938270## [5,] 40 0.09777386 0.04256838 0.25471138 0.37175647 0.005941936 0.01984870## [6,] 50 0.12383371 0.04349410 0.30153555 0.47935418 0.006589697 0.02026129
plot(out)
Research Associate @ Institute of Labor, Occupational Safety And Health, Ministry of Labor
Postdoctoral Research Associate @ Texas A&M University
Associate Toxicologist @ California Environmental Protection Agency
My Research: Computational Toxicology & Risk Assessment
Interest: Software Development
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |