slanted W3C logo
Cover page images (keys)

FDA Therapeutic Area Ontologies

Therapeutic Area Final Presentation
24 Sept, 2014

Resources:

Outline

Goals

Implementability requires:

Semantic interoperability

Clinical Observation Interoperability requires:

see also intro slide 7,10,28

CSAR: Clinically Suspected Acute Rejection
BPAR: Biopsy-Proven Acute Rejection

Machine-readable structure

Concept maps are a human-intuitive way to communicate structures and relationships.
We need machines to work-with and enforce that structure.

Success metric: minimize implementation guidelines because the information is all in schema:

book burning
# Assessments are observations about other observations.
core:Assessment 
  rdfs:subClassOf 
    core:ClinicalObservation ,
    [ owl:onProperty core:hasObservation ; owl:minCardinality 1 ] .

# Differentiate observations before and after an intervention.
core:beforeIntervention rdfs:subPropertyOf core:hasObservation .
core:afterIntervention rdfs:subPropertyOf core:hasObservation .

# Specialize assessment to include before and after observations.
core:SingleOutcomeAssessment 
  rdfs:subClassOf 
    core:Assessment ,
    [ owl:onProperty core:beforeIntervention ; owl:minCardinality 1 ] ,
    [ owl:onProperty core:hasIntervention ; owl:minCardinality 1 ] ,
    [ owl:onProperty core:afterIntervention ; owl:minCardinality 1 ] .

# A kidney graft outcome assessment is based observations of graft viability.
renalX:KidneyGraftOutcomeAssessment ;
  rdfs:subClassOf 
    core:FunctionOutcomeAssessment ,
    [ owl:onProperty core:hasResultValue ; owl:allValuesFrom xplant:GraftViability ] .

see also intro slide 7, 29, 33

Intuitive models

Comes from BRIDG and the meta-model. (intro slide 15)

piano

Q: Is this a model to capture the results of valid protocol, or a way to generate valid protocols?
Should the models be detailed and restrictive enough to replace much of the existing protocols?

Alternative models

What alternatives did we have to BRIDG?

These don't capture:

Standard representation

If A and B share a semantic model, code can be written to translate between them.

If A and B also share a representation, no code is necessary.

Technically, "representation" should be called the "data model" but many things are called "model".

RDF has a few formats specialized to different purposes, but combining data is defined (and trivial) for all of them.

Modularized for reuse

renal.ttl

:SerumCreatinineLevel a owl:Class ;
    rdfs:subClassOf 
        [ owl:onProperty bridg:resultIn ; owl:allValuesFrom bridg:PerformedClinicalResult ],
        [ owl:onProperty bridg:resultIn ; owl:cardinality 1 ]  .

transplant.ttl

:GraftBPARAssessment a owl:Class ;      
    rdfs:subClassOf core:NegativeOutcome ;
    owl:equivalentClass [
        a owl:Class ;
        owl:intersectionOf (
          [ a owl:Restriction ;
            owl:onProperty core:afterIntervention ;
            owl:someValuesFrom [
                a owl:Restriction ;
                owl:onProperty core:hasPathologyFinding ;
                owl:hasValue :BanffIII
            ]
          ]
          [ a owl:Restriction ;
            owl:onProperty core:hasResultValue ;
            owl:hasValue :NonFunctioningGraft
          ]
        )
    ]
.

RenalTransplant.ttl

<RenalTransplantation> a owl:Ontology ;
    owl:imports 
        <core> ,
        <renal> ,
        <transplant> .

see also intro slide 16

Result

see also intro slide 20

*demonstrate FDA-TA directory*

*demonstrate TBC hierarchical view*

No gaps

If it isn't clear where to write some facet down (e.g. TA-specific demographics, causality, diagnosis factors) the submitter will:

Results

mind the gap

TA Ontologies in TBC

Load the TA ontologies into Top Braid Composer see instructions in the wiki

TBC - TA Ontologies sources

imports

...

triples

...

Observations to Endpoints

image/svg+xml SCr trend Recipient Donor GFR trend Graft Loss BPAR Graft Loss Normal Function

TBC - Anticoagulants Classes

class hierarchy

...

inheritance diagram

...

TBC - StrokeOutcomeAssessment

Distributed development

BRIDG + core provides a canvas to capture clinical trial exposures, observations and assessments in a structured way.

As described in the Machine-readable Structure slide, TA ontologies have to follow a rigid structure of endpoints measuring outcome assessments, which are in turn based on observations and assessments.

