knitr::opts_chunk$set( echo = FALSE, message = FALSE, warning = FALSE, results = "asis" )
r packageVersion("INSPECTumours")
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) }
```{asis, eval = !is.null(params$r$min_points)}
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") }
r params$r$mod_end_day
r params$r$con_meas
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
params$r$p_control_growth
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”.
invisible(lapply(params$r$classification_tv_plot, print))
params$r$classification_gr_plot
invisible(lapply(params$r$classification_waterfall_plot, print))
```{asis, echo = params$r$stat_analysis_done}
```r knitr::kable(params$r$df_animal_number)
params$r$plot_animal_number
```{asis, echo = params$r$stat_analysis_done}
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}
```r knitr::kable(params$r$df_categories)
params$r$plot_categories
pander::pander(sessionInfo())
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.