(sec:haeufhistR)
Häufigkeiten und Histogramme in R#
Hier sehen wir, wie man Häufigkeiten für eine Stichprobe berechnet und Histogramme erstellt.
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
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 verwenden hier den Befehl hist()
oder den Befehl barplot()
.
Histogramme mit hist()#
Achtung: Es entstehen 6 Säulen statt 8, wie man erwarten würde. 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 ist hier unerwünscht.
Wir erzwingen nun, dass jeder Wert seine eigene Säule erhält. Dazu nutzen wir das Argument breaks
. Hier kann man einen Vektor angeben, in dem steht, nach welchen Werte R „unterbrechen“ soll. Alle Werte zwischen zwei aufeinanderfolgenden break-Werten werden zu einer Klasse zusammengefasst. Diese Häufigkeit wird in der entsprechenden Säule grafisch dargestellt.
Man könnte auch die relative Häufigkeit plotten. Dazu fügt man im hist-Befehl das Argument probability=TRUE
hinzu.
Wir wollen die Grafik noch etwas anpassen. Zum Beispiel soll der Titel und die Achsenbeschriftung geändert werden.
hist(stichprobe,
main="Wunderschönes Histogramm", # Titel setzen
xlab="Werte", # Beschriftung der x-Achse
ylab="Häufigkeit", # Beschriftung der y-Achse
col="lightgreen", # Farbe der Säulen
labels=TRUE) # Höhe der Säulen wird über den Säulen abgetragen
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, # Befehl zum Plot
xaxt="n", # zunächst keine Zahlen an der x-Achse
main="Noch schöneres Histogramm", # Titel setzen
xlab="Werte", # Beschriftung der x-Achse
ylab="Häufigkeit", # Beschriftung der y-Achse
col="lightblue", # Farbe der Säulen
labels=TRUE) # 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
Histogramme mit barplot()#
Histogramme kann man auch mit dem Befehl barplot()
erstellen
Wir passen nun das Histogramm optisch an:
# 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
space = 0 # Abstand zwischen den Säulen
)
# Füge ein Gitter hinzu
grid(col = "gray", lty = 1, lwd = 0.5, nx= NA, ny=NULL)
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 Histogramme für solche Daten zu plotten funktioniert der Befehl hist()
nicht. Jedoch klappt es mit barplot()
wie gewohnt.