4  Deskriptive Statistik

I keep saying the sexy job in the next ten years will be statisticians. People think I’m joking, but who would’ve guessed that computer engineers would’ve been the sexy job of the 1990s?

Hal Varian, Chief Economist bei Google

Viele der Kennzahlen für deskriptive statistischen Analysen haben wir schon in den vorangegangenen Kapitel an der ein oder anderen Stelle kennengelernt. Dieses Kapitel soll einen zusammenhängenden Überblick über die aus der Statistikvorlesung bekannten Maße geben. Ein wichtiger Teil der deskriptiven Statistik ist die Visualisierung von Häufigkeiten und Kennzahlen. In diesem Kapitel werden einige Darstellungsmöglichkeiten kurz gezeigt; die systematische und ausführliche Einführung in Visualisierungsprinzipien folgt in Kapitel Kapitel 5.

4.1 Häufigkeiten und empirische Verteilungen

Der erste Schritt zur Beschreibung von Daten für ein besseres Verständnis ist typischerweise die Analyse von Häufigkeiten oder Häufigkeitsverteilungen.

4.1.1 Absolute Häufigkeiten

Eine Variable

Absolute Häufigkeiten – geeignet für nominal- und kardinal skalierte Merkmale – können wir mit Hilfe der table Funktion auszählen. So ergeben sich zum Beispiel die Anzahl der abgehenden Flüge je Flughafen in NYC in 2013 als

flights_origin_freq <- table(flights$origin)
flights_origin_freq

   EWR    JFK    LGA 
120835 111279 104662 
flights_origin_df <- as.data.frame(flights_origin_freq)
names(flights_origin_df) <- c("origin", "n")

Das Resultat dieser Berechnung ist ein Objekt vom Typ table

str(flights_origin_freq)
 'table' int [1:3(1d)] 120835 111279 104662
 - attr(*, "dimnames")=List of 1
  ..$ : chr [1:3] "EWR" "JFK" "LGA"

Ein table Objekt ist einfach ein Vektor oder eine Matrix.

WichtigAchtung

Auch für metrische Merkmale kann der table Befehl verwendet werden, R berechnet ganz analog eine Häufigkeitstabelle. Bei metrischen Merkmalen mit sehr vielen verschiedenen Ausprägungen kann die Berechnung allerdings sehr lange dauern und die Ausgabe sehr groß werden. Da die Ausgabe ohnehin nicht sehr aussagekräftig ist, sollte für metrische Merkmale normalerweise keine table erstellt werden.

Zur Veranschaulichung lassen sich Häufigkeiten durch Balken- bzw. Stabdiagramme und Tortendiagramme darstellen. Für eine konsistente Darstellungslogik verwenden wir hier ggplot2. Ein Balkendiagramm der Anzahl Flüge je Flughafen können wir aus der Häufigkeitstabelle mit Hilfe des Befehls

ggplot(flights_origin_df, aes(x = origin, y = n)) +
  geom_col(fill = "steelblue") +
  labs(x = "Flughafen", y = "Absolute Häufigkeit")
Abbildung 4.1: Balkendiagramm zur Veranschaulichung der absoluten Häufigkeiten von Flügen je Flughafen

erstellen. Abbildung 4.1 zeigt das Resultat. Ein Stabdiagramm erhält man mit

ggplot(flights_origin_df, aes(x = origin, y = n)) +
  geom_linerange(aes(ymin = 0, ymax = n), linewidth = 1.2, color = "steelblue4") +
  geom_point(size = 2.5, color = "steelblue4") +
  labs(x = "Flughafen", y = "Absolute Häufigkeit")
Abbildung 4.2: Stabdiagramm zur Veranschaulichung der absoluten Häufigkeiten von Flügen je Flughafen

Das Ergebnis zeigt Abbildung 4.2.

Ein Tortendiagramm bzw. Pie-Chart erhalten wir mit

