5  Daten verbildlichen

Schlüsselwörter

Statistik, Prognose, Modellierung, R, Datenanalyse, Regression

5.1 Einstieg

5.1.1 Lernziele

  • Sie können erläutern, wann und wozu das Visualisieren statistischer Inhalte sinnvoll ist.
  • Sie kennen typische Arten von Datendiagrammen.
  • Sie können typische Datendiagramme mit R visualisieren.
  • Sie können zentrale Ergebnisse aus Datendiagrammen herauslesen.

5.1.2 Benötigte R-Pakete und Daten

Neben den üblichen Paketen tidyverse () und easystats () benötigen Sie in diesem Kapitel noch DataExplorer () und optional ggpubr () und ggstatsplot (). Wir arbeiten wieder mit dem Datensatz mariokart, s. .

library(tidyverse)
library(easystats)
library(DataExplorer)  # nicht vergessen zu installieren
library(ggpubr)  # optional, Datenvisualisierung
library(ggstatsplot)  # optional, Datenvisualisierung

5.1.3 Quiz zum Einstieg

Vielleicht fordert Sie die Lehrkraft zu einem Einstiegsquiz auf, etwa mittels der Plattform antworte.jetzt. Alternativ überlegen Sie sich selber 10 Quiz-Aufgaben zum Stoff des letzten Kapitels.

5.1.4 Wozu das alles?

Große Aufgaben warten … ()

🥷 Wir müssen die Galaxis retten, Kermit!

🐸 Schlock

5.2 Ein Dino sagt mehr als 1000 Worte

Es heißt, ein Bild sage mehr als 1000 Worte. Schon richtig, aber ein Dinosaurier sagt auch mehr als 1000 Worte (). In sieht man verschiedene “Bilder”, also Datensätze: etwa einen Dino und einmal einen Kreis. Obwohl die Bilder grundverschieden sind, sind die zentralen statistischen Kennwerte (praktisch) identisch. In dieselbe Bresche schlägt “Anscombes Quartett” (). Es zeigt vier Datensätze, in denen die zentralen Statistiken fast identisch sind, also Mittelwerte, Streuungen, Korrelationen. Aber die Streudiagramme sind grundverschieden. Anscombes Beispiel zeigt (zugespitzt): Eine Visualisierung enthüllt, was der Statistik (als Kennzahl) verhüllt bleibt. Statistische Diagramme können Einblicke geben, die sich nicht (leicht) in grundlegenden Statistiken (Kennwerten) abbilden. Unter visueller Cortex ist sehr leistungsfähig. Wir können ohne Mühe eine große Anzahl an visuellen Informationen aufnehmen und parallel verarbeiten. Aus diesem Grund sind Datendiagramme eine effektive und einfache Art, aus Daten Erkenntnisse zu ziehen. Nutzen Sie Datendiagramme umfassend; sie sind einfach zu verstehen und doch sehr mächtig.

Abbildung 5.1: Dinosaurier und Kreis: Gleiche statistische Kennwerte ()

zeigt Anscombes Quartett.

Abbildung 5.2: Anscombes Quartet: Gleiche statistischen Kennwerte in vier Datensätzen

Definition 5.1 (Datendiagramm) Ein Datendiagramm (kurz: Diagramm) ist ein Diagramm, das Daten und Statistiken zeigt, mit dem Zweck, Erkenntnisse daraus zu ziehen.

Beispiel 5.1 (Aus der Forschung: Ein aufwändiges (und ansprechendes) Datendiagramm)  

Auf Basis des Korruptionsindex von Transparency International () erstellt Wilke () ein Diagramm zum Zusammenhang vom Entwicklungsindex (Lebenserwartung, Bildung, Einkommen; vgl. Hou et al. ()) und Korruption, jeweils auf Landesebene, s. .

Es finden sich in der Literatur (im Internet) viele weitere Beispiele für handwerklich meisterhaft erstelle Datendiagramme, die in vielen Fällen mit R erstellt werden (vgl. ).

Abbildung 5.3: Der Zusammenhang von Entwicklungindex und und Korruption

zeigt ein Bild mit mehreren (5) Variablen, die jeweils einer “Dimension” entsprechen. Wie man (nicht) sieht, wird es langsam unübersichtlich. Offenbar kann man in einem Bild nicht beliebig viele Variablen sinnvoll reinquetschen. Die “Dimensionalität” eines Diagramms hat ihre Grenzen, vielleicht bei vier bis sechs Variablen. Möchten wir den Zusammenhang von vielen Variablen verstehen, kommen wir mit Bildern oft nicht weiter. Dann brauchen wir andere Werkzeuge: Statistik, komm zu Hilfe. Bei klaren Zusammenhängen und wenig Variablen braucht man keine (aufwändige) Statistik. Ein Bild, also ein Datendiagramm, ist dann oft ausreichend. Man könnte sagen, dass es Statistik nur deshalb gibt, weil unser Auge mit mehr als ca. vier bis sechs Variablen nicht gleichzeitig umgehen kann.

Abbildung 5.4: Ein Diagramm kann nur eine begrenzte Anzahl von Variablen zeigen. Wenn Sie dieses Bild nicht checken: Prima. Genau das soll das Bild zeigen.

Übungsaufgabe 5.1 Wie viele Variablen sind in dargestellt?

5.3 Nomenklatur von Datendiagrammen

zeigt eine – sehr kurze Nomenklatur – von Datendiagrammen. Weitere Nomenklaturen sind möglich, aber wir halten hier die Sache einfach. Wer an Vertiefung interessiert ist, findet bei data-to-vis einen Überblick über verschiedene Typen an Diagrammen, sogar in Form einer systematischen Nomenklatur: https://www.data-to-viz.com/.

Tabelle 5.1: Ein (sehr kurze) Nomenklatur von Datendiagrammen
Erkenntnisziel qualitativ quantitativ
Verteilung Balkendiagramm Histogramm und Dichtediagramm
Zusammenhang gefülltes Balkendiagramm Streudiagramm
Unterschied gefülltes Balkendiagramm Boxplot

