# Introduction

The MELD score was originally developed at the Mayo Clinic to risk stratify elective transhepatic porto-systemic shunt (TIPS) procedures in patients with liver cirrhosis(1). It has also been widely used as part of clinical urgency prioritisation in liver transplant matching algorithms, although UNOS changed to the alternative MELD-Na score(2), which incorporates serum sodium levels, in January 2016. The scores have been shown to predict short-term mortality after transhepatic porto-systemic shunt (TIPS) procedure, non-liver transplant surgery in cirrhotic patients, acute alcoholic hepatitis and acute variceal haemorrhage.

The UKELD score was developed to risk stratify liver transplant recipients in the UK, is based on MELD and adds serum sodium(3).

library(transplantr)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#>     filter, lag
#> The following objects are masked from 'package:base':
#>
#>     intersect, setdiff, setequal, union

# MELD and MELD-Na scores

The original MELD score uses serum creatinine, bilirubin and INR, but cannot be simply calculated as creatinine and bilirubin values are set to specific numbers when outside a set range. Creatinine <1mg/dl is entered as 1, or >4mg/dl as 4, and patients who are either on CVVH or have been dialysed twice in the week prior to the calculation are assigned a fixed value of 4mg/dl. Bilirubin levels less than 1mg/dl are also set to 1, as are INR values of less than 1. The final score ranges between 6 and 40.

$MELD = 10 \times (0.957 \times log_e creatinine \times 0.378 \times log_e~bilirubin + 1.120 \times log_e INR + 0.643)$

To get the exact MELD score as recommended by UNOS, the part of the equation above in the brackets is rounded to the tenth decimal place before being multiplied by 10.

The MELD-Na score adds serum sodium levels into the mix if the MELD score is greater than 11. The actual sodium level is only used if sodium is between 125 and 137 mmol/l. If the actual level is less than 125, the value 125 is used in the equation, and if more than 137, a fixed value of 137 is assigned.

$MELDNa = MELD + 1.32 \times (137 - Na) - [0.033 \times MELD \times (137 - Na)]$

The meld() function in transplantr calculates the MELD score with these value assignments taken into account. Creatinine and bilirubin are both calculated from their values in µmol/l by default, and can be changed to mg/dl either by setting the optional units parameter to "US" or by using the meld_US() wrapper function instead. It is a vectorised function and can therefore be applied to a whole series at once, for example in a dplyr pipe:

# load dataset
data("liver.pts")

# remove redundant variables and calculate MELD
oltx_data = liver.pts %>%
select(-Patient.Age, -Patient.Sodium) %>%
mutate(MELD = meld(INR = Patient.INR, bili = Patient.Bilirubin,
creat = Patient.Creatinine, dialysis = Patient.Dialysed))

# display result
oltx_data
#>   Patient.INR Patient.Bilirubin Patient.Creatinine Patient.Dialysed
#> 1         1.4                22                120                0
#> 2         2.1                34                450                1
#> 3         1.6                26                 77                0
#> 4         4.9                51                228                0
#>       MELD
#> 1 14.07569
#> 2 30.60446
#> 3 13.27793
#> 4 37.42734

It will also work to calculate MELD score for a single case:

meld(INR = 2.0, bili = 3.1, creat = 1.9, dialysis = 0, units = "US")

The meld_na() function calculates the newer MELD-Na score using SI units for creatinine and bilirubin. Changing to US units can be done by setting units to "US" or using the meld_na_US() wrapper function. meld_na() is also a vectorised function and can be called from within a dplyr pipe or for single cases in the same way as the meld() function.

It is worth noting that for liver allocation in the USA, additional points are added to the MELD score in the context of certain specified clinical conditions known as “standard MELD exceptions”. These increase the MELD score by 10% every 3 months from diagnosis. Guidance on MELD, MELD-Na and PELD in US liver matching is available at the OPTN website.

# UKELD score

The UKELD score was developed in the UK before the MELD-Na had been published, and includes the same variables as MELD-Na: creatinine, bilirubin, INR and sodium. Although it has not been used in liver matching in the UK, a UKELD score greater than 49 has been a criterion for eligibility to join the liver transplant waiting list.

The score can be calculated with the ukeld() function, using µmol/l as the default unit for creatinine and bilirubin. This can be changed to mg/dl by setting the units parameter to "US" or calling the ukeld_US() wrapper function.

# PELD score

The PELD score(4) is a paediatric version of MELD, and used to predict mortality in children needing liver transplants. It is based on age, bilirubin, albumin, INR and whether there is growth failure.

The peld() function in transplantr calculates the PELD score. Bilirubin is calculated from their values in µmol/l and albumin in g/l by default, and can be changed to mg/dl and g/dl respectively either by setting the optional units parameter to "US" or by using the peld_US() wrapper function instead. In the event that albumin is measured locally in g/l and bilirubin in mg/dl, take care to convert it by dividing by 10. Similarly, if albumin is reported in g/dl and bilirubin in µmol/l, multiply the albumin results by 10. The conversion is easily done for a series in a vectorised way by including it in a dplyr pipe:

# calculate PELD where lab reports albumin in g/dl and bilirubin in µmol/l
paed.oltx2 = paed.oltx %>%
mutate(AlbuminX10 = Patient.Albumin * 10,
PELD = peld(INR = Patient.INR, bili = Patient.Bilirubin, albumin = AlbuminX10,
listing_age = Patient.ListAge, growth_failure = Patient.GrowthFailure))

# calculate PELD where lab reports albumin in g/l and bilirubin in mg/dl
paed.oltx2 = paed.oltx %>%
mutate(AlbuminDiv10 = Patient.Albumin / 10,
PELD = peld_US(INR = Patient.INR, bili = Patient.Bilirubin, albumin = AlbuminDiv10,
listing_age = Patient.ListAge, growth_failure = Patient.GrowthFailure))

# References

1. Kamath PS, Wiesner RH, Malinchoc M, et al. A model to predict survival in patients with end-stage liver disease. Hepatology 2001; 33:464-470. DOI: 10.1053/jhep.2001.22172

2. Biggins SW, Kim WR, Terrault NA, et al. Evidence-based incorporation of serum sodium concentration into MELD. Gastroenterology 2006; 130(6):1652-60. DOI: 10.1053/j.gastro.2006.02.010

3. Barber KM, Madden S, Allen J, et al. Elective liver transplant list mortality: development of a United Kingdom end-stage liver disease score. Transplantation 2011; 92(4):469-76. DOI: 10.1097/TP.0b013e318225db4d.

4. McDiarmid SV, Anand R, Lindblad AS, et. al. Development of a pediatric end-stage liver disease score to predict poor outcome in children awaiting liver transplantation. Transplantation 2002; 74(2):173-81. DOI: 10.1097/00007890-200207270-00006