OHDSI Home | Forums | Wiki | Github

ATC release

(Anna Ostropolets) #1


Together with @Christian_Reich, @abedtash_hamed, @Alexdavv, @Dymshyts and other contributors we revised the content of ATC and its relationship to RxNorm Drug Concepts. We learned a lot in the process, which may be useful for you to understand if you want to use ATC as a classification, or if ATC is part of your source data.

  1. ATC is much more complicated than it looks.
  2. We had to fix the ATC-RxNorm/Extension hierarchy.
  3. We added a mapping from ATC to RxNorm/Extension to support ETLing.

If you want to understand the details, please read on.

ATC, despite being the most popular drug classification system, has a number of non-obvious problems:

  • Some ATC concepts are WYSIWYG, but others incorporate attributes that are not immediately visible: route of administration, indication, mechanism of action, dosage and combinations. Therefore, not every ATC code containing the name of a drug ingredient is automatically the correct classifier for that drug. For example prednisolone is the ingredient of 6 ATC concepts that have the same name but different routes of administration, dose or indication.
  • Some drug classes have even more exotic attributes, like insulines and vaccines. For example, A10AB04 “insulin lispro” is fast-acting and A10AC04 “insulin lispro” is intermediate-acting.
  • Many ATC concepts have no drugs in any of the markets we currently support. Often, these represent historic drug products that have left the market.
  • Many drugs have no ATC class. This is predominantly the case for traditional medicines, extracts, allergenic preparations, but a few “good” ones are there as well, such as thyroglobulin.

What is wrong with the way ATC was implemented till now:

  • ATC 5-level concepts were mapped to RxNorm ingredients. As a consequence, all those additional attributes were not considered. E.g., ophthalmologic prednisolone was an ancestor to all drugs containing prednisolone. We took out all combinations a year ago to prevent complete chaos, but obviously that was not really solving the problem.
  • Many people have ATC in source data, essentially using it as a way to define ingredients. We provided no support to convert these data into standard OMOP.

Here is what we did to fix the hierarchy:

  • We revised the mapping to Ingredients
  • We added some of the missing attribute information to the ATC 5 from the ATC website. For example, H02AB06 “prednisolone” became H02AB06 “prednisolone, systemic”.
  • Alternatively, we extended the attributes from ATC 3 or 4 levels down to ATC 5. For example, ATC 5 R03AC07 “isoetarine” doesn’t have route specified, but we inferred its route from an ancestor R03A “ADRENERGICS, INHALANTS”.
  • We rebuilt the entire ATC-RxNorm hierarchy taking into account the tacit attributes. See the picture below. The above H02AB06 “Prednisolone” with its systemic route of administration is connected to the Ingredient Prednisolone in CONCEPT_ANCESTOR, and from there to only those descendants which have a form intended for system use (e.g. Oral Tablets or Injections). Combinations are also correctly handled:

Here is what we did to support mapping ATCs during ETL

  • New “Maps to” relationships connect ATC 5 to RxNorm and RxNorm Extension. See picture below. Single ingredient ATCs are mapped to RxNorm Ingredients. Combinations are only mapped to the explicit components.

What we haven’t done and needs to be addressed in the future:

  • Independent QA. We are planning to integrate the Norwegian drug repository, for which there is a definitive ATC mapping from the same WHO Collaborating Centre for Drug Statistics Methodology (WHOCC) which maintains the ATC, and then compare their assignments to ours. It won’t include all drugs though.
  • Missing attributes. There are still attributes to be modelled and correctly implemented, even though they are not common. For example:
    • We did not differentiate corticosteroids based on their potency: D07AC14 “methylprednisolone aceponate” is a potent corticosteroid and D07AA01 “methylprednisolone” is a weak corticosteroid, but currently they have the same RxNorm descendants.
    • We didn’t implement mechanisms of action. For example, ATC B01AC06 “acetylsalicylic acid (Platelet aggregation inhibitors)” and N02BA01 “acetylsalicylic acid (OTHER ANALGESICS AND ANTIPYRETICS)” have the same RxNorm descendants.
  • Orphan drugs. We have to think what to do with the RxNorm ingredients and corresponding drugs for which no ATC exists. One way is to bring it up with the WHOCC. Another way is to create a few pseudo-ATC catch-all classes.

As usual, we are happy to take comments, suggestions, bug reports and congratulations.

