5  Kenngrößen und Beschreibung von Verteilungen in R

Übersicht Dataframes für diese Folien

Name Inhalt
d_ns_m Monatswerte für Niederschläge in Bochum
d_ns_m_2008 Monatswerte im Jahr 2008 (Bochum)
d_ns_m_2010 Monatswerte im Jahr 2010 (Bochum)
d_ns_m_0810 Monatswerte in den Jahren 2008 und 2010 (Bochum)
d_ns_m_nha_trang_2015 Monatswerte der Niederschläge in Nha Trang 2015

Quellen: https://www.dwd.de und https://www.gso.gov.vn

5.1 Kenngrößen von Verteilungen berechnen

Berechnung von Kenngrößen

Lagemaße

Funktion Berechnet
mean(x) Arithmetisches Mittel
median(x) Median

Keine Funktionen für Modus und geometrisches/harmonisches Mittel

Streumaße

Funktion Berechnet
max(x) - min(x) Spannweite \(R\)
var(x) Empirische Varianz \(\tilde{s}^2\)
sd(x) Empirische Standardabweichung \(\tilde{s}\)

Keine Funktion für AD-Streuung

Spalten von Dataframes mit $

Dataframe

d <- tibble(
  A = c(1, 2, 3, 4, 5, 6),
  B = c(1, 2, 1, 2, 1, 2)
)

Spalten der beiden Merkmale

d$A
[1] 1 2 3 4 5 6
d$B
[1] 1 2 1 2 1 2

\(\rightarrow\) Merkmal X von Dataframe d als Array mit d$X

Kenngrößen für Merkmale

Merkmal A

Lagemaße
mean(d$A)
[1] 3.5
median(d$A)
[1] 3.5
Streumaße
max(d$A) - min(d$A)
[1] 5
var(d$A)
[1] 3.5
sd(d$A)
[1] 1.870829

Merkmal B

Lagemaße
mean(d$B)
[1] 1.5
median(d$B)
[1] 1.5
Streumaße
max(d$B) - min(d$B)
[1] 1
var(d$B)
[1] 0.3
sd(d$B)
[1] 0.5477226

Mit echten Daten…

Niederschlag in Bochum

Beobachtungszeitraum: Spannweite von Merkmal Jahr

max(d_ns_m$Jahr) - min(d_ns_m$Jahr)
[1] 86

Mittelwert, Median und Standardabweichung

Im Jahr 2008
mean(d_ns_m_2008$Niederschlag)
[1] 72.45
median(d_ns_m_2008$Niederschlag)
[1] 71.8
sd(d_ns_m_2008$Niederschlag)
[1] 22.23447
Im Jahr 2010
mean(d_ns_m_2010$Niederschlag)
[1] 73.05
median(d_ns_m_2010$Niederschlag)
[1] 70.15
sd(d_ns_m_2010$Niederschlag)
[1] 46.71366

(Zahlenwerte aus dem Skript)

Bestimmte Werte darstellen mit geom_vline() und geom_hline()

Minimalbeispiel (mit Dataframe)

d <- tibble(A = c(1, 2, 3), B = c(0, 4, 5))
ggplot(data = d) +
  geom_hline(mapping = aes(yintercept = A)) + geom_vline(mapping = aes(xintercept = B))

  • Schnittpunkte mit Achsen via xintercept bzw. yintercept

Minimalbeispiel (mit Zahlenwerten)

ggplot() +
  geom_hline(yintercept = c(1, 2, 3)) + geom_vline(xintercept = c(0, 4, 5))

  • Werte können auch direkt angegeben werden (anstatt aus Dataframe)
  • Dann kein Mapping erforderlich

Mit echten Daten…

Histogramm mit Mittelwert

ggplot(data = d_ns_m) +
  geom_histogram(mapping = aes(x = Niederschlag), binwidth = 10, boundary = 0) +
  geom_vline(xintercept = mean(d_ns_m$Niederschlag), color = "red")

  • Ohne c(...) wenn nur ein Wert dargestellt werden soll
  • Linienfarbe mit color

Mit emp. Verteilungsfunktion

ggplot(data = d_ns_m) +
  geom_step(mapping = aes(x = Niederschlag), stat = "ecdf") +
  geom_hline(yintercept = c(0.2, 0.5, 0.9), color = "blue")

Monatsniederschläge mit Mittelwert

