---
title: "Imperfect serological test"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Imperfect serological test}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

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

## Imperfect test

Function `correct_prevalence()` is used for estimating the true prevalence if the serological test used is imperfect

Arguments:

-   `age` the age vector

-   `pos` the positive count vector (optional if status is provided).

-   `tot` the total count vector (optional if status is provided).

-   `status` the serostatus vector (optional if pos & tot are provided).

-   `init_se` sensitivity of the serological test (default value `0.95`)

-   `init_sp` specificity of the serological test (default value `0.8`)

-   `study_size_se` sample size for sensitivity validation study (default value `1000`)

-   `study_size_sp` sample size for specificity validation study (default value `1000`)

-   `chains` number of Markov chains (default to `1`)

-   `warmup` number of warm up runs (default value `1000`)

-   `iter` number of iterations (default value `2000`)

The function will return a list of 2 items:

-   `info` contains estimated values for se, sp and corrected seroprevalence

-   `corrected_sero` return a data.frame with `age`, `sero` (corrected sero) and `pos`, `tot` (adjusted based on corrected prevalence)

```{r}
# estimate real prevalence
data <- rubella_uk_1986_1987
output <- correct_prevalence(data$age, pos = data$pos, tot = data$tot, warmup = 1000, iter = 4000, init_se=0.85, init_sp = 0.8, study_size_se=1000, study_size_sp=3000)

# check fitted value 
output$info[1:2, ]

# compare original prevalence and corrected prevalence
ggplot()+
  geom_point(aes(x = data$age, y = data$pos/data$tot, color="apparent prevalence")) + 
  geom_point(aes(x = output$corrected_se$age, y = output$corrected_se$sero, color="esimated prevalence" )) +
  scale_color_manual(
    values = c("apparent prevalence" = "royalblue1", "esimated prevalence" = "blueviolet")
  )+ 
  labs(x = "Age", y = "Prevalence")
```

### Fitting corrected data 

**Data after seroprevalence correction**

```{r}
suppressWarnings(
  corrected_data <- farrington_model(
  age = output$corrected_se$age, pos = output$corrected_se$pos, tot = output$corrected_se$tot,
  start=list(alpha=0.07,beta=0.1,gamma=0.03))
)

plot(corrected_data)
```

**Original data**

```{r}
suppressWarnings(
  original_data <- farrington_model(
  age = data$age, pos = data$pos, tot = data$tot,
  start=list(alpha=0.07,beta=0.1,gamma=0.03))
)
plot(original_data)
```
