Screening von Spalten

Eine schnelle Übersicht über die Spalten eines Data Frames ist wichtig. Mit dieser Art von Analyse stellt man sicher, dass alle Spalten den erwarteten Inhalt haben. Sofern die Datenerhebung nicht äußerst sorgfältig erfolgt ist, hat wahrscheinlich mindestens eine Variable nicht die erwartete Formatierung. Schon ein einziges nichtnumerisches Zeichen in einer Spalte mit Datumsangaben oder numerischen Werten genügt, damit R die gesamte Spalte als Textspalte interpretiert.

Es gibt eine Reihe von Packages und Funktionen, mit denen sich Übersichten über Data Frames erstellen lassen. Im Folgenden werden einige Funktionen mit kleinen, aber wichtigen Unterschieden vorgestellt.

Wir beginnen mit dem Package mlr, das die Funktion summarizeColumns() enthält. Das Package mlr muss installiert sein, damit die Funktion verwendet werden kann. Installieren und laden Sie das Package wie folgt:

install.packages("mlr")
library(mlr)

mlr verwendet häufig die wissenschaftliche Notation (scientific notation), das heißt, sehr große und sehr kleine Zahlen werden in Exponentialschreibweise ausgegeben; beispielsweise wird 100000000 als 1e+08 ausgegeben. Die wissenschaftliche Notation lässt sich mit folgendem Befehl abschalten:

## Wissenschaftliche Notation (scientific notation) in R abschalten
options(scipen = 999)

Verwenden Sie anschließend die Funktion summarizeColumns(), um den Inhalt unseres Data Frames (rhc) zu prüfen:

