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.
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.
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:
- Gruppiere den Datensatz entsprechend den Gruppen (Stufen der Variable
am
, also automatisch und manuelles Getriebe) - Berechne dann die deskriptiven Statistiken. Die Ergebnisse werden die Gruppierung berücksichtigen.
Grau ist alle Theorie; probieren wir’s aus:
<- group_by(mtcars, am) # wir gruppieren `mtcars` entlang der Variable `am` mtcars
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:
<- ungroup(mtcars) 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).