ggplot(flights_origin_df, aes(x = "", y = n, fill = origin)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  labs(x = NULL, y = NULL, fill = "Flughafen") +
  theme_void()
Abbildung 4.3: Torten zur Veranschaulichung der absoluten Häufigkeiten von Flügen je Flughafen

In Abbildung 4.3 ist das Ergebnis dargestellt.

Zwei Variablen

Absolute Häufigkeiten lassen sich auch über mehr als eine Dimension abfragen. Möchten wir herausfinden, wie viele Flüge an jedem Flughafen mit mehr als 15 Minuten Verspätung abgeflogen sind, können wir dies erreichen durch

table(Origin = flights$origin,
      Delay_gt15 = flights$dep_delay > 15)
      Delay_gt15
Origin FALSE  TRUE
   EWR 88654 28942
   JFK 86766 22650
   LGA 82327 19182

Fehlende Werte (NA) werden von der table Funktion standardmäßig ignoriert. Möchten wir sie mit ausgeben, geht dies über das Argument useNA. Dabei gibt es die Optionen "no" (Standard, NA werden ignoriert), " ifany" (NA werden angegeben, falls welche vorliegen) und " always" (NA werden immer angegeben, auch wenn keine vorliegen).

table(Origin = flights$origin,
      DepDelay_gt15 = flights$dep_delay > 15,
      useNA = "ifany")
      DepDelay_gt15
Origin FALSE  TRUE  <NA>
   EWR 88654 28942  3239
   JFK 86766 22650  1863
   LGA 82327 19182  3153
table(Origin = flights$origin,
      DepDelay_gt15 = flights$dep_delay > 15,
      useNA = "always")
      DepDelay_gt15
Origin FALSE  TRUE  <NA>
  EWR  88654 28942  3239
  JFK  86766 22650  1863
  LGA  82327 19182  3153
  <NA>     0     0     0

Als Möglichkeit für eine graphische Darstellung für Häufigkeiten über zwei Dimensionen bietet sich eine Heatmap an. Ein Beispiel für die Anzahl Flüge nach Flughafen des Abflugs und Fluggesellschaft zeigt Abbildung 4.4.

origin_carrier <- table(Carrier = flights$carrier,
                        Origin = flights$origin,
                        useNA = "ifany")
origin_carrier
       Origin
Carrier   EWR   JFK   LGA
     9E  1268 14651  2541
     AA  3487 13783 15459
     AS   714     0     0
     B6  6557 42076  6002
     DL  4342 20701 23067
     EV 43939  1408  8826
     F9     0     0   685
     FL     0     0  3260
     HA     0   342     0
     MQ  2276  7193 16928
     OO     6     0    26
     UA 46087  4534  8044
     US  4405  2995 13136
     VX  1566  3596     0
     WN  6188     0  6087
     YV     0     0   601
origin_carrier_df <- as.data.frame(origin_carrier)
ggplot(origin_carrier_df, aes(x = Origin, y = Carrier, fill = Freq)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "grey95", high = "steelblue4") +
  labs(x = "Abflughafen", y = "Fluggesellschaft", fill = "Anzahl")
Abbildung 4.4: Heatmap zur Veranschaulichung der absoluten Häufigkeiten von zwei Dimensionen

Mehr als zwei Variablen

Auch mit mehr als zwei Dimensionen funktioniert table noch, die Ausgabe wird dann allerdings unübersichtlich.

table(Month = flights$month,
      Origin = flights$origin,
      DepDelay_gt15 = flights$dep_delay > 15,
      useNA = "no")
, , DepDelay_gt15 = FALSE

     Origin
Month  EWR  JFK  LGA
   1  7319 7581 6665
   2  6616 6350 5928
   3  7259 7624 6858
   4  7564 7164 6693
   5  7536 7282 6962
   6  6742 6619 6030
   7  7100 6688 6269
   8  7809 7625 7035
   9  8050 7566 7727
   10 8262 7959 8148
   11 8106 7593 7415
   12 6291 6715 6597

, , DepDelay_gt15 = TRUE

     Origin
Month  EWR  JFK  LGA
   1  2336 1480 1102
   2  1992 1678 1126
   3  2794 1888 1550
   4  2707 1870 1664
   5  2807 2007 1639
   6  3056 2610 2177
   7  3096 3124 2208
   8  2373 2265 1734
   9  1357 1250 1172
   10 1750 1149 1385
   11 1520 1081 1320
   12 3154 2248 2105

Besser geht dies mit ftable:

ftable(Month = flights$month,
       Origin = flights$origin,
       Delay_gt15 = flights$dep_delay > 15)
             Delay_gt15 FALSE TRUE
Month Origin                      
1     EWR                7319 2336
      JFK                7581 1480
      LGA                6665 1102
2     EWR                6616 1992
      JFK                6350 1678
      LGA                5928 1126
3     EWR                7259 2794
      JFK                7624 1888
      LGA                6858 1550
4     EWR                7564 2707
      JFK                7164 1870
      LGA                6693 1664
5     EWR                7536 2807
      JFK                7282 2007
      LGA                6962 1639
6     EWR                6742 3056
      JFK                6619 2610
      LGA                6030 2177
7     EWR                7100 3096
      JFK                6688 3124
      LGA                6269 2208
8     EWR                7809 2373
      JFK                7625 2265
      LGA                7035 1734
9     EWR                8050 1357
      JFK                7566 1250
      LGA                7727 1172
10    EWR                8262 1750
      JFK                7959 1149
      LGA                8148 1385
11    EWR                8106 1520
      JFK                7593 1081
      LGA                7415 1320
12    EWR                6291 3154
      JFK                6715 2248
      LGA                6597 2105

4.1.2 Relative Häufigkeiten

Zunächst lassen sich relative Häufigkeiten natürlich sehr einfach berechnen, indem man durch die entsprechende Summe der Beobachtungen teilt, also mit

table(flights$origin)/length(flights$origin)

      EWR       JFK       LGA 
0.3587993 0.3304244 0.3107763 

oder

table(flights$origin)/sum(table(flights$origin))

      EWR       JFK       LGA 
0.3587993 0.3304244 0.3107763 
WichtigAchtung

Beim Befehl table(flights$origin)/length(flights$origin) ist Vorsicht geboten! Während die table Funktion standardmäßig fehlende Werte ignoriert, werden sie bei length mitgezählt. Damit kann das Resultat nicht dem gewünschten Ergebnis entsprechen.

Genauso können relative Häufigkeiten aus jedem table Objekt mit Hilfe der prop.table Funktion extrahiert werden.

prop.table(table(flights$origin))

      EWR       JFK       LGA 
0.3587993 0.3304244 0.3107763 

Alternativ funktioniert auch wieder die Schreibweise mit Pipes

flights %>% select(origin) %>% table %>% prop.table
origin
      EWR       JFK       LGA 
0.3587993 0.3304244 0.3107763 

Mit dem Argument margin gibt man an, ob sich die relativen Häufigkeiten (im zweidimensionalen Fall) zeilenweise (margin = 1), spaltenweise (margin = 2) oder insgesamt zu 100% aufsummieren sollen (Standardwert margin = NULL).

tab_delays <- table(Origin = flights$origin,
                    Delay_gt15 = flights$dep_delay > 15)
prop.table(tab_delays, margin = 1)
      Delay_gt15
Origin     FALSE      TRUE
   EWR 0.7538862 0.2461138
   JFK 0.7929919 0.2070081
   LGA 0.8110315 0.1889685
prop.table(tab_delays, margin = 2)
      Delay_gt15
Origin     FALSE      TRUE
   EWR 0.3439574 0.4089355
   JFK 0.3366324 0.3200328
   LGA 0.3194101 0.2710317
prop.table(tab_delays)
      Delay_gt15
Origin      FALSE       TRUE
   EWR 0.26985794 0.08809787
   JFK 0.26411097 0.06894536
   LGA 0.25059890 0.05838896

Die Tabelle inklusive Randhäufigkeiten erhält man mit addmargins

addmargins(tab_delays)
      Delay_gt15
Origin  FALSE   TRUE    Sum
   EWR  88654  28942 117596
   JFK  86766  22650 109416
   LGA  82327  19182 101509
   Sum 257747  70774 328521
tab_delays %>% prop.table %>% addmargins
      Delay_gt15
Origin      FALSE       TRUE        Sum
   EWR 0.26985794 0.08809787 0.35795581
   JFK 0.26411097 0.06894536 0.33305633
   LGA 0.25059890 0.05838896 0.30898786
   Sum 0.78456781 0.21543219 1.00000000

oder nur die Randhäufigkeiten über margin.table

margin.table(tab_delays, margin = 1)
Origin
   EWR    JFK    LGA 
117596 109416 101509 

Eine weitere Möglichkeit für die Erstellung von Kreuztabellen bietet die Funktion xtabs, welche als Input auch Formeln verwenden kann, die wir aber erst in Kapitel 7 kennenlernen werden.

4.1.3 Häufigkeitsverteilung von metrischen Variablen

Häufigkeitsverteilungen für metrische Variablen werden typischerweise über eine vorgeschobene Klassenbildung ermittelt und mittels eines Histogramms oder der empirischen Verteilungsfunktion dargestellt.

Klassierung

Die Funktion cut “schneidet” bzw. teilt eine metrische Variable in Klassen ein und ordnet jeder Beobachtung dann die jeweilige Klasse zu. Möchten wir also die Dauer der verspäteten Ankünfte der Flüge in 60-Minuten-Intervalle unterteilen, erhalten wir

flights$arr_delay_cat <- cut(flights$arr_delay,
                             breaks = seq(-90,1320,60))
table(Delay = flights$arr_delay_cat,
      Origin = flights$origin)
                     Origin
Delay                   EWR   JFK   LGA
  (-90,-30]            6582  9473  6697
  (-30,30]            90303 83027 79765
  (30,90]             13642 11287 10046
  (90,150]             4169  3368  2818
  (150,210]            1494  1213  1050
  (210,270]             584   427   433
  (270,330]             223   171   191
  (330,390]              86    65    83
  (390,450]              23    23    24
  (450,510]               8     5    17
  (510,570]               2     1     2
  (570,630]               1     3     4
  (630,690]               3     2     2
  (690,750]               0     1     1
  (750,810]               2     4     3
  (810,870]               2     4     2
  (870,930]               2     0     2
  (930,990]               0     2     0
  (990,1.05e+03]          0     1     0
  (1.05e+03,1.11e+03]     1     0     0
  (1.11e+03,1.17e+03]     0     1     0
  (1.17e+03,1.23e+03]     0     0     0
  (1.23e+03,1.29e+03]     0     1     0

Dabei erzeugt die cut Funktion eine neue Variable, welche vom Typ factor ist und ein Faktorlevel je gebildeter Klasse enthält, der als jeweils mit der Definition des Intervalls bezeichnet wird:

str(flights$arr_delay_cat)
 Factor w/ 23 levels "(-90,-30]","(-30,30]",..: 2 2 3 2 2 2 2 2 2 2 ...
TippTipp

Für die Bestimmung der Klassengrenzen in der cut Funktion können Hilfsfunktionen genutzt werden. In dem gezeigten Beispiel wurden gleich breite Klassen bzw. deren Klassengrenzen mit Hilfe der seq Funktion hergeleitet. Genauso lassen sich gleichgroße Klassen mit Hilfe von Quantilen (also der quantile Funktion) bestimmen. Eine weitere nützliche Funktionen in diesem Zusammenhang ist pretty für schöne “runde” Zahlen als Klassengrenzen.

Ein Beispiel für die Verwendung von Quantilen als Klassengrenzen ist in Abbildung 4.5 dargestellt. Der dazugehörige Code lautet:

flights$arr_delay_cat <- cut(flights$arr_delay,
                             breaks = quantile(flights$arr_delay, 
                                               probs = seq(0,1,0.1),
                                               na.rm = TRUE))
levels(flights$arr_delay_cat) <- 1:10
tbl_delay <- table(Origin = flights$origin,
                   Delay = flights$arr_delay_cat)
tbl_delay
      Delay
Origin     1     2     3     4     5     6     7     8     9    10
   EWR 10689 11949 11832 10040 11981 12372 11992 10887 12459 12925
   JFK 13880 11640 10977  9377 10907 11104 10571  9721 10546 10356
   LGA 11065 11651 10587  8757 10240 10368 10372  9427  9631  9042
tbl_delay_df <- as.data.frame(prop.table(tbl_delay, margin = 2))
colnames(tbl_delay_df) <- c("Origin", "Delay", "Share")
ggplot(tbl_delay_df, aes(x = Delay, y = Share, fill = Origin)) +
  geom_col() +
  scale_y_continuous(labels = scales::label_percent()) +
  labs(x = "Quantil", y = "Relativer Anteil", fill = "Abflughafen")
Abbildung 4.5: Dezile der Ankunftsverspätungen je Flughafen

Histogramm

Die hist Funktion berechnet Histogramme. Auch hier können wieder über breaks die Klassengrenzen angegeben werden. Es sind allerdings auch Algorithmen zur optimalen Klassenwahl hinterlegt, wie diejenigen von Sturges (1926), Scott (1979) (bzw. Scott (1992)) oder Freedman und Diaconis (1981). Mit ggplot2 lässt sich dieselbe Idee über geom_histogram umsetzen (vgl. Abbildung 4.6).

ggplot(flights, aes(x = arr_delay)) +
  geom_histogram(aes(y = after_stat(density)), bins = 60, fill = "grey80", color = "white") +
  coord_cartesian(xlim = c(-100, 500)) +
  labs(x = "Verspätung in Minuten", y = "Dichte")
Warning: Removed 9430 rows containing non-finite outside the scale range
(`stat_bin()`).
Abbildung 4.6: Histogramm der Ankunftsverspätungen

An dieser Stelle wollen wir aber nicht weiter auf die Details der grafischen Darstellung eingehen, Kapitel 5 wird sich intensiv mit diesem Thema beschäftigen.

Empirische Verteilungsfunktion

Die empirische Verteilungsfunktion ist in R in Form der Funktion ecdf implementiert

ecdf(flights$arr_delay)
Empirical CDF 
Call: ecdf(flights$arr_delay)
 x[1:577] =    -86,    -79,    -75,  ...,   1127,   1272

Diese lässt sich auch mit Hilfe der plot Funktion grafisch darstellen (vgl. Abbildung 4.7).

plot(ecdf(flights$arr_delay),
     verticals = TRUE,
     do.points = FALSE,
     main = "",
     xlab = "Verspätung in Minuten",
     xlim = c(-100,500))
Abbildung 4.7: Empirische Verteilungsfunktion der Ankunftsverspätungen

Als weitere Darstellung der Verteilung von metrischen Variablen kennen wir aus der Statistikvorlesung Boxplots. Boxplots der Verspätungen je Monat sind in Abbildung 4.8 dargestellt.

outliers <- flights$arr_delay > 60
flights_box <- flights[!is.na(flights$arr_delay) & !outliers, ]
ggplot(flights_box, aes(x = factor(month), y = arr_delay)) +
  geom_boxplot(fill = "grey85") +
  labs(x = "Monat", y = "Verspätung in Minuten")
Abbildung 4.8: Boxplots der Ankunftsverspätungen je Monat
VorsichtÜbung

Häufigkeiten

  1. Ermitteln Sie die kombinierte Häufigkeitstabelle aus den Daten der Verkehrszählstelle Neutor für das Wetter und die Temperatur. Bestimmen Sie die relativen Häufigkeiten und geben Sie die Randhäufigkeiten mit an.
  2. Stellen Sie die Häufigkeitsverteilung der Temperatur und der Windstärke mit Hilfe eines Histogramms und mit Boxplots dar.

4.2 Lage- und Streuungsmaße

Bereits in Kapitel 2 und Kapitel 3 haben wir gesehen, wie sich statistische Kennzahlen von Vektoren, Matrizen oder Data Frames berechnen lassen. An dieser Stelle folgt ein zusammenhängender Überblick über Lage- und Streuungsmaße und deren Verwendung in R.

4.2.1 Lagemaße

Tabelle 4.1 listet die wichtigsten Lagemaße auf und die Funktion, mit der Sie in R aufgerufen werden können. Nicht jedes Maß ist tatsächlich in den Standardfunktionen enthalten, aber ein geometrisches Mittel beispielsweise lässt sich sehr einfach implementieren.

Tabelle 4.1: Funktionen zur Berechnung von Lagemaßen in R
Lagemaß Funktion
arithmetisches Mittel mean
Median median
Quantile quantile
Modus keine Standardfunktion
Geometrisches Mittel keine Standardfunktion
Harmonisches Mittel keine Standardfunktion

4.2.2 Streuungsmaße

Tabelle 4.2 listet die wichtigsten Streuungsmaße auf, welche in den Standardbibliotheken in R implementiert sind. Weitere sind in entsprechenden spezialisierten Paketen zu finden.

Tabelle 4.2: Funktionen zur Berechnung von Streuungsmaßen in R
Streuungsmaß Funktion
Spannweite range
Varianz var
Standardabweichung sd
Mittlere Absolute Abweichung (MAD) mad
Interquartilsabstand IQD

Die Anwendung der Lage- und Streuungsmaße ist typischerweise auf einen Zahlenvektor ausgelegt, kann aber auf ganze Datensätze (je Spalte) oder gruppenweise (auf eine Auswahl von Zeilen) wie in Kapitel 2.3.2 oder Kapitel 3.3.2 beschrieben angewendet werden.

VorsichtÜbung

Lage- und Streuungsmaße

  1. Schreiben Sie eine Funktion zur Berechnung des geometrischen Mittels. Berechnen Sie mit Hilfe Ihrer Funktion die durchschnittliche monatliche Wachstumsrate der Anzahl Flugpassagiere zwischen 1949 und 1960 aus dem AirPassengers Datensatz.
  2. Bestimmen Sie alle geeigneten Lage- und Streuungsmaße aus Tabelle 4.1 respektive Tabelle 4.2 für die stündliche Temperatur an der Zählstelle Neutor.

4.3 Zusammenhangsmaße

Die wichtigste Funktion in R zur Messung von Zusammenhängen ist cor. Mit ihr lassen sich der Korrelationskoeffizient nach (Bravais-)Pearson, der Korrelationskoeffizient nach Spearman und Kendalls Tau berechnen (steuerbar über die Option method und deren mögliche Werte "pearson", "kendall" oder "spearman".

Es lassen sich Korrelationen von zwei Variablen bestimmen (über Angabe zweier Vektoren x und y), aber auch paarweise Korrelationen von mehr als zwei Variablen (über die Angabe einer Matrix oder eines Data Frames x).

Falls fehlende Werte vorhanden sind, kann mit dem Argument use entschieden werden, wie mit den fehlenden Werten umgegangen wird:

  • " everything": alle Beobachtungen werden verwendet und das Ergebnis der Berechnung ist NA falls einer der Werte NA ist
  • " all.obs": alle Beobachtungen werden verwendet und die Funktion gibt einen Fehler zurück, falls fehlende Werte vorhanden sind
  • "complete.obs": nur Beobachtungspaare ohne fehlende Werte werden berücksichtigt; falls es keine Paare ohne fehlenden Wert gibt, wird ein Fehler zurückgegeben
  • "na.or.complete": gleiche Funktionalität wie "complete.obs", allerdings gibt die Funktion in diesem Fall ein NA zurück, falls es keine Beobachtungspaare ohne fehlenden Wert gibt
  • "pairwise.complete.obs": es werden nur Beobachtungen berücksichtigt, die bei allen Variablen keine NA enthalten (Unterschied zu "complete.obs" also nur bei mehr als zwei Variablen)

Ein Beispiel für den iris Datensatz:

cor(iris[,1:4], method = "pearson")
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
cor(iris[,1:4], method = "kendall")
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   1.00000000 -0.07699679    0.7185159   0.6553086
Sepal.Width   -0.07699679  1.00000000   -0.1859944  -0.1571257
Petal.Length   0.71851593 -0.18599442    1.0000000   0.8068907
Petal.Width    0.65530856 -0.15712566    0.8068907   1.0000000
cor(iris[,1:4], method = "spearman")
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1667777    0.8818981   0.8342888
Sepal.Width    -0.1667777   1.0000000   -0.3096351  -0.2890317
Petal.Length    0.8818981  -0.3096351    1.0000000   0.9376668
Petal.Width     0.8342888  -0.2890317    0.9376668   1.0000000

Korrelationsmatrizen sind häufig schwer zu lesen, vor allem wenn sie eine große Anzahl Variablen enthalten. Abhilfe schafft eine Visualisierung der Korrelationsstruktur durch ein sogenanntes Korrelogramm: In einer Matrix werden die Korrelationen durch Einfärbungen oder Tortendiagramme ähnlich wie in einer Heatmap grafisch dargestellt. In R bietet das Paket corrgram eine solche Darstellung (Wright 2021). Das Beispiel für den iris Datensatz zeigt Abbildung 4.9.

corrgram(iris[,1:4],
         order=TRUE,
         lower.panel=panel.shade,
         upper.panel=panel.pie,
         cor.method = "pearson")
Abbildung 4.9: Korrelogramm für den iris Datensatz
VorsichtÜbung

Zusammenhangsmaße

  1. Ermitteln Sie die ein geeignetes Korrelationsmaß für den Zusammenhang zwischen Windstärke und Temperatur je Stunde aus den Daten der Verkehrszählstelle Neutor.
  2. Stellen Sie die Korrelationen zwischen Anzahl gezählter Fahrräder (gesamt, stadteinwärts und stadtauswärts), Temperatur und Windstärke grafisch dar.