Welcome to the cascade report. This report was generated on r Sys.time() from your own simulations. Caution this report is written dynamically, so please report any bugs or issues to jack.olney11@imperial.ac.uk.

The intention of this report is to act as a reference for any data entered, simulations carried out and results generated. The model is still under active development so caution is advised as results are preliminary.

Data Review

Combining previously collected data with anything entered by the user, the model used the following during calibration:

Cascade Data

    BuildDataReviewPlot_Report(data = MasterData$calib)

\newpage

Data Quality

The use of high quality data in the model will improve modelled estimates of the cascade, and enhance our ability to prioritise strategies to achieve 90-90-90. Below is a list of potential data sources and their corresponding colours as described in our "Traffic Light System". Red data sources are of low quality, Amber are of average quality, and Green are of good quality.

    myTheme <- gridExtra::ttheme_default(
        core =    list(fg_params = list(cex = 0.75)),
        colhead = list(fg_params = list(cex = 0.75)),
        rowhead = list(fg_params = list(cex = 0.75)))
    gridExtra::grid.table(SourceListTable, rows = NULL, theme = myTheme)

Cascade Data Table

    myTheme <- gridExtra::ttheme_default(
        core =    list(fg_params = list(cex = 0.75)),
        colhead = list(fg_params = list(cex = 0.75)),
        rowhead = list(fg_params = list(cex = 0.75)))
    tablVals <- MasterData$calib
    tablVals$value <- round(tablVals$value, digits = 0)
    gridExtra::grid.table(scales::comma(tablVals), rows = NULL, theme = myTheme)

\newpage

CD4 Distribution

To ensure the accuracy of HIV-mortality rates and to account for the standing-start nature of our calibration method, we allow the user to specify, or source from Spectrum, CD4 distribution estimates to seed the model prior to calibration.

Estimates in 2010

    BuildCD4Plot2010_Report(data = MasterData)

Estimates in 2015

    BuildCD4Plot2015_Report(data = MasterData)

\newpage

New Infections

Incidence in the model is driven by estimates from Spectrum or values entered by the user. The model randomly samples between the upper and lower bounds during calibration to account for uncertainty in these values.

    suppressMessages(BuildIncidencePlot_Report(data = MasterData$incidence))

Country Specific Treatment Guidelines

The impact of country-specific treatment guideline updates must be accounted for by the model. We do not describe WHO Stage conditions so CD4 thresholds must be updated to reflect changing guidelines. Guidelines can be changed prior to calibration, and the values used during calibration are shown below.

    myTheme <- gridExtra::ttheme_default(
        core =    list(fg_params = list(cex = 0.75)),
        colhead = list(fg_params = list(cex = 0.75)),
        rowhead = list(fg_params = list(cex = 0.75)))
    int <- MasterData$treatment_guidelines
    names(int) <- c("Country", "<200", "<250", "<350", "<500", ">500")
    gridExtra::grid.table(int, rows = NULL, theme = myTheme)

\newpage

Model Calibration

Given all available data, including those values entered by the user, the model used approximate bayesian computation to identify r input$minResults parameter sets that produced a total error of less than or equal to r input$maxError. The resulting depiction of the cascade in 2015 is shown below:

    BuildCalibrationPlot_Report(data = CalibOut, calibData = MasterData$calib)

A histogram of sampled model errors is shown below, with the maximum threshold shown as a vertical line:

    BuildCalibrationHistogram_Report(runError = runError, maxError = input$maxError)

\newpage

The cascade distribution in previous years is summarised below:

    BuildCalibrationPlotDetail_Report(data = CalibOut, originalData = MasterData, limit = input$minResults)

\newpage

Model Structure

The model has a following structure. Note, this is a simplified view of the structure, for more detail please view the official model document.

Model Diagram

Calibrated Parameters

Histograms illustrating where the majority of accepted parameter sets lie:

    BuildCalibrationParameterHistGroup()

\newpage

Cascade Projection

Projected Cascade in 2015 and 2020

    GenCascadePlot_Report()

Discretised Cascade Projection

    GenPowersCascadePlot_Report()

\newpage

UNAIDS 90-90-90

    Gen909090Plot_Report()

New Infections

    GenNewInfPlot_Report(wizard = FALSE)

\newpage

AIDS Deaths

    GenAidsDeathsPlot_Report(wizard = FALSE)

\newpage

Optimisation \& Interventions