summarizeColumns(rhc)
name (Variablenname) type (Variablentyp) na (Anzahl fehlender Werte) mean (Mittelwert) disp (SD bei numerischen Werten; qualitative Variation bei kategorialen) median (Median) mad (median absolute deviation; NA bei kategorialen Spalten) min (kleinster Wert) max (größter Wert) nlevs (Anzahl der Stufen kategorialer Variablen; 0 bei numerischen)
adld3p integer 4296 1.18207088 1.819057175 0.0000000 0.00000000 0.00000000 7.0000000 0
age numeric 0 61.37588300 16.681929290 64.0470000 16.96239695 18.04199000 101.8479600 0
alb1 numeric 0 3.09274278 0.783276789 3.5000000 0.29680955 0.29998780 29.0000000 0
amihx integer 0 0.03487358 0.183475574 0.0000000 0.00000000 0.00000000 1.0000000 0
aps1 integer 0 54.66765475 19.956433845 54.0000000 19.27380000 3.00000000 147.0000000 0
bili1 numeric 0 2.26706698 4.801537560 1.0097656 0.43001193 0.09999084 58.1953125 0
ca character 0 NA 0.236442895 NA NA 384.00000000 4379.0000000 3
card character 0 NA 0.336704446 NA NA 1931.00000000 3804.0000000 2
cardiohx integer 0 0.17663470 0.381392509 0.0000000 0.00000000 0.00000000 1.0000000 0
cat1 character 0 NA 0.565823888 NA NA 7.00000000 2490.0000000 9
cat2 character 4535 NA NA NA NA 2.00000000 826.0000000 6
chfhx integer 0 0.17802964 0.382571052 0.0000000 0.00000000 0.00000000 1.0000000 0
chrpulhx integer 0 0.18988666 0.392245516 0.0000000 0.00000000 0.00000000 1.0000000 0
crea1 numeric 0 2.13301689 2.053079758 1.5000000 0.88970479 0.09999084 25.0976562 0
das2d3pc numeric 0 20.49688754 5.317185677 19.7460900 5.46708750 11.00000000 33.0000000 0
death character 0 NA 0.351002616 NA NA 2013.00000000 3722.0000000 2
dementhx integer 0 0.09834350 0.297804507 0.0000000 0.00000000 0.00000000 1.0000000 0
dnr1 character 0 NA 0.114036617 NA NA 654.00000000 5081.0000000 2
dschdte integer 1 11660.05040112 513.447322056 11777.0000000 658.27440000 10757.00000000 12560.0000000 0
dth30 character 0 NA 0.334437663 NA NA 1918.00000000 3817.0000000 2
dthdte integer 2013 11753.86915637 538.812330065 11831.5000000 675.32430000 10757.00000000 12783.0000000 0
edu numeric 0 11.67846146 3.145831004 12.0000000 2.96520000 0.00000000 30.0000000 0
gastr character 0 NA 0.164254577 NA NA 942.00000000 4793.0000000 2
gibledhx integer 0 0.03225806 0.176700102 0.0000000 0.00000000 0.00000000 1.0000000 0
hema character 0 NA 0.061726242 NA NA 354.00000000 5381.0000000 2
hema1 numeric 0 31.86547859 8.363786134 30.0000000 6.82227582 2.00000000 66.1875000 0
hrt1 integer 0 115.17890148 41.244941234 124.0000000 29.65200000 0.00000000 250.0000000 0
immunhx integer 0 0.26904969 0.443504514 0.0000000 0.00000000 0.00000000 1.0000000 0
income character 0 NA 0.437489102 NA NA 451.00000000 3226.0000000 4
liverhx integer 0 0.06992153 0.255036968 0.0000000 0.00000000 0.00000000 1.0000000 0
lstctdte integer 0 11781.25789015 524.094168229 11868.0000000 673.10040000 10756.00000000 12644.0000000 0
malighx integer 0 0.22946818 0.420527489 0.0000000 0.00000000 0.00000000 1.0000000 0
meanbp1 numeric 0 78.52005231 38.046582141 63.0000000 26.68680000 0.00000000 259.0000000 0
meta character 0 NA 0.046207498 NA NA 265.00000000 5470.0000000 2
neuro character 0 NA 0.120836966 NA NA 693.00000000 5042.0000000 2
ninsclas character 0 NA 0.703923278 NA NA 322.00000000 1698.0000000 6
ortho character 0 NA 0.001220575 NA NA 7.00000000 5728.0000000 2
paco21 numeric 0 38.74897496 13.183444618 37.0000000 8.89560000 1.00000000 156.0000000 0
pafi1 numeric 0 222.27370952 114.953087434 202.5000000 122.31450000 11.59961000 937.5000000 0
ph1 numeric 0 7.38841349 0.109811941 7.3999980 0.08890114 6.57910200 7.7695310 0
pot1 numeric 0 4.06669330 1.028353060 3.7998050 0.74130000 1.09985400 11.8984380 0
psychhx integer 0 0.06730602 0.250573071 0.0000000 0.00000000 0.00000000 1.0000000 0

Sie können dplyr-Funktionen (z. B. filter, select) mit summarizeColumns() kombinieren, um die Eigenschaften der Spalten in einer Subgruppe des Datensatzes zu prüfen. Im Folgenden erstellen wir die Tabelle erneut, schließen aber nur Patienten ohne Krebserkrankung ein (ca="No"):

rhc |>
  filter(ca=="No") |>
  summarizeColumns()

Unten sind nur die ersten 4 Variablen dargestellt.

name type na mean disp median mad min max nlevs
adld3p integer 3258 1.16859946 1.810469232 0.0000000 0.00000000 0.00000000 7.0000000 0
age numeric 0 60.88398987 16.971172590 63.4929800 17.66669125 18.14600000 101.8479600 0
alb1 numeric 0 3.11450956 0.703468345 3.5000000 0.29680955 0.29998780 11.0000000 0
amihx integer 0 0.03653802 0.187646040 0.0000000 0.00000000 0.00000000 1.0000000 0
... ... ... ... ... ... ... ... ... ...

summarizeColumns() liefert keine Informationen über die Stufen (Levels) kategorialer Variablen (Factors). Diese erhält man mit folgendem Befehl:

summarizeLevels(rhc)
$ca
Metastatic         No        Yes
       384       4379        972

$card
  No  Yes
3804 1931

$cat1
              ARF               CHF         Cirrhosis      Colon Cancer              Coma              COPD
             2490               456               224                 7               436               457
      Lung Cancer MOSF w/Malignancy     MOSF w/Sepsis
               39               399              1227

