---
title: "Model selection"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Model selection}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, output=FALSE}
library(serosv)
library(dplyr)
library(magrittr)
```

```{r, warning=FALSE}
data <- parvob19_fi_1997_1998[order(parvob19_fi_1997_1998$age), ] %>% 
  rename(status = seropositive)
  
aggregated <- transform_data(data$age, data$status, heterogeneity_col = "age")

# fit with linelisting data
model1 <- polynomial_model(data, type = "Muench")
# fit with aggregated data
model2 <- polynomial_model(aggregated, type = "Muench")
# fit with aggregated data
model3 <- polynomial_model(aggregated, type = "Griffith")
# fit with gam
model4 <- penalized_spline_model(aggregated)
```

## Generate models comparison `data.frame`

Function `compare_models()` is used for quickly computing AIC and BIC values for given model(s).

The function can take an arbitrary number of models and all models must be created from `serosv`'s set of `*_model()` functions. It will then return a `data.frame` of 4 columns:

-   `model` model identifier. Either user defined name or index based on the order provided.

-   `type` type of model (a `serosv` model class)

-   `AIC` AIC value for the fitted model (if applicable)

-   `BIC` AIC value for the fitted model (if applicable)

**Sample usage**

Compare 4 models defined above

```{r}
# provide models with name
compare_models(muench_linelist = model1, muench_aggregated = model2, griffith = model3, penalized_spline = model4)

# provide models without name
compare_models(model1, model2, model3, model4)

# user can provide arbitrary number of models
compare_models(model3, model4)
```