Berechnung einfacher deskriptiver Statistiken

Berechnung einfacher deskriptiver Statistiken

Eine der ersten Datenexplorationen, die man für gewöhnlich vornimmt, sind Berechnungen von Mittelwert, Minimum und Maximumwerten, etc. In R gibt es dazu eine Menge vorprogrammierter Funktionen, allerdings wollen wir auch nochmals üben, diese manuell zu berechnen. Wir erstellen zunächst einen Beispieldatensatz mit Studierendendaten:

Eine der ersten Datenexplorationen, die man für gewöhnlich vornimmt, sind Berechnungen von Mittelwert, Minimum und Maximumwerten, etc. In R gibt es dazu eine Menge vorprogrammierter Funktionen, allerdings wollen wir auch nochmals üben, diese manuell zu berechnen. Wir nehmen den gleichen Datensatz wie vorherigen Kapitel, fügen jedoch noch eine Spalte Geschlecht hinzu:

df <- data.frame(
  Id = seq(1, 15, 1),
  Name = c("Anna", "Stephan", "Ina", "Matthias", "Katrin", 
           "Lisa", "Thomas", "Sarah", "Michael", "Julia",
           "Marie", "Peter", "Laura", "Daniel", "Sophie"),
  Studiengang = as.factor(c("Biologie", "Informatik", "Biologie", "Informatik", "Geographie",
                           "Biologie", "Informatik", "Geographie", "Informatik", "Biologie",
                           "Geographie", "Informatik", "Biologie", "Informatik", "Geographie")),
  Alter = c(25, 22, 19, 29, 17,
            25, 22, 19, 29, 22,
            25, 29, 19, 22, 17),
  groesse_m = c(1.75, 1.60, 1.83, 1.95, 1.67,
                1.70, 1.85, 1.65, 1.90, 1.68,
                1.72, 1.88, 1.69, 1.82, 1.66))
df
   Id     Name Studiengang Alter groesse_m
1   1     Anna    Biologie    25      1.75
2   2  Stephan  Informatik    22      1.60
3   3      Ina    Biologie    19      1.83
4   4 Matthias  Informatik    29      1.95
5   5   Katrin  Geographie    17      1.67
6   6     Lisa    Biologie    25      1.70
7   7   Thomas  Informatik    22      1.85
8   8    Sarah  Geographie    19      1.65
9   9  Michael  Informatik    29      1.90
10 10    Julia    Biologie    22      1.68
11 11    Marie  Geographie    25      1.72
12 12    Peter  Informatik    29      1.88
13 13    Laura    Biologie    19      1.69
14 14   Daniel  Informatik    22      1.82
15 15   Sophie  Geographie    17      1.66

Berechnung von minimum und maximum

Die Berechnung von minimum und maximum kann über entsprechende Funktionen vorgenommen werden. Wir wollen diese für die Variable Alter berechnen:

min(df$Alter)
[1] 17
max(df$Alter)
[1] 29

Berechnung von minimum und maximum über mehrere Variablen across

Die Berechnungen oben sind korrekt, aber visuell sind sie nicht besonders ansprechend. Zudem müssen wir für jede Variable (z.B. haben wir neben der Variable Alter auch noch die Variable groesse_m) die Funktionen separat eingeben.

Über das Paket tidyverse können wir dies über mehrere Variablen vornehmen. Die dazu benötigten Funktionen heißen summarise() und across. Die Funktion summarise() beschreibt, dass wir eine Variable zusammenfassen wollen, z.B., mittels der Berechunung von Minimum oder Maximum Werten. Die Syntax dafür ist folgende:

minAll <- df %>% summarise(across(c(Alter, groesse_m), \(x) min(x, na.rm = TRUE)))
minAll
  Alter groesse_m
1    17       1.6

