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

1. Kenngrößen von Verteilungen berechnen

Berechnung von Kenngrößen

Lagemaße

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

Keine eingebauten Funktionen für Modus und geometrisches/harmonisches Mittel (selber definieren)

Streumaße

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

Variationskoeffizient \(v\) aus sd(x)/mean(x) berechnen, keine eingebaute 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)
)
kable(d)
A B
1 1
2 2
3 1
4 2
5 1
6 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)

2. 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) + 
  geom_hline(yintercept = mean(d_ns_m_0810$Niederschlag)) +
  geom_line(mapping=aes(x=Monat,y=Niederschlag,group=Jahr,color=Jahr)) + 
  geom_point(mapping=aes(x=Monat, y=Niederschlag, color=Jahr))

  • 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))

  • Säulen nebeneinander mit position = "dodge

3. 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

4 Boxplots mit geom_boxplot()

Niederschlag Bochum

Monatliche Niederschläge (alle Jahre)

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

  • Merkmal für y-Koordinate

Monatliche Niederschläge (Jahre 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))
Warning: Continuous x aesthetic
ℹ did you forget `aes(group = ...)`?

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. Lorenzkurve

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)

Funktion um Ergebnis von Lc in Dataframe zu konvertieren

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

Beispiel

kable(lc_to_tibble(lc_B))
u v
0.0 0.00
0.2 0.05
0.4 0.10
0.6 0.15
0.8 0.20
1.0 1.00
  • Eigene Funktion um Dataframe aus Ergebnis von Lc zu erzeugen
  • Details hierzu später

6. Bänder mit geom_ribbon()

Minimalbeispiel 1/2

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

  • Plottet Bereich zwischen Wertepaaren

Minimalbeispiel 2/2

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

  • Es kann auch ein fester Wert angegeben werden
  • Anmerkung: Das geht auch mit anderen Geoms

Lorenzkurve Merkmal A (Skript S.45)

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

  • Farben mit color und fill

Lorenzkurve Merkmal B (Skript S.45)

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 S.45)

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)

lc_bochum <- Lc(d_ns_m_2008$Niederschlag)
ggplot(data = lc_to_tibble(lc_bochum)) +
  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)

lc_nha_trang <- Lc(d_ns_m_nha_trang_2015$Niederschlag)
ggplot(data = lc_to_tibble(lc_nha_trang)) +
  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(1, 1, 1, 1, 1))
[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

8. 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