Kapitel 5 Deskriptive Statistik

5.1 Metrische Variablen

In R gibt es wie gesagt viele Pakete. Eines davon, es heißt rstatix (nicht unbedingt kreativ, der Name), birgt eine Reihe komfortabler Befehle der deskriptiven Statistik.

Starten wir also dieses Paket rstatix.

Dazu klicken Sie den Namen des Pakets einfach an, s. Abbildung 5.1.

Wenn angehakt, ist das Paket gestartet.

Figure 5.1: Wenn angehakt, ist das Paket gestartet.

Alternativ können Sie auch diesen Befehl eingeben:

library("rstatix")

Zur Erinnerung: Sie müssen dieses Paket installiert haben, sonst können Sie es nicht starten.

So, jetzt geht es rund:

get_summary_stats(mtcars)
## # A tibble: 11 × 13
##    variable     n   min    max median     q1     q3    iqr     mad    mean
##    <chr>    <dbl> <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>   <dbl>
##  1 am          32  0      1      0      0      1      1      0       0.406
##  2 carb        32  1      8      2      2      4      2      1.48    2.81 
##  3 cyl         32  4      8      6      4      8      4      2.96    6.19 
##  4 disp        32 71.1  472    196.   121.   326    205.   140.    231.   
##  5 drat        32  2.76   4.93   3.70   3.08   3.92   0.84   0.704   3.60 
##  6 gear        32  3      5      4      3      4      1      1.48    3.69 
##  7 hp          32 52    335    123     96.5  180     83.5   77.1   147.   
##  8 mpg         32 10.4   33.9   19.2   15.4   22.8    7.38   5.41   20.1  
##  9 qsec        32 14.5   22.9   17.7   16.9   18.9    2.01   1.42   17.8  
## 10 vs          32  0      1      0      0      1      1      0       0.438
## 11 wt          32  1.51   5.42   3.32   2.58   3.61   1.03   0.767   3.22 
## # … with 3 more variables: sd <dbl>, se <dbl>, ci <dbl>
## # ℹ Use `colnames()` to see all variable names

Der Befehl get_summary_stats(name_einer_tabelle) liefert einen Haufen Statistiken zurück. Braucht das überhaupt ein Mensch, so viel Zeugs? Na gut, wir sind nicht hier, um über den Sinn der Statistik zu diskutieren (muss man als gegeben hinnehmen, nicht wahr?).

Jedenfalls spuckt der Befehl so viele Statistiken aus, dass sie gar nicht auf meinen Bildschirm passen. Positiv gesagt: Alles da, was das Herz des Datenfreundes höher schlagen lässt. Ja,ja, ich weiß, Sie können jetzt nur schwer ruhig bleiben vor Aufregung.

Übrigens kann man get_summary_stats(name_einer_tabelle) auch noch einstellen, so dass weniger Statistiken gezeigt werden.

Klicken Sie mal im Reiter Help auf das Feld mit der Lupe und geben Sie den Namen der Funktion ein, also get_summary_stats. Dann kommt eine Hilfeseite, s. Abbildung 5.2.

Hier werden Sie geholfen. Die R-Hilfe für jede R-Funktion.

Figure 5.2: Hier werden Sie geholfen. Die R-Hilfe für jede R-Funktion.

Nach einigem Lesen sehen wir bei Arguments: type. Probieren wir doch mal ein bisschen was aus:

get_summary_stats(mtcars, type = "mean_sd")
## # A tibble: 11 × 4
##    variable     n    mean      sd
##    <chr>    <dbl>   <dbl>   <dbl>
##  1 am          32   0.406   0.499
##  2 carb        32   2.81    1.62 
##  3 cyl         32   6.19    1.79 
##  4 disp        32 231.    124.   
##  5 drat        32   3.60    0.535
##  6 gear        32   3.69    0.738
##  7 hp          32 147.     68.6  
##  8 mpg         32  20.1     6.03 
##  9 qsec        32  17.8     1.79 
## 10 vs          32   0.438   0.504
## 11 wt          32   3.22    0.978

Ah, das ist schon übersichtlicher! Für jede der 11 Variablen in der Tabelle werden jetzt nur noch 3 Statistiken angezeigt:

  • n (wie viele Beobachtungen?)
  • mean (Mittelwert)
  • sd (Standardabweichung)