ggplot(data = d_ns_m_0810, mapping = aes(x = Monat, y = Niederschlag, group = Jahr, color = Jahr)) +
  geom_hline(yintercept = mean(d_ns_m_0810$Niederschlag)) +
  geom_line() + geom_point()

  • 3 Layer übereinander, Reihenfolge beachten
  • Linien mit geom_line() (später im Detail)

Abweichungen vom Mittelwert

nmw <- mean(d_ns_m_0810$Niederschlag)
ggplot(data = d_ns_m_0810) +
  geom_col(mapping = aes(x = Monat, y = Niederschlag - nmw, fill = Jahr))

  • Mittelwert abziehen
  • Säulen nebeneinander mit position = "dodge

5.2 Quantile berechnen mit quantile()

Funktion quantile()

d <- tibble(X = c(1, 2, 2, 4, 4, 6, 6, 6, 9, 10, 10, 12, 13, 13, 13, 16, 17, 18, 19, 20))
quantile(d$X, probs = c(0.2, 0.25, 0.5, 0.9), type = 2)
 20%  25%  50%  90% 
 4.0  5.0 10.0 18.5 

Funktionsweise

  • Gesuchte Quantilen mit probs = c(...) angeben
  • Es gibt verschiedene Definitionen der Quantilwerte
  • Unsere Definition mit type = 2
  • Ergebnis ist ein Named Vector

Quantile und emp. Verteilungsfunktion

p <- c(0.2, 0.25, 0.5, 0.9)
q <- quantile(d$X, p, type = 2)
ggplot(data = d) +
  geom_hline(yintercept = p, color = "blue") + geom_vline(xintercept = q, color = "red") +
  geom_step(mapping = aes(x = X), stat = "ecdf")

  • Werte und Quantile in Variablen p und q

5.3 Boxplots mit geom_boxplot()

Monatliche Niederschläge Bochum (alle Jahre)

ggplot(data = d_ns_m) +
  geom_boxplot(mapping = aes(y = Niederschlag))

  • Merkmal für y-Koordinate

Monatliche Niederschläge Bochum (2008 und 2010)

ggplot(data = d_ns_m_0810) +
  geom_boxplot(mapping = aes(x = Jahr, y = Niederschlag))

  • Mehrere Boxplots mit Angabe von Merkmal für x-Koordinate
  • Funktioniert nur für diskretes Merkmal (Details später)

Monatliche Niederschläge (alle Jahre einzeln) 1/2

ggplot(data = d_ns_m) +
  geom_boxplot(mapping = aes(x = Jahr, y = Niederschlag))

Warum funktioniert das nicht?

  • Merkmal Jahr jetzt mit vielen verschiedenen Ausprägungen
  • Für ggplot ist das dann ein kontinuierliches Merkmal
  • Angabe von x wird ignoriert, nur eine Box!

Monatliche Niederschläge (alle Jahre einzeln) 2/2

ggplot(data = d_ns_m) +
  geom_boxplot(mapping = aes(x = factor(Jahr), y = Niederschlag))

  • Mit factor(Jahr) kennzeichnen, dass Jahr diskretes Merkmal

5.4 Lorenzkurve und Gini-Koeffizient

Aus dem Paket ineq (installieren)

Beispiel aus dem Skript

Lorenzkurve berechnen

d <- tibble(A = c(4, 4, 4, 4, 4), B = c(1, 1, 1, 1, 16), C = c(2, 3, 4, 5, 6))
lc_A <- Lc(d$A)
lc_B <- Lc(d$B)
lc_C <- Lc(d$C)
  • Funktion Lc aus Paket ineq

Ergebnis

lc_B$p
[1] 0.0 0.2 0.4 0.6 0.8 1.0
lc_B$L
[1] 0.00 0.05 0.10 0.15 0.20 1.00
  • Koordinaten \(u_j\) mit $p und \(v_j\) mit $L

Als Dataframe (Details später)

Eigene Funktion um Ergebnis von Lc in Dataframe zu konvertieren

lc_to_tibble <- function(lc) { tibble(u = lc$p, v = lc$L) }

Beispiel

lc_to_tibble(lc_B)
  • Eigene Funktion um Dataframe aus Ergebnis von Lc zu erzeugen
  • Details hierzu später

Bänder mit geom_ribbon()

Minimalbeispiel 1/2

d <- tibble(A = c(1, 2, 3, 4), B = c(1, 0, 1, 3), C = c(3, 5, 6, 5))
ggplot(data = d) + geom_ribbon(mapping = aes(x = A, ymin = B, ymax = C))

  • Plottet Bereich zwischen Wertepaaren ymin und ymax

