What happens when you switch propofol infusions?

Using Eleveld and R to model changing from ml/h to TCI

r
transfer
tci
medicine
Author

Nick Plummer

Published

November 30, 2024

I was lucky to be invited to deliver a talk at the recent SIVA Annual Scientific Meeting where I argued that we should be using target-controlled infusions to manage sedation while transfering the critically unwell patient.

Part of my argument was a review of transfers performed using the classical ICU approach of a fixed “ml/h” infusion of a sedative drug, and plugging those into the standard TCI models that the pumps use to estimate the level of propofol in our patients’ brains, which was (in my opinion) potentially alarmingly low.

I was asked a few follow up questions from the audience about how this would work in transitioning patients already on such an infusion to a TCI model, and didn’t have time in the session to discuss this in depth… so lets do the modelling here, using the {tci} package.

library(tci)
library(tidyverse)

Let’s start by building our hypothetical patient, and applying the Eleveld PK/PD propofol model to them.

A = 40  # Age in y
W = 80  # Weight in kg
H = 180 # Height in cm

# Eleveld model
(mod3el <- pkmod_eleveld_ppf(AGE = A, TBW = W, HGT = H, MALE = TRUE))
tci pkmod object
See ?update.pkmod to modify or add elements

PK model 
 4-compartment PK model 
 PK parameters: V1 = 6.55, V2 = 27, V3 = 178, CL = 1.76, Q2 = 1.9, Q3 = 0.809, KE0 = 0.141 
 Initial concentrations: (0,0,0,0) 
 Plasma compartment: 1 
 Effect compartment: 4 

PD model 
 PD parameters: C50 = 2.98, E0 = 93, EMX = 93, GAMMA = 1.47, GAMMA2 = 1.89 

Simulation
 Additive error SD: 8.03 
 Multiplicative error SD: 0 
 Logged response: FALSE 
 Random effects 
        V1    V2    V3    CL    Q2    Q3   KE0   C50 sigma_add
 [1,] 0.61 0.000 0.000 0.000 0.000 0.000 0.000 0.000      0.00
 [2,] 0.00 0.565 0.000 0.000 0.000 0.000 0.000 0.000      0.00
 [3,] 0.00 0.000 0.597 0.000 0.000 0.000 0.000 0.000      0.00
 [4,] 0.00 0.000 0.000 0.265 0.000 0.000 0.000 0.000      0.00
 [5,] 0.00 0.000 0.000 0.000 0.346 0.000 0.000 0.000      0.00
 [6,] 0.00 0.000 0.000 0.000 0.000 0.209 0.000 0.000      0.00
 [7,] 0.00 0.000 0.000 0.000 0.000 0.000 0.702 0.000      0.00
 [8,] 0.00 0.000 0.000 0.000 0.000 0.000 0.000 0.242      0.00
 [9,] 0.00 0.000 0.000 0.000 0.000 0.000 0.000 0.000      0.23

I’ve included numbers for the really nerdy, but this is basically setting up how the drug moves between different hypothetical compartments in the body between the blood, the brain, and being eliminated, as shown in this graphic from the fantastic BJAEd article on TIVA:

We’ll then give them the “standard” ICU sedation of 20ml/h propofol, with a generous loading dose of 2mg/kg.

loading_dose = 2*W # 2mg/kg
infusion_rate = (20*10)/60 # mg/min

multi_inf <- inf_manual(inf_tms = c(0, 1, 60), # Give induction dose over 1min, then infusion 
                        inf_rate = c(loading_dose, infusion_rate, 0))

Now let’s predict what happens to propofol levels in our hypothetical patient over the next hour

tms_pred <- seq(0, 60, 0.1) # Predict every 6s for the next hour

pred <- predict(mod3el, inf = multi_inf, tms = tms_pred)
head(pred)
               c1          c2          c3           c4   pdresp
[1,] 5.427842e-15 0.000000000 0.000000000 2.452630e-14 93.00000
[2,] 2.362919e+00 0.008395489 0.000542837 1.679308e-02 92.95415
[3,] 4.570247e+00 0.032761926 0.002123053 6.537584e-02 92.66297
[4,] 6.632705e+00 0.071933403 0.004671962 1.431972e-01 91.94115
[5,] 8.560272e+00 0.124824791 0.008125609 2.478868e-01 90.66078
[6,] 1.036224e+01 0.190426162 0.012424441 3.772427e-01 88.75455

