OHDSI Home | Forums | Wiki | Github

Drug indications and diagnosis

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:

  1. Individuals on a drug with a recent outpatient physician visit for one of the indications for the drug
  2. 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.

t