Relation between MedDRA and SNOMED
(Patrick Ryan) #2

Thanks so much @aostropolets and team for all your hard work, and for the clear description of the progress.

Could you please help me understand how this may impact our use of CONCEPT_ANCESTOR, particularly when creating conceptsets for drug classes with the aim to find all standard concepts (ingredient and below) within the class?

(Christian Reich) #3


Good question. First, Atlas needs to stop double-guessing the CONCEPT_ANCESTOR table with the CONCEPT_RELATIONSHP table. Will work even less than before. Instead, just rely on CONCEPT_ANCESTOR. Blindly. :slight_smile:

The thing to consider:

  • ATC is redundant, and the same ingredient might show up in more than one ATC. So, people really need to pick the right ATC, or collect them all if they want. Or, they find the ingredient and first go up the hierarchy.
  • All ingredients are correctly listed. This is important for the combination ATCs. TThere are a lot of ingredients hidden in combo ATCs, which are not explicitly listed in the name. But the hierarchy knows which one they are, and you can see them in ATLAS.
  • All drug components, drug forms and drug products are the correct descendants of the ATC. So, “Predinsolone systemic” will not list cremes, inhalants and other local forms.

This should all work nicely, with the little caveats Anna mentioned above. We don’t think this will be a problem very often.

(Patrick Ryan) #4

To clarify, a conceptset expression, as created in ATLAS and generated from webAPI, only relies on CONCEPT_ANCESTOR to expand out into an ‘included concepts’ list. It does not, and never did, use the CONCEPT_RELATIONSHIP for this purpose. To create the ‘included source concepts’, we must use CONCEPT_RELATIONSHIP and the ‘Maps to’ relations to identify non-standard concepts that will be contained within the ‘included concepts’ list.

The first point is the one I am just trying to understand: you say ‘find the ingredient and first go up the hierarchy’, does that mean that a RxNorm ingredient will have an ancestor record to ALL ATC concepts which contain that ingredient now? If so, that’s amazing and extraordinarily useful!

(Chris Knoll) #5

Someone needs to attend more Atlas training classes :slight_smile:

(Christian Reich) #6

Enlighten us, @Chris_Knoll. Would be wonderful if that were fixed. The ATLAS I am using and the one at ohdsi.org returns “No hierarchy found for non-standard concepts” if you click on the Hierarchy tab of an ATC concept. I was told the join CONCEPT_RELATIONSHIP is the problem.

How is it working?

(Patrick Ryan) #7

Please lets not hijack this thread, which should stay focused on ATC release. This is an important thread to stay on point, given the value of this new contribution and its application across the OHDSI community.

@Christian_Reich you are talking about ATLAS hierarchy view, which is not relevant to discussion of conceptset expression expansion to included concepts. I am happy to take that offline with you.

(Christian Reich) #8


Correct. That is now supposed to be working properly.

(Michael Kahn) #9

One feature that @aostropolets’s post hinted at that I want to bring forward was the importance of having domain experts collaborate with vocabulary experts side-by-side in the review/analysis/correction of the ATC hierarchy. Folks from the University of Colorado School of Pharmacy added detailed domain knowledge that highlighted the existing deficiencies and potential reorganization that would be in line with intended use. To the degree possible, this should be the approach used for reviewing all highly specialized terminology hierarchies. As the OHDSI community grows, we hopefully have access to an expanding set of domain experts in addition to our amazing terminology experts to replicate this approach.

(Christian Reich) #10

@mgkahn: Are you offering up your folks to help? Would be nice!

(Hamed Abedtash) #11

Hi @mgkahn, thanks for the comment! Our approach is very similar to what you’ve described, by filling the gaps in the knowledge about each drug class and source code (we call this metadata). This collection of “metadata” about has enabled us tremendously to match source drug codes to the correct ATC classe that represents not only the active ingredient but also ROA, dose form, indication, and in some cases the right isomer of the molecule. We are using variety of drug information and terminology resources thru this process.

We had also a successful experience with @callahantiff and her team at UC last year and they were such a great help to move this effort forward. It would be nice if we could resume the collaboration to finalize some remaining issues. Looking forward to it!


(Michael Kahn) #12

The faculty member who has been directing the inclusion of domain experts from the School of Pharmacy in the ATC validation work is @trinklek. So @Christian_Reich – Colorado SMEs are already engaged in the ATC work.