5.4 Verteilungen verbildlichen

5.4.1 Verteilung einer nominalen Variable

Definition 5.2 (Verteilung) Eine (Häufigkeits-)Verteilung einer Variablen X schlüsselt auf, wie häufig jede Ausprägung von X ist.

Beispiel 5.2 zeigt die Häufigkeitsverteilung von cond (condition, also der Zustand des Artikels, neu oder gebraucht) aus dem Datensatz mariokart. Die Variable hat 2 Ausprägungen; z.B. kommt die Ausprägung new 59 mal vor.

Tabelle 5.2: Häufigkeitsverteilung von cond aus dem Datensatz mariokart
cond n
new 59
used 84

Zugegeben, das Datendiagramm von cond ist nicht so aufregend, s. . Wie man sieht, besteht so ein Diagramm aus Balken, daher heißt es Balkendiagramm. Man kann so ein Diagramm um 90° drehen, s. ; keine Ausrichtung ist grundsätzlich besser als die andere.

Definition 5.3 (Balkendiagramm) Ein Balkendiagramm ist eine grafische Darstellung von Werten, zumeist für die Häufigkeiten bestimmter Kategorien, also Ausprägungen nominaler Variablen. Dabei werden rechteckige Balken verwendet, und die Länge eines Balkens ist proportional zur dargestellten Häufigkeit.

(a) horizontale Balken
(b) vertikale Balken
Abbildung 5.5: Häufigkeitsverteilung der Variable cond

Es gibt viele Methoden, sich mit R ein Balkendiagramm ausgeben zu lassen. Eine einfache, komfortable ist die mit dem Paket DataExplorer, s. ; wir betrachten gleich die Syntax. Zuerst importieren wir die Daten, s. . Außerdem nicht vergessen, das Paket DataExplorer mit dem Befehl library zu starten. (Natürlich müssen Sie das Paket einmalig installiert haben, bevor Sie es starten können.) In diesem Paket “wohnen” die Befehle, die wir zum Erstellen der Datendiagramme nutzen werden. zeigt die Syntax, um ein Balkendiagramm zu erstellen. Auf der Hilfeseite der Funktion finden Sie weitere Details zur Funktion.

Listing 5.1: Syntax zur Erstellung eines Balkendiagramms
Abbildung 5.6: Ein Balkendiagramm. Unglaublich.

Die Syntax ist in abgedruckt (Zur Erinnerung: %>% nennt man die “Pfeife und lässt sich als”und dann” übersetzen, vgl. ). Übersetzen wir die Syntax ins Deutsche:

Nimm den Datensatz `mariokart` *und dann*
  wähle die Spalte cond *und dann*
  zeichne ein Balkendiagramm. Fertig!

Übungsaufgabe 5.2 (Spalten wählen für das Balkendiagramm) Hätten wir andere Spalten ausgewählt, so würde das Balkendiagramm die Verteilung jener Variablen zeigen. Ja, Sie können auch mehrere Variablen auf einmal auswählen. Probieren Sie das doch mal aus!

Übungsaufgabe 5.3 (Visualisieren Sie die Verteilung von stock_photo!) Erstellen Sie ein geeignetes Diagramm, um die Häufigkeit jeder Ausprägung von stock_photo (Datensatz mariokart) darzustellen.

Lösung

mariokart |> 
  select(stock_photo) |> 
  plot_bar()

Mit plot_bar aus DataExplorer kann man Balkendiagramme darstellen.

5.4.2 Verteilung einer quantitativen Variable

Bei einer quantitativen Variablen mit vielen Ausprägungen wäre ein Balkendiagramm nicht so aussagekräftig, s. (links). Es gibt einfach zu viele Ausprägungen.

Die Lösung: Wir reduzieren die Anzahl der Ausprägungen, in dem wir auf ganze Dollar runden. Oder, um noch weniger Ausprägungen zu bekommen, können wir einfach Gruppen definieren, z.B.

  • Gruppe 1: 0-5 Dollar
  • Gruppe 2: 6-10 Dollar
  • Gruppe 3: 11-15 Dollar

In (rechts) sind z.B. die Ausprägungen des Verkaufspreises (total_pr) in Gruppen der Breite von 5 Dollar aufgeteilt worden. Zusätzlich sind noch die einzelnen Werte als schwarze Punkte gezeigt.

(a) Balkendiagramm
(b) Histogramm
Abbildung 5.7: Balkendiagramm vs. Histogramm für den Gesamtpreis (total_pr)

Definition 5.4 (Histogramm) Ein Histogramm ist ein Diagramm zur Darstellung der Häufigkeitsverteilung einer quantitativen Variablen. Die Daten werden in Gruppen (Klassen) eingeteilt, die dann durch einen Balken (pro Klasse) dargestellt werden. Die Höhe der Balken zeigt die Häufigkeit der Daten in dieser Gruppe/in diesem Balken (bei konstanter Balkenbreite).

Es gibt keine klare Regel, in wie viele Balken ein Histogramm gegliedert sein sollte. Nur: Es sollten werder sehr viele noch zu wenige sein, s. (links) bzw. (rechts). Zur Erstellung eines Histogramms können Sie die Syntax nutzen, vgl. , links.

(a) Zu viele Gruppen (Balken)
(b) Zu wenige Gruppen (Balken)
Abbildung 5.8: Nicht zu wenig und nicht zu viele Balken im Histogramm
Listing 5.2: Syntax zur Erstellung eines Histogramms
mariokart %>% 
  select(total_pr) %>% 
  filter(total_pr < 100) %>%  # ohne Extremwerte
  plot_histogram()
(a) Histogramm
(b) Dichtediagramm
Abbildung 5.9: Eine stetige Verteilung verbildlichen

Übungsaufgabe 5.4 (Visualisieren Sie die Verteilung von ship_pr anhand eines Histogramms!)  

mariokart |> 
  select(ship_pr) |> 
  plot_histogram()

fügt zum Histogramm ein Dichtediagramm hinzu (durchgezogene Linie). Ein Dichtediagramm ähnelt einem “glattgeschmirgelten” Histogramm.