Man kann nun einige Sachen erkennen:

  1. Die Funktion across() braucht mehrere Argumente: (1) Ein Vektor mit den Variablennamen, die zusammengefasst werden soll. Der Vektor wird via c() definiert. (2) eine Lambda-Funktion \(x), die die Art der Zusammenfassung definiert. Das \(x) ist eine moderne R Syntax für anonyme Funktionen und x repräsentiert die jeweilige Variable. Innerhalb der Funktion können wir dann na.rm = TRUE spezifizieren, um NA Werte zu ignorieren.
  2. Wir benutzen wieder den %>%-Operator um die Operation sequentiell ausführen zu können.
  3. Der Output ist sauber formatiert

Eine weitere Erweiterung ist, dass wir mehrere Parameter schrittweise berechnen und zu einer strukturierten Tabelle zusammenfügen können:

# Einzelne Parameter berechnen und mit Parameter-Spalte versehen
minTab <- df %>% summarise(across(c(Alter, groesse_m), \(x) min(x, na.rm = TRUE))) %>% mutate(Parameter = "Minimum")
maxTab <- df %>% summarise(across(c(Alter, groesse_m), \(x) max(x, na.rm = TRUE))) %>% mutate(Parameter = "Maximum") 
meanTab <- df %>% summarise(across(c(Alter, groesse_m), \(x) mean(x, na.rm = TRUE))) %>% mutate(Parameter = "Mittelwert")

# Alle Parameter zu einer übersichtlichen Tabelle zusammenfügen
allParams <- rbind(minTab, maxTab, meanTab)
allParams
     Alter groesse_m  Parameter
1 17.00000  1.600000    Minimum
2 29.00000  1.950000    Maximum
3 22.73333  1.756667 Mittelwert

Manuelle Berechnung der Parameter

Die Nutzung der Funktionen ist hilfreich, aber nichtsdetotrotz ist es wichtig, Variablen in R auch manuell berechnen zu können. Dies ist wichtiger im Fall des Mittelwertes als im Fall von Minimum und Maximum. Im Fall des Mittelwerts ergibt sich folgender Code:

# Berechnung der Summe aller Alterswerte
alterAll <- sum(df$Alter)
# Berechnung der Zeilen
n <- nrow(df)
# Berechnung des Mittelwerts
mw <- alterAll / n
mw
[1] 22.73333

Vergleich mit der R-Funktion

Wir können unsere manuelle Berechnung mit der eingebauten R-Funktion vergleichen:

# Vergleich: manuelle vs. R-Funktion
print(paste("Manuell berechnet:", mw))
[1] "Manuell berechnet: 22.7333333333333"
print(paste("R-Funktion:", mean(df$Alter)))
[1] "R-Funktion: 22.7333333333333"

Erweitern der Tabelle um weitere Parameter

Wir können unsere Tabelle jederzeit um weitere Parameter erweitern. Hier fügen wir noch den Median hinzu:

# Weiteren Parameter berechnen
medianTab <- df %>% summarise(across(c(Alter, groesse_m), \(x) median(x, na.rm = TRUE))) %>% mutate(Parameter = "Median")

# An bestehende Tabelle anhängen
umfassendeStatistik <- rbind(allParams, medianTab)
umfassendeStatistik
     Alter groesse_m  Parameter
1 17.00000  1.600000    Minimum
2 29.00000  1.950000    Maximum
3 22.73333  1.756667 Mittelwert
4 22.00000  1.720000     Median

Diese Methode des schrittweisen Aufbauens einer Ergebnistabelle ermöglicht es uns:

  1. Jeden Parameter einzeln zu berechnen und zu kontrollieren
  2. Die Tabelle übersichtlich zu gestalten mit einer Parameter-Spalte
  3. Flexibel weitere Parameter hinzuzufügen
  4. Die Ergebnisse gut zu interpretieren

In den folgenden Kapiteln werden wir diese Technik für weitere wichtige Parameter wie Varianz, Standardabweichung, Schiefe und Wölbung anwenden.