Einfache Verfahren zur Überprüfung von Referenzintervallen
  1. Trillium GmbH Med.Fachverlag, Grafrath
  2. Helmholtzzentrumfür Infektionsforschung (HZI), Braunschweig

Hintergrund und Aufgabenstellung

Nach nationalen und internationalen Vorschriften sind medizinischeLaboratorien verpflichtet, alle Referenzintervalle (RI) zu überprüfen,die sie aus Produktblättern oder anderen externen Quellen übernommenhaben (SackU & Özçürümez M 2019, Hoffmann2020). Definitionsgemäß umfassen RI die zentralen 95 % vonLaborwerten, die an gesunden Referenzpersonen gemessen wurden. Dieleitliniengerechte Identifizierung und Rekrutierung solcher Personen istallerdings in der Praxis aus Zeit- und Kostengründen nichtrealisierbar.

Deshalb werden heute vorwiegend indirekte Verfahren eingesetzt, diees erlauben, aus Routinewerten die „vermutlich nichtpathologischen“Werte zu identifizieren und deren nicht direkt ablesbare Referenzgrenzenüber mathematische Parameter zu schätzen. Dies ist organisatorischdeutlich einfacher als das direkte Verfahren, erfordert dafür aberstatistischen Mehraufwand, der oft mit langen Rechenzeiten und hohenAnforderungen an die Fallzahlen verbunden ist.

In diesem Beitrag geht es um die reine Überprüfung, ob vorgegebeneReferenzgrenzen zu den lokalen Gegebenheiten hinsichtlich Analytik undPostanalytik passen oder nicht. Hierfür kann und sollte kein so großerAufwand betrieben werden wie für die De-novo-Bestimmung vonReferenzintervallen. Wir stellen hier einfache grafische Verfahren vor,die es erlauben, mit geringem mathematischem Aufwand und moderatenFallzahlen zu prüfen, welche Referenzintervalle imLaborinformationssystem akzeptiert werden können und welche einerKorrektur bedürfen.

Material und Methodik