Definition 5.5 (Dichtediagramm) Ein Dichtediagramm visualisiert die Verteilung einer stetigen Variablen. Im Gegensatz zum Histogramm wird der Verlauf der Kurve geglättet, so kann Rauschen (Zufallsschwankung) besser ausgeblendet werden. (Mit Dichte ist die relative Anzahl der Beobachtungen pro Einheit der Variablen auf der X-Achse gemeint.)

Abbildung 5.10: Histogramm und Dichtediagramm (Linie) für total_pr

Übungsaufgabe 5.5 Erstellen Sie das Diagramm , rechtes Teildiagramm!

Verteilungen unterscheiden sich z.B. in ihrem “typischen” oder “mittleren” Wert (vgl. ), aber auch in ihrer Streuung (vgl. ). (Diagramme von) Verteilungen können symmetrisch oder schief (nicht symmetrisch) sein, s. . zeigt verschiedene Formen von Verteilungen. “Bimodal” meint “zweigipflig” und “multimodal” entsprechend “mehrgipflig”.

(a) Symmetrisch (Normal)
(b) Schief
Abbildung 5.11: Symmetrische vs. schiefe Verteilung, verbildlicht
Abbildung 5.12: Verschiedene Verteilungsformen

Übungsaufgabe 5.6 (Verteilungsform von total_pr?) Benennen Sie die am besten passende Verteilungsform für die Variable total_pr.

Lösung

mariokart |> 
  select(total_pr) |> 
  plot_density()

Die Verteilung ist rechtsschief.

5.4.3 Spezialfall Normalverteilung

Eine Normalverteilung ist eine bestimmte Art von Verteilung einer quantitativen Variablen. Aber sie ist besonders wichtig, und wird daher hier besonders hervorgehoben. Eine Normalverteilung sehen Sie in , links. Die Normalverteilung ist in der Statistik von hoher Bedeutung, da sie sich unter (recht häufigen) Bedingungen zwangsläufig ergeben muss. Sie hat u.a. folgende Eigenschaften:

  • symmetrisch
  • glockenförmig
  • stetig
  • eingipflig (unimodal)
  • Mittelwert, Median und Modus sind identisch

Beispiel 5.3 Beispiele für normalverteilte Variablen sind Körpergröße von Männern oder Frauen, IQ-Werte, einige Prüfungsergebnisse, Messfehler, Lebensdauer von Glühbirnen, Gewichte von Brotlaiben, Milchproduktion von Kühen, Brustumfang schottischer Soldaten ().

Definition 5.6 (Normalverteilung) Eine Normalverteilung ist eine spezielle Art von Verteilung einer quantitativen Variablen. Sie ist symmetrisch, glockenförmig, stetig, unimodal und hat Mittelwert, Median und Modus identisch. Sie lässt sich durch zwei Parameter vollständig beschreiben: Mittelwert (μ) und Streuung (σ).

Definition 5.7 (Entstehung einer Normalverteilung) Wenn sich eine Variable X als Summe mehrerer, unabhängiger, etwa gleich starker Summanden, dann kann man erwarten, dass sich diese Variable X tendenziell normalverteilt.

Die Entstehhung einer Normalverteilung kann man gut anhand des Galton-Bretts veranschaulichen.

zeigt interaktive Beispiele für Normalverteilung. Wählen Sie einfach Mittelwert (μ) und Streuung (σ) anhand der Schieberegler.

steely_dan_says = 0
0.00.10.20.30.40.50.60.70.80.91.001234567891011
pts = Array(1000) [2.2144321917460124, 2.0083917649165435, 2.469685584969648, 3.1938351989686415, 2.1970406017491224, 2.849523240249875, 3.2250635504013263, 2.6347517654493826, 2.0364975137921655, 1.7587450693173872, 0.7424196785554158, 1.6233531012595437, 2.078966736490936, 1.3734047982034219, 3.472186145896443, 3.153073082710617, 2.506900325976128, 2.0316350800518754, 2.752288823538375, 3.312213385461324, …]
create_plot = ƒ(pts)
show_curve = true
  import {build_samples as build_samples} from "@mcmcclur/adaptive-plotter"
tippy = ƒ(t, e)
Abbildung 5.13: Interaktives Beispiel für Normalverteilungen.

Kennt man die beiden Parameter, Mittelwert und SD, einer Normalverteilung, so kann man einfach angeben, welcher Anteil der Fläche der Normalverteilung sich in einem bestimmten Bereich befindet, s. .

Davon leitet sich die “68-95-99.7-Prozentregel” ab:

  • 68% der Werte im Bereich μ±1σ
  • 95% der Werte im Bereich μ±2σ
  • 99.7% der Werte im Bereich μ±3σ
Abbildung 5.14: Die Flächeninhalte (Wahrscheinlichkeitsmasse) einer Normalverteilung in Abhängigkeit der SD-Einheiten ()

5.5 Zusammenhänge verbildlichen

5.5.1 Zusammenhang nominaler Variablen

Beispiel 5.4 (Beispiele für Zusammenhänge bei nominalen Variablen)  

  • Hängt Berufserfolg (Führungskraft ja/nein) mit dem Geschlecht zusammen?
  • Hängt der Beruf des Vaters mit dem Schulabschluss des Kindes (Abitur, Realschule, Mittelschule) zusammen?
  • Gibt es einen Zusammenhang zwischen der bevorzugten Automarke und der Präferenz für eine politische Partei?

Sagen wir, Sie arbeiten immer noch beim Online-Auktionshaus und Sie fragen sich, ob ein Produktfoto wohl primär bei neuwertigen Produkten beiliegt, aber nicht bei gebrauchten? Dazu betrachten Sie wieder die mariokart-Daten, s. . Tatsächlich: Es findet sich ein Zusammenhang zwischen der Tatsache, ob dem versteigerten Produkt ein Foto bei lag und ob es neuwertig oder gebraucht war (, links). Bei neuen Spielen war fast immer (ca. 90%) ein Foto dabei; bei gebrauchten Spielen immerhin bei gut der Hälfte der Fälle.

