knitr::opts_chunk$set(
        echo = FALSE, 
        message = FALSE,
        warning = FALSE,
        results = "asis"
)
Application Version: r packageVersion("INSPECTumours")

1. Load Data

1.1 Data information

Loaded Data File(s):

shiny::tagList(lapply(params$r$file_names, p))
knitr::kable(params$r$summary_new_data)
if (is.null(params$r$summary_control)) {
  cat("No historical control data")
} else {
  knitr::kable(params$r$summary_control)
}

1.2 Quality Control

```{asis, eval = !is.null(params$r$min_points)}

End day of modelling: r params$r$min_points
##### Excluded data:
```r
if (!is.null(params$r$excluded_data)) {
 df_grouped <- dplyr::group_by(params$r$excluded_data, study, treatment, animal_id, reason)
 df_sum <- dplyr::summarise(df_grouped, days = paste(unique(day), collapse = ", ")) 
 knitr::kable(df_sum)
} else {
cat("Nothing is excluded")
}

2. Analysis

2.1 Analysis settings

End day of modelling: r params$r$mod_end_day
Consecutive measurements per week: r params$r$con_meas

Model selection: r params$r$model_type

This is a model for all the control data, including historical control data, to explain the normal tumour growth profile without treatment.

```{asis, echo = params$r$model_type == "Linear model"} $$log_{10}(tumour.volume) \sim a + b \times time + (1|animal.id) + (1|study),$$ where $a$ and $b$ are parameters that correspond to the log initial volume and growth rate. The random effect terms $(1|animal.id)$ and $(1|study)$ are used to capture the animal-to-animal and study-to-study variability, respectively.

```{asis, echo = params$r$model_type == "Two-stage non-linear model"}
$$log_{10}(tumour.volume) \sim f(time) + (1|animal.id) + (1|study),$$
where a continuous hinged function is used to allow different growth rates for the early stage (“unstable” phase) and the late stage (“stable” stage) of the tumour growth:
$$f(time) = a + b_0 \times (time - t_{change}) + (b_1 - b_0) \times \delta \times log(1 + \frac{exp(time - t_{change})}{\delta}),$$
with parameters: 
    $a$: log initial tumour volume 
    $b_0$: growth rate of the unstable stage
    $b_1$: growth rate of the stable stage 
    $t_{change}$: time point that the growth rates change 
    $\delta$: smoothness of the curve 

2.2 Model output

params$r$p_control_growth

2.3 Tumour classification

The 95% predication interval is derived from the model for the control data. The tumours that are higher than the lower bound of 95% prediction interval are considered as not significantly different from the “normal” tumour growth. For an individual tumour, if there are m=consecutive measurements that are smaller than the lower bound of 95% prediction interval, the tumour is considered as “Responder”. Otherwise, the tumour is classified as “Non-responder”.

All responders are classified into sub-categories based on the tumour growth rates. If the growth rate is not significantly different from 0, the tumour is classified as “Stable responder”. We consider a tumour with growth rate significantly larger than 0 as a “Modest responder”, which shows a response to the treatment although the tumour still growth slowly. A strong drug effect is concluded if the tumour growth rate is significantly smaller than 0 and the tumour is classified as “Regressing responder”.

Classification over tumour volume

invisible(lapply(params$r$classification_tv_plot, print))

Classification over growth rate

params$r$classification_gr_plot

Waterfall plot

invisible(lapply(params$r$classification_waterfall_plot, print))

```{asis, echo = params$r$stat_analysis_done}

2.4 Statistical test for tumour classification

2.4.1 Animal numbers for tumour classification

```r
knitr::kable(params$r$df_animal_number)
params$r$plot_animal_number

```{asis, echo = params$r$stat_analysis_done}

2.4.2 Ordered logistic model

By converting the tumour classification outcomes into ordinal data, we are able to assess the drug efficacy by using an ordered logistic regression: $$y^ \sim treatment + (1|study),$$ where $y^$ is a latent continuous variable defined by the following:

$$ Tumour.classification =
\begin{cases} \textit{0 (non-responder), if } \; y^ \leq \mu_1 \ \textit{1 (modest responder), if} \; \mu_1 < y^ \leq \mu_2 \ \textit{2 (stable responder), if} \; \mu_2 < y^* \leq \mu_3 \ \textit{3 (regressing responder) other}\ \end{cases} $$

```{asis, echo = params$r$stat_analysis_done}
##### Drug efficacy
knitr::kable(params$r$df_efficacy)
cat("Asterisks indicate that the drug was considered significantly effective by comparing to the control.")

```{asis, echo = params$r$stat_analysis_done}

Classification categories
```r
knitr::kable(params$r$df_categories)
params$r$plot_categories

Session Info

pander::pander(sessionInfo())


AstraZeneca/INSPECTumours documentation built on March 30, 2023, 12:30 p.m.