During calibration, we simulate thousands of parameter sets to identify a subset that fit the data within a certain interval. As a result we are left with r input$minResults parameter sets that could be plausibly correct. Now, if we were to then simulate thousands of permutations of interventions on each of these r input$minResults parameter sets we would need to run millions of simulations. This would take a considerable amount of time. As one of the aims of this model was to be simple and most importantly fast, we have decided to only simulate interventions using a random 10% of accepted parameter sets. As we accepted r input$minResults parameter sets, we will simulate interventions on r input$minResults * 0.1 parameter sets. A figure illustrating the fit of the random 10% of calibration runs is shown below with all runs coloured blue and the random 10% coloured red.

    BuildCalibrationRandomFitRunsPlot_Report(data = CalibOut, originalData = KenyaData, limit = input$minResults, minErrorRun = minErrorRun, selectedRuns = selectedRuns, propRuns = 0.1)

\newpage

Interventions

The structure of the model allows us to implement and assess the impact of six broad interventions acting on various elements of the cascade. The interventions are described below along with a table denoting which intervention was active during optimisation.

Intervention | Active ------------------|---------------------------- Testing | r intSwitch$testing Linkage | r intSwitch$linkage Pre-ART Retention | r intSwitch$preRetention ART Initiation | r intSwitch$initiation ART Adherence | r intSwitch$adherence ART Retention | r intSwitch$retention

HIV Testing

We simulate a broad HIV-testing intervention, that involves increasing the rate at which undiagnosed individuals become diagnosed. As the model does not account for HIV-negative individuals this rate cannot be interpretted as an 'HIV-testing rate', as the true HIV-testing rate would depend on the proportion of postive undiagnosed individuals in the population and would almost certainly be higher. However, this intervention will be able to identify how many more individuals need to be diagnosed per year.

Linkage

We simulate a linkage intervention that adjusts the proportion of diagnosed individuals that link to care. After diagnosis, a proportion ($q$) of infected individuals link to pre-ART care at a rate (epsilon) determined during calibration. However, $1-q$ individuals fail to link to care and are lost to follow-up; although, all individuals have the propensity to seek care at a rate determined by their current health state. As an individual's CD4 count declines, they seek care at a higher rate.

Pre-ART Retention

During calibration, a rate of loss from pre-ART care for diagnosed individuals is derived ($kappa$). We simulate a pre-ART retention intervention that reduces pre-ART loss by lowering the pre-ART loss rate, kappa. This keep patients engaged in pre-ART care and increases the likelihood that they will initiate ART.

ART Initiation

Our ART initiation intervention involves increasing the rate at which diagnosed individuals engaged in pre-ART care start treatment. This rate is initially derived during calibration, but is also dependent upon country specific treatment guidelines. For example, an individual will not initiate ART with a CD4 count of >500 if the national guidelines only suggest ART for persons with CD4 <350.

Adherence

Upon initiating ART, a proportion ($p$) of patients adhere to treatment and become virally suppressed. However, $1-p$ individuals do not adhere to treatment and HIV progresses as if they were treatment naive. We implement an adherence intervention by allowing non-adherent persons on treatment to start adhereing at some rate, sigma. Prior to the intervention, this rate is zero, and no individuals progress from non-adherent to adherent states.

ART Retention

Finally, we simulate an intervention that reduces loss to follow-up for persons on treatment. During calibration we derive a baseline rate at which individuals are lost from ART care, omega. We simulate an intervention by reducing this rate of loss from care. Additionally, this rate applies to both adherent and non-adherent persons on ART.

Costs

The model captures the cost of care by applying a unit cost to four elements of care: the cost of diagnosing a patient with HIV, the cost of linking a patient to care, the annual cost of pre-ART care and the annual cost of ART care.

By default, the cost of diagnosing a patient is scaled up to account for the number of HIV-negative individuals that must be tested before an infected individual is identified. This calculation uses an estimate of population size in 2015 and the assumption that testing occurs at random. By default, this estimate comes from Spectrum; however, users can update it. But, if it this value is left blank, the model scales the unit cost of diagnosis up by five (\$10 by default). Additionally, a check-box can be switched that prevents this scale-up event from occurring.

The model adjusts the unit cost of diagnosis by first calculating the size of the HIV-negative population (population estimate - PLHIV), then multiplying this by 0.65, as HIV-negative persons are 0.65 times as likely to test as HIV-positive in general population (according to findings by Eaton et al. DOI: 10.1016/S2214-109X(13)70172-4). Then add this value to the number of PLHIV who are currently not engaged in care, to give the size of the undiagnosed population, and divide this number by the total number of PLHIV not in care. The cost of diagnosis below reflects the adjustment described.

Unit Cost | Value (USD) --------------------|---------------- Diagnosis | r scales::dollar(reactiveCost$test) Linkage | r scales::dollar(reactiveCost$link) Annual Pre-ART Care | r scales::dollar(reactiveCost$care) Annual ART Care | r scales::dollar(reactiveCost$art)

\newpage

Optimisation Results

Achieving r scales::percent(round(custom$target, digits = 2)) viral suppression of PLHIV by 2020