(a) starker Zusammenhang

 

(b) schwacher Zusammenhang
Abbildung 5.15: Zusammenhang zwischen nominalskalierten Variablen verbildlichen. (a) Es findet sich ein Zusammenhang von Foto und Zustand in den Daten. (b) Es findet sich (fast) kein Zusammenhang von wheel und Foto in den Daten

Anders sieht es aus für die Frage, ob ein (oder mehrere) Lenkräder dem Spiel beilagen (oder nicht) in Zusammenhang mit der Fotofrage Hier gab es fast keinen Unterschied zwischen neuen und alten Spielen, was die Frage nach “Foto des Produkts dabei” betraf (, rechts), der Anteil betrug jeweils ca. 70%. Das zeigt, dass es keinen Zusammenhang zwischen Foto und Neuwertigkeit des Spiels gibt (laut unseren Daten). Bildlich gesprochen: Unterscheiden sich die “Füllhöhe” in den Diagrammen, so gibt es einen Unterschied hinsichtlich “Foto ist dabei” zwischen den beiden Gruppen (linker vs. rechter Balken). Unterscheiden sich die Anteile in den Gruppen (neuwertige vs. gebrauchte Spiele), so spielt z.B. die Variable “Foto dabei” offenbar eine Rolle. Dann hängen Neuwertigkeit und “Foto dabei” also zusammen!

So können Sie sich in R ein gefülltes Balkendiagramm ausgeben lassen, z.B. mit plot_bar(mariokart, by = "cond") (Paket DataExplorer). Diese Darstellung eignet sich, um Zusammenhänge zwischen zwei zweistufigen nominalskalierten Variablen zu verbildlichen. Die verschiedenen Werte der Füllfarbe werden den Stufen der Variablen cond zugewiesen, s. .

Listing 5.3: R-Syntax für ein gefülltes Balkendiagramm
mariokart %>% 
  select(cond, stock_photo) %>% 
  plot_bar(by = "cond")  # aus dem Paket DataExplorer
Abbildung 5.16: Ein gefülltes Balkendiagramm zur Untersuchung eines Zusammenhangs zwischen nominalskalierter Variablen

Gefüllte Balkendiagramme eignen sich zur Analyse eines Zusammenhangs zwischen nominalskalierten Variablen. Allerdings sollte eine der beiden Variablen nur zwei Ausprägungen aufweisen, sonst sind die Zusammenhänge nicht mehr so gut zu erkennen. Außerdem sollten die Balken auf gleiche Länge (100%) ausgerichtet sein.

Übungsaufgabe 5.7 (Zusammenhang visualisieren) Visualisieren Sie den Zusammenhang der beiden nominalen Variablen cond und wheels!

mariokart |> 
  # Mache aus einer metrischen eine nominale Variable: 
  mutate(wheels = factor(wheels)) |> 
  select(cond, wheels) |> 
  plot_bar(by = "cond")

Lösung

wheels ist als metrische Variable (int: Integer, d.h. Ganzzahl) formatiert im Datensatz mariokart. Wir müssen Sie zunächst als Faktorvariable umformatieren, damit R sie als nominal skalierte Variable erkennt.

5.5.2 Zusammenhang bei metrischen Variablen

Den Zusammenhang zweier metrischer Variablen kann man mit einem Streudiagramm visualisieren (engl. scatterplot). links untersucht den Zusammenhang des Einstiegpreises (X-Achse) und Abschlusspreises (Y-Achse) von Geboten bei Versteigerungen des Computerspiels Mariokart. In dem Diagramm ist eine “Trendgerade” (Regressionsgerade), um die Art des Zusammenhangs besser zu verdeutlichen. Die Trendgerade steigt an (von links nach recht). Daraus kann man schließen: Es handelt sich um einen gleichsinnigen (positiven) Zusammenhang: Je höher der Startpreis, desto höher der Abschlusspreis, zumindest tendenziell. Diese Gerade verläuft “mittig” in den Daten (wir definieren das später genauer). Diese Trendgerade gibt Aufschluss über “typische” Werte: Welcher Y-Wert ist “typisch” für einen bestimmten X-Wert? rechts untersucht den Zusammenhang zwischen Anzahl der Gebote (X-Achse) und Abschlusspreises (Y-Achse). Es handelt sich um einen negativen Zusammenhang: Je mehr Gebote, desto geringer der Abschlusspreis (tendenziell). Das erkennt man an der sinkenden Trendgeraden. Die Ellipse zeigt an, wie eng die Daten um die Trendgerade streuen. Daraus kann man ableiten, wie stark der Absolutwert des Zusammenhangs ist, vgl. .

(a) positiver, mittelstarker Zusammenhang

 

(b) negativer, schwacher Zusammenhang
Abbildung 5.17: Streudiagramm zur Darstellung eines Zusammenhangs zweier metrischer Variablen

Definition 5.8 (Linearer Zusammenhang) Lässt sich die Beziehung zweier Variablen gut mit einer Geraden beschreiben, so spricht man von einem linearen Zusammenhang. Ändert man eine der beiden Variablen um einen bestimmten Wert (z.B. 1), so ändert sich die andere um einen proportionalen Wert (z.B. 0.5). Gleichsinnige (positive) Zusammenhänge erkennt man an aufsteigenden Trendgeraden ; gegensinnige (negative) Zusammenhänge an absteigenden Trendgeraden .

Natürlich könnte man auch nicht-lineare Zusammenhänge untersuchen, aber der Einfachheit halber konzentrieren wir uns hier auf lineare; Beispiele für nicht-lineare Zusammenhänge sind in zu sehen.

Abbildung 5.18: Beispiele nichtlinearer Zusammenhänge

