7  Deskriptive Statistiken

Die nächsten drei Kapitel geben eine kurze Einführung in ausgewählte statistische Funktionen in R, die für empirische Analysen in den Wirtschaftswissenschaften zentral sind. Im Fokus steht dabei ausschließlich die praktische Anwendung in R. Der Umfang der behandelten Funktionen und Verfahren ist jedoch sehr beschränkt. Für eine tiefergehendere Auseinandersetzung mit Ökonometrie in R siehe Introduction to Econometrics with R von Hanck et al.

Die theoretischen Grundlagen der Verfahren sowie die inhaltliche Interpretation der Ergebnisse werden in dieser R-Einführung nicht behandelt. Hier stehen jedoch viele Lehrbücher über die Fernuni-Bibliothek oder auch online zur Verfügung. Einen guten Überblick bietet hier Introductory Econometrics: A Modern Approach von Jeffrey Wooldridge. Im Bereich der Kausalinferenz-Methoden beinhaltet das frei verfügbare Lehrbuch Causal Inference: The Mixtape von Scott Cunningham neben theoretischen Einblicken in die unterschiedlichen Ansätze auch Anwendungsbeispiele in R.

Um die statistischen Methoden in R besser kennenzulernen, verwenden wir in den meisten Fällen den Datensatz wage1 aus dem wooldridge-Package. Dieser enthält Querschnittsdaten zu Löhnen, Bildung und weiteren sozioökonomischen Merkmalen von 526 Erwerbstätigen aus dem US Current Population Survey (1976):

library(tidyverse)
library(wooldridge)
wage1 <- wage1 |>
  as_tibble() |>
  select(wage, educ, exper, female, married)
glimpse(wage1)
#> Rows: 526
#> Columns: 5
#> $ wage    <dbl> 3.10, 3.24, 3.00, 6.00, 5.30, 8.75, 11.25, 5.00, 3.60, 18.1…
#> $ educ    <int> 11, 12, 11, 8, 12, 16, 18, 12, 12, 17, 16, 13, 12, 12, 12, …
#> $ exper   <int> 2, 22, 2, 44, 7, 9, 15, 5, 26, 22, 8, 3, 15, 18, 31, 14, 10…
#> $ female  <int> 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,…
#> $ married <int> 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1,…

Die wesentlichen Variablen sind der Stundenlohn (wage in USD), Bildungsjahre (educ), Berufserfahrung (exper) in Jahren sowie die binären Indikatoren für Geschlecht (female) und Familienstand (married).

7.1 Statistische Kennzahlen

Die Funktionen für viele der wesentlichen statistischen Kennzahlen (etwa Mittelwert oder Varianz) haben wir bereits in Kapitel 3 kennengelernt. Diese werden hier nochmal kurz wiederholt

7.1.1 Lagemaße

Das arithmetische Mittel und der Median beschreiben die zentrale Tendenz einer Verteilung:

mean(wage1$wage)    # Arithmetisches Mittel
#> [1] 5.896103
median(wage1$wage)  # Median (50. Perzentil)
#> [1] 4.65

Der Mittelwert des Stundenlohns liegt bei ca. 5,90 USD, der Median bei 4,65 USD — die rechtsschiefe Lohnverteilung lässt sich daran bereits erkennen. Quantile ermöglichen eine genauere Betrachtung der Verteilung. Mit quantile() können wir beliebige Perzentile berechnen:

quantile(wage1$wage, probs = c(0.25, 0.5, 0.75))  # Quartile
#>  25%  50%  75% 
#> 3.33 4.65 6.88
quantile(wage1$wage, probs = c(0.1, 0.9, 0.99))   # weitere Perzentile
#>    10%    90%    99% 
#>  2.920 10.000 19.995

7.1.2 Streuungsmaße

Varianz und Standardabweichung messen, wie stark die Beobachtungen um den Mittelwert streuen:

var(wage1$wage)   # Varianz
#> [1] 13.63888
sd(wage1$wage)    # Standardabweichung
#> [1] 3.693086

Minimum und Maximum geben den Wertebereich einer Variable an:

min(wage1$wage)
#> [1] 0.53
max(wage1$wage)
#> [1] 24.98
range(wage1$wage) # Minimum und Maximum gleichzeitig
#> [1]  0.53 24.98

7.1.3 Überblick mit summary() und summarize()

Für einen schnellen Überblick über alle Kennzahlen bietet sich summary() an, das Minimum, Maximum, Quartile und Mittelwert auf einmal ausgibt:

summary(wage1$wage)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   0.530   3.330   4.650   5.896   6.880  24.980

