Generation of Virtual Populations in R with mrgsolve

University at Buffalo CDSE Days 2019

Kyle Baron & Timothy Knab / MetrumRG

Introduction

<small>Allen, R.J., Rieger, T.R., & Musante, C.J. (2016). Efficient Generation and Selection of Virtual Populations in Quantitative Systems Pharmacology Models. CPT: pharmacometrics & systems pharmacology, 5 3, 140-6.</small>

Allen, R.J., Rieger, T.R., & Musante, C.J. (2016). Efficient Generation and Selection of Virtual Populations in Quantitative Systems Pharmacology Models. CPT: pharmacometrics & systems pharmacology, 5 3, 140-6.

Definitions

Definitions of plausible and virtual patients and populations

Definitions of plausible and virtual patients and populations

Workflow

Overview of MAPK Virtual Population

Plausible Patients

##  [1] "BRAFt" "CRAFt" "dmax"  "G13"   "Gspry" "Gdusp" "ke2"   "ke3"  
##  [9] "ke4"   "MEKb"  "MEKt"  "PI3Kb" "PI3Kt" "RASb"  "RASt"  "RTK1t"
## [17] "RTK2t" "wOR"   "wRAS"  "ka2"   "V2"    "ka3"   "q2"    "V3"   
## [25] "V3b"   "ka4"   "V4"

Plausible Patients

Plausible Patients

params <- readRDS("../mapk/s10vpop_pk.RDS")
pLower <- params %>% summarise_all(.funs = function(x){min(x)*0.5})
pUpper <- params %>% summarise_all(.funs = function(x){max(x)*1.5})
pLower %<>% gather(key="Name",value="Lower")
pUpper %<>% gather(key="Name",value="Upper")
paramLims <- left_join(pLower,pUpper,by="Name")
paramLims %<>% filter(Name %in% p_names)
kable(paramLims)
Name Lower Upper
BRAFt 0.4500000 1.422970e+01
CRAFt 0.4255413 1.869358e+00
dmax 0.0165304 7.826700e-02
G13 0.0232258 1.500000e+00
Gspry 0.0272101 1.500000e+00
Gdusp 0.0162001 1.500000e+00
ke2 0.0261162 1.918298e+00
ke3 0.1690308 2.373814e+00
ke4 0.1149115 6.152933e+00
MEKb 0.0000010 3.874368e+00
MEKt 0.0394415 2.694055e+01
PI3Kb 0.0003593 7.735705e+00
PI3Kt 0.5000000 7.735705e+00
RASb 0.0034015 6.129698e-01
RASt 0.0442520 2.633074e+01
RTK1t 0.0004352 8.721113e+01
RTK2t 0.0001469 5.502290e+01
wOR 0.3769756 1.500000e+00
wRAS 0.3278130 1.500000e+00
ka2 0.1942810 1.310347e+02
V2 12.4518572 7.203180e+02
ka3 0.4273688 1.223939e+03
q2 25.8518425 3.643031e+03
V3 50.1279601 2.356503e+03
V3b 25.4701092 4.326330e+03
ka4 0.1635798 1.266548e+05
V4 33.8116991 7.922191e+02

Plausible Patients

stateLims <- data.frame(Name = 'TUMOR','Lower'=0,'Upper'=Inf,Time=56)
kable(stateLims)
Name Lower Upper Time
TUMOR 0 Inf 56

Plausible Patient Generation

A set of initial random parameters is used as the initial guess for a simulated annealing (SA) optimization algorithm

Simulation Function

model <- mread("mapk", '../mapk/', soloc = '../mapk')
sim_fcn <- function(parameters=NULL,model,pnames,dosing,ICs,simulate=0){
  loadso(model) # Load model
  # Case with parameters defined by plausible patient algorithm
  if(!is.null(parameters)){
    param_in <- data.frame(Names = pnames,Values=parameters)
    param_in <- spread(param_in,key=Names,value=Values)
  # Create case for testing with default parameters
  }else{
    param_in <- data.frame(ID=1)
  }
  # Bind parameters with initial conditions
  param_in %<>% cbind(ICs)
  # Simulate and extract tumor size at dat 56
  output <- model%>%idata_set(param_in) %>%Req(TUMOR)%>%
    obsonly%>%mrgsim(delta=56,end=56,events=as.ev(dosing))%>%
    filter(time==56)%>%as.data.frame()
  # For VP generation, return a list of steady state and non-steady state outputs
  if(simulate==0){
    return(list(NSS=output))
  # Otherwise return the dataset
  }else{
    return(output)
  }
}

Generate Plausible Patients

control=list(runParallel="parallel",nCores = 4,
                       parallel_libs="mrgsolve") # Setup parallel run
plausiblePatients <- generatePPs(model_fn = sim_fcn, NP=1e3, paramLims=paramLims,stateLims = stateLims,
                                 method='SA',
                                 model_args = model_args,
                                 scoreThreshold = 0)

Virtual Population

Virtual Population

\(P\left(S(p_j)=1\right)\) is unknown

Virtual Population (Results)

Virtual Population Efficiency

Yield: \(N_{VP}/N_{PP}\) = 21.8%

stateLims <- data.frame(Name = 'TUMOR','Lower'=0,'Upper'=2.5,Time=56)
kable(stateLims)
Name Lower Upper Time
TUMOR 0 2.5 56

Virtual Population Efficiency

Virtual Population Effiency

Yield = 25.5%

Further Improvements

See Rieger TR, Allen RJ, Bystricky L, Chen Y, Colopy GW, Cui Y, Gonzalez A, Liu Y, White RD, Everett RA, Banks HT, Musante CJ: Improving the generation and selection of virtual populations in quantitative systems pharmacology models. Prog Biophys Mol Biol 139:15–22, 2018

Further Improvements and Performance