Starke Zusammenhänge erkennt man an schmalen Ellipsen (“Baguette” 🥖); schwache Zusammenhänge an breiten Ellipsen (“Torte” 🥮). bietet einen Überblick über verschiedene Beispiele von Richtung und Stärke von Zusammenhängen. In ist für jedes Teildiagramm eine Zahl angegeben: der Korrelationskoeffizient. Diese Statistik quantifiziert Richtung und Stärke des Zusammenhangs (mehr dazu in Kap. ). Ein positives Vorzeichen steht für einen positiven Zusammenhang, ein negatives Vorzeichen für einen negativen Zusammenhang. Der (Absolut-)Wert gibt die Stärke des linearen Zusammenhangs an. Cohen () hat folgende Faustregeln angegeben:

  • r0: Kein Zusammenhang
  • r±.1: schwacher Zusammenhang
  • r±.3: mittlerer Zusammenhang
  • r±.5: starker Zusammenhang
  • r=1: perfekter Zusammenhang
Abbildung 5.19: Lineare Zusammenhänge verschiedener Stärke und Richtung

hat die gleiche Aussage wie , ist aber plakativer, indem Stärke (schwach, stark) und Richtung (positiv, negativ) gegenübergestellt sind. Man sieht in und , dass ein negativer Korrelationskoeffizient mit einer absinkenden Trendgerade (synonym: Regressionsgerade; blaue Linie) einhergeht. Umgekehrt geht ein positiver Trend mit einer ansteigenden Trendgerade einher. Zweitens erkennt man, dass starke Zusammenhänge mit einer schmalen Ellipse einhergehen und schwache Zusammenhänge mit einer breiten Ellipse einhergehen.

Abbildung 5.20: Überblick über starke vs. schwache bzw. positive vs. negative Zusammenhänge

zeigt interaktive Beispiele für (lineare) Zusammenhänge.

Correlation type
cor_type = "A perfect linear relationship"
redo = 0
R = 1.0000
-10-8-6-4-2246810X108642-2-4-6-8-10Y
graph_from_type = ƒ(s)
make_perturbed_graph = ƒ(f, r, a, b, n)
  import {select as select} from "@jashkenas/inputs"
jstat = ƒ()
  import {plotter as plotter} from "50dadfdec01c15a8"
  import {rk4 as rk4} from "@mcmcclur/runge-kutta-for-systems-of-odes"
  import {slider as slider} from "@jashkenas/inputs"
Abbildung 5.21: Interaktives Beispiel für Zusammenhangsdiagramme.

Beispiel 5.5 Sie arbeiten nach wie vor bei einem Online-Auktionshaus, und manchmal gehört Datenanalyse zu Ihren Aufgaben. Daher interessiert Sie, ob welche Variablen mit dem Abschlusspreis (total_pr) im Datensatz mariokart zusammenhängen. Sie verbildlichen die Daten mit R, und zwar nutzen Sie das Paket DataExplorer. Außerdem müssen wir noch die Daten importieren, falls noch nicht getan, s. . So, jetzt kann die eigentliche Arbeit losgehen. Da Sie sich nur auf einige metrische Variablen konzentrieren wollen, wählen Sie (mit select) nur diese Variablen aus. Dann weisen Sie R an, einen Scatterplot zu malen (plot_scatterplot) und zwar jeweils den Zusammenhang einer der gewählten Variablen mit dem Abschlusspreis (total_pr), da das die Variable ist, die Sie primär interessiert. Das Ergebnis sieht man in .

mariokart %>% 
  select(n_bids, start_pr, total_pr) %>% 
  plot_scatterplot(by = "total_pr", nrow = 1)
Abbildung 5.22: Der Zusammenhang einiger metrischer Variablen mit Abschlusspreis

Aha. Was sagt uns das Bild? Hm. Es scheint einige Extremwerte zu geben, die dafür sorgen, dass der Rest der Daten recht zusammengequetscht auf dem Bild erscheint. Vielleicht sollten Sie solche Extremwerte lieber entfernen? Sie entscheiden sich, nur Verkäufe mit einem Abschlusspreis von weniger als 100 Dollar anzuschauen (total_pr < 100), s. .

Listing 5.4: Mariokart ohne Extremwerte
mariokart_no_extreme <-
  mariokart %>% 
  filter(total_pr < 100)

Das Ergebnis ist in zu sehen.

mariokart_no_extreme %>% 
  select(duration, n_bids, start_pr, 
         ship_pr, total_pr, 
         seller_rate, wheels) %>% 
  plot_scatterplot(by = "total_pr")
Abbildung 5.23: Der Zusammenhang metrischer Variablen mit Abschlusspreis - ohne Extremwerte

Ohne Extremwerte schält sich ein deutlicheres Bild hervor: Startpreis (start_pr) und Anzahl der Räder (wheels) scheinen am stärksten mit dem Abschlusspreis zusammenzuhängen. Das Argument by = "total_pr" bei plot_scatterplot weist R an, als Y-Variable stets total_pr zu verwenden. Alle übrigen Variablen kommen jeweils einmal als X-Variable vor.

Übungsaufgabe 5.8  

Visualisieren Sie den Zusammenhang der beiden metrischen Variablen start_pr und total_pr. Verwenden Sie den Datensatz ohne Extremwerte wie oben definiert.

mariokart_no_extreme |> 
  select(start_pr, total_pr) |> 
  plot_scatterplot(by = "total_pr")

Zuerst wählt man die Spalten (mit select), die man visualisieren möchte, dann ruft man die Funktion plot_scatterplot auf.

5.6 Unterschiede verbildlichen

5.6.1 Unterschiede bei nominalen Variablen

Gute Nachrichten: Für nominale Variablen bieten sich Balkendiagramme sowohl zur Darstellung von Zusammenhängen als auch von Unterschieden an. Genau genommen zeigt ja (links) den Unterschied zwischen neuen und gebrauchten Spielen hinsichtlich der Frage, ob Fotos beiliegen. Und wie man in sieht, ist der Anteil der Spiele mit Foto bei den neuen Spielen höher als bei gebrauchten Spielen.

Aber Freunde lassen Freunde keine Tortendiagramme verwenden.

5.6.2 Unterschiede bei quantitativen Variablen

