vignettes/03_Deskriptive_Statistik.Rmd
03_Deskriptive_Statistik.Rmd
Deskriptive Statistiken sind wichtig für einen ersten Überblick über die Daten und werden fast immer in Papern oder in Abschlussarbeiten verlangt. Auch wird der Umgang mit fehlenden Werten in diesem Kapitel beschrieben.
Wir nehmen wieder den Datensatz aus dem letzten Kapitel mit den fünf
Persönlichkeitsfaktoren. Das skimr
Package enthält die
Funktion skim()
, die wir wie gewohnt in einer Pipe
ausführen können. Zuerst laden wir das Package.
Der Funktion muss kein weiteres Argument übergeben werden, weil alle Spalten analysiert werden. Es werden Informationen über Zeilen- und Spaltenzahl, Anzahl an fehlenden Werten, übliche deskriptive Maße sowie ein Histogram über die Verteilung der jeweiligen Werte ausgegeben – für einen ersten Überblick optimal. Da der Output im Internet und im PDF nicht richtig abgebildet werden kann, wird der Output hier ausgespart. Aber probiere es selbst einmal.
Natürlich können wir auch hier mit group_by()
den
Datensatz in die jeweiligen Untergruppen unterteilen.
Es gibt selbstververständlich auch eine Funktion aus dem
tidyverse
für die deskriptive Statistik. Möchten wir die
Anzahl der Personen, den Mittelwert des Alters, deren
Standardabweichung, den Standardfehler sowie Maximum und Minimum
ausgegeben haben, benutzen wir summarise()
big_five %>%
summarise(N = n(),
Mittelwert = mean(Alter),
SD = sd(Alter),
SE = SD / sqrt(N),
Minimum = min(Alter),
Maximum = max(Alter))
## # A tibble: 1 × 6
## N Mittelwert SD SE Minimum Maximum
## <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 200 45.9 195. 13.8 13 1995
mit n()
für die Anzahl, mean()
für den
Mittelwert, sd()
für die Standardabweichung,
sqrt()
für die Quadratwurzel, min()
für das
Minimum und max()
für das Maximum. Schauen wir uns den
Output einmal genauer an. Was ist denn da mit dem Alter los? Maximales
Alter ist 1995? Da hat wohl jemand sein Geburtsjahr und nicht sein Alter
in Jahren angegeben. Schauen wir mal, ob mehrere unrealistische Alter
angegeben wurden.
## # A tibble: 2 × 8
## Alter Geschlecht Herkunft Extraversion Neurotizismus Vertrae…¹ Gewis…² Offen…³
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1964 f JO 3.2 2.3 3.4 3.6 3.5
## 2 1995 f PH 2.5 3.7 3.8 3.1 3.9
## # … with abbreviated variable names ¹Vertraeglichkeit, ²Gewissenhaftigkeit,
## # ³Offenheit
Wie man sieht, haben nur zwei Personen das Eintragen falsch
verstanden. Ändern wir das mit der bereits gelernten
if_else()
Funktion kurz ab. Für alle Personen, die ein
Alter größer als 150 eingetragen haben, wird 2018 minus das angegebene
Geburtsjahr gerechnet und für die Restlichen nur das richtig
eingetragene Alter zurückgegeben.
Für die selben Statistiken pro Geschlecht benutzen wir wieder
group_by()
.
big_five %>%
group_by(Geschlecht) %>%
summarise(N = n(),
Mittelwert = mean(Alter),
SD = sd(Alter),
SE = SD / sqrt(N),
Minimum = min(Alter),
Maximum = max(Alter))
## # A tibble: 2 × 7
## Geschlecht N Mittelwert SD SE Minimum Maximum
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 f 118 25.9 11.3 1.04 14 60
## 2 m 82 27.3 11.3 1.25 13 59
Wir merken sofort, wie eng die Datenvorbereitung mit der deskriptiven Statistik verknüpft ist. In der Regel merkt man erst beim Erkunden des Datensatzes, was noch alles verändert werden muss, damit man die geplanten Rechnung durchführen kann.
Nun kommen wir zur alles entscheidenen Frage: Wer hat denn nun die
Tipprunde gewonnen? Zur schöneren Ausgabe benutzen wir die bereits
kennengelernte arrange()
Funktion.
tipp_wm %>%
group_by(Person) %>%
summarise(Gesamtpunktzahl = sum(Punkte)) %>%
arrange(desc(Gesamtpunktzahl))
## # A tibble: 6 × 2
## Person Gesamtpunktzahl
## <chr> <dbl>
## 1 Alice 50
## 2 Bob 49
## 3 Charlie 48
## 4 Thomas_Bayes 48
## 5 Jerzy_Neyman 40
## 6 Egon_Pearson 33
Alice hat gewonnen! Juhu! :)
Was aber nun, wenn nicht alle Werte vorhanden sind? Im Datensatz zur Tipp WM haben manche Tipper teilweise vergessen, ihren Tipp abzugeben. Solche fehlenden Werte nennt man NAs (not available). NAs können zu Fehlermeldungen führen. Es gibt verschiedene Möglichkeiten, mit NAs umzugehen. Welche man verwendet, hängt stark vom Kontext ab.
Möchte man zum Beispiel nur den Mittelwert einer Variable berechnen,
kann man bei der Funktion mean()
das Argument
na.rm
auf TRUE
setzen.
## # A tibble: 1 × 1
## Mittelwert
## <dbl>
## 1 0.698
Alternativ kann man mit na.omit()
auch sämtliche NAs im
ganzen Datensatz entfernen. Aber Vorsicht, es werden alle Zeilen
entfernt, in denen auch nur ein einziger Wert fehlt. Angenommen man
möchte sich zwei untersuchte Variablen genauer anschauen und in den
beiden Spalten selbst fehlen kaum Werte. Es kann aber gut sein, dass Du
ausserdem eine sozio-demographische Spalte (zum Beispiel Alter) erhoben
hast. In dieser Spalte fehlen nun einige Werte. Für die Untersuchung
Deiner beiden Variablen spielt diese Spalte aber gar keine Rolle. Die
Funktion würde trotzdem alle Variablen entfernen. Im Datensatz
tipp_wm_wide
würden von 64 Zeilen lediglich 47 übrig
bleiben.
## # A tibble: 47 × 7
## Thomas_Bayes Egon_Pearson Jerzy_Neyman Alice Bob Charlie Ergebnis
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 2:0 1:0 2:1 2:1 3:1 2:1 5:0
## 2 1:3 0:0 0:2 1:2 0:2 0:2 0:1
## 3 0:0 0:2 1:1 1:1 2:1 1:1 0:1
## 4 1:2 1:1 2:1 2:4 2:2 1:0 3:3
## 5 0:2 1:2 0:2 1:2 2:1 1:2 0:1
## 6 4:0 1:2 3:0 1:0 3:0 4:0 2:0
## 7 2:1 0:0 1:1 1:1 0:1 1:0 0:1
## 8 3:0 1:0 2:0 3:1 3:1 2:0 0:1
## 9 2:1 2:0 1:1 2:1 2:0 3:1 1:1
## 10 1:1 1:0 1:0 2:1 1:0 2:1 1:0
## # … with 37 more rows
Sei Dir dessen also bewusst. Die meisten induktiven Verfahren regeln NAs allerdings von selbst.