Die verwendeten Echtdaten stammen aus einem öffentlich zugänglichenData Repositoryfür Projekte zum maschinellen Lernen (Hoffmann G etal. 2018, Oladimeji O,2021). Sie können mit R unmittelbar eingelesen und analysiertwerden. `

x <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/00571/hcvdat0.csv")
head(x) #zeigt die ersten Zeilen des Datensatzes an
##   X      Category Age Sex  ALB  ALP  ALT  AST  BIL   CHE CHOL CREA  GGT PROT
## 1 1 0=Blood Donor  32   m 38.5 52.5  7.7 22.1  7.5  6.93 3.23  106 12.1 69.0
## 2 2 0=Blood Donor  32   m 38.5 70.3 18.0 24.7  3.9 11.17 4.80   74 15.6 76.5
## 3 3 0=Blood Donor  32   m 46.9 74.7 36.2 52.6  6.1  8.84 5.20   86 33.2 79.3
## 4 4 0=Blood Donor  32   m 43.2 52.0 30.6 22.6 18.9  7.33 4.74   80 33.8 75.7
## 5 5 0=Blood Donor  32   m 39.2 74.1 32.6 24.8  9.6  9.15 4.32   76 29.9 68.7
## 6 6 0=Blood Donor  32   m 41.6 43.3 18.5 19.7 12.3  9.92 6.05  111 91.0 74.0

Der Datensatz besteht aus 615 Zeilen mit quantitativen Laborwertenvon 238 Frauen und 377 Männern im Alter von 19 bis 77 Jahren. Davon sindinsgesamt 540 Personen Blutspender, die übrigen 75 weisenunterschiedliche Schweregrade einer Hepatitis C auf. Bei allen Personenwurden zehn Biomarker für die Diagnostik einer Leberschädigungbestimmt.

x$Sex <- as.factor(x$Sex) #gruppiert die Angaben für das Geschlecht
x$Category <- as.factor(x$Category) #gruppiert die Angaben für die Kategorie (Blutspender, Hepatitis etc.)
summary(x[, 2 : 14])
##                    Category        Age        Sex          ALB
##  0=Blood Donor         :533   Min.   :19.00   f:238   Min.   :14.90
##  0s=suspect Blood Donor:  7   1st Qu.:39.00   m:377   1st Qu.:38.80
##  1=Hepatitis           : 24   Median :47.00           Median :41.95
##  2=Fibrosis            : 21   Mean   :47.41           Mean   :41.62
##  3=Cirrhosis           : 30   3rd Qu.:54.00           3rd Qu.:45.20
##                               Max.   :77.00           Max.   :82.20
##                                                       NA's   :1
##       ALP              ALT              AST              BIL
##  Min.   : 11.30   Min.   :  0.90   Min.   : 10.60   Min.   :  0.8
##  1st Qu.: 52.50   1st Qu.: 16.40   1st Qu.: 21.60   1st Qu.:  5.3
##  Median : 66.20   Median : 23.00   Median : 25.90   Median :  7.3
##  Mean   : 68.28   Mean   : 28.45   Mean   : 34.79   Mean   : 11.4
##  3rd Qu.: 80.10   3rd Qu.: 33.08   3rd Qu.: 32.90   3rd Qu.: 11.2
##  Max.   :416.60   Max.   :325.30   Max.   :324.00   Max.   :254.0
##  NA's   :18       NA's   :1
##       CHE              CHOL            CREA              GGT
##  Min.   : 1.420   Min.   :1.430   Min.   :   8.00   Min.   :  4.50
##  1st Qu.: 6.935   1st Qu.:4.610   1st Qu.:  67.00   1st Qu.: 15.70
##  Median : 8.260   Median :5.300   Median :  77.00   Median : 23.30
##  Mean   : 8.197   Mean   :5.368   Mean   :  81.29   Mean   : 39.53
##  3rd Qu.: 9.590   3rd Qu.:6.060   3rd Qu.:  88.00   3rd Qu.: 40.20
##  Max.   :16.410   Max.   :9.670   Max.   :1079.10   Max.   :650.90
##                   NA's   :10
##       PROT
##  Min.   :44.80
##  1st Qu.:69.30
##  Median :72.20
##  Mean   :72.04
##  3rd Qu.:75.40
##  Max.   :90.00
##  NA's   :1

Als zweites Input-File werden die Grenzwerte des Herstellersbenötigt, die überprüft werden sollen. Beispielhaft erzeugen wir eineMatrix mit den Angaben für Albumin (ALB) in g/l undAlanin-Aminotransverase (ALT) in U/l.

ref <- matrix(c(35.6, 46.1, 35.6, 46.1, 10, 35, 10, 50), nrow = 4)
rownames(ref) <- c("Frauen UG", "Frauen OG", "Männer UG", "Männer OG")
colnames(ref) <- c("ALB", "ALT")
ref
##            ALB ALT
## Frauen UG 35.6  10
## Frauen OG 46.1  35
## Männer UG 35.6  10
## Männer OG 46.1  50

Alle hier vorgestellten Auswertungen werden mit R ausgeführt. DerCode kann aus diesem Dokument direkt kopiert und lokal ausgeführtwerden. Für die Berechnung sog. zlog-Werte HoffmannG et al. 2017 verwenden wir das R-Package zlog. Falls dieses nochnicht installiert wurde, wird dies mit install.packages()erledigt

if(!require(zlog)){install.packages("zlog")}
## Loading required package: zlog
library(zlog)

Datenaufbereitung

Im ersten Schritt erzeugen wir den gewünschten Ausschnitt aus denDaten und entfernen die Zeilen mit fehlenden Werten (NA).

xx <- na.omit(x[, c(2 : 5, 7)]) #extrahiert die Spalten 2 bis 4 plus die Werte für ALB und ALT
summary(xx)
##                    Category        Age        Sex          ALB
##  0=Blood Donor         :533   Min.   :19.00   f:238   Min.   :14.90
##  0s=suspect Blood Donor:  7   1st Qu.:39.00   m:375   1st Qu.:38.80
##  1=Hepatitis           : 23   Median :47.00           Median :41.90
##  2=Fibrosis            : 21   Mean   :47.39           Mean   :41.61
##  3=Cirrhosis           : 29   3rd Qu.:54.00           3rd Qu.:45.20
##                               Max.   :77.00           Max.   :82.20
##       ALT
##  Min.   :  0.90
##  1st Qu.: 16.40
##  Median : 23.00
##  Mean   : 28.43
##  3rd Qu.: 33.00
##  Max.   :325.30

Für eine einheitliche statistische Weiterverarbeitung logarithmierenwir alle Messwerte unter der vereinfachenden Annahme, dass man dieallermeisten Laborresultate gesunder Referenzpersonen alslognormalverteilt modellieren kann (Haeckel R & WosniokW 2010).

x.log <- xx
x.log[, 4 : 5] <- log(x.log[, 4 : 5])
colnames(x.log)[4 : 5] <- paste0("log.", colnames(x.log)[4 : 5])
x.log[1,] #zeigt die erste Zeile der logarithmierten Werte an
##        Category Age Sex  log.ALB log.ALT
## 1 0=Blood Donor  32   m 3.650658 2.04122

Schließlich bereiten wir noch zwei nach dem Geschlecht getrennteSubkohorten vor, um Grenzwerte für Frauen und Männer separat überprüfenzu können.

x.log.f <- subset(x.log, x.log$Sex == "f")
x.log.m <- subset(x.log, x.log$Sex == "m")
paste(nrow(x.log.f), "Frauen und", nrow(x.log.m), "Männer")
## [1] "238 Frauen und 375 Männer"