Eine typische Analysefrage ist, ob sich zwei Gruppen hinsichtlich einer metrischen Zielvariablen deutlich (substanziell) unterscheiden. So untersucht man z.B. oft, ob sich die Mittelwerte zweier Gruppen hinsichtlich der Zielvariablen deutlich unterscheiden. Das hört sich abstrakt an? Am besten wir schauen uns einige Beispiele an, s. .

(a) Histogramm pro Gruppe
(b) Boxplot pro Gruppe
Abbildung 5.24: Unterschiede zwischen zwei Gruppen: Metrische Y-Variable, nominale X-Variable

Das linke Teildiagramm von zeigt das Histogramm von total_pr, getrennt für neue und gebrauchte Spiele, vgl. . Das rechte Teildiagramm zeigt die gleichen Verteilungen, aber mit einer vereinfachten, groberen Darstellungsform, den Boxplot. Was ein “deutlicher” (substanzieller, bedeutsamer, relevanter oder signifikanter) Zusammenhang ist, ist keine statistische, sondern inhaltliche Frage, die man mit Sachverstand zum Forschungsgegenstand beantworten muss.

Definition 5.9 (Boxplot) Der Boxplot ist eine Vereinfachung bzw. eine Zusammenfassung eines Histograms. Damit stellt der Boxplot auch eine Verteilung (einer metrischen Variablen) dar.

In sieht man die “Übersetzung” von Histogramm (oben) zu einem Boxplot (unten). Ob der Boxplot horizontal oder vertikal steht, ist Ihrem Geschmack überlassen.

Abbildung 5.25: Übersetzung eines Histogramms zu einem Boxplot

Schauen wir uns die “Anatomie” des Boxplots näher an:

  1. Der dicke Strich in der Box zeigt den Median der Verteilung, vgl. .
  2. Die Enden der Box zeigen das 1. Quartil (41) bzw. das 3. Quartil (54). Damit zeigt die Breite der Box die Streuung der Verteilung an, genauer gesagt die Streuung der inneren 50% der Beobachtungen. Je breiter die Box, desto größer die Streuung. Die Breite der Box nennt man auch den Interquartilsabstand (IQR).
  3. Die “Antennen” des Boxplots zeigen die Streuung in den kleinsten 25% der Werte (linke Antenne) bzw. die Streuung der größten 25% der Werte (rechte Antenne). Je länger die Antenne, desto größer die Streuung (in den äußeren Vierteln).
  4. Falls es aber Extremwerte gibt, so sollten die lieber einzeln, separat, außerhalb der Antennen gezeigt werden. Daher ist die Antennenlänge auf die 1.5-fache Länge der Box beschränkt. Werte die außerhalb dieses Bereichs liegen (also mehr als das 1.5-fache der Boxlänge von Q3 entfernt sind) werden mittels eines Punktes dargestellt.
  5. Liegt der Median-Strich in der Mitte der Box, so ist die Verteilung symmetrisch (bezogen auf die inneren 50% der Werte), liegt der Median-Strich nicht in der Mitte der Box, so ist die Verteilung nicht symmetrisch (d.h. sie ist schief). Gleiches gilt für die Antennenlängen: Sind die Antennen gleich lang, so ist der äußere Teil der Verteilung symmetrisch, andernfalls schief.

Beispiel 5.6 In einer vorherigen Analyse haben Sie den Zusammenhang von Abschlusspreis und der Anzahl der Lenkräder untersucht. Jetzt möchten Sie eine sehr ähnliche Fragestellung betrachten: Wie unterscheiden sich die Verkaufspreise je nach Anzahl der beigelegten Lenkräder? Flink erstellen Sie dazu folgendes Diagramm, , links. Es zeigt die Verteilung des Abschlusspreises, aufgebrochen nach Anzahl Lenkräder (by = "wheels").

Aber ganz glücklich sind Sie mit dem Diagramm nicht: R hat die Variable wheels komisch aufgeteilt. Es wäre eigentlich ganz einfach, wenn R die Gruppen 0, 1, 2, 3 und 4 aufteilen würde. Aber schaut man sich die Y-Achse (im linken Teildiagramm von ) an, so erkennt man, dass R wheels als stetige Zahl betrachtet und nicht in ganze Zahlen gruppiert. Vielleicht wird so gruppiert, dass in jeder Gruppe gleich viele Werte sind? Aber wir möchten jeden einzelnen Wert von wheels (0, 1, 2, 3, 4) als Gruppe verstehen. Mit anderen Worten, wir möchten wheels als nominale Variable definieren. Das kann man mit dem Befehl factor(wheels) erreichen (verpackt in mutate), s. rechts.

mariokart_no_extreme |> 
  select(total_pr, wheels) %>% 
  # Probieren Sie den Code mit bzw. ohne folgender Zeile:
  mutate(wheels = factor(wheels)) |>  # wheels als nominale Variable
  plot_boxplot(by = "wheels")  # Boxplot mit "wheels" auf der Y-Achse
(a) wheels als metrische Variable
(b) wheels als nominale Variable
Abbildung 5.26: Abschlusspreis nach Anzahl von beigelegten Lenkrädern

Sie schließen aus dem Bild, dass Lenkräder und Preis (positiv) zusammenhängen. Allerdings scheint es wenig Daten für wheels == 4 zu geben. Das prüfen Sie nach:

mariokart_no_extreme %>% 
  count(wheels)
wheels n
0 36
1 52
2 50
3 2
4 1

Tatsächlich gibt es (in mariokart_no_extreme) auch für 3 Lenkräder schon wenig Daten, so dass wir die Belastbarkeit dieses Ergebnisses skeptisch betrachten sollten. Übrigens bezeichnet Sie Ihre Chefin nur noch als “Datengott”.

Übungsaufgabe 5.9 (Visualisieren Sie den Unterschied im Verkaufspreis zwischen gebrauchten und neuen Spielen.) Es gibt mehrere Diagrammtypen, die sich anbieten; mehrere Lösungen sind also möglich.

Lösung

mariokart_no_extreme |> 
  select(cond, total_pr) |> 
  plot_boxplot(by = "cond")

