Inhaltsverzeichnis
library(ggplot2)
library(psych)
library(tibble)
library(yarrr)
as_tibble(pirates)
# A tibble: 1,000 x 17
id sex age height weight headband college tattoos tchests parrots favorite.pirate sword.type eyepatch sword.time
<int> <chr> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl>
1 1 male 28 173. 70.5 yes JSSFP 9 0 0 Jack Sparrow cutlass 1 0.580
2 2 male 31 209. 106. yes JSSFP 9 11 0 Jack Sparrow cutlass 0 1.11
3 3 male 26 170. 77.1 yes CCCC 10 10 1 Jack Sparrow cutlass 1 1.44
4 4 fema~ 31 144. 58.5 no JSSFP 2 0 2 Jack Sparrow scimitar 1 36.1
5 5 fema~ 41 158. 58.4 yes JSSFP 9 6 4 Hook cutlass 1 0.11
6 6 male 26 190. 85.4 yes CCCC 7 19 0 Jack Sparrow cutlass 1 0.59
7 7 fema~ 31 158. 59.6 yes JSSFP 9 1 7 Blackbeard cutlass 0 3.01
8 8 fema~ 31 173. 74.5 yes JSSFP 5 13 7 Hook cutlass 1 0.06
9 9 fema~ 28 165. 68.7 yes JSSFP 12 37 2 Anicetus cutlass 0 0.74
10 10 male 30 184. 84.7 yes JSSFP 12 69 4 Jack Sparrow cutlass 1 0.71
# ... with 990 more rows, and 3 more variables: beard.length <dbl>, fav.pixar <chr>, grogg <dbl>
Häufigkeitsverteilungen in Zahlen
Absolute Häufigkeiten
table(pirates$sword.type)
banana cutlass sabre scimitar
46 830 67 57
Relative Häufigkeiten
prop.table(table(pirates$sword.type))
banana cutlass sabre scimitar
0.046 0.830 0.067 0.057
absolute_haeufigkeit <- table(pirates$sword.type)
prop.table(absolute_haeufigkeit)
round(prop.table(table(pirates$sword.type)),2)
banana cutlass sabre scimitar
0.05 0.83 0.07 0.06
Prozentwerte
100*prop.table(table(pirates$sword.type))
banana cutlass sabre scimitar
4.6 83.0 6.7 5.7
Kumulierte absolute Häufigkeiten
cumsum(table(pirates$tattoos))
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
6 17 36 52 81 119 186 255 364 493 615 734 827 893 943 971 984 996 999 1000
Kumulierte relative Häufigkeiten
cumsum(prop.table(table(pirates$tattoos)))
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0.006 0.017 0.036 0.052 0.081 0.119 0.186 0.255 0.364 0.493 0.615 0.734 0.827 0.893 0.943 0.971 0.984 0.996 0.999 1.000
Kumulierte Prozentwerte
cumsum(100*prop.table(table(pirates$tattoos)))
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0.6 1.7 3.6 5.2 8.1 11.9 18.6 25.5 36.4 49.3 61.5 73.4 82.7 89.3 94.3 97.1 98.4 99.6 99.9 100.0
Kombination verschiedener Häufigkeiten in einer Tabelle
cbind(table(pirates$sword.type),
prop.table(table(pirates$sword.type)),
100*prop.table(table(pirates$sword.type)))
[,1] [,2] [,3]
banana 46 0.046 4.6
cutlass 830 0.830 83.0
sabre 67 0.067 6.7
scimitar 57 0.057 5.7
round(cbind(table(pirates$sword.type),
prop.table(table(pirates$sword.type)),
100*prop.table(table(pirates$sword.type))), 1)
[,1] [,2] [,3]
banana 46 0.0 4.6
cutlass 830 0.8 83.0
sabre 67 0.1 6.7
scimitar 57 0.1 5.7
absolut <- table(pirates$sword.type)
relativ <- prop.table(table(pirates$sword.type))
prozent <- 100*prop.table(table(pirates$sword.type))
tabelle <- cbind(absolut, relativ, prozent)
round(tabelle, 1)
absolut relativ prozent
banana 46 0.0 4.6
cutlass 830 0.8 83.0
sabre 67 0.1 6.7
scimitar 57 0.1 5.7
Grafische Darstellungsweisen von Häufigkeitsverteilungen
Säulendiagramme
barplot(table(pirates$favorite.pirate), ylab="Häufigkeit" )
ggplot(pirates, aes(x=favorite.pirate)) +
geom_bar() +
labs(x="Lieblingspirat", y="Häufigkeit")
Histogramme
hist(pirates$age, xlab="Alter", ylab="Häufigkeit")
ggplot(pirates, aes(x=age)) +
geom_histogram(na.rm = T) +
labs(x="Alter", y="Häufigkeit")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(pirates, aes(x=age)) +
geom_histogram(na.rm=T, binwidth = 10) +
labs(x="Alter", y="Häufigkeit")
ggplot(pirates, aes(x=age)) +
geom_histogram(na.rm=T, binwidth = 10, boundary=10) +
labs(x="Alter", y="Häufigkeit")
ggplot(pirates, aes(x=age)) +
geom_histogram(na.rm=T, binwidth = 10, boundary=10) +
labs(x="Alter", y="Häufigkeit") +
scale_x_continuous(breaks=seq(0, 60, 5))
Kennwerte für Häufigkeitsverteilungen
Kennwerte der zentralen Tendenz
Modalwert
which.max(table(pirates$sword.type))
cutlass
2
max(table(pirates$sword.type))
[1] 830
table(pirates$sword.type) == 830
banana cutlass sabre scimitar
FALSE TRUE FALSE FALSE
Median
median(pirates$tattoos, na.rm = T)
[1] 10
Arithmetisches Mittel
mean(pirates$age, na.rm = T)
[1] 27.36
Streuungsmaße
Streubereich und Spannweite
range(pirates$age, na.rm = T)
[1] 11 46
diff(range(pirates$age, na.rm = T))
[1] 35
Quartile
quantile(pirates$tattoos, na.rm = T)
0% 25% 50% 75% 100%
0 7 10 12 19
Interquartilsbereich und Interquartilsabstand
IQR(pirates$tattoos, na.rm = T)
[1] 5
Quantile und Perzentile
quantile(pirates$tattoos, 0.10, na.rm = T)
10%
5
quantile(pirates$tattoos, 0.63, na.rm = T)
63%
11
quantile(pirates$tattoos, seq(0,1,0.01), na.rm = T)
0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24%
0 1 2 2 3 3 4 4 4 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 7
25% 26% 27% 28% 29% 30% 31% 32% 33% 34% 35% 36% 37% 38% 39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49%
7 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9
50% 51% 52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64% 65% 66% 67% 68% 69% 70% 71% 72% 73% 74%
10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 12
75% 76% 77% 78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90% 91% 92% 93% 94% 95% 96% 97% 98% 99%
12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 14 14 14 14 14 15 15 15 16 17
100%
19
Prozentrang
ecdf(pirates$age)(18)
[1] 0.065
plot.ecdf(pirates$age)
Varianz und Standardabweichung
var(pirates$sword.time, na.rm = T)
[1] 87.0448
var(pirates$sword.time, na.rm = T)*
(length(pirates$sword.time)-1)/
length(pirates$sword.time)
[1] 86.95775
sd(pirates$sword.time, na.rm=T)
[1] 9.32978
sqrt(var(pirates$sword.time, na.rm = T)*
(length(pirates$sword.time)-1)/
length(pirates$sword.time))
[1] 9.325114
Übersicht über Kennwerte
describe(pirates$age)
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 1000 27.36 5.79 27 27.39 5.93 11 46 35 -0.02 0.01 0.18
X1 1 | Durchnummerierung der Variablen |
n = 1000 | Stichprobengröße |
mean = 27.36 | Arithmetisches Mittel |
sd = 5.79 | Standardabweichung |
median = 27 | Median |
trimmed = 27.39 | Getrimmtes arithmetisches Mittel (siehe folgenden Abschnitt zu Ausreißerwerten) |
mad = 5.93 | Median der absoluten Abweichungen vom Median (siehe folgenden Abschnitt zu Ausreißerwerten) |
min = 11 | Kleinster Wert |
max = 46 | Größter Wert |
range = 35 | Spannweite |
skew = -0.02 | Schiefe |
kurtosis = 0.01 | Wölbung/Kurtosis der Verteilung gemäß der obigen Definition des Exzesses |
se = 0.18 | Standardfehler (wird in späteren Units behandelt) |
describe(data.frame(pirates$age, pirates$weight))
vars n mean sd median trimmed mad min max range skew kurtosis se
pirates.age 1 1000 27.36 5.79 27.00 27.39 5.93 11 46.0 35.0 -0.02 0.01 0.18
pirates.weight 2 1000 69.74 10.82 69.55 69.58 11.05 33 105.6 72.6 0.13 -0.08 0.34
Grafische Zusammenfassungen von Kennwerten
ggplot(pirates, aes(x="", y=age)) +
geom_boxplot() +
labs(x="", y="Alter der Piraten")
ggplot(pirates, aes(x="", y=age)) +
stat_boxplot(geom="errorbar", width=0.5) +
geom_boxplot() +
labs(x="", y="Alter der Piraten") +
scale_y_continuous(breaks = seq(10,50,5))
Umgang mit Ausreißerwerten
library(dslabs)
library(ggplot2)
library(psych)
library(tibble)
as_tibble(murders)
# A tibble: 51 x 5
state abb region population total
<chr> <chr> <fct> <dbl> <dbl>
1 Alabama AL South 4779736 135
2 Alaska AK West 710231 19
3 Arizona AZ West 6392017 232
4 Arkansas AR South 2915918 93
5 California CA West 37253956 1257
6 Colorado CO West 5029196 65
7 Connecticut CT Northeast 3574097 97
8 Delaware DE South 897934 38
9 District of Columbia DC South 601723 99
10 Florida FL South 19687653 669
# ... with 41 more rows
murders$count_per_mio <- murders$total / murders$population * 1000000
ggplot(murders, aes(x="", y=count_per_mio)) +
stat_boxplot(geom="errorbar", width=0.5) +
geom_boxplot() +
labs(x="", y="Anzahl der Morde pro 1Mio Bevölkerung") +
scale_y_continuous(breaks = seq(0,200,10))
quantile(murders$count_per_mio, na.rm = T)
0% 25% 50% 75% 100%
3.196211 12.526455 26.871225 33.861036 164.527532
mean(murders$count_per_mio, na.rm = T)
[1] 27.79125
var(murders$count_per_mio, na.rm = T)
[1] 603.2518
sd(murders$count_per_mio, na.rm = T)
[1] 24.56118
murders2 <- murders[murders$count_per_mio < 60,]
quantile(murders2$count_per_mio, na.rm = T)
0% 25% 50% 75% 100%
3.196211 12.128379 26.751860 32.537239 53.598917
mean(murders2$count_per_mio, na.rm = T)
[1] 23.98777
var(murders2$count_per_mio, na.rm = T)
[1] 172.7777
sd(murders2$count_per_mio, na.rm = T)
[1] 13.14449
mean(murders$count_per_mio, trim=0.02, na.rm = T)
[1] 25.50266
mad(murders$count_per_mio, na.rm = T)
[1] 16.35604
describe(murders$count_per_mio, trim = 0.02)
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 51 27.79 24.56 26.87 25.5 16.36 3.2 164.53 161.33 3.44 16.35 3.44
Verwendete Pakete und Funktionen
base
Funktion | Beschreibung |
---|---|
Objekt <- … | Beliebige Sachverhalte als Objekt abspeichern. |
table(Variable) | Absolute Häufigkeiten ausgeben. |
prop.table(table(Variable)) | Relative Häufigkeiten bestimmen. |
100*prop.table(table(Variable)) | Prozentwerte ermitteln. |
cumsum(table(Variable)) | Kumulierte absolute Häufigkeiten berechnen. |
cumsum(prop.table(table(Variable))) | Kumulierte relative Häufigkeiten ausrechnen. |
cumsum(100*prop.table(table(Variable)))) | Kumulierte Prozentwerte bestimmen. |
cbind(Vektor1, Vektor2, ..) | Eine Reihe von Vektoren identischer Länge als Spalten verknüpfen. |
round(x, Anzahl Dezimalstelle) | Alle Werte in x auf die Anzahl Dezimalstellen runden. |
which.max(table(Variable)) | Modalwert bestimmen. ❗ Funktioniert nur bei eingipfligen Verteilungen, bei dem der Modalwert eindeutig ist. |
max(table(Variable)) | Anzahl des Modalwerts bestimmen. |
mean(Variable, na.rm = T) | Arithmetisches Mittel ermitteln. – Missings ausschließen. |
range(Variable, na.rm = T) | Streubereich abfragen. – Missings ausschließen. |
diff(range(Variable, na.rm = T)) | Spannweite berechnen. – Missings ausschließen. |
seq(von,bis,um) | Zahlenreihe generieren. |
sqrt(Zahl) | Quadratwurzel berechnen. |
length() | Dimension Länge abfragen: – Vektor : Länge – Data Frame : Anzahl Variablen |
ggplot2
Funktion | Beschreibung |
---|---|
ggplot(Datensatz, aes(x=Variable)) + geom_bar() + labs(x=”Text”, y=”Text”) | Säulendiagramm erstellen: – Die y-Variable wurde nicht vorgegeben. ggplot verwendet automatisch die Häufigkeiten der Merkmalsausprägungen der x-Variable – Beide Achsen beschriften. |
ggplot(Datensatz, aes(x=Variable)) + geom_histogram( na.rm=T, binwidth=Zahl boundary=Zahl) + labs(x=”Text”, y=”Text”) + scale_x_continuous( breaks=seq(von, bis, um)) | Histogramm erstellen: – Missings ausschließen. – Breite der Säulen vorgeben. — Ansonsten ist voreingestellt, dass die Werte in 30 Gruppen aufgeteilt werden. – Intervallgrenzen verschieben. – Beide Achsen beschriften. – x-Achsenmarkierungen anpassen. |
ggplot(Datensatz, aes(x=””, y=Variable)) + stat_boxplot(geom=”errorbar”, width=0.5) + geom_boxplot() + labs(x=””, y=”Text”) + scale_y_continuous(breaks = seq(von,bis,um)) | Boxplot erstellen: – Achtung x-Variable muss leer sein. – Whiskers vor dem Geom hinzufügen. – Achsen beschriften. – Achsenmarkierungen anpassen. |
graphics
Funktion | Beschreibung |
---|---|
barplot( table(Variable), ylab=”Text”) | Säulendiagramm erstellen: – Auf der y-Achse werden die absoluten Häufigkeiten abgetragen. – Beschriftung der y-Achse. |
hist( Variable, xlab=”Text”, ylab=”Text”= | Histogramm für Variable erzeugen. – Beide Achsen beschriften. |
psych
Funktion | Beschreibung |
---|---|
describe(Variable, trim=Zahl) | Übersicht deskriptiver Kennwerte erstellen. – Voreinstellung für getrimmtes Mittel ist 10% an beiden Enden. |
describe(Data Frame) | Übersicht deskriptiver Kennwerte für mehrere Variablen erstellen. |
stats
Funktion | Beschreibung |
---|---|
median(Variable, na.rm = T) | Median ermitteln. – Missings ausschließen. |
quantile(Variable, na.rm = T) | Quartile ermitteln. – Missings ausschließen. |
quantile(Variable, 0.10, na.rm = T) | 10%-Quantil ausgeben. |
quantile(Variable, 0.63, na.rm = T) | 63. Perzentil bestimmen. |
quantile(Variable, seq(0,1,0.01), na.rm = T) | Alle Perzentile ausgeben. |
IQR(Variable, na.rm = T) | Interquartilsabstand bestimmen. – Missings ausschließen. |
ecdf(Variable)(Merkmalsausprägung) | Prozentrang bestimmen. |
plot.ecdf(Variable) | Prozentränge grafisch abbilden. |
var(Variable, na.rm = T) | Populationsvarianz bestimmen. |
var(Variable, na.rm = T)* (length(Variable)-1)/ length(Variable) | Stichprobenvarianz berechnen. |
sd(Variable, na.rm=T) | Populationsstandardabweichung bestimmen. |
sqrt(var(Variable, na.rm = T)* (length(Variable)-1)/ length(Variable)) | Stichprobenstandardabweichung berechnen. |
mad(Variable, na.rm = T) | Median der absoluten Abweichung vom Median berechnen. |
tibble
Funktion | Beschreibung |
---|---|
as_tibble() | Eine Datensatz, wie bspw. einen Data Frame, eine List oder Matrix in ein sogenanntes Tibble umwandeln. Ein Tibble ist ein Data Frame der Klasse tbl_df. |