In the absence of any interventions, the following changes to care will occur at baseline between 2015 and 2020, as determined through model calibration.

Change | Description | Value (95% CI) ------------------|-----------------------------------------------|--------------------------------------- Cost | Baseline cost of care per year | r report_909090_cost_BASE Diagnoses | Diagnoses per year at baseline | r report_909090_testing_BASE Linkage | Linkage per year at baseline | r report_909090_linkage_BASE Pre-ART Retention | Losses from pre-ART care per year at baseline | r report_909090_preRetention_BASE ART Initiation | ART initiations per year at baseline | r report_909090_initiation_BASE ART Retention | Losses from ART care per year at baseline | r report_909090_retention_BASE Viral Suppression | Viral suppressions per year at baseline | r report_909090_adherence_BASE

However, through implementing various interventions acting on care, we estimate the changes that could be made to care to achieve r scales::percent(round(custom$target, digits = 2)) viral suppression of PLHIV by 2020. We list these changes below relative to the baseline scenario.

Change | Description | Value (95% CI) ------------------|------------------------------------------------|--------------------------------------- Cost | Additional cost of care per year | r report_909090_cost Diagnoses | Additional diagnoses per year | r report_909090_testing Linkage | Additional linkage per year | r report_909090_linkage Pre-ART Retention | Reduction in losses from pre-ART care per year | r report_909090_preRetention ART Initiation | Additional ART initiations per year | r report_909090_initiation ART Retention | Reduction in losses from ART care per year | r report_909090_retention Viral Suppression | Additional viral suppressions per year | r report_909090_adherence

If you would like to review the full list of all simulated interventions, please return to the optimisation results tab and click 'View Results' where the tables are able to be exported as a csv file, an excel spreadsheet, a PDF or printed directly.

\newpage

A bar-chart illustrating the recommended changes to care to achieve r scales::percent(round(custom$target, digits = 2)) viral suppression of PLHIV by 2020 is shown below. The red bars indicate the changes to care in the absence of interventions, while the blue bars illustrate the additional changes required to achieve these goals. The horizontal line indicates the mean change and the label enumerates the mean.

    BuildChangesPlot_Report(CalibParamOut = CalibParamOut, optResults = optResults, target = custom$target)

\newpage

A figure illustrating the cost-frontiers of all simulations is displayed below. Each blue dot represents an individual simulation in terms of its impact and cost relative to a baseline scenario. By simulating all possible combinations of interventions we produce a 'cloud' of potential interventions that will bring about improvements to patient outcomes. We select the simulations that achieve r scales::percent(round(custom$target, digits = 2)) viral suppression by 2020, and calculate the cost-frontier (the curve depicting maximum impact for minimum cost). We then interpolate between interventions to estimate the changes required to achieve the target. The vertical line illustrates r scales::percent(round(custom$target, digits = 2)) viral suppression by 2020; the lines in red illustrate frontiers that achieve r scales::percent(round(custom$target, digits = 2)) suppression, while those in grey denote frontiers that do not.

    BuildFrontierPlot_Report(CalibParamOut = CalibParamOut, optResults = optResults, target = custom$target)

Thank you for using the HIV Modelling Consortium Cascade Tool

\newpage

Supplementary Tables

Cascade Data

    myTheme <- gridExtra::ttheme_default(
        core =    list(fg_params = list(cex = 0.75)),
        colhead = list(fg_params = list(cex = 0.75)),
        rowhead = list(fg_params = list(cex = 0.75)))
    tablVals <- MasterData$calib
    tablVals$value <- round(tablVals$value, digits = 0)
    gridExtra::grid.table(scales::comma(tablVals), rows = NULL, theme = myTheme)

CD4 Distribution

CD4 Distribution in 2010

    int <- t(MasterData$cd4)
    proportion <- round(as.numeric(int[2:15,]), digits = 2)
    cd4 <- c(">500", "350-500", "250-350", "200-250", "100-200", "50-100", "<50")
    art <- c(rep("Off ART", 7), rep("On ART", 7))
    gridExtra::grid.table(data.frame(art, cd4, proportion), rows = NULL, theme = myTheme)

CD4 Distribution in 2015

    int <- t(MasterData$cd4_2015)
    proportion <- round(as.numeric(int[2:15,]), digits = 2)
    cd4 <- c(">500", "350-500", "250-350", "200-250", "100-200", "50-100", "<50")
    art <- c(rep("Off ART", 7), rep("On ART", 7))
    gridExtra::grid.table(data.frame(art, cd4, proportion), rows = NULL, theme = myTheme)

New Infections

    gridExtra::grid.table(scales::comma(MasterData$incidence), rows = NULL, theme = myTheme)


jackolney/CascadeDashboard documentation built on May 18, 2019, 7:56 a.m.