This function predicts plasma levels of propofol in mcg/ml in the plasma (c1) and effect site (brain, c4), as well as the fast and slow compartments (c2 and c3). In addition to the PK model, the tci::pkmod_eleveld_ppf function also predicts the pharmacodynamic (PD) response in the brain to the drug, and does this by modelling the BIS value in a “normal” patient as pdresp.

Let’s plot this data to see the changes over time:

pred_long <- tibble(
  time = tms_pred,
  Cp = pred[, "c1"],
  Ce = pred[, "c4"],
  BIS = pred[, "pdresp"]
) %>%
  pivot_longer(cols = -time, names_to = "variable", values_to = "value")

ggplot(pred_long, aes(x = time, y = value, color = variable)) + 
  geom_line() + 
  xlab("Minutes") + ylab("Concentration (mcg/ml) or BIS") +
  geom_hline(yintercept = 3, colour = "blue", linetype = "dashed") +
  geom_hline(yintercept = 60, colour = "red", linetype = "dotted")

As you can see, at 60 minutes the Cet will be a mere 1.49 mcg/ml, well below the Ce50 for this patient of ~3mcg/ml. Although this is probably fine for tube tolerance and anxiolysis while stationary in an ICU bed, it’s easy to argue that this may be insufficient to prevent recall when stimulating a patient in the back of an ambulance, especially if they’ve been administered muscle relaxant.

Let’s do this again for a 4mg/kg/h propofol infusion, the “maximum dose” used in most critical care units for sedation:

loading_dose = 2*W # 2mg/kg
infusion_rate_4 = (4*W)/60 # convert to mg/min

multi_inf_4 <- inf_manual(inf_tms = c(0, 1, 60),
                        inf_rate = c(loading_dose, infusion_rate_4, 0))

pred_4 <- predict(mod3el, inf = multi_inf_4, tms = tms_pred)

tibble(
  time = tms_pred,
  Cp = pred_4[, "c1"],
  Ce = pred_4[, "c4"],
  BIS = pred_4[, "pdresp"]
) %>%
  pivot_longer(cols = -time, names_to = "variable", values_to = "value") %>% 
  ggplot(aes(x = time, y = value, color = variable)) + 
    geom_line() + 
    xlab("Minutes") + ylab("Concentration (mcg/ml) or BIS") +
    geom_hline(yintercept = 3, colour = "blue", linetype = "dashed") +
    geom_hline(yintercept = 60, colour = "red", linetype = "dotted")

Much better,we’re approaching giving an anaesthetic here - the Cet at 60 minutes is estimated tobe 2.24 mcg/ml, in the 2-3.8ish range for induction with Eleveld. However I’m not here to try to convince you (again) that a transfer of a patient with muscle-relaxed patient should be TIVA rather than ICU sedation, but to answer the question of what happens when we transition a patient from ml/h to a TCI model.

To understand that, lets look at what the TCI pumps are doing. Each manufacturer will implement the algorithm differently, but in essence you tell it what concentration of propofol you want and where (brain, or plasma) and it decides how much drug to give - a bolus, then nothing while the plasma level drops off and equibrilates, then starts a decelerating infusion as the fast and slow compartments fill and then begin to contribute back into the plasma.

Let’s model this:

inf_3cet <- inf_tci(target_vals = c(3, 3), # Aim for 3mcg/ml
                    target_tms = c(0, 10), # and maintain it for 10mins  
                    pkmod = mod3el,        # Use our Eleveld model
                    type = "effect",       # Cet, not plasma
                    ignore_pd = TRUE)      # Don't target a BIS of 3!

# Predict Cet over 10 mins
tms_pred <- seq(0,10,0.01)
pre_10 <- predict(mod3el, inf = inf_3cet, tms = tms_pred)

  tibble(
    time = tms_pred,
    Cp = pre_10[, "c1"],
    Ce = pre_10[, "c4"],
    BIS = pre_10[, "pdresp"]
) %>%
  pivot_longer(cols = -time, names_to = "variable", values_to = "value") %>% 
  ggplot(aes(x = time, y = value, color = variable)) + 
    geom_line() + 
    xlab("Minutes") + ylab("Concentration (mcg/ml) or BIS") +
    geom_hline(yintercept = 3, colour = "blue", linetype = "dashed") +
    geom_hline(yintercept = 60, colour = "red", linetype = "dotted")

