Exploring OMOP hierarchy for blood counts
Source:vignettes/hierarchy-for-blood-counts.Rmd
hierarchy-for-blood-counts.Rmd
Use case
A need to map blood count components from two different source systems to OMOP. There are different potential OMOP concept ids. How to choose between them ? How to deal with a situation where different institutions end up with different OMOP concept ids for essentially the same measure.
Leukocytes
Starting with a single concept id 3010813
(chosen in a
mapping process) for the number of Leukocytes in a volume of blood.
lvbg <- omop_id(3010813)
lvbg |>
select(-valid_start_date,-valid_end_date,-invalid_reason) |>
kable()
concept_id | concept_name | domain_id | vocabulary_id | concept_class_id | standard_concept | concept_code |
---|---|---|---|---|---|---|
3010813 | Leukocytes [#/volume] in Blood | Measurement | LOINC | Lab Test | S | 26464-8 |
Using omopcept to find the immediate relations of “Leukocytes [#/volume] in Blood”
leuk_r <- omop_relations(3010813)
leuk_r |> arrange(relationship_id) |>
select(relationship_id,concept_name_2,domain_id,concept_class_id) |>
kable()
relationship_id | concept_name_2 | domain_id | concept_class_id |
---|---|---|---|
Contained in panel | Hemogram without Platelets panel - Blood | Measurement | Lab Test |
Contained in panel | Laboratory | Observation | Survey |
Contained in panel | Differential panel, method unspecified - Blood | Measurement | Lab Test |
Contained in panel | Manual Differential panel - Blood | Measurement | Lab Test |
Contained in panel | Laboratory - acute [CARE] | Observation | Survey |
Contained in panel | Leukogram panel - Blood | Measurement | Lab Test |
Contained in panel | Short blood count panel - Blood | Measurement | Lab Test |
Has component | Leukocytes | Observation | LOINC Component |
Has property | Number Concentration | Observation | LOINC Property |
Has scale type | Qn | Observation | LOINC Scale |
Has system | Blood | Observation | LOINC System |
Has time aspect | Point in time (spot) | Observation | LOINC Time |
Is | Leukocytes [#/volume] in Blood | Observation | LOINC Time |
Is a | Leukocytes | Blood | Hematology and Cell counts | Measurement | LOINC Hierarchy |
Is a | Leukocytes|Number Concentration (count/vol)|Moment in time|Blood | Measurement | LOINC Group |
Is a | Hematology (coagulation) differential count | Measurement | LOINC Class |
Of these relations
Leukocytes | Blood | Hematology and Cell counts
looks like
it may be useful, it has a concept_class_id
of
LOINC Hierarchy
and itself has the following relations.
lbhcc_r <- omop_relations(37043992) |>
arrange(relationship_id)
lbhcc_r |>
select(relationship_id,concept_name_2,domain_id,concept_class_id) |>
kable()
relationship_id | concept_name_2 | domain_id | concept_class_id |
---|---|---|---|
Is | Leukocytes | Blood | Hematology and Cell counts | Measurement | Lab Test |
Is a | Leukocytes | Observation | LOINC Component |
Subsumes | Leukocytes [#/volume] corrected for nucleated erythrocytes in Blood | Measurement | Lab Test |
Subsumes | Leukocytes [#/volume] in Blood by Estimate | Measurement | Lab Test |
Subsumes | Leukocytes [#/volume] in Blood by Automated count | Measurement | Lab Test |
Subsumes | Leukocytes [#/volume] in Blood | Measurement | Lab Test |
Subsumes | Leukocytes [#/volume] corrected for nucleated erythrocytes in Blood by Automated count | Measurement | Lab Test |
Subsumes | Leukocytes [#/volume] in Blood by Manual count | Measurement | Lab Test |
#lbhcc_r |>
# omop_graph( graphtitle = "", saveplot = FALSE )
Can we find similar hierarchy parents for other blood count concepts ?
Seems yes, there are > 400 concepts that match “*Blood | Hematology and Cell counts”.
We can do similar for erythrocytes as we did for leukocytes.
#new fixed=TRUE arg for omop_names() allows this
bhccounts <- omop_names("Blood | Hematology and Cell counts", fixed=TRUE) |>
#returning 452 concepts
#removing those for Fetus
filter(!str_detect(concept_name,"Fetus"))
#now down to 417 concepts
#can I filter out desired one from this ?
#ery <- bhccounts |>
# filter(concept_name, starts_with("Erythrocytes |"))
#it is id 37059055
ery_r <- omop_relations(37059055)
ery_r |>
select(relationship_id,concept_name_2,domain_id,concept_class_id) |>
kable()
relationship_id | concept_name_2 | domain_id | concept_class_id |
---|---|---|---|
Is | Erythrocytes | Blood | Hematology and Cell counts | Measurement | Lab Test |
Subsumes | Erythrocytes [Morphology] in Blood by Automated count | Measurement | Lab Test |
Subsumes | Erythrocytes [#/volume] in Blood | Measurement | Lab Test |
Subsumes | Erythrocytes [#/volume] in Blood by Automated count | Measurement | Lab Test |
Subsumes | Erythrocytes [#/volume] in Blood by Manual count | Measurement | Lab Test |
Is a | Erythrocytes | Observation | LOINC Component |
See https://github.com/OHDSI/Vocabulary-v5.0/issues/301 which has some info about this