Fehlwerte visualisieren in R: Das naniar-Paket

naniar: R-Paket zur Visualisierung von Fehlwerten

Fehlwerte können große Herausforderungen in der Datenanalyse darstellen. Warum fehlen Datenpunkte? Welche Eigenschaften weisen diese Fälle auf im Vergleich zu Fällen, deren Daten vollständig vorliegen? Gibt es Muster, oder fehlen Daten „zufällig“?

Visualisierung kann die Beantwortung solcher Fragen sehr vereinfachen. Das naniar-Paket von Nicholas Tierney bietet dafür sehr praktische Funktionen und ist eng mit dem tidyverse und insbesondere ggplot2 integriert.

Übersicht über Fehlwerte erhalten: vis_miss()

Hier ein erstes Beispiel. Ich verwende die diamonds-Daten aus dem ggplot2-Paket, habe allerdings einige Fehlwerte „eingebaut“. Den vollständigen R-Code zum Video inkl. der Datenvorbereitung findet Ihr auf meinem github-Profil. Die Datei heißt missings-naniar.Rmd; es handelt sich um eine xaringan-Präsentation, die auf dem Markdown-Format aufbaut.

library(tidyverse)
library(naniar)

# Ich habe ein paar Fehlwerte eingebaut ...
# Überblick erhalten:
vis_miss(diamonds)

Dieser simple Befehl liefert folgende Grafik:

naniar::vis_miss()
Übersicht über Fehlwertwerte erhalten mit naniar::vis_miss(); anklicken zum Vergrößern

Man erkennt auf einen Blick, dass Fehlwerte ausschließlich bei der price-Variable auftreten, und zwar nicht in einem zusammenhängenden Block in den Daten, sondern verteilt. Die relative Häufigkeit der Fehlwerte liegt knapp unter 5% (4,66). Die Legende verrät außerdem, dass insgesamt nur 0,5% aller Datenpunkte (d. h. über alle Variablen hinweg) fehlen.

Fehlwerte in Koordinatensystem darstellen: geom_miss_point()

Wenn es darum geht, Muster in Fehlwerten zu ermitteln, bietet naniar mit der Funktion geom_miss_point(), einer ggplot2-Erweiterung, die Umsetzung einer genialen Idee: Wenn ein Wert nur auf einer von zwei metrisch skalierten Variablen fehlt, kann man für diese Variable Werte außerhalb des Wertebereichs annehmen und die Koordinate der anderen Variable dazu abtragen. Das kann etwa so aussehen:

ggplot(diamonds, aes(x = carat, y = price)) +
   geom_miss_point() +
   theme_bw(base_size = 16) +
   labs(title = "Price by Carat",
   caption = paste0("Source: ggplot2::diamonds,
   random sample (n = ", n, ")"))
Fehlwerte: naniar::geom_miss_point()
Fehlwerte visualisieren mit naniar::geom_miss_point().
Hier erkennt man gut, dass der Preis nur für einen kleinen Bereich der Carat-Werte fehlt.

Für die auffällig rot dargestellten Fehlwerte wird der Preisbereich unter 0 genutzt, der in den Daten nicht vorkommt. Die Grafik zeigt deutlich, dass price nur für einen kleinen Bereich von carat (über 1,5 / unter 2,5) fehlt. Eine solche Info kann sehr wertvoll für die weitere Analyse sein und ist mit zahlenbasierter Statistik etwas mühsamer ableitbar.

Die gute Integration mit ggplot2 sei an einem weiteren Beispiel illustriert, das facets, sog. Facetten enthält, d. h. gleichartige Diagramme für Untergruppen:

ggplot(diamonds, aes(x = carat, y = price)) +
   geom_miss_point() +
   theme_bw(base_size = 16) +
   labs(title = "Price by Carat",
   caption = paste0("Source: ggplot2::diamonds,
   random sample (n = ", n, ")")) +
   facet_wrap(vars(cut))
naniar::geom_miss_point() in Verbindung mit facet_wrap()
naniar::geom_miss_point() in Verbindung mit facet_wrap(). Dieses Diagramm zeigt deutlich, dass Fehlwerte nur in einer Untergruppe von cut auftreten.

Hier können wir auf einen Blick erkennen, dass Fehlwerte nur in einer Untergruppe von cut auftreten: nur wenn cut = Ideal fehlt in einigen Fällen der price-Wert.

Ausblick: naniar und der Umgang mit Fehlwerten in R

Das naniar-Paket kann eine sehr wertvolle Hilfe sein, um Fehlwerte in den Daten besser zu verstehen, eventuelle Muster zu finden bzw. zu prüfen, ob Fehlwerte zufällig über die Werte anderer Variablen verteilt sind.

Als weiteres Leistungsmerkmal bietet es die sog. shadow matrix (Schattenmatrix), die zu jeder Zelle im Datensatz die Information zugänglich macht, ob dieser Wert fehlt oder nicht (NA / !NA, sprich missing or not missing). Damit kann man Fehlwerte leichter als mit herkömmlichen Mitteln als Vergleichskriterium heranziehen oder Imputationen (das Auffüllen von Fehlwerten nach bestimmten Rechenmethoden) evaluieren.

Fehlwerte imputieren: Paket-Empfehlungen in R

Abschließend noch einge Paket-Empfehlungen zum Imputieren von Fehlwerten:

  • simputation: Arbeitet gut mit naniar zusammen; Beispiele in naniars Dokumentation (Vignette; siehe help(package = „naniar“))
  • mice ist sehr populär
  • Amelia – benannt nach der Flugpionierin Amelia Earhart (tragischerweise nach einem Flug 1937 verschollen; rund anderthalb Jahre später für tot erklärt)
  • recipes im Machine Learning-Kontext; Teil der tidymodels-Paketsammlung; enthält Funktionen zur Datenaufbereitung, darunter step_impute-Funktionen zur Imputation von Fehlwerten (mean, median, mode, bagging, knn, etc.)

Viel Erfolg bei Euren Datenanalysen – mögen Euch Fehlwerte nicht allzu sehr plagen! Freue mich auf Erfahrungsberichte!

Freue mich über Kommentare!

Wir benutzen Cookies um die Nutzerfreundlichkeit der Webseite zu verbessen. Durch Deinen Besuch stimmst Du dem zu.