A purpose-built .TA (pronounced "dot T A") language has a grammar which follows (enforces) this structure. Most errors one can make in a TA ontology document are prohibited by the grammar. intro slide 17

TA: RheumatoidArthritis
IMPORT: "qualityOfLife.tapp" AS: qol:

MEDHISTORY: OralCorticosteroid OralDisease-modifyingAntirheumaticDrug 
            TNFInhibitorsBiologics NonTNFInhibitorBiologics MTX
CONCOMITANTS: OralCorticosteroid OralDisease-modifyingAntirheumaticDrug
              TNFInhibitorsBiologics NonTNFInhibitorBiologics MTX
MEDICATION: OralCorticosteroid @"Oral corticosteroids"

COVARIATES: RheumatoidFactorObservation Anti-cyclicCitrullinatedPeptideObservation
QUANT: RheumatoidFactorObservation @"Rheumatoid Factor"
QUANT: Anti-cyclicCitrullinatedPeptideObservation @"Anti-CCP"

EFFICACY: DiseaseActivityScoreEndpoint @"Disease Activity Score (DAS28)"
                             DAS28_OutcomeAssessment({DAS28_Assessment})
ASSESSMENT: DAS28_Assessment @"Disease Activity Score (DAS28)" [0 10]
                             SwollenJointCountObservation
                             PatientGlobalAssessmentOfDiseaseActivityObservation

QUANT: SwollenJointCountObservation @"Swollen joint count" [0 66]
SSX: PatientGlobalAssessmentOfDiseaseActivityObservation 
       @"Visual Analog Scale (VAS) for Patient Global Assessment"

Simplified development + factoring of shared libraries enables concurrent development.

Definitions File

Standard column headers provide:

RA-definitions.png

Commodity tooling

HL7 started with the UML and added hundreds of extensions, requiring in-house maintenance of custom tools.

OWL now captures most of these extensions.

Basing on RDF and OWL means there are 10s of reasoners and maybe 50-100 SPARQL engines.

SELECT ?outcomeType ?dose
       (AVG(?endpoint-time) AS ?rate)
 WHERE {
    # drug of interest
    ?adminDrug dt:CD.displayName "Upsidasium" ;
        … codingSystem … .

    # subjects in studies about drug
    ?arm :studySubject ?adminDrug ;
        :studyParticipation ?subject .

    # demographic selection
    ?subject :taxon ncbitax:9606 .

    # outcomes assessing prescription performance
    ?outcome :intervention ?p ;
        :value [ a ?outcomeType ] .

    # ... of that drug on that subject (participation)
    ?p a :Prescription ;
        :involvedSubject ?subject ;
        :medication ?adminDrug .
} ORDER BY ?dose

see also intro slide 8

Example query

Outcomes across one study:

sparql -d study1.ttl endpoints.rq -8

Outcomes across two studies:

sparql -d study1.ttl -d study2.ttl endpoints.rq -8

The query

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?endpoint ?count ?labels {
  {
    SELECT ("GraftSurvival" AS ?endpoint) (COUNT(*) AS ?count) (GROUP_CONCAT(?name) AS ?labels)
    WHERE {
     ?s bridg:Subject.performingBiologicEntity [ foaf:name ?name ] ;
        core:hasOutcomeAssessment [
          a xplant:GraftSurvivalAssessment ]
    }
  }
  UNION
  {
    SELECT ("GraftLoss" AS ?endpoint) (COUNT(*) AS ?count) (GROUP_CONCAT(?name) AS ?labels)
    WHERE {
     ?s bridg:Subject.performingBiologicEntity [ foaf:name ?name ] ;
        core:hasOutcomeAssessment [
          a xplant:GraftLossAssessment ]
    }
  }
}

Result

Clinical observations queriable:

SELECT ?outcomeType ?dose
       (AVG(?endpoint-time) AS ?rate)
 WHERE {
    # drug of interest
    ?adminDrug dt:CD.displayName "Upsidasium" ;
        … codingSystem … .

    # subjects in studies about drug
    ?arm :studySubject ?adminDrug ;
        :studyParticipation ?subject .

    # demographic selection
    ?subject :taxon ncbitax:7609 .

    # outcomes assessing prescription performance
    ?outcome :intervention ?p ;
        :value [ a ?outcomeType ] .

    # ... of that drug on that subject (participation)
    ?p a :Prescription ;
        :involvedSubject ?subject ;
        :medication ?adminDrug .
} ORDER BY ?dose

see also intro slide 20

Commodity base ontologies

Reusing other ontologies enables sharing of queries and applications (minor effect) and teaching and comprehension investment (major effect).
Experts in this field should recognize structures and ideally point out improvements.

