phenopacket-schema icon indicating copy to clipboard operation
phenopacket-schema copied to clipboard

One-sided `ReferenceRange`

Open ielis opened this issue 1 year ago • 3 comments

Dear Phenopacket team, I'd like to ask a question regarding ReferenceRange.

The ReferenceRange requires both low and high to be specified, both fields are mandatory. However, sometimes it may be problematic to determine one of the bounds for certain quantities while it may be desirable to use the other bound. Say, blood pressure. I'm not an MD, but I'm still not sure what the low threshold for systolic blood pressure is. This is less of an issue for high threshold, where one of several guidelines can be adopted.

How should this situation be handled? A tempting way is to set low=NaN, which is a valid double and, therefore, meets the current specs. The protobuf library does not mind either. However, is this an idiomatic use of ReferenceRange?

Does the Phenopacket Schema expect both low and high to be finite numbers? Is it permissible to use NaNs, or even infinities?

ielis avatar Aug 01 '22 20:08 ielis

For systolic BP, the most common problem is hypertension and so people often just provide the upper limit. However, having less than 90 mmHG is considered abnormal as well. I doubt that there are any examples of clinical measurements that truly have only one bound. Another example is that for some metabolites that are normally not present, only an upper bound is given, but the reference range could then have 0-x, since having a "negative concentration" is also abnormal... NaN is a valid value for a Java Double, but is not a valid real number, and I do not think that it should be allowed.

pnrobinson avatar Aug 03 '22 09:08 pnrobinson

Here is a nice explanation of a reference range for blood pressure, courtesy of the NHS:

As a general guide:

ideal blood pressure is considered to be between 90/60mmHg and 120/80mmHg high blood pressure is considered to be 140/90mmHg or higher low blood pressure is considered to be 90/60mmHg or lower

julesjacobsen avatar Aug 03 '22 09:08 julesjacobsen

Hi, thanks for the explanation, this is useful for both prongs of my question! After a second thought, I agree that a reference range, if present, should have both bounds. Then, this becomes a possible validation check.

I think it would also be useful to comment on permissibility of NaNs and infinities in the reference documentation. The documentation serves as an anchor for computational people, who should be concerned about NaNs and infinities everytime they see a double value. I found only 3 double fields in the Phenopacket Schema, all of them in measurement.proto:

  • Quantity
    • value
  • ReferenceRange
    • low
    • high

I can open a PR if you'd like me to.

Thanks again! :)

ielis avatar Aug 03 '22 14:08 ielis