360 likes | 482 Views
Generating Medical Logic Modules for Clinical Trial Eligibility. Craig Parker Brigham Young University. Clinical Trials. Important for modern medical research Efficacy of therapies Safety of therapies Sponsored by Government ( www.clinicaltrials.gov ) Academic institutions
E N D
Generating Medical Logic Modules forClinical Trial Eligibility Craig Parker Brigham Young University
Clinical Trials • Important for modern medical research • Efficacy of therapies • Safety of therapies • Sponsored by • Government (www.clinicaltrials.gov) • Academic institutions • Industry (e.g. pharmaceutical companies)
Clinical Trial Enrollment • Power in numbers • Traditional enrollment methods have limitations
What if . . . we could automatically extract eligibility criteria from electronic medical records?
Electronic Medical Records (EMRs) • Good News • Large amounts of data being collected • Efforts to standardize representations are well supported • Bad News • Most EMRs are far from complete • Not all representations are in a standard form • Legacy data / Legacy data acquisition tools • Unstandardized realms
Automating the Process • Generate medical logic modules to represent eligibility criteria for clinical trials • Start with criteria as first-order predicate logic • Map concepts with medical vocabularies and ontologies • Create medical logic modules • Handle concepts that can’t be mapped • Measure results
Medical Logic Modules (MLMs) • An abstract term describing the knowledge necessary for making a medical decision • A specific type of medical program • Represented using the Arden Syntax • ANSI standard • Broad vendor acceptance • Compiles to an executable form
MLM in Arden Syntax KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . .
Beginning and End KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . .
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Overview Trial
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Predicates Overview Trial
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Predicates Overview Trial • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Predicates Overview Trial • (P1) Gender: Female • (P2) Pregnant • (P3) Gestational age > 23.0 wks • (P4) Gestational age < 31.6 wks • (P5) Chorioamnionitis • (P6) Non-reassuring fetal testing • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Predicates Overview Trial • (P1) Gender: Female • (P2) Pregnant • (P3) Gestational age > 23.0 wks • (P4) Gestational age < 31.6 wks • (P5) Chorioamnionitis • (P6) Non-reassuring fetal testing • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing P1 P2 (P3 P4) (P5 P6) Or in conjunctive normal form: P1 P2 P3 P4 P5 P6
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Predicates Overview Trial • (P1) Gender: Female • (P2) Pregnant • (P3) Gestational age > 23.0 wks • (P4) Gestational age < 31.6 wks • (P5) Chorioamnionitis • (P6) Non-reassuring fetal testing • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing P1 P2 (P3 P4) (P5 P6) Or in conjunctive normal form: P1 P2 P3 P4 P5 P6
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Logic Handling Predicates Term Mapping Overview Trial
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Logic Handling Predicates Term Mapping Target Schema Other Knowledge UMLS Overview Trial
MLM KNOWLEDGE: TYPE: . . . DATA: gestational_age := read last {SELECT gest_age FROM Observation}; ;; EVOKE: . . . LOGIC: IF gestational_age >= 73 days AND gestational_age <= 97 days THEN conclude true; ENDIF; ;; ACTION: . . . Expression Logic Handling Predicates Term Mapping Target Schema Other Knowledge UMLS Overview Trial Additional Information
Steps to Create MLMs • Classify predicates • Map concepts from trial to database • Translate logic • Generate MLM
Classifying Predicates • Numeric comparisons • e.g. gestational age > 23.0 wks • time, lab values, physiologic measurements • Single noun phrases • e.g. pregnant • diagnoses, observations • Two noun phrases • e.g. Gender: Female • name-value pairs
Mapping Example 1 • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing
Mapping Example 1 • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing Single noun phrase – likely to be a diagnosis or observation
Mapping Example 1 • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing From vocabulary of target database pregnant: pregnancy pregnancy appointment type pregnant ambulatory status . . . has-parent: Diagnosis has-parent: Appointment type has-parent: Ambulatory status
Mapping Example 1 • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing pregnant: pregnancy pregnancy appointment type pregnant ambulatory status . . . has-parent: Diagnosis has-parent: Appointment type has-parent: Ambulatory status
Mapping Example 1 pregnant: pregnancy (83035) has-parent: diagnosis Looking for “pregnancy” in schema of target database.
Mapping Example 1 pregnant: pregnancy (83035) has-parent: diagnosis Looking for “pregnancy” in schema of target database. PregnancyObservation : Is-Subtype-Of : DiagnosisAndFindingObservation { value(codedTerm({pregnancy, 83035})); negation(boolean); . . . }
Mapping Example 1 pregnant: pregnancy (83035) has-parent: diagnosis PregnancyObservation : Is-Subtype-Of : DiagnosisAndFindingObservation { value(codedTerm({pregnancy, 83035})); negation(boolean); . . . } Look for “PregnancyObservation” in vocabulary of target database.
Mapping Example 1 pregnant: pregnancy (83035) has-parent: diagnosis PregnancyObservation : Is-Subtype-Of : DiagnosisAndFindingObservation { value(codedTerm({pregnancy, 83035})); negation(boolean); . . . } Look for “PregnancyObservation” in vocabulary of target database. PregnancyObservation (59665) has-parent: observation
Mapping Example 1 pregnant: pregnancy (83035) has-parent: diagnosis PregnancyObservation : Is-Subtype-Of : DiagnosisAndFindingObservation { value(codedTerm({pregnancy, 83035})); negation(boolean); . . . } PregnancyObservation (59665) has-parent: observation SELECT * FROM Observations WHERE ObsId = 59665 AND value = 83035
Mapping Example 2 • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing
Mapping Example 2 • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing Two noun phrases – likely to be a name-value pair
Mapping Example 2 • Inclusion: • Gender: Female • Pregnant • Gestational age > 23.0 wks and < 31.6 wks • Exclusion: • Chorioamnionitis • Non-reassuring fetal testing Demographics Look in target database for a concept of ‘Gender’ with a value of ‘Female’. Gender Female Male
Unmappable Concepts • Concept or value not in target database • Concept does not exist “Delivery intended outside center” • Too Hard Inclusion: “Received full course of corticosteroids in the previous 7 days” Exclusion: “Corticosteroid therapy, other than qualifying course”
Unmappable Concepts • Concept or value not in target database • Concept does not exist “Delivery intended outside center” • Too Hard Inclusion: “Received full course of corticosteroids in the previous 7 days” Exclusion: “Corticosteroid therapy, other than qualifying course” • Solution • Evaluate eligibility based on available data • If eligibility is possible, present questionnaire to user for outstanding information needed
Evaluation • Select ~25 trials (~200 predicates) from ClinicalTrials.gov • Precision and recall of term mappings • Precision and recall of predicate mappings • Percentage of predicates that are mappable • Correctness of logic in Arden Syntax modules