# Applying demographic requirements to a cohort

    library(CodelistGenerator)
    library(CohortConstructor)
    library(CohortCharacteristics)
    library(ggplot2)
    library(omock)
    library(dplyr)

In this vignette we’ll show how requirements related to patient demographics can be applied to a cohort. Again we’ll use the Eunomia synthetic data.

    cdm <- mockCdmFromDataset(datasetName = "GiBleed", source = "duckdb")

Let’s start by creating a cohort of people with a fracture. We’ll first look for codes that might represent a fracture and the build a cohort using these codes, setting cohort exit to 180 days after the fracture.

    fracture_codes <- getCandidateCodes(cdm, "fracture")
    fracture_codes <- list("fracture" = fracture_codes$concept_id)
    cdm$fracture <- conceptCohort(cdm = cdm,
                                     conceptSet = fracture_codes,
                                     name = "fracture")

    summary_attrition <- summariseCohortAttrition(cdm$fracture)
    plotCohortAttrition(summary_attrition)

## Restrict cohort by age

We can choose a specific age range for individuals in our cohort using `requireAge()` from CohortConstructor.

    cdm$fracture <- cdm$fracture |>
      requireAge(indexDate = "cohort_start_date",
                 ageRange = list(c(18, 100)))

    summary_attrition <- summariseCohortAttrition(cdm$fracture)
    plotCohortAttrition(summary_attrition)

Note that by default individuals are filtered based on the age they were when they entered the cohort.

## Restrict cohort by sex

We can also specify a sex criteria for individuals in our cohort using `requireSex()` from CohortConstructor.

    cdm$fracture <- cdm$fracture |>
      requireSex(sex = "Female")

    summary_attrition <- summariseCohortAttrition(cdm$fracture)
    plotCohortAttrition(summary_attrition)

## Restrict cohort by number of prior observations

We can also specify a minimum number of days of prior observations for each individual using `requirePriorObservation()` from CohortConstructor.

    cdm$fracture <- cdm$fracture |>
      requirePriorObservation(indexDate = "cohort_start_date",
                              minPriorObservation = 365)

    summary_attrition <- summariseCohortAttrition(cdm$fracture)
    plotCohortAttrition(summary_attrition)

As well as specifying a minimum amount of prior observation, we can require some mimimum amount of follow-up by using `requireFutureObservation()` in a similar way.

## Applying multiple demographic requirements to a cohort

We can implement multiple demographic requirements at the same time by using the more general `requireDemographics()` function.

    cdm$fracture <- conceptCohort(cdm = cdm,
                                     conceptSet = fracture_codes,
                                     name = "fracture") |>
      requireDemographics(indexDate = "cohort_start_date",
                          ageRange = c(18,100),
                          sex = "Female",
                          minPriorObservation = 365,
                          minFutureObservation = 30)

    summary_attrition <- summariseCohortAttrition(cdm$fracture)
    plotCohortAttrition(summary_attrition)