Um deskriptive Statistiken für mehrere Variablen gleichzeitig und nach Gruppen getrennt zu berechnen, können wir die aus Kapitel 3 bekannte summarize()-Funktion nutzen. Möchten wir etwa Mittelwert und Standardabweichung des Lohns nach Geschlecht vergleichen:

wage1 |>
  summarize(
    mean_wage = mean(wage),
    sd_wage = sd(wage),
    n = n(),
    .by = female
  )
#> # A tibble: 2 × 4
#>   female mean_wage sd_wage     n
#>    <int>     <dbl>   <dbl> <int>
#> 1      1      4.59    2.53   252
#> 2      0      7.10    4.16   274

7.2 Der t-Test

t-Tests prüfen, ob der Mittelwert signifikant von einem bestimmten Wert abweicht (Einstichproben-t-Test) oder ob sich zwei Gruppen in ihrem Mittelwert signifikant unterscheiden (Zweistichproben- und gepaarter t-Test). In R werden alle drei Varianten mit t.test() durchgeführt.

7.2.1 Einstichproben t-Test

Mit einem Einstichproben t-Test testen wir, ob der Mitterlwert einer Variable signifikant von einem bestimmten Wert abweicht. Der mittlere Stundenlohn weicht zum Beispiel signifikant von 5 USD:

t.test(wage1$wage, mu = 5)
#> 
#>  One Sample t-test
#> 
#> data:  wage1$wage
#> t = 5.5649, df = 525, p-value = 4.186e-08
#> alternative hypothesis: true mean is not equal to 5
#> 95 percent confidence interval:
#>  5.579768 6.212437
#> sample estimates:
#> mean of x 
#>  5.896103

7.2.2 Zweistichproben t-Test

Zweistichproben t-Tests untersuchen Unterschiede in den Mittelwerten zwischen Gruppen. So kann man testen, ob sich die mittleren Stundenlöhne von Frauen und Männern signifikant unterscheiden. Mit y ~ gruppe können wir direkt auf Variablen im Datensatz zugreifen:

t.test(wage ~ female, data = wage1)
#> 
#>  Welch Two Sample t-test
#> 
#> data:  wage by female
#> t = 8.44, df = 456.33, p-value = 4.243e-16
#> alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
#> 95 percent confidence interval:
#>  1.926971 3.096690
#> sample estimates:
#> mean in group 0 mean in group 1 
#>        7.099489        4.587659

Die t-Statistik und der p-Wert deuten darauf hin, dass Frauen (female = 1) im Datensatz einen signifikant niedrigeren Stundenlohn erhalten als Männer.

7.2.3 Gepaarter t-Test

Gepaarte t-Tests kommen zum Einsatz, wenn zwei Messungen an denselben Einheiten vorliegen (z.B. Vor- und Nachmessungen). Da der wage1-Datensatz keine solchen Paare enthält, zeigen wir die Syntax exemplarisch:

t.test(vorher, nachher, paired = TRUE)
HinweisEinseitige vs. zweiseitige Tests

Per Default führt t.test() einen zweiseitigen Test durch (alternative = "two.sided"). Mit alternative = "greater" bzw. alternative = "less" können einseitige Tests spezifiziert werden.

7.3 Korrelationen

Korrelationskoeffizienten messen die Stärke und Richtung des linearen Zusammenhangs zwischen zwei metrischen Variablen. In R wird die Korrelation mit cor() berechnet, statistische Signifikanztests liefert cor.test():

cor(wage1$wage, wage1$educ)
#> [1] 0.4059033
cor.test(wage1$wage, wage1$educ, method = "pearson")
#> 
#>  Pearson's product-moment correlation
#> 
#> data:  wage1$wage and wage1$educ
#> t = 10.167, df = 524, p-value < 2.2e-16
#> alternative hypothesis: true correlation is not equal to 0
#> 95 percent confidence interval:
#>  0.3319280 0.4749166
#> sample estimates:
#>       cor 
#> 0.4059033

Der Spearman-Rangkorrelationskoeffizient ist eine robuste Alternative, die keine Normalverteilung voraussetzt und auch für ordinale Variablen geeignet ist:

cor.test(wage1$wage, wage1$educ, method = "spearman")
#> 
#>  Spearman's rank correlation rho
#> 
#> data:  wage1$wage and wage1$educ
#> S = 13151898, p-value < 2.2e-16
#> alternative hypothesis: true rho is not equal to 0
#> sample estimates:
#>       rho 
#> 0.4577694

Werden mehr als zwei Variablen angegeben, ergibt sich eine Korrelationsmatrix:

wage1 |>
  select(wage, educ, exper) |>
  cor()
#>            wage       educ      exper
#> wage  1.0000000  0.4059033  0.1129034
#> educ  0.4059033  1.0000000 -0.2995418
#> exper 0.1129034 -0.2995418  1.0000000