Good evening:
Every drug packet insert has an list approved "on label"indications. Is it possible to link drug to condition that indicates the drug, e.g. RxNorm linked to SNOMED? Of-course “Off-label” indications is also possible, but that is out of scope of this question.
Use case: We expect individuals with Diabetes Mellitus to see a physician in outpatient setting every 6 months. We want to study
Outcome: ER outpatient visit rates
Comparator groups:
- Individuals on a drug with a recent outpatient physician visit for one of the indications for the drug
- Individuals on a drug without a recent outpatient physician visit for one of the indications for the drug.
Is it possible to relate drug to its indication in the OHDSI vocabulary?
@Gowtham_Rao:
Each drug product is connected through the CONCEPT_RELATIONSHIP table to a Concept with the concept_class_id=‘Indication’. Those relationships have the relationship_id ‘Has FDA-appr ind’ and ‘Has off-label ind’ (if you have a license to FDB) and ‘May treat’ and ‘May prevent (NDF-RT)’ (which is free). Those are connected to SNOMED concepts through a second CONCEPT_RELATIONSHIP record.
Alternatively, you can use the LAERTES project to find out about the label information: https://github.com/OHDSI/KnowledgeBase.
1 Like
Got it. Something like this? is there a better way?
select a.concept_name as condition_name
, c.concept_name as drug_name
from
schema.CONCEPT as a
inner join
schema.CONCEPT_RELATIONSHIP as b
on a.concept_id = b.concept_id_1
inner join
schema.CONCEPT as c
on b.concept_id_2 = c.concept_id
where a.concept_class_id = 'Ind / CI'
and a.domain_id = 'Drug'
and b.relationship_id = 'May be treated by'
and a.concept_name like '%Diabetes Mellitus%'
and a.invalid_reason is null
and b.invalid_reason is null
and c.invalid_reason is null
order by a.concept_name
@Gowtham_Rao:
This works, except you won’t get Standard Concepts, because they are not always directly linked. You’d have to keep joining CONCEPT_RELATIONSHIP all the way down.
Obviously, that is a huge pain, and we have the CONCEPT_ANCESTOR table that does that for you. So, if you want just Indication, you can do this:
select a.min_levels_of_separation as a_min,
an.concept_id as an_id, an.concept_name as an_name, an.vocabulary_id as an_vocab, an.domain_id as an_domain, an.concept_class_id as an_class,
de.concept_id as de_id, de.concept_name as de_name, de.vocabulary_id as de_vocab, de.domain_id as de_domain, de.concept_class_id as de_class
from concept an
join concept_ancestor a on a.ancestor_concept_id=an.concept_id
join concept de on de.concept_id=a.descendant_concept_id
where an.concept_class_id in ('Ind / CI', 'Indication') -- One is for NDFRT, the other for FDB Indications
and de.vocabulary_id in ('RxNorm', 'RxNorm Extension') -- You don't need that if you join directly with DRUG_EXPOSURE
and lower(an.concept_name) like '%diabetes%'
However, if you want to distinguish labeled and off-label indication, you’d have to traverse it manually. We don’t have a good solution for that. Same is true for contra-indications.
Actually, you said you need to check the conditions in the CONDITION table. Indications are not Conditions, they are Drug classes. But there is a cross-link to Conditions:
select
c.concept_id as c_id, c.concept_name as c_name, c.vocabulary_id as c_vocab, c.domain_id as c_domain, c.concept_class_id as c_class, -- Condition
de.concept_id as de_id, de.concept_name as de_name, de.vocabulary_id as de_vocab, de.domain_id as de_domain, de.concept_class_id as de_class -- Drug
from concept an -- Indications
join concept_ancestor a on a.ancestor_concept_id=an.concept_id -- connect to
join concept de on de.concept_id=a.descendant_concept_id -- ...drug
join concept_relationship r on r.concept_id_1=an.concept_id -- connect to
join concept c on c.concept_id=r.concept_id_2 and c.domain_id='Condition' -- Snomed Conditions
where an.concept_class_id in ('Ind / CI', 'Indication')
and de.vocabulary_id in ('RxNorm', 'RxNorm Extension')
and lower(c.concept_name) like '%diabet%'
Let me know.
1 Like
Thank you. That works very nicely.