Nice and smooth!

So what happens if we give this on top of the 20ml/h propofol? Lets give our transfer infusion for 30mins (just for ease of plotting) then add our brand new TCI at that point:

multi_inf <- inf_manual(inf_tms = c(0, 1, 30), 
                        inf_rate = c(loading_dose, infusion_rate, 0))

tci_inf <- inf_tci(target_vals = c(3, 3),
                    target_tms = c(30, 60),  
                    pkmod = mod3el,
                    type = "effect",
                    ignore_pd = TRUE)

# Combine the two
inf_plan <- bind_rows(
  as_tibble(multi_inf),
  as_tibble(tci_inf) %>% filter(begin >= 30) %>% select(c(begin, end, inf_rate))
)

# Predict over 1h
tms_pred <- seq(0, 60, 0.01)
pred <- predict(mod3el, inf = data.frame(inf_plan), tms = tms_pred)

# Plot it
tibble(
    time = tms_pred,
    Cp = pred[, "c1"],
    Ce = pred[, "c4"],
    BIS = pred[, "pdresp"]
) %>%
  pivot_longer(cols = -time, names_to = "variable", values_to = "value") %>% 
  ggplot(aes(x = time, y = value, color = variable)) + 
    geom_line() + 
    xlab("Minutes") + ylab("Concentration (mcg/ml) or BIS") +
    geom_hline(yintercept = 3, colour = "blue", linetype = "dashed") +
    geom_hline(yintercept = 60, colour = "red", linetype = "dotted")

And the result?

Nothing particularly dramatic happens, in the brain at least.

The Ce briefly rises above our target of 3 to plataeu at 4.44, but then rapidly levels off as the “sedation” propofol is eliminated leaving just the TCI model topping it up what it expects to find in the body.

It’s similar even if we’re sedating at that 4mg/kg/h dose to start with:

multi_inf <- inf_manual(inf_tms = c(0, 1, 30), 
                        inf_rate = c(loading_dose, infusion_rate_4, 0))

tci_inf <- inf_tci(target_vals = c(3, 3),
                    target_tms = c(30, 60),  
                    pkmod = mod3el,
                    type = "effect",
                    ignore_pd = TRUE)

# Combine the two
inf_plan <- bind_rows(
  as_tibble(multi_inf),
  as_tibble(tci_inf) %>% filter(begin >= 30) %>% select(c(begin, end, inf_rate))
)

# Predict over 1h
tms_pred <- seq(0, 60, 0.01)
pred <- predict(mod3el, inf = data.frame(inf_plan), tms = tms_pred)

# Plot it
tibble(
    time = tms_pred,
    Cp = pred[, "c1"],
    Ce = pred[, "c4"],
    BIS = pred[, "pdresp"]
) %>%
  pivot_longer(cols = -time, names_to = "variable", values_to = "value") %>% 
  ggplot(aes(x = time, y = value, color = variable)) + 
    geom_line() + 
    xlab("Minutes") + ylab("Concentration (mcg/ml) or BIS") +
    geom_hline(yintercept = 3, colour = "blue", linetype = "dashed") +
    geom_hline(yintercept = 60, colour = "red", linetype = "dotted")

And ultimately this comes down to the other key point of the talk I gave - we should be combining TCI with pEEG monitoring so we can see the effect of the sedation we’re using. These models are exactly that, just models, based on averaging accross populations. Every individual patient will respond differently to the same doses of propofol, and this will be modulated by the cause of their illness requiring transfer and any impacts that this is having on their brain.

In addition, one of the many things these models don’t address is the haemodynamic effects of these large propofol doses. It would be fairly gung-ho to rush in with a large TCI bolus when a patient is already on 4mg/kg/h (or 32ml/h of 1% propofol) and not expect a degree of haemodynamic instability… But we can very effectively use TCI to gently titrate our sedation to a steady state rather than treat it as a binary on/off device, and use pEEG to assess its effectiveness and tweak levels as required.