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 <- list(
  ppk_model   = rxode2::rxode({
    centr(0) = 0;
    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;
    Cc    = centr/Vc;
    d/dt(centr)  = - ke*centr - k12*centr + k21*periph;
    d/dt(periph) =            + k12*centr - k21*periph;
    d/dt(AUC)    =   Cc;
  }),
  error_model = function(f,sigma){
    g <- sigma[1] + sigma[2]*f
    return(g)
  },
  theta = c(THETA_Cl=4.3, THETA_Vc=15.9, THETA_Vp=21.4,THETA_Q=12.1),
  omega = lotri::lotri({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)}),
  covariates  = c("CLCREAT4H","TBW","PoverF"),
  sigma       = c(additive_a = 0.2, proportional_b = 0.1))

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       ETA_Cl       ETA_Vc       ETA_Vp
#> 1      4.3     15.9     21.4    12.1 2.025724e-07 6.573817e-08 2.011353e-07
#>           ETA_Q CLCREAT4H TBW PoverF
#> 1 -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        ETA_Cl       ETA_Vc        ETA_Vp
#> 1      4.3     15.9     21.4    12.1 -9.803026e-07 3.556777e-07 -3.567767e-07
#>          ETA_Q CLCREAT4H TBW PoverF
#> 1 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)
#> Warning: can not update object
simu_patA$model$add.dosing(dose=prior_dose$dose,rate=prior_dose$dose/0.5)

Plotting the simulated scenario.

plot(simu_patA$model,Cc)

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)

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