5.2 Nominale Variablen

Mit dem Befehl freq_table(name_der_tabelle, name_der_spalte, name_der_spalte) können wir uns Häufigkeiten (frequencies) in Tabellenform ausgeben lassen. Nett!

freq_table(mtcars, am, cyl)
## # A tibble: 6 × 4
##      am   cyl     n  prop
##   <dbl> <dbl> <int> <dbl>
## 1     0     4     3  15.8
## 2     0     6     4  21.1
## 3     0     8    12  63.2
## 4     1     4     8  61.5
## 5     1     6     3  23.1
## 6     1     8     2  15.4

5.3 Subgruppenanalyse

Aber was ist, wenn wir eine Subgruppenanalyse machen möchten? Was ist z.B. der mittlere Spritverbrauch in der Gruppe der Automatikautos (am=0)?

Um eine Subgruppenanalyse zu bekommen, können wir so vorgehen:

  1. Gruppiere den Datensatz entsprechend den Gruppen (Stufen der Variable am, also automatisch und manuelles Getriebe)
  2. Berechne dann die deskriptiven Statistiken. Die Ergebnisse werden die Gruppierung berücksichtigen.

Grau ist alle Theorie; probieren wir’s aus:

mtcars <- group_by(mtcars, am)  # wir gruppieren `mtcars` entlang der Variable `am`

Okay, die Tabelle ist jetzt gruppiert.

Jetzt kommt die normale Berechnung der deskriptiven Statistiken, also genau wie oben:

get_summary_stats(mtcars, mpg, type = "robust")
## # A tibble: 2 × 5
##      am variable     n median   iqr
##   <dbl> <chr>    <dbl>  <dbl> <dbl>
## 1     0 mpg         19   17.3  4.25
## 2     1 mpg         13   22.8  9.4

Hier haben wir die deskriptive Analyse auf eine Spalte begrenzt, nämlich mpg (Spritverbrauch). Außerdem haben wir “robuste” Statistiken angefordert, was uns den Median (Lagemaß) und den IQR (Streuungsmaß) beschert hat.

Möchten man den Datensatz wieder “ungruppieren” (die Gruppierung auflösen/löschen), so geht das auf plausiblem Wege:

mtcars <- ungroup(mtcars)

So sieht dann das ungruppierte Ergebnis aus, nicht so spannend:

get_summary_stats(mtcars, mpg, type = "robust")
## # A tibble: 1 × 4
##   variable     n median   iqr
##   <chr>    <dbl>  <dbl> <dbl>
## 1 mpg         32   19.2  7.38

Und dann wieder Häufigkeiten, weil, warum nicht:

freq_table(mtcars, cyl)
## # A tibble: 3 × 3
##     cyl     n  prop
##   <dbl> <int> <dbl>
## 1     4    11  34.4
## 2     6     7  21.9
## 3     8    14  43.8

5.4 Vertiefung: Datenjudo dplyr

Taucht man etwas tiefer in die Datenanalyse ein, so tauchen früher oder später (meist früher) Probleme des “Datenjudo” auf:

  • Man möchte fehlende Werte ersetzen
  • Man möchte Werte umkodieren
  • Man muss die Tabelle umformatieren

Für Aufgaben solcher Art ist das R-Paket dplyr bestens geeignet.

Einführungen finden sich z.B. im Kapitel 3 von Ismay and Kim (2019) oder Kapitel 7 und 9 bei Sauer (2019).

5.5 Literaturhinweise

In englischer Sprache findet sich ein Überblick an deskriptiver Statistik mit R aus angewandter Perspektive bei Cetinkaya-Rundel and Hardin (2021), Kapitel 4-6. Alternativ bietet Sauer (2019) einen Überblick (Kapitel 8).

Literatur

Cetinkaya-Rundel, Mine, and Johanna Hardin. 2021. Introduction to Modern Statistics. https://openintro-ims.netlify.app/.
Ismay, Chester, and Albert Kim. 2019. ModernDive - An Introduction to Statistical and Data Sciences via R.” http://moderndive.com/.
Sauer, Sebastian. 2019. Moderne Datenanalyse Mit R: Daten Einlesen, Aufbereiten, Visualisieren Und Modellieren. 1. Auflage 2019. FOM-Edition. Wiesbaden: Springer. https://www.springer.com/de/book/9783658215866.