Portable BRIDG Representation

:Observation ;
    owl:disjointUnionOf (
        :AdministrativeObservation :ClinicalObservation 
    ) ;
    rdfs:subClassOf bridg:PerformedObservation ,
        [ owl:onProperty :hasObservationTime ; owl:cardinality 1 ] .

Rules - terminology

see also intro slide 29

Rules - OWL

:_endpoint_GraftSurvivalAssessment 
    rdfs:subClassOf core:InferrableDiagnosis ,
        [
            owl:onProperty core:hasDiagnosis ; # !! undefined (as of migration from hasOutome)
            owl:someValuesFrom [
                owl:onProperty core:hasResultValue ;
                owl:hasValue :NormalFunctioningGraft 
            ]
        ] ;
    # =     core:hasIntervention some :TransplantProcedure
    #   and core:hasOutcomeAssessment some (    core:OrganFunctionOutcomeAssessment
    #                                       and core:hasResultValue value renal:ImprovedToNormal)
    owl:equivalentClass [
        owl:intersectionOf (
            [ owl:onProperty core:hasIntervention ; owl:someValuesFrom :TransplantProcedure ]
            [ owl:onProperty core:hasOutcomeAssessment ;
                owl:someValuesFrom [
                   # produces error classes in Protégé:
                   #   rdfs:subClassOf core:OrganFunctionOutcomeAssessment ,
                   #       [ owl:onProperty core:hasResultValue ; owl:hasValue renal:ImprovedToNormal ]
                    owl:intersectionOf (
                        core:FunctionOutcomeAssessment 
                        [ owl:onProperty core:hasResultValue ; owl:hasValue :ImprovedToNormal ]
                    )
                ]
            ]
        )
    ] .

see also intro slide 29

Rules - SPARQL

CONSTRUCT {
  ?this core:hasDiagnosis ?diag .
  ?diag core:hasResultValue :NormalFunctioningGraft
} WHERE {
  ?this core:hasIntervention ?intervention .
  ?intervention a :TransplantProcedure .
  ?this core:hasOutcomeAssessment ?oa .
  ?oa a core:FunctionOutcomeAssessment .
  ?oa core:hasResultValue :ImprovedToNormal
}

see also intro slide 29-32

Validation

Validation - UNA/CWA

The simplest validation is to interpret the ontology with a close world and a unique name assumption.

Issues:

see also intro slide 34 and wiki article on validation.

Validation - Usage

see also wiki article on validation and Dublin Core Application Profiles validation requirements

Terminologies - Current Practice

Most clinical systems use some variant of ISO 21090 "CD" for codes from controlled terminologies:

# Example instance data -- Sue's baseline measured in cerebral spinal fluid
:labObs1234 
  # Rheumatoid Factor Observations are defined in the Rheumatoid Artheritis ontology
  a ra:RheumatoidFactorObservation ;
  # All observations have a time
  core:hasObservationTime "2013-07-07T19:02:00Z"^^xsd:dateTime ;
  # We reuse the hl7 schema to capture the convention of a code and a code system (à la ISO 21090)
  hl7:coding [ dt:CDCoding.code "14034-3" ; dt:CDCoding.codeSystem "2.16.840.1.113883.6.1" ;
               dt:CDCoding.displayName 
  "Rheumatoid factor:Arbitrary Concentration:Point in time:Cerebral spinal fluid:Quantitative" ;
               dt:CDCoding.codeSystemName "LOINC" ] ;
  # Instance data will of course have results...
  core:hasResultValue [ data:value 65 ; data:units ucum:u_mL ].

The code system and the code create a unique identifier.

see also intro slide 20 and wiki article Coding Specificity

Terminologies - codes as URLs

see also wiki article Coding Specificity and example URL definition.

Terminologies enable extraction

Terminologies - Granularity

How do we constraint the data in a kidney transplant trial submission?

What speech act is most appropriate?

What granularity best reflects the specificity required for merging tests?

What best communicates the requires imposed during the approval process?

see also wiki articles Clinical compatibility and Mapping LOINC to SNOMED

Evolution

Getting as much re-use as possible from models and data as science or practice changes.

Scenario:

Approach:

Results:

see also intro slide 5

TODO

Questions

High-level goals

code everything

minimize:

cope gracefully with:

interoperate with EHRS:

RDF toolbox available for reuse

Existing Models/Standards

Controlled Terminologies:

Understanding Terms of Art

Therapeutic Efficacy is comprised of:

@@

TA Metamodel

@@