Boxplots sind eine gute Möglichkeit, die Verteilung einer metrischen Variablen, aufgebrochen auf mehrere Gruppen, zu visualisieren.

Übungsaufgabe 5.10 (Verkaufspreis im Vergleich) Visualisieren Sie den Unterschied im Verkaufspreis abhängig von ship_pr; betrachten Sie ship_pr als ein Gruppierungsvariable. Interpretieren Sie das Ergebnis.

Lösung

mariokart_no_extreme |> 
  select(ship_pr, total_pr) |> 
  plot_boxplot(by = "ship_pr")

plot_boxplot gruppiert metrische Variablen, wie ship_pr automatisch in fünf Gruppen (mit gleichen Ranges). Wir müssen also nichts tun, um die metrische Variable ship_pr in eine Gruppierungsvariable (Faktorvariable) umzuwandeln. Es sieht so aus, als würde der Median zwischen den Gruppen leicht steigen, mit Ausnahme der mittleren Gruppe.

5.7 So lügt man mit Statistik

Diagramme werden mitunter eingesetzt, um die Wahrheit “aufzuhübschen”. Achsen zu stauchen, ist ein recht beliebter Trick, s. . Natürlich kann man auch durch “Abschneiden” der Y-Achse einen eindrucksvollen Effekt erzielen, s. . Scheinkorrelationen als “echte”, also kausale Effekte zu verkaufen, ist ein anderer Trick, den man immer mal wieder beobachten kann. Ein Beispiel: Messerli () berichtet von einem Zusammenhang von Schokoladenkonsum und Anzahl von Nobelpreisen (Beobachtungseinheit: Länder), s. . Das ist doch ganz klar: Schoki futtern macht schlau und Nobelpreise! (?) Leider ist hier von einer Scheinkorrelation auszugehen: Auch wenn die beiden Variablen Schokoladenkonsum und Nobelpreise zusammenhängen, heißt das nicht, dass die eine Variable die Ursache und die andere die Wirkung sein muss. So könnte auch eine Drittvariable im Hintergrund die gleichzeitige Ursache von Schokoladenkonsum und Nobelpreise sein, etwa der allgemeine Entwicklungsstand des Landes: In höher entwickelten Ländern wird mehr Schokolade konsumiert und es werden mehr Nobelpreise gewonnen im Vergleich zu Ländern mit geringerem Entwicklungsstand.

Abbildung 5.27: Schokoladenkonsum und Nobelpreise
(a) Oh nein, dramatischer Einbruch des Umsatzes!

 

(b) Kaum der Rede wert, ist nur ein bisschen Schwankung!
Abbildung 5.28: Strecken und Stauchen der Achse(n), um mit Statistik zu lügen
(a) Oh nein, dramatischer Einbruch des Umsatzes!

 

(b) Kaum der Rede wert, ist nur ein bisschen Schwankung!
Abbildung 5.29: Abschneiden der Y-Achse, um mit Statistik zu lügen

5.8 Praxisbezug

Ein, wie ich finde, schlagendes Beispiel zur Stärke von Datendiagrammen ist . Das Diagramm zeigt die Häufigkeit von Masern, vor und nach der Einführung der Impfung. Die Daten und die Idee zur Visualisierung gehen auf van Panhuis et al. () zurück.

Abbildung 5.30: Häufigkeit von Masern und Impfung in den USA ()

In der “freien Wildbahn” findet man häufig sog. “Tortendiagramme”. Zwar sind sie beliebt, doch von ihrer Verwendung ist zumeist abzuraten, denn bei Tortenstücken ist es schwer, die Größe zu vergleichen.

Freunde lassen Freunde keine Tortendiagramme zeichnen.

5.9 Aufgaben

Die Webseite datenwerk.netlify.app stellt eine Reihe von einschlägigen Übungsaufgaben bereit. Sie können die Suchfunktion der Webseite nutzen, um die Aufgaben mit den folgenden Namen zu suchen:

  1. boxhist
  2. max-corr1
  3. max-corr2
  4. Histogramm-in-Boxplot
  5. Diamonds-Histogramm-Vergleich2
  6. Boxplot-Aussagen
  7. boxplots-de1a
  8. movies-vis1
  9. movies-vis2
  10. vis-gapminder
  11. boxplots-de1a
  12. diamonds-histogramm-vergleich
  13. wozu-balkendiagramm
  14. diamonds-histogram
  15. n-vars-diagram

Weitere Aufgaben zum Thema Datenvisualisierung finden Sie im Datenwerk unter dem Tag vis.

5.10 Vertiefung

Mehr Informationen zu DataExplorer finden Sie hier.

5.10.1 Animation

Eine weitere nützliche Art von Visualisierung sind Karten, 3D-Bilder und Animationen. So zeigt z.B. die Veränderung der Lebenserwartung (in Jahren) über die letzten Dekaden.

Abbildung 5.31: Animation zur Veränderung der Lebenserwartung

In einigen Situation können Animationen zweckdienlich sein. Außerdem sind sie mitunter nett anzuschauen, s. .

Abbildung 5.32: Veränderung des Zusammenhangs von Lebenserwartung und Bruttosozialprodukt pro Land, gegliedert nach Kontinenten

Natürlich sind der Fantasie keine Grenzen beim Visualisieren gesetzt, so ist etwa diese Animation ziemlich beeindruckend.

5.10.2 Schicke Diagramme

Ein Teil der Diagramme dieses Kapitels wurden mit dem R-Paket ggpubr erstellt. Mit diesem Paket lassen sich einfach ansprechende Datendiagramme erstellen.

library(ggpubr)  # einmalig instalieren nicht vergessen
mariokart %>% 
  filter(total_pr < 100) %>% 
  ggboxplot(x = "cond", y = "total_pr")

Möchte man Mittelwerte vergleichen, so sind Boxplots nicht ideal, da diese ja nicht den Mittelwert, sondern den Median herausstellen. Eine Abhilfe (also eine Darstellung des Mittelwerts) schafft man (z.B.) mit ggpubr und der Funktion ggviolin, s. .

