knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%", message=FALSE, warning=FALSE )
You can install CodelistGenerator from CRAN
install.packages("CodelistGenerator")
Or you can also install the development version of CodelistGenerator
install.packages("remotes") remotes::install_github("darwin-eu/CodelistGenerator")
library(dplyr) library(CDMConnector) library(CodelistGenerator)
For this example we'll use the Eunomia dataset (which only contains a subset of the OMOP CDM vocabularies)
db <- DBI::dbConnect(duckdb::duckdb(), dbdir = eunomia_dir()) cdm <- cdm_from_con(db, cdm_schema = "main", write_schema = c(prefix = "cg_", schema = "main"))
OMOP CDM vocabularies are frequently updated, and we can identify the version of the vocabulary of our Eunomia data
getVocabVersion(cdm = cdm)
CodelistGenerator provides various other functions to explore the vocabulary tables. For example, we can see the the different concept classes of standard concepts used for drugs
getConceptClassId(cdm, standardConcept = "Standard", domain = "Drug")
CodelistGenerator provides functions to extract code lists based on vocabulary hierarchies. One example is `getDrugIngredientCodes, which we can use, for example, to get all the concept IDs used to represent aspirin.
getDrugIngredientCodes(cdm = cdm, name = "aspirin")
If we also want the details of these concept IDs we can get these like so.
getDrugIngredientCodes(cdm = cdm, name = "aspirin", withConceptDetails = TRUE)
And if we want codelists for all drug ingredients we can simply omit the name argument and all ingredients will be returned.
ing <- getDrugIngredientCodes(cdm = cdm) ing$aspirin ing$diclofenac ing$celecoxib
CodelistGenerator can also support systematic searches of the vocabulary tables to support codelist development. A little like the process for a systematic review, the idea is that for a specified search strategy, CodelistGenerator will identify a set of concepts that may be relevant, with these then being screened to remove any irrelevant codes by clinical experts.
We can do a simple search for asthma
asthma_codes1 <- getCandidateCodes( cdm = cdm, keywords = "asthma", domains = "Condition" ) asthma_codes1 %>% glimpse()
But perhaps we want to exclude certain concepts as part of the search strategy, in this case we can add these like so
asthma_codes2 <- getCandidateCodes( cdm = cdm, keywords = "asthma", exclude = "childhood", domains = "Condition" ) asthma_codes2 %>% glimpse()
We can compare these two code lists like so
compareCodelists(asthma_codes1, asthma_codes2)
We can then also see non-standard codes these are mapped from, for example here we can see the non-standard ICD10 code that maps to a standard snowmed code for gastrointestinal hemorrhage returned by our search
Gastrointestinal_hemorrhage <- getCandidateCodes( cdm = cdm, keywords = "Gastrointestinal hemorrhage", domains = "Condition" ) Gastrointestinal_hemorrhage %>% glimpse()
summariseCodeUse(list("asthma" = asthma_codes1$concept_id), cdm = cdm) %>% glimpse()
DBI::dbDisconnect(db)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.