Kapitel 5 Streuungsmasse
5.1 Varianz und Standardabweichung
Wenn wir wissen wollen, wie die Daten um den Mittelwert gestreut sind, genügt es nicht, nur die Spannweite (d.h. kleinster und grösster Wert) anzugeben. Wir möchten die Abstände der einzelnen Daten zum Mittelwert zusammenfassen (zumindest bei intervallskalierten Daten, die einigermassen normalverteilt sind). Nichts einfacher als das. Schauen wir uns einmal folgendes Beispiel in Abbildung 4.1 an. Wir sehen 10 Zahlen. Die vertikale Ausrichtung hat hier keine Bedeutung, und ist nur für die besser visuelle Darstellung so gewählt. Die horizontale Position entspricht dem Wert jeder Zahl. Wir haben den Mittelwert eingezeichtet. Wenn wir nun von jedem Wert den Mittelwert abziehen, und davon den Mittelwert berechnen (obere Formel in Abbildung 4.1) würde dies Null ergeben. Dies ist nicht Zufall, sondern immer so: Der Mittelwert ist ja gerade so definiert, dass die Summe aller Abstände Null ergibt. Anders ausgedrückt: die Summe der negativen Zahlen ist gleich gross wie die Summe der positiven Zahlen. Wir könnten nun einfach den absoluten Wert der Differenz nehmen. Die Statistiker haben jedoch einen anderen Weg gewählt: Sie quadrieren die Differenzen (untere Formel) und berechnen davon den Durchschnitt. Diese Kennzahl nennt man die Varianz. Um das Streuungsmass wieder in der gleichen Einheit wie die Originalskala zu haben, zieht man nun die Quadratwurzel und erhält so die Standardabweichung. Bemerkung: Die hier gezeigt Formel wäre die Varianz einer Population. Da wir jedoch meistens eine Stichprobe haben, sollten wir eigentlich durch n-1 teilen. Warum? Das erfahren Sie im Masterstudium oder für die ganz interessierten hier.
Die Standardabweichung kann benutzt werden, wenn wir mindestens intervallskalierte Daten haben, die annähernd normalverteilt sind. Für ordinale Daten oder intervallskalierte Daten die schief verteilt sind oder extreme Werte aufweisen, eignet sich die Interquartilzone besser. Dazu müssen wir aber den Begriff der Percentilen, Quantile und Quartile kennen lernen.
5.2 Interquartilsbereich
- Die Perzentile, oder auch Prozentränge genannt, teilt eine Datenmenge in 1-% Bereiche auf. Die 5. Perzentile sagt, dass 5% der Daten (Personen) unterhalb diesem Wert liegen. die 95%. Perzentile sagt, dass 95% unterhalb diesem Wert liegen.
- Das Quantil ist ein Schwellenwert, das besagt, welcher Anteil der Personen unter einem bestimmten Wert liegen. Das 0.5 oder 50%-Quantil sagt, dass 50% der Werte (Daten) unterhalb und 50% der Daten oberhalb des 50%-Quantil liegen. Die 50. Perzentile entspricht dem 50%-Quantil. Beim 90%-Quantil (90. Perzentile) liegen 90% der Werte unterhalb und 10% der Werte oberhalb.
- Es gibt drei Quartile, das 1. Quartile entspricht dem 0.25 (oder 25%) Quantil (25. Perzentile), das 2. Quartil entspricht dem 0.5 oder 50% Quantile (50. Perzentile, Median). Das 3. Quartil entspricht dem 0.75 (75%) Quantil (75. Perzentile).
- Die Interquartilszone oder der Interquartilsbereich (engl.: Interquartile Range, IQR) entspricht der Intervall zwischen dem 1. und 3. Quartil. Man gibt jedoch am besten immer das 1. und 3. Quartil an, da dieser Bereich nicht symmetrisch um die 50. Perzentile verteilt sein muss. Es kann sogar sein, dass das 1. Quartil mit dem 50. Perzentil zusammenfällt (wenn die Prozentränge 25 bis 50 alle denselben Wert aufweisen)
Die klassische Abbildung um die Quartile darzustellen, ist der Boxplot.
set.seed(1234)
<-rnorm(100000, 100, 25)
asummary(a)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -12.71 83.24 100.11 100.07 116.85 197.66
boxplot(a, col="#C307F5")
Wir können auch noch die einzelnen Datenpunkte hinzufügen (dazu benutzen wir ggplot2):
<-data.frame(Leadership=rnorm(100,40,15), Tier=(sample(c("Hunde", "Katzen"), 100, replace=TRUE, prob=c(0.49, 0.51))))
df_leadership$Leadership=ifelse(df_leadership$Tier=="Katzen", df_leadership$Leadership*1.3+(0.02*df_leadership$Leadership)^2, df_leadership$Leadership)
df_leadership$Leadership=ifelse(df_leadership$Leadership<0,0,df_leadership$Leadership)
df_leadership$Leadership=ifelse(df_leadership$Leadership>100,100,df_leadership$Leadership)
df_leadershiplibrary(ggplot2)
ggplot(data=df_leadership, aes(y=Leadership, x=Tier, fill=Tier))+
stat_boxplot(geom = "errorbar", width = 0.09) +
geom_boxplot(alpha=0.7)+
geom_jitter(position=position_jitter(w=0.01, h=0),aes(color=Tier))+
theme_classic()+
theme(axis.title.x = element_blank())+
scale_fill_manual(values=c("#DE6DEB", "#AE54B8"))+
scale_color_manual(values=c("#DE6DEB", "#AE54B8"))
Wir können die Werte zum Boxplot auf verschiedene Wege erstellen. Hier der dplyr/tidyverse Weg:
library(dplyr)
%>%
df_leadership group_by(Tier) %>%
summarize(Minimum = min(Leadership),
P25=quantile(Leadership, 0.25),
P50_Median=quantile(Leadership, 0.5),
P75=quantile(Leadership, 0.75),
Maximum = max(Leadership)) ->table_leadership
::kable(table_leadership, digits=1) knitr
Tier | Minimum | P25 | P50_Median | P75 | Maximum |
---|---|---|---|---|---|
Hunde | 0.0 | 27.9 | 41.8 | 50.8 | 84.4 |
Katzen | 21.7 | 47.9 | 58.1 | 70.1 | 100.0 |
Die Verteilung können wir auch in einem Histogramm anschauen.
Zuerst die Variable a die wir oben erstellt haben.
hist(a, col=alpha("#C307F5",0.5), breaks=30)
Nun die Variable Leadership, zuerst über Katzen und Hunde zusammen:
ggplot(data=df_leadership, aes(x=Leadership))+
geom_histogram(aes(y=..density..),alpha=0.5,fill="#DA5CFA", colour="grey")+
geom_density()+
theme_classic()
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Danach geschichtet nach Tierart: Vergleichen Sie bitte die Density-Kurven, die über das Histogramm gelegt wurden. Was fällt Ihnen auf? Sehen Sie, dass die Kurve oben nur einen Gipfel hat, obschon wir zwei unterschiedliche Verteilungen (Hunde und Katzen haben) und bei der getrennten Darstellung unten zwei Gipfel sehen?
ggplot(data=df_leadership, aes(x=Leadership, fill=Tier, color=Tier))+
geom_histogram(aes(y = ..density..), alpha=0.5)+
geom_density(alpha=.2)+
theme_classic()+
scale_fill_manual(values=c("#DE6DEB", "#AE54B8"))+
scale_color_manual(values=c("#DE6DEB", "#AE54B8"))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 15.55 25.00 25.00 41.02 65.98 106.47