Skip to content

Representing Risk Scores: RiskAssessment vs. Observation

Chris Moesel edited this page Dec 16, 2015 · 1 revision

Overview

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.

Representing risk scores (not just probabilities)

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).

Searching by the risk probability / score

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).

Sorting by the risk probability / score

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).

Indicating if given risk is acceptable or not

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.

Representing the risk algorithm components

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.

Conclusion

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.