Häufigkeiten und Histogramme in R#

Hier schauen wir uns an, wie man Häufigkeiten zu einer Stichprobe bestimmt und Histogramme zu einer Stichprobe ausgibt.

Eingabe der Stichprobe#

Hier wird eine Stichprobe als numerischer Vektor eingegeben. Die Werte können beliebig angepasst werden. Wir speichern die Stichprobe unter dem Namen stichprobe.

stichprobe <- c(2,4,4,4,7,5,4,6,8,4,5,7,4,8,2,6,6,4,4,3)

Stichprobengröße auslesen#

Die Funktion length() gibt die Anzahl der Elemente im Vektor zurück, also die Stichprobengröße. Hier wird der Variablen n der Wert length(stichprobe) zugewiesen. In der nächsten Zeile wird R aufgefordert n auszugeben.

n <- length(stichprobe)
n
20

Absolute und relative Häufigkeiten berechnen#

Die Funktion table() zählt die Häufigkeit jedes Wertes in der Stichprobe. Mit prop.table() werden die relativen Häufigkeiten berechnet.

table(stichprobe)
table(stichprobe)/n
stichprobe
2 3 4 5 6 7 8 
2 1 8 2 3 2 2 
stichprobe
   2    3    4    5    6    7    8 
0.10 0.05 0.40 0.10 0.15 0.10 0.10 

Oft führen mehrere Wege zum Ziel. Die relativen Häufigkeiten können wir auch mit dem Befehl prop.table() berechnen. Dann muss man als Argument aber nicht die Stichprobe, sondern table(stichprobe) eingeben.

# Alternative
absH <- table(stichprobe)
relH <- prop.table(absH)
absH
relH
stichprobe
2 3 4 5 6 7 8 
2 1 8 2 3 2 2 
stichprobe
   2    3    4    5    6    7    8 
0.10 0.05 0.40 0.10 0.15 0.10 0.10 

Histogramme erstellen#

Um ein Histogramm zu erstellen gibt es verschiedene Möglichkeiten wir nutzen hier den Befehl hist() oder den Befehl barplot().

Histogramme mit hist()#

hist(stichprobe)
../_images/c3e8e187859e649585c9baaadff3c791f21406592d13110cfea859341de29797.png

Seltsamerweise gibt es hier 6 Säulen und nicht 8, wie wir erwarten würden. Das Programm R fasst die Klassen manchmal selbstständig zusammen. Hier wurden z.B. die ersten beiden Ausprägungen (2 und 3) zusammen in einer Säule dargestellt. Das gefällt uns hier nicht. Wir wollen „erzwingen“, dass jeder Wert seine eigene Säule bekommt. Dazu nutzen wir das Argument breaks. Hier kann man einen Vektor angeben, in dem steht, nach welchen Werte R „unterbrechen“ soll. Alle Werte zwischen 2 breaks werden in eine Klasse genommen. Deren Häufigkeit wird dann in einer Säule dargestellt.

hist(stichprobe, breaks=c(1,2,3,4,5,6,7,8))
../_images/dc2790c758d5b939819a1dc96193f25f214b724013dabfe47738d37298527b63.png

Man könnte auch die relative Häufigkeit plotten. Dazu fügt man im hist-Befehl das Argument probability=TRUE hinzu.

hist(stichprobe, breaks=c(1,2,3,4,5,6,7,8), probability = TRUE)
../_images/d77c3887002424ac276e503be11c769b11aceafd46e7716976ffdddfa06b308f.png

Wir wollen die Grafik noch etwas anpassen. Zum Beispiel soll der Titel und die Achsenbeschriftung geändert werden.

hist(stichprobe, 
     main="Wunderschönes Histogramm", # hier wird der Titel angepasst
     xlab="Werte",                  # die Beschriftung der x-Achse
     ylab="Häufigkeit",             # die Beschriftung der y-Achse
     col="lightgreen",              # die Farbe der Säulen
     labels=TRUE)                   # die Höhe der Säulen wird über den Säulen abgetragen
../_images/b58b4fd8a31ec11984cc42d616c6335c3e5d5b13f2468670d5a07ef0706a6b50.png

Nun soll die Beschriftung der Säulen mittig darunter stehen.

h<-hist(stichprobe, plot=FALSE)        # Histgramm wird nicht geplottet sondern zunächst in Variable h geschrieben
     
plot(h,                                # hier kommt der Befehl zum Plot
     xaxt="n",                         # zunächst keine Zahlen an der x-Achse
     main="Noch schöneres Histogramm", # hier wird der Titel angepasst
     xlab="Werte",                     # die Beschriftung der x-Achse
     ylab="Häufigkeit",                # die Beschriftung der y-Achse
     col="lightblue",                 # die Farbe der Säulen
     labels=TRUE)                      # die Höhe der Säulen wird über den Säulen abgetragen)
axis(1,                                # mit axis passen wir die x-Achse (1) an, eine (2) würde die y-Achse anpassen
     h$mids,                           # h$mids ist der Vektor mit den Mitten der Säulen; dort wollen wir Werte eintragen
     labels=floor(h$mids),             # labels legt die Werte fest; hier sind es die abgerundeten "Mitten"
     tick = FALSE)                     # keine ticks auf der x-Achse
../_images/2c05d04146ed250e9f5a87ad1f2548a932f7308273b9d86fc5b12b6b2fcaa52a.png

Histogramme mit barplot()#

Histogramme kann man auch mit dem Befehl barplot() erstellen

barplot(table(stichprobe))
../_images/c6a827ebc6af85a73e339f470ebc996e1abdc04d77f2011c38b1f0ce938d81cd.png

Das soll noch etwas hübscher werden:

# Erstelle eine Stichprobe
stichprobe <- c(2,4,4,4,7,5,4,6,8,4,5,7,4,8,2,6,6,4,4,3)

# Erstelle ein Histogramm
barplot(table(stichprobe)/length(stichprobe), # wir Teilen durch die Gesamtzahl -> relative Häufigkeit
         main = "Verteilung der Stichprobe",  # Titel
         xlab = "Werte",                      # Beschriftung x-Achse
         ylab = "relative Häufigkeit",        # Beschriftung y-Achse
         col = "blue",                        # Farbe der Balken
         las = 1                              # Ausrichung d. Beschriftung drehen
       )

# Füge ein Gitter hinzu
grid(col = "gray", lty = 1, lwd = 0.5, nx= NA, ny=NULL)
../_images/411d0e645014469b485b4448d0ca723b786c3e44cd275d4b3fd16b4550b4bf24.png

Nominal messbare Daten#

Stichproben können auch Vektoren mit Buchstaben oder Wörtern sein. Dann ist es genau so leicht Häufigkeiten zu bestimmen.

stichprobe2 <- c("a","c","b","b","e","d","c","e","b","c","a","c","d","d","d","d","e","e","e","f")
table(stichprobe2)
table(stichprobe2)/length(stichprobe2)
stichprobe2
a b c d e f 
2 3 4 5 5 1 
stichprobe2
   a    b    c    d    e    f 
0.10 0.15 0.20 0.25 0.25 0.05 

Um Historgramme für solche Daten zu plotten funktioniert der Befehl hist() nicht. Jedoch klappt es mit barplot() wie gewohnt.

barplot(table(stichprobe2))
../_images/bc64de1d8edc21701834e6ea8b21fd11602c235e2702599eb12caf39c348be23.png