Protocol Amendment Storytelling

Background

There is a hypothetical Phase III clinical trial for a chronic disease. During study conduct, recruitment is slower than anticipated. A major protocol amendment is introduced at Month 10 to relax eligibility criteria, reduce visit frequency and simplify data collection requirements.

The challenge

The sponsor would like to understand whether the amendment successfully improved trial performance.

Create a data visualisation that clearly communicates any of the following (or any other ‘story’ you find interesting to convey to the sponsor):

  • What changed after the amendment
  • Whether recruitment improved
  • Whether operational efficiency improved
  • Any trade-offs or unintended consequences

The data

24 months of study conduct (amendment introduced at Month 10). The dataset includes the following variables:

Variable Name Variable Label
Month study month (1-24)
Amendment_Status Before/After Amendment (indicator)
New_Subjects_Enrolled Number of subjects enrolled during the month
Screen_Failure_Rate Percentage of screened subjects failing eligibility criteria
Active_Sites Number of sites actively recruiting
Protocol_Deviations Number of protocol deviations recorded
Avg_Query_Days Average time (days) to resolve data queries
Avg_Visit_Burden Mean scheduled visits per patient
Retention_Rate Percentage of randomised subjects remaining in follow-up
Monitoring_Cost_GBP Estimated monitoring expenditure (£)

Recruitment changes after the amendment

ggplot(data = dataset, aes(fill = Amendment_Status, x = Month)) +
  geom_bar(aes(y = New_Subjects_Enrolled), stat = "identity", colour = "black") +
  scale_fill_discrete_qualitative(palette = "Harmonic") +
  theme_bw() +
  scale_x_discrete(breaks = seq(1, 24, by = 1)) +
  scale_y_continuous(breaks = c(0, 10, 20, 30, 40, 50, 60)) +
  labs(title = "Barcharts of the number of new subjects enrolled, by amendment status",
       x = "Month", y = "Number of new subjects enrolled",
       fill = "Amendment status") +
  annotate("segment", x = 9.5, xend = 9.5, y = 0, yend = max(dataset$New_Subjects_Enrolled) + 3,
            colour = "coral3", linewidth = 1, linetype = 2) +
  annotate("text", x = 9.5, y = max(dataset$New_Subjects_Enrolled) + 5,
           label = "Protocol amendment introduced", colour = "coral3", size = 4) +
  annotate("text", x = 5, y = max(dataset$New_Subjects_Enrolled) + 5,
           label = "Pre-Amendment", colour = "gold4", size = 4) +
  annotate("text", x = 17, y = max(dataset$New_Subjects_Enrolled) + 5,
           label = "Post-Amendment", colour = "skyblue4", size = 4) +
  theme(legend.position = "none")