Grafische Darstellungen einer Häufigkeitsverteilung
Deskriptive Statistik
Zusammenfassung
In diesem Kapitel werden eine Reihe von grafischen Methoden zur Darstellung von Häufigkeitsverteilungen beschrieben. Diese müssen je nach Merkmalstyp passend gewählt werden. Begleitet wird das Kapitel von anschaulichen Beispielen und Aufgaben, die mit R bearbeitet werden können.
Lernziele: Am Ende des Kapitels können Sie
mit R Balkendiagramme, Stabdiagramme, Kreisdiagramme, Histogramme und empirische Verteilungsfunktionen erzeugen.
entscheiden, für welchen Merkmalstyp und Fragestellung welche Grafik besonders geeignet ist.
die grafischen Darstellungen interpretieren.
Hinweis: Die mit einem gekennzeichneten Aufgaben können Sie durch schriftliches Rechnen lösen. Die mit gekennzeichneten Aufgaben setzen Grundkenntnisse der Programmierung mit der statistischen Software R voraus. Sie können R hier installieren, falls Sie R nicht auf Ihrem Rechner installiert haben. Zusätzlich empfiehlt sich die Installation einer integrierten Entwicklungsumgebung (IDE), wie zum Beispiel RStudio. Alternativ zur Installation können Sie die Web-Version webR direkt im Browser verwenden.
1 Einführung
Wir haben eine Stichprobe (x_1, x_2, \dots, x_n) eines Merkmals X gegeben. Diese Stichprobe enthält alle Informationen, die wir zur Analyse zur Verfügung haben. Allerdings fällt es uns schwer diese Informationen aus den unverarbeiteten Daten herauszulesen, insbesondere, wenn die Stichprobe (genauer die Stichprobengröße n) sehr groß ist und das Merkmal viele verschiedene Ausprägungen besitzt. Im vorangegangenen Kapitel Häufigkeitsverteilung haben wir gelernt, dass man mithilfe von absoluten und relativen Häufigkeiten und ggf. vorherigem Klassieren quantitativer Merkmale Stichproben sinnvoll zusammenfassen kann. Die beobachteten Merkmalsausprägungen einer Stichprobe mit ihren absoluten oder relativen Häufigkeiten bezeichnet man dann auch als Häufigkeitsverteilung.
Erinnerung: Beim Klassieren teilen wir den Wertebereich der Merkmalsausprägungen in disjunkte Intervalle (k_{j−1},k_j]. Diese verwenden wir als Klassen. Ausführlich wurde dies im ersten Kapitel ‘Einführung: Statistische Untersuchung’ erklärt.
Wir erinnern uns dazu an folgendes Beispiel:
Beispiel 1 (Blutgruppe und Körpergröße bei 12 Personen)
Es wurden in einer Umfrage 12 Personen nach ihrer Blutgruppe und Körpergröße gefragt. Folgende Tabelle zeigt die Ergebnisse:
ID
1
2
3
4
5
6
7
8
9
10
11
12
Blutgruppe
A
A
B
AB
0
0
A
0
B
A
0
A
Größe
170.5
183.0
174.5
158.0
167.5
179.5
192.0
177.5
186.5
161.5
181.0
164.0
Die relativen und absoluten Häufigkeiten des Merkmals Blutgruppe lauten:
MA a_j:
A
B
AB
0
\sum
abs. Häufigkeit H(a_j):
5
2
1
4
12
rel. Häufigkeit h(a_j):
5/12
2/12
1/12
4/12
1
Da beim quantitativen Merkmal Größe alle Beobachtungen verschieden sind, würden abs. und rel. Häufigkeiten die Stichprobe bzgl. dieses Merkmals nicht sinnvoll zusammenfassen. Daher klassieren wir dieses Merkmal zunächst und berechnen dann die abs. und rel. Häufigkeiten der Klassen:
Klassen K_j:
(150,160]
(160,170]
(170,180]
(180,190]
(190,200]
\sum
Beobachtungen in Klasse K_j:
158.0
161.5, 164.0, 167.5
170.5, 174.5, 177.5, 179.5
181.0, 183.0, 186.5
192.0
abs. Häufigkeiten H(K_j):
1
3
4
3
1
12
rel. Häufigkeiten h(K_j):
1/12
1/4
1/3
1/4
1/12
1
Mit der Programmiersoftware R kann man das Beispiel wie folgt behandeln:
# Erstellen eines Datensatzes, der die Variablen Größe und # Blutgruppe enthält:data<-data.frame(groesse =c(170.5, 183.0, 174.5, 158.0, 167.5, 179.5,192.0, 177.5, 186.5, 161.5, 181.0, 164.0), blutgruppe =c("A", "A", "B", "AB", "0", "0", "A", "0","B", "A", "0", "A"))# 1. Blutgruppe:# absolute Häufigkeitentable(data$blutgruppe)
Wie wir im obigen Beispiel gesehen haben, können wir die Häufigkeitsverteilung in einer Tabelle darstellen. Eine weitere Möglichkeit sind grafische Darstellungen, die vor allem als Kommunikationsmedium dienen und übersichtlicher als Tabellen sein können.
Die Wahl der Grafik hängt vom Kontext und vom Skalenniveau des Merkmals ab. Im Folgenden werden häufig verwendete Grafiken vorgestellt.
2 Stab- bzw. Balkendiagramm
Das Stab- bzw. Balkendiagramm ist für qualitative Merkmale oder diskrete Merkmale mit wenigen Ausprägungen geeignet. Hierbei werden die absoluten oder relativen Häufigkeiten der Merkmalsausprägungen durch vertikale Linien oder Balken dargestellt, wobei die Breite der Balken keine Bedeutung hat. In R können wir die Funktion barplot() zum Anfertigen von Balkendiagrammen verwenden. Dabei müssen nicht die Beobachtungen in die Funktion eingegeben werden, sondern die Balkenhöhen.
# Balkendiagramm des Merkmals Blutgruppebarplot(table(data$blutgruppe), xlab ="Blutgruppe", ylab ="absolute Häufigkeit", col =rainbow(4))
Stabdiagramme können wir mit der Funktion plot() und dem Argument type = "h" darstellen.
# Stabdiagramm des Merkmals Blutgruppeplot( x =1:4, y =table(data$blutgruppe), type ="h", lwd =8, axes =FALSE, ylim =c(0, 5), xlab ="Blutgruppe", ylab ="absolute Häufigkeit", col ="darkblue")axis(1, at =1:4, labels =names(table(data$blutgruppe)))axis(2, at =0:5, tick =2)
Wie in den vorherigen Kapiteln verwenden wir in den folgenden Aufgaben, die wir mit der statistischen Software R bearbeiten, den Datensatz penguins aus dem R-Paket palmerpenguins(Horst, Hill, und Gorman 2020). Dafür müssen wir das Paket palmerpenguins mit den Funktionen install.packages() und library() installieren und laden.
Aufgabe 1
Betrachten Sie den Datensatz penguins aus dem R-Paket palmerpenguins. Stellen Sie die Häufigkeitsverteilung der Pinguinarten (species) mithilfe eines Balkendiagramms grafisch dar.
Betrachten Sie diese zusätzlich getrennt nach der Insel (island), auf der sie leben. Also betrachten Sie die dort lebenden Pinguinarten auf jeder Insel mithilfe eines oder mehrerer Balkendiagramme.
Zur Erstellung des Balkendiagramms können wir auf die Funktionen barplot und table zurückgreifen.
Für den zweiten Aufgabenteil erkundigen Sie sich auf der Hilfeseite der barplot-Funktion über die Argumente height and beside. Beachten Sie, dass die Funktion table auch nach mehreren Merkmalen Häufigkeiten berechnen kann.
Alternativ können Sie auch zuerst den Datensatz aufteilen, z.B. mit split(), und dann drei einzelne Balkendiagramme erstellen.
Anmerkung.
Das Balkendiagramm wird oft auch Säulendiagramm genannt. In mancher Literatur wird auch zwischen Diagrammen mit vertikalen und horizontalen Balken unterschieden. Erstere werden oft als Säulendiagramme und letztere als Balkendiagramme bezeichnet.
Hier unterscheiden wir aber nicht zwischen diesen beiden Diagrammtypen.
3 Kreisdiagramm
Auch das Kreisdiagramm ist für qualitative Merkmale oder diskrete Merkmale mit wenigen Ausprägungen geeignet. Hierbei wird die Fläche eines Kreises in “Kuchenstücke” aufgeteilt, wobei die Fläche der Kuchenstücke den Anteilen der beobachteten Merkmalsausprägungen entsprechen.
Um ein Kreisdiagramm händisch zeichnen zu können, benötigen wir die Innenwinkel der “Kuchenstücke”. Diese berechnen wir mithilfe der relativen Häufigkeiten: h(a_j) \cdot 360^\circ
Während beim Stab- und Balkendiagramm die Häufigkeiten proportional zu den Stabhöhen (also Strecken) dargestellt werden, sind diese beim Kreisdiagramm proportional zur Fläche.
In R können wir Kreisdiagramme mit der Funktion pie() erstellen.
# Kreisdiagramm des Merkmals Blutgruppepie(table(data$blutgruppe), col =rainbow(4))
Balkendiagramme sind den Kreisdiagrammen allerdings oft zu bevorzugen, da sich die einzelnen Balkenhöhen besser vergleichen lassen als die Flächen des Kreisdiagramms. Im obigen Beispiel sieht man noch recht deutlich, dass mehr Personen Blutgruppe A besitzen als Blutgruppe 0. Wie groß der Unterschied ist, lässt sich jedoch nur schwer herauslesen. Dafür erkennt man leicht, dass der Anteil der Personen mit Blutgruppe 0 oder B zusammen genommen größer als der Anteil der Personen mit Blutgruppe A ist.
4 Histogramm
Bei quantitativ stetigen oder diskreten Merkmalen mit vielen Ausprägungen wird häufig das Histogramm als Darstellungsform gewählt. Dazu wird zunächst eine Klasseneinteilung mit Grenzen -\infty < k_0 < k_1 < \dots < k_l < \infty vorgenommen, in dem der Wertebereich in l disjunkte Intervalle (k_{j-1},k_j], j = 1, \dots, l, geteilt wird. Für jede Klasse wird ein Balken gezeichnet, welcher so breit ist wie die Klassenbreite der Klasse und dessen Flächeninhalt der relativen Häufigkeit der Klasse entspricht.
Daraus ergibt sich die Höhe des Balkens als \text{Höhe} = \frac{\text{rel. Häufigkeit}}{\text{Klassenbreite}} = \frac{h(K_j)}{k_j - k_{j-1}} = f_n(K_j), welche also der Häufigkeitsdichte der Klasse entspricht.
Histogramme können in R mit der Funktion hist() erzeugt werden. Um die relative Häufigkeit geteilt durch die Klassenbreite auf der y-Achse abzubilden, müssen wir freq = FALSE innerhalb der Funktion angeben.
# Histogramm des Merkmals Größe mit den von R gewählten Klassengrenzenhist(data$groesse, freq =FALSE, col ="mediumorchid", xlab ="Größe in cm", ylab ="Häufigkeitsdichte", main ="")
Mit dem Argument breaks können wir die Klassengrenzen verändern.
# Histogramm des Merkmals Größe mit selbst gewählten Klassengrenzenhist(data$groesse, breaks =c(155, 170, 185, 195), freq =FALSE, xlab ="Größe in cm", ylab ="Häufigkeitsdichte", main ="", col ="mediumorchid")
Bemerkung:
Im Gegensatz zum Balkendiagramm werden die Häufigkeiten hier nicht durch die Höhen, sondern durch die Flächen repräsentiert. Daher ist die Fläche des Histogramms gleich 1.
Die Balkenhöhe einer Klasse entspricht deren Häufigkeitsdichte.
Das Histogramm ist somit das empirische Pendant zur Dichte einer Wahrscheinlichkeitsverteilung und kann als einfacher Schätzer für diese verwendet werden.
Haben alle Klassen die gleiche Breite, d.h. sind sie äquidistant, dann ist die Höhe auch proportional zu den abs. und rel. Häufigkeiten. In diesem Fall wird auf der y-Achse statt der Häufigkeitsdichte auch oft die rel. oder abs. Häufigkeit dargestellt.
Die Wahl der Klassen hat einen großen Einfluss auf das Aussehen des Histogramms. Daher handelt es sich um eine subjektive Darstellungsform.
Aufgabe 2
Erzeugen Sie mithilfe des Datensatzes penguins aus dem Paket palmerpenguins die folgende Grafik. Welche Informationen können Sie ihr entnehmen?
Um die Daten nach Pinguinarten zu teilen, kann die Funktion split() verwendet werden. Alternativ kann man auch mit logischen Bedingungen den Datensatz filtern. Mit folgendem Code bspw. sind nur noch Pinguine mit einem Gewicht größer als 6000 g im resultierenden Datensatz enthalten:
Beim Erstellen der Grafik können wir die Funktion hist() verwenden. Verwenden sie die optionalen Argumente der Funktion, damit die drei Grafiken wie in der Abbildung aussehen.
Achten Sie insgesamt auf
die gewählte Einheit des Merkmals Gewicht.
die Achsen: Alle drei Histogramme zeigen die gleichen Achsenabschnitte.
die Wahl der Klassengrenzen.
die Bezeichnung der Achsen und des Titels.
Um die einzelnen Histogramme nebeneinander anzuordnen, verwenden Sie die Funktion par() mit dem Argument mfrow bevor sie die Histogramme erzeugen.
5 Häufigkeitspolygon und Kerndichteschätzung
Man kann auch auf das Darstellen der Histogrammbalken verzichten und stattdessen lediglich die oberen Mitten der Balken stückweise linear verbinden. Eine solche Darstellung nennt sich Häufigkeitspolygon. Damit außerdem die Fläche unter dem Polygon ungefähr gleich 1 ist, wird das Polygon bis zur x-Achse fortgeführt, und zwar bis zu dem Wert links bzw. rechts vom Histogramm, der eine halbe Breite der jeweils äußersten Balken entfernt liegt.
Das Häufigkeitspolygon beginnt also am Punkt \left(k_0 - \frac{k_1 - k_0}{2}, 0\right) und endet am Punkt \left(k_l + \frac{k_l - k_{l-1}}{2}, 0\right).
# Berechnung der Klassengrenzen, Klassenmitten # und Klassendichte mithilfe von hist()histo<-hist(data$groesse, breaks =c(140, 150, 160, 170, 180, 190, 200, 210), plot =FALSE)Klassengrenzen<-histo$breaksKlassenmitten<-histo$midsKlassendichten<-histo$density# x- und y-Werte für das Polygonx.werte<-c(Klassengrenzen[1]-(Klassengrenzen[2]-Klassengrenzen[1])/2, Klassenmitten, Klassengrenzen[8]+(Klassengrenzen[8]-Klassengrenzen[7])/2)y.werte<-c(0, Klassendichten, 0)# Zeichnung des Histogrammshist(data$groesse, breaks =c(140, 150, 160, 170, 180, 190, 200, 210), freq =FALSE, xlab ="Größe in cm", ylab ="Häufigkeitsdichte", main ="")# Zeichnung des Häufigkeitspolygon in die gleiche Abbildung# lines() verbindet die angegebenen Punkte im Diagramm mit Geradenlines( x =x.werte, y =y.werte, col ="darkred")
Eine optisch ähnliche Darstellung ist das Zeichnen einer Kerndichteschätzung. Dies ist eine fortgeschrittene Methoden, die mathematisches Hintergrundwissen voraussetzt. Wie wir im nächsten Teil dieser Lerneinheit sehen werden, kann sie bei der Beschreibung von Verteilungseigenschaften hilfreich sein. Daher behandeln wir sie hier nicht ausführlich, zeigen aber, wie sie mithilfe von R gezeichnet werden kann und worauf man achten muss.
Die Kerndichteschätzung beschreibt, wie das Histogramm und das Häufigkeitspolynom, die Häufigkeitsverteilung von stetigen Merkmalen. Ihr Flächeninhalt ist ebenfalls 1. Zusätzlich handelt es sich um eine glatte Kurve (salopp gesprochen: ohne Ecken oder Sprungstellen). Sie gleicht daher eher den Dichten von stetigen Wahrscheinlichkeitsverteilungen wie der Normalverteilung.
In R steht die Funktion density() zur Berechnung der Kerndichteschätzung zur Verfügung:
# Histogramm zum Vergleichhist(data$groesse, breaks =c(140, 150, 160, 170, 180, 190, 200, 210), freq =F, xlab ="Größe in cm", ylab ="Häufigkeitsdichte", main ="")# Kerndichteschätzunglines(density(data$groesse, bw ="SJ"), col ="dodgerblue2", lwd =2)
Zur Berechnung können verschiedene Einstellung gewählt werden, die wir hier aber nicht weiter besprechen. Besonders wichtig ist allerdings die Wahl der Bandbreite. Sie ist das Analogon zur Klassenbreite bei Histogrammen. Während das Histogramm auf einer festen Klasseneinteilungen und den zugehörigen relativen Häufigkeiten beruht, verwendet die Kerndichteschätzung im einfachsten Fall für jeden Punkt x die relativen Häufigkeiten einer eigenen Umgebung. Die Bandbreite bestimmt dabei die Größe dieser Umgebung. Ähnlich wie bei der Klassenbreite von Histogrammen führt eine zu kleine Bandbreite zu starken datenabhängigen Schwankungen, während eine zu große Bandbreite die Daten zu sehr glättet. Dies ist in Abbildung 1 beispielhaft veranschaulicht. Die Bandbreite kann man mit dem Argument bw manuell einstellen. Es sind allerdings auch Algorithmen implementiert, die die Wahl automatisiert treffen. Die Hilfeseite der Funktion density() schlägt als eine generell gute Wahl den Algorithmus “SJ”1 vor.
Abbildung 1: Links eine Kerndichteschätzung mit zu klein gewählter Bandbreite. Rechts eine Kerndichteschätzung mit zu groß gewählter Bandbreite. Zusätzlich sind ist die Lage der Beobachtungen als Punkte eingezeichnet.
6 Empirische Verteilungsfunktion
Die empirische Verteilungsfunktion eignet sich für Merkmale, die mindestens ordinal skaliert sind. Hierbei handelt es sich um eine Funktion, die den Anteil der Beobachtungen angibt, die höchstens so groß sind wie ein Vergleichswert x.
Definition 1 (Empirische Verteilungsfunktion)
Sei (x_1,\dots,x_n) eine Stichprobe eines mindestens ordinal skalierten Merkmals X mit den beobachteten Merkmalsausprägungen a_1, \dots, a_k, ~k \le n, dann heißt die Funktion F_n: \mathbb{R} \to [0,1] mit F_n(x) = \frac{1}{n} \sum_{i = 1}^n \mathbb{1}\left(x_{i} \le x\right) = \sum_{a_j \le x} h(a_j) empirische Verteilungsfunktion zu x_1,\ldots, x_n.
Bemerkung:
F_n ist eine monoton steigende, rechtsstetige Treppenfunktion mit den Sprungstellen a_1, \dots, a_k und den Sprunghöhen h(a_1), \dots, h(a_k).
Es ist das empirische Gegenstück zur Verteilungsfunktion einer Wahrscheinlichkeitsverteilung.
Die empirische Verteilungsfunktion kann mit der Funktion ecdf() bestimmt werden. Mit plot() kann sie grafisch dargestellt werden, wobei die Punkte die Rechtsstetigkeit der Funktion symbolisieren.
# Empirische Verteilungsfunktion des Merkmals GrößeF_groesse<-ecdf(data$groesse)# F_groesse() ist nun selbst eine Funktion, die wir auswerten können:# Wie viele Personen sind kleiner oder gleich 1.80 m groß? (rel. Häufigkeit)F_groesse(180)
[1] 0.6666667
# Grafische Darstellung der empirischen Verteilungsfunktion:plot(ecdf(data$groesse), main ="", xlab ="Größe in cm")
Da die Darstellung der empirischen Verteilungsfunktion für Laien schwieriger zu interpretieren ist als die Darstellung von Histogrammen, werden sie seltener zum Präsentieren von Daten und Analyseergebnissen verwendet. Sie bieten allerdings den Vorteil, dass die Daten nicht klassiert werden müssen. Abhängig von der Fragestellung kann mal die eine oder andere grafische Darstellung sinnvoller sein.
Aufgabe 3
Erzeugen Sie mithilfe des Datensatzes penguins aus dem Paket palmerpenguins die folgende Grafik und beantworten, wenn möglich, die folgenden Fragen:
Wie viele Pinguine der Spezies Adelie haben ein Gewicht zwischen 3000 g und 3500 g?
Welches Gewicht überschreiten 20% der Pinguine der Spezies Adelie?
In welcher Region liegt am häufigsten das Gewicht der Pinguine der Spezies Adelie?
Hinweis: Nutzen Sie zur Beantwortung der Frage, dass Sie wissen, dass im Datensatz 152 Pinguine der Spezies Adelie enthalten sind.
Ein Histogramm erzeugen Sie mit der Funktion hist() und eine empirische Verteilungsfunktion mit den Funktionen ecdf() und plot(). Brauchen Sie weitere Tipps zur Erstellung der Grafik, schauen Sie sich die Tipps zur Aufgabe 2 an.
Zur Beantwortung der Fragen, überlegen Sie sich vielleicht Folgendes:
Was bedeutet die Höhe eines Histogrammbalkens in dieser Abbildung und welche Information erhalte ich, wenn ich mehrere Histogrammbalkenhöhen addiere? Achten Sie auf die y-Achse.
Was bedeutet z.B. F_n(3500) = 0.391 und was bedeutet dementsprechend F_n(3500) - F_n(3000) = 0.33 inhaltlich?
Zum Abschluss können Sie nun noch zwei Aufgaben bearbeiten, bei denen Sie selbst entscheiden, welche grafische Methode Sie für geeignet halten:
Aufgabe 4
Betrachten Sie den Datensatz penguins aus dem R-Paket palmerpenguins. Unterscheidet sich die Schnabellänge (bill_length_mm) der verschiedenen Arten? Entscheiden Sie sich für eine passende grafische Darstellungsform. Interpretieren Sie die Grafiken.
Aufgabe 5
Betrachten Sie erneut den Datensatz penguins. Finden Sie nun heraus, ob gleich viele männliche und weibliche Pinguine im Datensatz enthalten sind. Sind die weiblichen und die männlichen Pinguine unterschiedlich schwer? Wählen Sie zur Beantwortung der Frage eine passende grafische Darstellungsform. Interpretieren Sie die Grafiken.
7 Ausblick: Boxplot
Eine weitere beliebte Methode zur Darstellung von Häufigkeitsverteilungen ist der Boxplot. Vollständigkeitshalber beschreiben wir sie hier grob. Da die Methode allerdings Kenntnisse über Quantile voraussetzt, wird sie ausführlich im nächsten Kapitel über Lagemaße behandelt.
In R steht uns die Funktion boxplot() zum Zeichnen eines Boxplots zur Verfügung.
boxplot(data$groesse, horizontal =TRUE, xlab ="Körpergröße in cm")
Der Boxplot teilt die Stichprobe grob gesagt in 4 circa gleich große Teile, sodass die mittlere Linie in der Box die Stichprobe in zwei Hälften teilt und in jeder Hälfte der Box ca 25% der Beobachtungen liegen und die restlichen 50% Beobachtungen sich auf den Bereich der beiden äußeren Linien verteilen.
8 Zusammenfassung
Die Häufigkeitsverteilung eines Merkmals X mit gegebener Stichprobe (x_1,\dots,x_n) ist eine Zusammenfassung der Daten in absoluten oder relativen Häufigkeiten.
Im Fall von nominalen, ordinalen oder auch diskret skalierten Merkmalen mit wenigen Merkmalsausprägungen, kann man die Häufigkeitsverteilung mit einem Balken- oder mit einem Kreisdiagramm darstellen.
Bei kardinal skalierten Merkmalen eignet sich die Darstellung durch Histogramme. Ähnliche Methoden zum Histogramm sind außerdem das Häufigkeitspolygon und die Kurve der Kerndichteschätzung. Letztere ist allerdings eine fortgeschrittene Methode, die in dieser Lerneinheit nicht ausführlich behandelt wird. Eine weitere Methode ist die Darstellung der empirischen Verteilungsfunktion, welche keine vorherige Klassierung der Daten benötigt, und der Boxplot. Da die Methode allerdings Kenntnisse zu statistischen Kennzahlen voraussetzt, wir sie erst im nächsten Kapitel dieser Lerneinheit ausführlich erklärt.
Interpretation: Am Häufigsten ist die Pinguinart Adelie. Auch Gentoo ist relativ häufig vertreten, während die Art Chinstrap weniger als halb so viel in diesem Datensatz zufinden ist als Adelie. Die Pinguinarten sind also nicht gleich häufig vertreten.
Mithilfe der Funktion table() können wir auch die absoluten Häufigkeiten bzgl. zwei Merkmale ausgeben lassen.
Setzen wir nun beside = TRUE als Argument in der barplot-Funktion, erhalten wir ein gruppiertes Balkendiagramm. Mit der Funktion legend() können wir dann eine Legende für die Farbauswahl hinzufügen.
barplot(table(penguins$species, penguins$island), ylab ="absolute Häufigkeit", col =rainbow(3), beside =T)legend(9, 120, legend =c("Adelie", "Chinstrap", "Gentoo"), fill =rainbow(3))
Wir können für jede Insel auch ein eigenes Balkendiagramm erstellen und nebeneinander darstellen (siehe Abbildung 2). Zur besseren Vergleichbarkeit sollten wir dann den Wertebereich der y-Achse für alle drei Balkendiagramme gleich wählen. Wie man das in R löst, können Sie anhand der beschriebenen Lösung der Aufgabe 2 sehen.
Abbildung 2: Drei einzelne Balkendiagramme, die nebeneinander dargestellt sind.
An den Grafiken können wir erkennen, dass Pinguine der Art Chinstrap und Gentoo jeweils nur auf einer der drei Inseln erhoben wurden, während auf allen drei Inseln Beobachtungen zu Adelie-Pinguinen gesammelt wurden.
Um die Grafiken nachzubauen, benötigen wir die Funktion hist(). Im Datensatz ist das Gewicht in Gramm angegeben, während die Grafik es in Kilogramm angibt. Wir müssen die Variable body_mass_g also durch 1000 teilen.
Zum Anordnen der Histogramme können wir par() verwenden. Da in der Grafik die Häufigkeitsdichte auf der y-Achse abgebildet ist, müssen wir freq = FALSE wählen. Die Klassengrenzen können wir mit dem Argument breaks anpassen. Für alle drei Histogramme soll die y-Achse von 0 bis 1 und die x-Achse von 2 bis 7 gehen. Dies erreichen wir, indem wir xlim = c(2, 7) und ylim = c(0, 1) in die Funktion eingeben. Zuletzt müssen wir nur noch die Beschriftungen der Grafik mit den Argumenten main, xlab und ylab ändern.
# Anordnen mehrerer Grafiken im selben Grafikfensterpar(mfrow =c(1, 3))# drei Grafiken in einer Zeile# Histogrammehist( x =penguins_splitted$Adelie$body_mass_g/1000, freq =FALSE, breaks =seq(2.5, 6.5, 0.5), xlab ="Körpergewicht in kg", ylab ="Häufigkeitsdichte", xlim =c(2, 7), ylim =c(0, 1), main ="Adelie")hist( x =penguins_splitted$Chinstrap$body_mass_g/1000, freq =FALSE, breaks =seq(2.5, 6.5, 0.5), xlab ="Körpergewicht in kg", ylab ="Häufigkeitsdichte", xlim =c(2, 7), ylim =c(0, 1), main ="Chinstrap")hist( x =penguins_splitted$Gentoo$body_mass_g/1000, freq =FALSE, breaks =seq(2.5, 6.5, 0.5), xlab ="Körpergewicht in kg", ylab ="Häufigkeitsdichte", xlim =c(2, 7), ylim =c(0, 1), main ="Gentoo")
Interpretation: An den Histogrammen können wir erkennen, dass in dieser Stichprobe die Pinguine der Art Gentoo strukturell schwerer als die Pinguine der beiden anderen Arten sind:
Das Gewicht von Pinguinen der Art Adelie und Chinstrap liegt in einem ähnlichen Bereich. Für beide Arten befindet sich das Minimum im Intervall (2.5 kg, 3 kg] und das Maximum im Intervall (4.5 kg, 5 kg]. Außerdem ist in beiden Histogrammen der zu (3.5 kg, 4 kg] zugehörige Balken der höchste und somit liegen in dieser Region bei beiden Arten die meisten Beobachtungen. Im Gegensatz hierzu befindet sich das kleinste beobachtete Gewicht von Pinguinen der Art ‘Gentoo’ in diesem Intervall. Die Region mit der höchsten Häufigkeitsdichte ist mit (4.5 kg, 5 kg] 1 kg höher als bei den anderen Spezies. Das höchste beobachtete Gewicht liegt zwischen 6 kg und 6.5 kg.
Die Grafik wird sehr ähnlich wie in der Lösung zu Aufgabe 2 erzeugt (dort ausführlich beschrieben). Da es sich in dieser Darstellung allerdings um ein Histogramm absoluter Häufigkeiten handelt, muss freq = TRUE gesetzt werden.
# Anordnen mehrerer Grafiken im selben Grafikfensterpar(mfrow =c(1,2))# zwei Grafiken in einer Zeile# Histogrammhist(adelie$body_mass_g, freq =TRUE, breaks =seq(2500, 5500, 250), ylim =c(0,35), xlab ="Körpergewicht in g \n Spezies: Adelie", # \n erzeugt einen Zeilenumbruch ylab ="absolute Häufigkeit", main ="Histogramm")# empirische Verteilungsfunktionplot(ecdf(adelie$body_mass_g), main ="Emp. Verteilungsfunktion", xlab ="Körpergewicht in g \n Spezies: Adelie", xlim =c(2500, 5500))
Frage 1: Wie viele Pinguine der Art Adelie haben ein Gewicht zwischen 3000 g und 3500 g?
Mithilfe des Histogramms lässt sich die Frage relativ einfach beantworten. Hierfür müssen wir die absolute Häufigkeit des zweiten und des dritten Balkens aus der Grafik ablesen, welche 18 und 32 betragen. Diese absoluten Häufigkeiten addieren wir und erhalten, dass für 50 Adelie-Pinguine das Gewicht zwischen 3000 g und 3500 g liegt. In dem nachfolgenden Histogramm sind die zugehörigen Balken in rot abgebildet.
Die Beantwortung der Frage mithilfe der empirischen Verteilungsfunktion ist aufwendiger und weniger präzise, da es schwerer fällt, die genauen Zahlen aus der Grafik abzulesen: Etwas weniger als 40% der Pinguine wiegt nicht mehr als 3500 g und etwas mehr als 5% der Pinguine wiegt nicht mehr als 3000 g. Insgesamt wiegen also etwas weniger als 40% - 5% = 35% der Pinguine zwischen 3000 g und 3500 g. Aus der Aufgabenstellung wissen wir, dass wir insgesamt 152 Pinguine betrachten. In absoluten Zahlen wiegen also ungefähr 152 \cdot 0.35 = 53.2 \approx 53.
Frage 2: Welches Gewicht überschreiten 20% der Pinguine der Art Adelie? Um das Gewicht, das nur 20% der Pinguine der Spezies Adelie überschreiten, zu bestimmen, betrachten wir am besten die empirische Verteilungsfunktion. Hierfür müssen wir aus der Grafik ablesen, bei welchem Körpergewicht die empirische Verteilungsfunktion 0.8 = 1 - 0.2 beträgt.Denn wenn 20% der Pinguine schwerer sind als der gesuchte Wert, dann sind die restlichen 80% nicht schwerer oder auch leichter als dieser Wert. Dieses Gewicht liegt bei ungefähr 4100 g und ist in der folgenden empirischen Verteilungsfunktion eingezeichnet.
Da beim Histogramm die Daten klassiert wurden, lässt sich hier erst einmal nur ein Wertebereich angeben. Zunächst einmal überlegen wir uns die absolute Anzahl der Pinguine mit dem höchsten Gewicht, da das Histogramm mit den absoluten Häufigkeiten dargestellt wurde: 152 \cdot 0.2 = 30.4 \approx 30. Anhand der Balkenhöhen können wir nun ablesen, dass 1 Pinguin im Bereich (4750 g, 5000 g], 6 Pinguine im Bereich (4750 g, 4500 g], 13 Pinguine im Bereich (4500 g, 4250 g] und 15 Pinguine im Bereich (4250 g, 4000 g] wiegen. Daraus ergibt sich, dass 20 = 1 + 6 + 13 Pinguine, also 20 / 152 = 13.1%, mehr als 4250 g wiegen und 35 = 20 + 15 Pinguine, also 35 / 152 = 0.23%, mehr als 4000 g wiegen. Das Gewicht, das nur 20% der Adelie-Pinguine überschreiten liegt also im Intervall (4000 g, 4250 g]. Möchte man einen exakten Wert als Näherung angeben, so kann man den Wert auf der x-Achse verwenden, sodass die Fläche des Histogramms oberhalb dieses Wertes 20% entspricht. Dies ist im folgenden Histogramm dargestellt. Hierbei ergibt sich ebenfalls ein Näherungswert von 4100 g. Die Rechnung wird hier allerdings nicht angegeben.
Frage 3: In welcher Region liegt am häufigsten das Gewicht der Pinguine der Art Adelie? Zum Bestimmen der Region, in der am häufigsten das Gewicht der Adelie-Pinguine liegt, suchen wir den höchsten Balken aus dem Histogramm heraus. Dieses ist der Balken, der zu dem Intervall (3250 g, 3500 g] gehört. Die beiden nächsten Balken sind allerdings kaum niedriger, daher könnte man auch eine größere Region, die mehrere Balken einschließt angeben: (3250 g, 4000 g].
Auch mit empirischen Verteilungsfunktion kann man Regionen mit einer hohen Häufigkeitsdichte ausfindig machen, in dem man Bereiche identifiziert, in denen die Steigung der Funktionskurve groß ist. Die nachfolgende Abbildung illustriert den ungefähren Bereich von ungefähr [3150 g, 4000 g].
Mit der Funktion levels() können wir herausfinden, welche Pinguinarten im Datensatz enthalten sind, da dieses Merkmal als Faktor im Datensatz abgespeichert ist.
Mithilfe der Funktion split() können wir den Datensatz nach der Pinguinart aufteilen. Wir erhalten für jede Pinguinart einen Datensatz, welche in einer Liste gespeichert werden.
penguins_splitted<-split(penguins, f =penguins$species)
Nun können wir für jede Pinguinart einzeln das Merkmal Schnabellänge grafisch darstellen. Da es sich bei dem Merkmal um ein quantitativ stetiges Merkmal handelt, sind Histogramme oder empirische Verteilungsfunktionen zur grafischen Darstellung der jeweiligen Häufigkeitsverteilung geeignet. Leichter zu interpretieren sind allerdings Histogramme. In dieser Lösung verwenden wir beide Methoden. Damit wir die verschiedenen Histogramme und Verteilungsfunktionen besser vergleichen können, sollten wir jeweils die gleichen Grenzen für die x- und y-Achsen wählen.
# Anordnen mehrerer Grafiken im selben Grafikfensterpar(mfrow =c(2,3))# Histogrammehist(penguins_splitted[[1]]$bill_length_mm, breaks =seq(30, 60, 2.5), freq =FALSE, col ="skyblue", xlab ="Schnabellänge in mm", ylab ="Häufigkeitsdichte", xlim =c(30, 60), ylim =c(0,0.18), main ="Adelie")hist(penguins_splitted[[2]]$bill_length_mm, breaks =seq(30, 60, 2.5), freq =FALSE, col ="skyblue", xlab ="Schnabellänge in mm", ylab ="Häufigkeitsdichte", xlim =c(30, 60), ylim =c(0,0.18), main ="Chinstrap")hist(penguins_splitted[[3]]$bill_length_mm, breaks =seq(30, 60, 2.5), freq =FALSE, col ="skyblue", xlab ="Schnabellänge in mm", ylab ="Häufigkeitsdichte", xlim =c(30, 60), ylim =c(0,0.18), main ="Gentoo")# Empirische Verteilungsfunktionen plot(ecdf(penguins_splitted[[1]]$bill_length_mm), main ="", xlab ="Schnabellänge in mm", xlim =c(min(penguins$bill_length_mm, na.rm =TRUE), max(penguins$bill_length_mm, na.rm =TRUE)),)plot(ecdf(penguins_splitted[[2]]$bill_length_mm), main ="", xlab ="Schnabellänge in mm", xlim =c(min(penguins$bill_length_mm, na.rm =TRUE), max(penguins$bill_length_mm, na.rm =TRUE)), )plot(ecdf(penguins_splitted[[3]]$bill_length_mm), main ="", xlab ="Schnabellänge in mm", xlim =c(min(penguins$bill_length_mm, na.rm =TRUE), max(penguins$bill_length_mm, na.rm =TRUE)), )
Interpretation: Die Pinguine der Art Adelie haben die kürzesten Schnäbel. Dies können wir sowohl an den Histogrammen als auch an der empirischen Verteilungsfunktion eindeutig erkennen. Die Chinstrap- und Gentoo-Pinguine befinden sich zumindest in unserer Stichprobe in einem recht ähnlichen Bereich bzgl. des Merkmals Schnabellänge zwischen 40 und 60 mm. Erwähnenswert bei der Art Chinstrap ist das gehäufte Aufkommen der Schnabellängen in den Intervallen (45, 47.5) und (50, 52.5). Dies Häufungen kann man auch bei der empirischen Verteilungsfunktion anhand dem Anstieg und Abflachen der Kurve erkennen. Weiter sei darauf hingewiesen, dass je nach Wahl der Klassen, die Histogramme sehr unterschiedlich aussehen können.
Die Anzahl an männlichen und weiblichen Pinguinen ist nicht exakt gleich, jedoch mit 168 und 165 Pinguinen sehr ähnlich.
Grafisch könnten wir das auch mit einem Kreis oder Balkendiagramm darstellen, da es sich um ein nominales Merkmal handelt:
par(mfrow =c(1, 2))pie(table(penguins$sex), col =c("darkred", "darkblue"), labels =c("weiblich", "männlich"))barplot(table(penguins$sex), col =c("darkred", "darkblue"), names.arg =c("weiblich", "männlich"))
Um das Körpergewicht nach Gewicht miteinander zu vergleichen, stellen wir nun für beide Geschlechter einzeln das Merkmal Körpergewicht grafisch dar. Da es sich beim Gewicht um ein quantitativ stetiges Merkmal handelt, sind erneut Histogramme oder die empirischen Verteilungsfunktionen zum Vergleichen der Häufigkeitsverteilungen geeignet. Wir gehen genauso vor wie in der Lösung zu Aufgabe 4 und erhalten folgende Grafik:
Interpretation: Sowohl mithilfe der Histogramme als auch mit den empirischen Verteilungsfunktionen können wir erkennen, dass die männlichen Pinguine über die gesamte Stichprobe gesehen schwerer sind als die weiblichen Pinguine. Außerdem ist der Gewichtsbereich bei männlichen Pinguinen größer als bei weiblichen Pinguinen. Man sagt auch, dass die Verteilung eine höhere Variabilität besitzt. Weiter erkennt man, dass beide Häufigkeitsverteilungen zwei Häufungsregionen besitzen. Dies könnte daran liegen, dass in der Stichprobe drei verschiedene Pinguinarten enthalten sind, schließlich haben wir schon in Aufgabe 2 herausgefunden, dass die Pinguinart Gentoo insgesamt schwerer ist als die anderen beiden Arten.
Diese Lerneinheit “Deskriptive Statistik” wurde von Roland Fried und Christina Mathieu unter Mithilfe von Merle Mendel und Klemens Schmidt an der Technischen Universität Dortmund entwickelt. Es ist lizenziert unter der CC-BY-SA 4.0 Lizenz und ist verfügbar auf ORCA.nrw.
Literatur
Horst, Allison Marie, Alison Hill, und Kristen B. Gorman. 2020. palmerpenguins: Palmer Archipelago (Antarctica) penguin data. https://doi.org/10.5281/zenodo.3960218.
Fußnoten
Sheather, S.J. and Jones, M.C. (1991). A reliable data-based bandwidth selection method for kernel density estimation. Journal of the Royal Statistical Society Series B, 53, 683 – 690.↩︎