---
title: "Creating synthetic clinical tables"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{synthetic_clinical_tables}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

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

The omock package provides functionality to quickly create a cdm reference containing synthetic data based on population settings specified by the user.   

First, let's load packages required for this vignette.
```{r, message=FALSE, warning=FALSE}
library(omock)
library(dplyr)
library(ggplot2)
```

Now, in three lines of code, we can create a cdm reference with a person and observation period table for 1000 people.
```{r}
cdm <- emptyCdmReference(cdmName = "synthetic cdm") |>
  mockPerson(nPerson = 1000) |>
  mockObservationPeriod()

cdm

cdm$person |> glimpse()

cdm$observation_period |> glimpse()
```

We can add further requirements around the population we create. For example we can require that they were born between 1960 and 1980 like so.
```{r}
cdm <- emptyCdmReference(cdmName = "synthetic cdm") |>
  mockPerson(
    nPerson = 1000,
    birthRange = as.Date(c("1960-01-01", "1980-12-31"))
  ) |>
  mockObservationPeriod()
```

```{r}
cdm$person |>
  collect() |>
  ggplot() +
  geom_histogram(aes(as.integer(year_of_birth)),
    binwidth = 1, colour = "grey"
  ) +
  theme_minimal() +
  xlab("Year of birth")
```