ggviolin(mariokart_no_extreme, 
         x = "cond", y = "total_pr", add = "mean_sd") 
Abbildung 5.33: Vergleich der Verteilungen zweier Gruppen mit Mittelwert und Standardabweichung pro Gruppe hervorgehoben

Weitere Varianten zum Violinenplot mit ggpubr finden sich hier.

Ein “Violinenplot” hat die gleiche Aussage wie ein Dichtediagramm: Je breiter die “Violine”, desto mehr Beobachtungen gibt es an dieser Stelle. Übrigens sind Modelle – und Diagramme sind Modelle – immer eine Vereinfachung, lassen also Informationen weg. Manchmal auch wichtige Informationen.

Dieses Beispiel zeigt, wie etwa Histogramme wichtige Informationen unter den Tisch fallen lassen. Ein weiteres R-Paket zur Erstellung ansprechender Datenvisualisierung heißt ggstatsplot. zeigt ein Histogramm, das mit ggstatsplot erstellt wurde.

library(ggstatsplot)

gghistostats(
  data       = mariokart_no_extreme,
  x          = total_pr,
  xlab       = "Verkaufspreis" 
  # results.subtitle = FALSE   # unterdrückt statist. Details
)
Abbildung 5.34: Ein Histogramm mit ggstatsplot

Die Menge der statistischen Kennzahlen bei ggstatsplot schindet ordentlich Eindruck. Möchte man auf die Kennzahlen verzichten, so nutzt man den Schalter results.subtitle = FALSE. (Weitere Hinweise finden sich auf der Hilfeseite der Funktion der Funktion.)

👩‍🏫 Ich würde gerne mal Beispiele von schlechten Datendiagrammen sehen.

🧑‍🎓 Auf der Seite von Flowingdata findet sich eine nette Liste mit schlechten Datendiagrammen.

5.10.3 Farbwahl

Einige Überlegungen zur Farbwahl findet sich bei Wilke (), Kap. 4. Die Farbpalette von Okabe und Ito ist (vgl. ) empfehlenswert, das sie über über optisch gut unterscheidbarer und klar benennbare Farben verfügt. Außerdem erlaubt sie bei Sehschwächen die Farben noch recht gut zu unterscheiden, s. . Möchte man sie für Schwarz-Weiß-Druck verwenden, kann man angeben, dass als erste Farbe Schwarz verwendet werden soll; dazu nutzt man den Paramter palette = "black_first". Alternativ kann man händisch eine helle Farbe und eine dunkle Farbe als Kontrast aussuchen.

mariokart %>% 
  filter(total_pr < 100) %>% 
  ggboxplot(x = "cond", y = "total_pr", fill = "cond") +
  scale_fill_okabeito(palette = "black_first")
  #scale_fill_manual(values = c("#0072B2", "#E69F00"))
Abbildung 5.35: Die Farbpalette von Okabe und Ito: Geeignet bei Farbseh-Schwächen. Außerdem nett anzuschauen.

Mit fill = cond erreicht man, dass die Füllfarbe der Variable cond zugeordnet wird: Jeder Wert von cond (new/used) bekommt eine eigene Farbe. Welche das ist, hängt vom verwendeten Farbschema ab. Hier wird das Farbscheme von Okabe und Ito verwendet ().

Übungsaufgabe 5.11 Schauen Sie sich die Farbpalette von Okabe und Ito einmal näher an, z. so:

Die Füllfarbe eines Diagramms, z. in , können Sie ändern, indem Sie scale_fill_okabeito ersetzen durch scale_fill_manual(values = c("#0072B2", "#E69F00")). Probieren Sie dabei verschiedene Farben aus.

5.11 Literaturhinweise

Sowohl ggpubr () als auch DataExplorer () (und viele andere R-Pakete) bauen auf dem R-Paket ggplot2 () auf. ggplot2 ist eines der am weitesten ausgearbeiteten Softwarepakete zur Erstellung von Datendiagrammen. Das Buch zur Software (vom Autor von ggplot2) ist empfehlenswert (). Eine neuere, gute Einführung in Datenvisualisierung findet sich bei Wilke (). Beide Bücher sind kostenfrei online lesbar. Wilke () gibt einen hervorragenden Überblick über praktische Aspekte der Datenvisualisierung; gut geeignet, wenn man mit R arbeitet. In ähnlicher Richtung geht Fisher & Meyer ().

Hier ist eine Liste von Büchern zum Thema; dort können Sie bei Interesse tiefer suchen.


  1. 5↩︎

  2. Grob gesagt: mariokart %>% plot_density().↩︎

  3. Quelle: ifes/FOM Hochschule, https://github.com/FOM-ifes/VL-Vorlesungsfolien↩︎

  4. Quelle: https://observablehq.com/@mcmcclur/the-normal-model↩︎

  5. Quelle: Aufbauend auf FOM/ifes, Autor: Norman Markgraf↩︎

  6. Quelle: https://observablehq.com/d/bb7ad3ecfb1ac2a6↩︎

  7. Übrigens: Freunde lassen Freunde nicht Balkendiagramme verwenden, um Mittelwerte darzustellen: https://github.com/cxli233/FriendsDontLetFriends#1-friends-dont-let-friends-make-bar-plots-for-means-separation.↩︎

  8. Der Quellcode der Animation ist hier zu finden: https://gist.github.com/rafapereirabr/0d68f7ccfc3af1680c4c8353cf9ab345.↩︎

  9. https://www.tylermw.com/wp-content/uploads/2019/06/featuredmeasles.mp4↩︎

  10. https://rpkgs.datanovia.com/ggpubr/reference/ggviolin.html↩︎

  11. https://www.autodesk.com/research/publications/same-stats-different-graphs↩︎

  12. https://github.com/IndrajeetPatil/ggstatsplot/blob/main/README.md↩︎

  13. https://github.com/IndrajeetPatil/ggstatsplot/blob/main/README.md#gghistostats↩︎

  14. https://flowingdata.com/category/visualization/ugly-visualization/↩︎