-
Notifications
You must be signed in to change notification settings - Fork 8
Representing Risk Scores: RiskAssessment vs. Observation
Intervention Engine currently uses the RiskAssessment
resource to represent the risk scores that are submitted by risk calculation services. While it seems an obvious choice, there are several capabilities that are not supported well by RiskAssessment
:
- Representing risk scores (not just probabilities)
- Searching by the risk probability / score
- Sorting by the risk probability / score
- Indicating if given risk is acceptable or not
- Representing the risk algorithm components
While change requests have been submitted regarding some of these limitations, further analysis has shown that Observation
may be a better fit for how we represent risk in Intervention Engine.
The rest of this document looks at each limitation listed above, indicates the problem with using RiskAssessment
, and indicates how Observation
potentially solves this problem.
While some risk assessments can represent results as percentages (e.g., CHADS), some assessments represent results as scores (often with a key). For our initial pilot, a score-based assessment will be used, so it is important to be able to represent a risk score that is not a percentage.
RiskAssessment
The RiskAssessment
resource represents risk assessment values as probability[x]
, giving the choice between probabilityDecimal
, probabilityRange
, or probabilityCodeableConcept
. These are defined as: "how likely is the outcome (in the specified timeframe)." The decimal and range values should correspond to percentages.
There is no way to represent a non-percentage score except by (perhaps) pointing to a basis
that is an Observation
representing the score. This limitation has been submitted to the FHIR tracker as issue #9139.
Observation
The Observation
resource is less prescriptive than the RiskAssessment
resource since it is intended to represent a wider variety of things. As such, risk scores can be represented using valueQuantity
.
If the risk assessment pertains to a percentage, valueQuantity
could still be used (with unit %
), or if it contains a score and a percentage (such as CHADS), the score could be represented as an Observation
while the percentage is represented as a RiskAssessment
(with the Observation
score as a basis
).
Intervention Engine will allow filtering patients by risk scores. In order to do this efficiently, the filtering should happen server-side. This requires a search parameter corresponding to the risk score.
RiskAssessment
The RiskAssessment
resource does not define any search parameters that correspond to the probability[x]
field. As a result, there is no way to search / filter on it without extending the FHIR specification. This limitation has been submitted to the FHIR tracker as issue #9140.
Observation
The Observation
resource defines a value-quantity
search parameter that would allow for searching by the risk score (or percentage, if applicable).
Intervention Engine will allow sorting and paging patients by risk score. In order to do this efficiently, the sorting and paging should happen server-side. Since FHIR only allows sorting on search parameter fields, this requires a search parameter corresponding to the risk score.
RiskAssessment
The RiskAssessment
resource does not define any search parameters that correspond to the probability[x]
field. As a result, there is no way to sort on risk scores without extending the FHIR specification.
Observation
The Observation
resource defines a value-quantity
search parameter that would allow for sorting and paging by the risk score (or percentage, if applicable).
Intervention Engine should give a visual indication if risk scores fall within normal / expected ranges or if they indicate a greater-than-normal risk. This can only be done in a generic way if there is some way to represent the ranges of what is normal and what is abnormal. Ideally there should even be different levels of severity (high risk, medium risk, low risk, etc).
RiskAssessment
The RiskAssessment
resource doesn't provide a way of defining ranges of expected risk scores (or what is considered high risk, etc). As such, representing this information would require extensions to FHIR or some other non-FHIR mechanism.
Observation
The Observation
resource provides two mechanisms to assist with identifying if a risk is acceptable or should cause concern. The first is an interpretation
field, which could be used to store a code such as H
(high), I
(intermediate), L
(low), N
(normal), etc.
The second mechanism for indicating the meaning of the risk score is the referenceRange
field. This field allows a set of ranges to be defined with coded meanings. For example, 0 - 2 is low, 3 - 5 is intermediate, and 6 - 10 is high. This allows the score to be plotted within the range to provide additional context.
Intervention Engine provides a visual representation of the components that make up a risk score. For example, the CHADS score is comprised of seven components, including gender, age, hypertension, diabetes, etc. Each of these components is represented as a slice in a pie -- and each slice has a name, weight, value, and maximum value.
RiskAssessment
RiskAssessment
does not provide a way to represent the components as described above. While it could potentially represent them using the basis
field to point to Observation
records, previous analysis found that this was not an ideal solution. As a result, the current implementation stores the component definitions external to FHIR.
Observation
Observation
may be able to support the representation of components via the component
field. This field allows a set of components, each having a code
, value[x]
, and referenceRange
. The code
could be used to identify the name of the component. The value[x]
would identify the value. The referenceRange
could identify the maximum value by specifying the complete range (e.g., if the max value is 2, then the range is 0 - 2). There is not a clear way to represent weight, so we would need to consider how we might handle that.
Using Observation
to represent risk scores in Intervention Engine would alleviate many of the issues currently related to the RiskAssessment
resource. It would also have the added benefit that the Observation
resource is much more mature (maturity level 3) than the RiskAssessment
resource (maturity level 0). As such, it is expected to be more stable and better supported across the spectrum of FHIR servers.
The Intervention Engine team should consider the effort and impact of switching to Observation
in the near term.