---
title: "Parametric Cure Models"
author: "Jordan Amdahl"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Parametric Cure Models}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

# Introduction

Parametric cure models are a type of parametric survival model model in which it is assumed that there are a proportion of subjects who will not experience the event. In a mixture cure model, these 'cured' and 'uncured' subjects are modeled separately, with the cured individuals subject to no excess risk and the uncured individuals subject to excess risk modeled using a parametric survival distribution. In a non-mixture model, a parametric survival distribution is scaled such that survival asymptotically approaches the cure fraction.


# Mixture Cure Model

The following code fits a mixture cure model to the `bc` dataset from `flexsurv` using a Weibull distribution and a logistic link function for the cure fraction:

```{r, warning=FALSE, message=FALSE}
library(flexsurvcure)
cure_model <- flexsurvcure(Surv(rectime, censrec)~group, data=bc, link="logistic", dist="weibullPH", mixture=T)
print(cure_model)
```

Model results can be displayed graphically using the `plot` S3 method:
```{r, warning=FALSE, message=FALSE}
plot(cure_model)
```

Predicted survival probabilities can also be generated using the `summary` S3 method:
```{r, warning=FALSE, message=FALSE}
summary(cure_model, t=seq(from=0,to=3000,by=1000), type="survival", tidy=T)
```

More complex models may be fitted by adding covariates to the parametric distribution used to model the uncured individuals.  This is done by passing a list of formula, named according to the parameters affected, through the anc argument:
```{r, warning=FALSE, message=FALSE}
cure_model_complex <- flexsurvcure(Surv(rectime, censrec)~group, data=bc, link="logistic", dist="weibullPH", mixture=T, anc=list(scale=~group))
print(cure_model_complex)
plot(cure_model_complex)
```

# Non-Mixture Cure Model

Non-mixture cure models can be fit by passing `mixture=FALSE` to `flexsurvcure`:

```{r, warning=FALSE, message=FALSE}
library(flexsurvcure)
cure_model_nmix <- flexsurvcure(Surv(rectime, censrec)~group, data=bc, link="loglog", dist="weibullPH", mixture=F)
print(cure_model_nmix)
```