$cat2
        Cirrhosis      Colon Cancer              Coma       Lung Cancer MOSF w/Malignancy     MOSF w/Sepsis
               38                 2                90                15               229               826

$death
  No  Yes
2013 3722

$dnr1
  No  Yes
5081  654

$dth30
  No  Yes
3817 1918

$gastr
  No  Yes
4793  942

$hema
  No  Yes
5381  354

$income
    > $50k   $11-$25k   $25-$50k Under $11k
       451       1165        893       3226

Screening mit Hmisc

Das Package Hmisc enthält zahlreiche nützliche Funktionen für Exploration und Analyse. Mit der Funktion describe() werden alle Spalten eines Data Frames beschrieben. Installieren und laden Sie zunächst Hmisc:

install.packages("Hmisc")
library(Hmisc)

Nun erzeugen wir das Objekt rhc_described, indem wir die Funktion describe() auf unseren Data Frame anwenden. Anschließend geben wir das Ergebnis mit der Funktion html() aus.

rhc_described <- describe(rhc)
html(rhc_described, size = 80)
Ausgabe von Hmisc describe für den Datensatz rhc: n, fehlende Werte, Mittelwert, Perzentile und Mini-Histogramme für adld3p, age und alb1
Oben sind nur die ersten 3 Variablen dargestellt. Wie die Abbildung zeigt, erhalten wir für jede Variable eine Reihe deskriptiver Kennwerte sowie ein Histogramm der Verteilung.

Im nächsten Schritt verwenden wir weitere Funktionen aus Hmisc, um Häufigkeitsdiagramme und Histogramme zu erstellen. Details finden Sie in den Kommentaren im Code:

## Wendet die Funktion plot() auf unser Objekt rhc_described an
rhc_described_plots <- plot(rhc_described)

## Untersucht die Verteilungen kategorialer Daten
rhc_described_plots$Categorical

## Untersucht die Histogramme kontinuierlicher Daten
rhc_described_plots$Categorical
Punktdiagramm aus Hmisc mit dem Anteil je Stufe für alle kategorialen Variablen im Datensatz rhc
Spike-Histogramme aus Hmisc mit der Verteilung der kontinuierlichen Variablen age, alb1 und crea1
Hier sind nur die ersten 3 numerischen Variablen dargestellt.

Spaltendaten stratifiziert nach einer kategorialen Variable erzeugen

Hmisc enthält die Funktion summaryM(), die die Eigenschaften von Variablen stratifiziert nach einer kategorialen Variable darstellt. Die kategoriale Variable ist in der Regel ein Endpunkt (Ereignis, Outcome) der Studie. Die Funktion summaryM() ist insofern besonders, als sie die darzustellenden Variablen über eine Formel festlegt. Die Funktion berechnet außerdem verschiedene Hypothesentests für Gruppenunterschiede. Ob solche Hypothesentests (p-Werte) sinnvoll sind, hängt vom Kontext ab. Meist ist es unangebracht, routinemäßig Hypothesentests durchzuführen, um nach Gruppenunterschieden zu suchen oder um festzulegen, welche Variablen in ein statistisches Modell aufgenommen werden sollen.

Im Folgenden wird die Funktion demonstriert. Beachten Sie, dass die zu untersuchenden Variablen links von der Tilde (~) stehen, getrennt durch +, und das Outcome rechts von ~. Wir wenden die Funktion html() auf das Ergebnis an, um eine ästhetisch ansprechende Darstellung zu erhalten.

rhc_summary <- summaryM(age + alb1 + card + crea1 + hema1 + trauma + edu + dementhx ~ death,
              data = rhc,
              overall = TRUE,
              test = TRUE)

html(rhc_summary,
     caption='Prediktorer i relation till död',
     exclude1 = TRUE,
     npct = 'both',
     digits = 2,
     prmsd = TRUE,
     brmsd = TRUE)
Tabelle aus summaryM mit Quartilen, Mittelwert ± SD und Anteilen je Variable stratifiziert nach Tod, mit F- und Chi-Quadrat-Test
Hier sind nur die ersten Zeilen dargestellt.