A priori dose selection

library(posologyr)

Introduction

First dose selection for a critical care patient treated with amikacin for suspected ventilator-associated pneumonia. Population pharmacokinetic (ppk) model form Burdet et al. 2015.

mod_amikacin_Burdet2015 <- function() {
    ini({
      THETA_Cl=4.3
      THETA_Vc=15.9
      THETA_Vp=21.4
      THETA_Q=12.1
      ETA_Cl + ETA_Vc + ETA_Vp + ETA_Q ~
        c(0.1,
          0.01     ,   0.05 ,
          0.01     ,   0.02 ,   0.2  ,
          -0.06    ,   0.004,   0.003,    0.08)
      add_sd <- 0.2
      prop_sd <- 0.1
    })
    model({
      TVCl  = THETA_Cl*(CLCREAT4H/82)^0.7
      TVVc  = THETA_Vc*(TBW/78)^0.9*(PoverF/169)^0.4
      TVVp  = THETA_Vp
      TVQ   = THETA_Q
      Cl    = TVCl*exp(ETA_Cl)
      Vc    = TVVc*exp(ETA_Vc)
      Vp    = TVVp*exp(ETA_Vp)
      Q     = TVQ *exp(ETA_Q)
      ke    = Cl/Vc
      k12   = Q/Vc
      k21   = Q/Vp
      Cp    = centr/Vc
      d/dt(centr)  = - ke*centr - k12*centr + k21*periph
      d/dt(periph) =            + k12*centr - k21*periph

      Cp ~ add(add_sd) + prop(prop_sd) + combined1()
    })
  }

A priori dose selection

Patient record

Before the first administration, no concentration information is available. The patient record contains only the information required to fill in the covariates of the model:

df_patientA <- data.frame(ID=1,TIME=0,
                                DV=0,
                                EVID=0,
                                AMT=0,
                                CLCREAT4H=50,TBW=62,PoverF=169)
df_patientA
#>   ID TIME DV EVID AMT CLCREAT4H TBW PoverF
#> 1  1    0  0    0   0        50  62    169

Optimal dose selection

In the absence of measured concentrations, the optimal dose in mg to achieve a concentration of 80 mg/l one hour after the start of the 30-minute infusion is determined from the typical profile of the ppk model.

prior_dose <- poso_dose_conc(dat=df_patientA,
                             prior_model=mod_amikacin_Burdet2015,
                             time_c = 1,                        #30 min after a  
                             duration = 0.5,                    #30 min infusion
                             target_conc = 80)
prior_dose
#> $dose
#> [1] 2087.669
#> 
#> $type_of_estimate
#> [1] "point estimate"
#> 
#> $conc_estimate
#> [1] 80
#> 
#> $indiv_param
#>   THETA_Cl THETA_Vc THETA_Vp THETA_Q add_sd prop_sd       ETA_Cl       ETA_Vc
#> 1      4.3     15.9     21.4    12.1    0.2     0.1 2.025724e-07 6.573817e-08
#>         ETA_Vp         ETA_Q CLCREAT4H TBW PoverF
#> 1 2.011353e-07 -1.163665e-07        50  62    169

Time required to reach the target Cmin

Following this dose, the time in hours required to reach a target Cmin concentration of 2.5 mg/l can be estimated.

poso_time_cmin(dat=df_patientA,
               prior_model=mod_amikacin_Burdet2015,
               dose = prior_dose$dose,
               duration = 0.5,                                  #30 min infusion
               target_cmin = 2.5)
#> $time
#> [1] 37.5
#> 
#> $type_of_estimate
#> [1] "point estimate"
#> 
#> $cmin_estimate
#> [1] 2.49637
#> 
#> $indiv_param
#>   THETA_Cl THETA_Vc THETA_Vp THETA_Q add_sd prop_sd        ETA_Cl       ETA_Vc
#> 1      4.3     15.9     21.4    12.1    0.2     0.1 -9.803026e-07 3.556777e-07
#>          ETA_Vp        ETA_Q CLCREAT4H TBW PoverF
#> 1 -3.567767e-07 9.847164e-07        50  62    169

Plotting the selected dosage

The selected dose can be simulated and plotted. By setting n_simul = 0, the poso_simu_pop() function produces a compiled rxode2 model without inter-individual variability, using typical population parameter values and individual covariates from the patient record.

# generate a model using the individual covariates 
simu_patA      <- poso_simu_pop(dat=df_patientA,
                                prior_model=mod_amikacin_Burdet2015,
                                n_simul = 0)

Observations and a 30-minutes infusion of the optimal dose are added to the rxode2 model by updating the rxode2 event table.

simu_patA$model$time <- seq(0,20,b=0.1)
simu_patA$model$add.dosing(dose=prior_dose$dose,rate=prior_dose$dose/0.5)

Plotting the simulated scenario.

plot(simu_patA$model,Cc)

Plot of the concentration over time following the selected dosing

The resulting plot can be further augmented with ggplot2. For example, by adding an horizontal ribbon showing the 60-80 mg/l target interval of 1 h peak concentration, and a vertical dashed line marking 1 hour.

plot(simu_patA$model,Cc) + 
  ggplot2::ylab("Central concentration") +
  ggplot2::geom_vline(xintercept=1, linetype="dashed") +
  ggplot2::geom_ribbon(ggplot2::aes(ymin=60, ymax=80),
                       fill="seagreen",show.legend = FALSE, alpha=0.15)

Plot of the concentration over time following the selected dosing with an horizontal ribbon showing the 60-80 mg/l target interval of 1 h peak concentration, and a vertical dashed line marking 1 hour.

For a typical patient (i.e. with a PK profile typical of the model population), the selected dose meets the peak concentration target.