Minimalbeispiel 2/2

ggplot(data = d) +
  geom_ribbon(mapping = aes(x = A, ymax = C, ymin = 0))

  • Es kann auch ein fester Wert angegeben werden

Lorenzkurve Merkmal A (Skript)

ggplot(data = lc_to_tibble(lc_A)) +
  geom_ribbon(mapping = aes(x = u, ymin = v, ymax = u), color = "black", fill = "linen") +
  geom_point(mapping = aes(x = u, y = v))

  • Farben mit color und fill

Lorenzkurve Merkmal B (Skript)

ggplot(data = lc_to_tibble(lc_B)) +
  geom_ribbon(mapping = aes(x = u, ymin = v, ymax = u), color = "black", fill = "linen") +
  geom_point(mapping = aes(x = u, y = v))

  • Farben mit color und fill

Lorenzkurve Merkmal C (Skript)

ggplot(data = lc_to_tibble(lc_C)) +
  geom_ribbon(mapping = aes(x = u, ymin = v, ymax = u), color = "black", fill = "linen") +
  geom_point(mapping = aes(x = u, y = v))

  • Farben mit color und fill

Mit echten Daten…

Niederschläge Bochum (2008)

d <- Lc(d_ns_m_2008$Niederschlag)
ggplot(data = lc_to_tibble(d)) +
  geom_ribbon(mapping = aes(x = u, ymin = v, ymax = u), color = "black", fill = "linen") +
  geom_point(mapping = aes(x = u, y = v))

Niederschläge Nha Trang (2015)

d <- Lc(d_ns_m_nha_trang_2015$Niederschlag)
ggplot(data = lc_to_tibble(d)) +
  geom_ribbon(mapping = aes(x = u, ymin = v, ymax = u), color = "black", fill = "linen") +
  geom_point(mapping = aes(x = u, y = v))

Gini-Koeffizient

Wieder aus dem Paket ineq (jetzt installiert)

Minimalbeispiel

Gini(c(0, 0, 0, 0, 1))
[1] 0.8
Gini(c(1, 1, 1, 2, 3))
[1] 0.25
Gini(c(1, 1, 1, 1, 1))
[1] 0
Gini(c(10, 10, 10, 10, 10))
[1] 0
  • Berechnung des Gini-Koeffizienten mit Gini(<Werte>)
  • Der Wert wird nicht normiert
  • Normierung auf \(G^*\) falls notwendig mit Faktor \(n / (n - 1)\)

Niederschläge

Gini-Koeffizienten Bochum und Nha Trang

Gini(d_ns_m_2008$Niederschlag)
[1] 0.1656315
Gini(d_ns_m_nha_trang_2015$Niederschlag)
[1] 0.7196082

Lorenz-Münzer-Koeffizienten Bochum und Nha Trang

12 / 11 * Gini(d_ns_m_2008$Niederschlag)
[1] 0.1806889
12 / 11 * Gini(d_ns_m_nha_trang_2015$Niederschlag)
[1] 0.7850271

5.5 Zusammenfassung

Linien: geom_hline() & geom_vline()

Werte aus Dataframe

ggplot(data = d) +
  geom_hline(mapping = aes(yintercept = <M>), Argumente) +
  geom_vline(mapping = aes(xintercept = <M>), Argumente)

Werte direkt angegeben

ggplot() +
  geom_hline(yintercept = c(...), Argumente) +
  geom_vline(xintercept = c(...), Argumente)
AES/Argumente Beschreibung Optional
xintercept Schnittpunkte mit x-Achse Nein
yintercept Schnittpunkte mit y-Achse Nein
color Linienfarbe Ja
size Linienstärke Ja

Boxplots mit geom_boxplot()

ggplot(data = d) +
  geom_boxplot(mapping = aes(x = <M>, y = <M>), Argumente)

AES Beschreibung Optional
x Merkmal für x-Achse (diskret) Ja
y Merkmal, das dargestellt werden soll Nein

Argumente Beschreibung
varwidth Breite entsprechend Anzahl Werte (TRUE oder FALSE)

Bänder mit geom_ribbon()

ggplot(data = d) +
  geom_ribbon(mapping = aes(x = <M>, ymin = <M>, ymax = <M>), Argumente)

AES Beschreibung Optional
x Position auf x-Achse Nein
ymin Unterer Wert Nein
ymax Oberer Wert Nein

Argumente Beschreibung
color Linienfarbe
fill Füllfarbe