knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(DBI)
library(dplyr)
library(CodelistGenerator)
library(CDMConnector)

Creating a codelist for osteoarthritis

For this example we are going to generate a candidate codelist for osteoarthritis, looking at the impact of alternative search strategies.

library(DBI)
library(RPostgres)
# postgres database connection details
serverDbi <- Sys.getenv("server")
user <- Sys.getenv("user")
password <- Sys.getenv("password")
port <- Sys.getenv("port")
host <- Sys.getenv("host")

db <- dbConnect(RPostgres::Postgres(),
  dbname = serverDbi,
  port = port,
  host = host,
  user = user,
  password = password
)

# name of vocabulary schema
vocabularyDatabaseSchema <- "vocabulary"

# create cdm reference
cdm <- CDMConnector::cdm_from_con(
  con = db,
  cdm_schema = vocabularyDatabaseSchema
)

Search strategies

Condition domain, without searching synonyms, with exclusions, without including descendants or ancestor

oaCodes1 <- readRDS(system.file("optionsData01.RData", 
                                            package = "CodelistGenerator"))

To start we will search for "osteoarthritis", while excluding "post-infection" and "post-traumatic", but without searching synonyms, without searching via non-standard codes, and without including descendants or the direct ancestor of the included concepts.

oaCodes1 <- getCandidateCodes(
  cdm = cdm,
  keywords = "osteoarthritis",
  domains = "Condition",
  searchInSynonyms = FALSE,
  searchNonStandard = FALSE,
  exclude = c(
    "post-infection",
    "post-traumatic"
  ),
  includeDescendants = FALSE,
  includeAncestor = FALSE
)

What is the candidate codelist?

oaCodes1 %>% 
  glimpse()

Including descendants

oaCodes2 <- readRDS(system.file("optionsData02.RData", 
                                            package = "CodelistGenerator"))

Now we will also include the descendants of included concepts.

oaCodes2 <- getCandidateCodes(
  cdm = cdm,
  keywords = "osteoarthritis",
  domains = "Condition",
  searchInSynonyms = FALSE,
  searchNonStandard = FALSE,
  exclude = c(
    "post-infection",
    "post-traumatic"
  ),
  includeDescendants = TRUE,
  includeAncestor = FALSE
)

What new codes do we pick up?

newCodes1To2 <- compareCodelists(oaCodes1, oaCodes2) %>%
  filter(codelist == "Only codelist 2") %>%
  select(-"codelist")

newCodes1To2 %>% 
  glimpse()

Including observation domain

oaCodes3 <- readRDS(system.file("optionsData03.RData", 
                                            package = "CodelistGenerator"))

Now we will search the observation domain as well as the condition domain.

oaCodes3 <- getCandidateCodes(
  cdm = cdm,
  keywords = "osteoarthritis",
  domains = c("Condition", "Observation"),
  searchInSynonyms = FALSE,
  searchNonStandard = FALSE,
  exclude = c(
    "post-infection",
    "post-traumatic"
  ),
  includeDescendants = FALSE,
  includeAncestor = FALSE
)

What new codes do we pick up?

newCodes1To3 <- compareCodelists(oaCodes1, oaCodes3) %>%
  filter(codelist == "Only codelist 2") %>%
  select(-"codelist")

newCodes1To3 %>% 
  glimpse()

Search synonyms

oaCodes4 <- readRDS(system.file("optionsData04.RData", 
                                            package = "CodelistGenerator"))

Now we will search the concept synonym table to identify concepts to include.

oaCodes4 <- getCandidateCodes(
  cdm = cdm,
  keywords = "osteoarthritis",
  domains = "Condition",
  searchInSynonyms = TRUE,
  searchNonStandard = FALSE,
  exclude = c(
    "post-infection",
    "post-traumatic"
  ),
  includeDescendants = FALSE,
  includeAncestor = FALSE
)

What new codes do we pick up?

newCodes1To4 <- compareCodelists(oaCodes1, oaCodes4) %>%
  filter(codelist == "Only codelist 2") %>%
  select(-"codelist")

newCodes1To4 %>% 
  glimpse()

Search via non-standard

oaCodes5 <- readRDS(system.file("optionsData05.RData", 
                                            package = "CodelistGenerator"))

Now we will search the concept synonym table to identify concepts to include.

oaCodes5 <- getCandidateCodes(
  cdm = cdm,
  keywords = "osteoarthritis",
  domains = "Condition",
  searchInSynonyms = FALSE,
  searchNonStandard = TRUE,
  exclude = c(
    "post-infection",
    "post-traumatic"
  ),
  includeDescendants = FALSE,
  includeAncestor = FALSE
)

What new codes do we pick up?

newCodes1To5 <- compareCodelists(oaCodes1, oaCodes5) %>%
  filter(codelist == "Only codelist 2") %>%
  select(-"codelist")

newCodes1To5 %>% 
  glimpse()

Include ancestor

oaCodes8 <- readRDS(system.file("optionsData07.RData", 
                                            package = "CodelistGenerator"))

Now we include the direct ancestor of included terms.

oaCodes8 <- getCandidateCodes(
  cdm = cdm,
  keywords = "osteoarthritis",
  domains = "Condition",
  searchInSynonyms = FALSE,
  searchNonStandard = FALSE,
  exclude = c(
    "post-infection",
    "post-traumatic"
  ),
  includeDescendants = FALSE,
  includeAncestor = TRUE
)

What new codes do we pick up?

newCodes1To8 <- compareCodelists(oaCodes1, oaCodes8) %>%
  filter(codelist == "Only codelist 2") %>%
  select(-"codelist")

newCodes1To8 %>% 
  glimpse()


oxford-pharmacoepi/CodelistGenerator documentation built on April 12, 2024, 9:30 a.m.