# Daten erzeugen
<- c(1, 3, 5, 7, 7, 7, 6, 34)
x
# Häufigkeitstabelle
table(x)
## x
## 1 3 5 6 7 34
## 1 1 1 1 3 1
Zur Beschreibung von Verteilungen eigenen sich Tabellen, Lage- und Streuungskenngrößen.
Eine Häufigkeitstabelle wird mit der Funktion table()
erstellt
# Daten erzeugen
<- c(1, 3, 5, 7, 7, 7, 6, 34)
x
# Häufigkeitstabelle
table(x)
## x
## 1 3 5 6 7 34
## 1 1 1 1 3 1
Für relative Häufigkeiten teilt man einfach durch die Länge der Variable x
. So ändert sich der Befehl in:
# relative Häufigkeitstabelle
table(x)/length(x)
## x
## 1 3 5 6 7 34
## 0.125 0.125 0.125 0.125 0.375 0.125
Kumulierte Häufigkeiten erhält man mit der Funktion cumsum()
# kumulierte Häufigkeitstabelle
cumsum(table(x))
## 1 3 5 6 7 34
## 1 2 3 4 7 8
Und entsprechend auch kumulierte relative Häufigkeiten
# kumulierte relative Häufigkeitstabelle
cumsum(table(x)/length(x))
## 1 3 5 6 7 34
## 0.125 0.250 0.375 0.500 0.875 1.000
Eine weitere Option bietet die Funktion freq()
aus dem rettyR
-Paket. Sie erstellt eine Tabelle mit absoluten und relativen Häufigkeiten sowie relativen Häufikeiten ohne fehlende Wert (NA
).
# Paket "prettyR" installieren
install.packages("prettyR", dependencies=TRUE)
# Paket laden
library(prettyR)
# Häufigkeitstabelle mit absoluten und relative Werten erstellen
freq(x)
##
## Frequencies for x
## 7 1 3 5 6 34 NA
## 3 1 1 1 1 1 0
## % 37.5 12.5 12.5 12.5 12.5 12.5 0
## %!NA 37.5 12.5 12.5 12.5 12.5 12.5
Die Funktion freqTable()
aus dem jgsbook
-Paket erstellt für einen Vektor eine vollständige Häufigkeitstabelle mit absoluten, relativen und kumulierten Werten.
# 234 Zufallswerte zwischen 21 und 30
<- sample(21:30, 234, replace = TRUE)
x # Häufigkeitstabelle
::freqTable(x) jgsbook
## Wert Haeufig Hkum Relativ Rkum
## 1 21 19 19 8.12 8.12
## 2 22 18 37 7.69 15.81
## 3 23 30 67 12.82 28.63
## 4 24 23 90 9.83 38.46
## 5 25 24 114 10.26 48.72
## 6 26 36 150 15.38 64.10
## 7 27 15 165 6.41 70.51
## 8 28 24 189 10.26 80.77
## 9 29 23 212 9.83 90.60
## 10 30 22 234 9.40 100.00
Mit dem Befehl summary()
erhält man eine erste Zusammenfassung der Werteverteilung mit den wichtigsten Lagekenngrößen.
# Daten erzeugen
<- c(1, 3, 5, 7, 7, 7, 6, 34)
x
# Zusammenfassung
summary(x)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 4.50 6.50 8.75 7.00 34.00
Die Funktion describe()
aus dem psych
-Zusatzpaket liefert noch detailiertere Übersichten:
::describe(x) psych
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 8 8.75 10.43 6.5 8.75 1.48 1 34 33 1.69 1.35 3.69
Das Funktioniert auch bei kompletten Datensätzen.
# Zusammenfassung von pf8
::describe(pf8) psych
## vars n mean sd median trimmed mad min max range skew
## Standort* 1 731 2.85 1.61 2 2.81 1.48 1 5 4 0.28
## Alter 2 730 37.00 18.00 28 34.98 12.60 15 86 71 0.74
## Geschlecht* 3 725 1.61 0.49 2 1.63 0.00 1 3 2 -0.40
## Größe 4 730 174.04 9.62 173 173.84 10.38 151 206 55 0.26
## Gewicht 5 720 75.53 16.88 73 73.93 16.31 45 175 130 1.12
## Bildung* 6 506 4.88 1.77 5 4.98 2.97 1 7 6 -0.39
## Beruf* 7 731 40.42 37.04 34 38.58 48.93 1 104 103 0.26
## Familienstand* 8 729 2.11 1.12 2 1.99 1.48 1 6 5 0.83
## Kinder 9 727 0.38 0.79 0 0.18 0.00 0 5 5 2.19
## Wohnort* 10 729 1.41 0.49 1 1.39 0.00 1 2 1 0.36
## Rauchen* 11 729 1.21 0.40 1 1.13 0.00 1 2 1 1.45
## SportHäufig 12 677 2.56 1.88 2 2.41 1.48 0 21 21 1.91
## SportMinuten 13 667 62.42 40.14 60 60.47 44.48 0 400 400 1.53
## SportWie* 14 656 1.64 0.69 2 1.55 1.48 1 3 2 0.62
## SportWarum* 15 454 3.75 1.64 4 3.49 1.48 1 8 7 1.06
## LebenZufrieden 16 724 7.91 1.59 8 8.07 1.48 1 11 10 -1.10
## kurtosis se
## Standort* -1.53 0.06
## Alter -0.70 0.67
## Geschlecht* -1.75 0.02
## Größe -0.26 0.36
## Gewicht 2.40 0.63
## Bildung* -1.26 0.08
## Beruf* -1.55 1.37
## Familienstand* 0.48 0.04
## Kinder 4.45 0.03
## Wohnort* -1.87 0.02
## Rauchen* 0.11 0.01
## SportHäufig 12.75 0.07
## SportMinuten 8.64 1.55
## SportWie* -0.77 0.03
## SportWarum* 0.79 0.08
## LebenZufrieden 1.86 0.06
Die Lagewerte lassen sich auch einzeln bestimmen.
Mit der Funktion min()
wird das Minimum der Verteilung ausgegeben.
# Minimum bestimmen
min(x)
## [1] 1
Dementsprechend liefert max()
das Maximum.
# Maximum bestimmen
max(x)
## [1] 34
Die Spannweite wird mit range()
abgefragt.
# Spannweite bestimmen
range(x)
## [1] 1 34
Das arithmetische Mittel wird mit der Funktion mean()
bestimmt
# x-quer bestimmen
mean(x)
## [1] 8.75
Sind fehlende Werte in der Reihe enthalten, gibt R
nur NA
zurück.
# mean für "Gewicht" im Datensatz "pf8"
mean(pf8$Gewicht)
## [1] NA
Beheben kann man dies, indem der Parameter na.rm
auf TRUE
gesetzt wird.
# mean für "Gewicht" im Datensatz "pf8"
# entferne NAs
mean(pf8$Gewicht, na.rm=TRUE)
## [1] 75.5325
Der Median wird mit der Funktion median()
ermittelt.
# Median bestimmen
median(x)
## [1] 6.5
Auch hier müssen enthaltene NA
s ausgeblendet werden:
# Median bestimmen, OHNE NAs
median(pf8$Gewicht, na.rm=TRUE)
## [1] 73
In den R
-Hausmitteln existiert keine eigene Funktion zur Bestimmung des Modalwertes. Wir können ihn daher “auf Umwegen” bestimmen. Wir lassen mittels table()
eine Häufigkeitstabelle der Variable ausgeben. Diese sortieren wir mittels sort()
absteigend. Der Modus ist dann der erste Wert der sortierten Tabelle.
# Daten als Häufigkeitstabelle
table(x)
## x
## 1 3 5 6 7 34
## 1 1 1 1 3 1
# absteigend sortieren
sort(table(x), decreasing=TRUE)
## x
## 7 1 3 5 6 34
## 3 1 1 1 1 1
# Modalwert
sort(table(x), decreasing=TRUE)[1]
## 7
## 3
Es ist der Wert 7
und er kommt 3 mal vor.
Eine weitere Möglichkeit bietet das Zusatzpaket statip
. Es enthält die Funktion mfv()
, mit welcher der Modalwert bestimmt werden kann.
# Daten als Häufigkeitstabelle
library(statip)
# Modalwert bestimmen
mfv(x)
## [1] 7
# bzw. auch
::mfv(x) statip
## [1] 7
Die vier Quartile werden mit der Funktion quantile()
ermittelt (ja, der Befehl für Quartile heisst in R
quantile()).
# Quartile bestimmen, ohne NAs
quantile(x, na.rm=T)
## 0% 25% 50% 75% 100%
## 1.0 4.5 6.5 7.0 34.0
Es lassen sich beliebige Quantile berechnen.
# Quartile bestimmen, ohne NAs
quantile(x, probs = c(.333, .666))
## 33.3% 66.6%
## 5.331 7.000
Und auch die Art der Berechnung lässt sich über den Parameter type
festlegen. Beispielsweise verwendet type=6
die Methode von SPSS.
# Quartile bestimmen, ohne NAs
# so wie SPSS
quantile(x, probs = c(.333, .666), type=6)
## 33.3% 66.6%
## 4.994 7.000
Die Schiefe der Verteilung (Skewness) kann mittels skew()
aus dem psych
-Paket bestimmt werden. Ein positiver Wert bedeutet eine rechtsschiefe Verteilung, ein negativer Wert eine linksschiefe Verteilung.
::skew(x, type=2) # rechne wie SPSS oder SAS psych
## [1] 2.577408
Ebenso enthält das Paket die Funktion kurtosi()
, mit welcher die “Spitzigkeit” der Verteilung bestimmt werden kann.
::kurtosi(x, type=2) # rechne wie SPSS oder SAS psych
## [1] 7.020852
Die wichtigste Streuungskenngröße ist wahrscheinlich die Standardabweichung. Sie wird mittels der Funktion sd()
bestimmt.
# Standardabweichung bestimmen
sd(x, na.rm=T)
## [1] 10.43004
Die Varianz der Stichprobe wird mit var()
berechnet.
# Varianz von x bestimmen
var(x, na.rm=T)
## [1] 108.7857
Der Interquartilsabstand (oder einfach nur Quartilsabstand) wird mit der Funktion IQR()
bestimmt.
# Quartilsabstand bestimmen
IQR(x, na.rm=T)
## [1] 2.5
Ebenso wie bei quantile() lässt sich über den Parameter type
die Berechnungsart ändern. Mit type=6
nutzt R
die Methode wie in SPSS
:
# Quartilsabstand bestimmen
# Methode wie in SPSS
IQR(x, na.rm=T, type=6)
## [1] 3.5
Mit der Funktion table()
lassen sich auch Kreuztabellen erstellen, indem einfach beide Variablen übergeben werden.
# erzeuge Daten
<- c(2 , 12 , 7 , 15 , 10 , 4 , 13 , 9 , 16 , 19)
Punktwert <- rep(c("maennlich" , "weiblich") ,5)
Geschlecht
# Kreuztabelle
table(Punktwert, Geschlecht)
## Geschlecht
## Punktwert maennlich weiblich
## 2 1 0
## 4 0 1
## 7 1 0
## 9 0 1
## 10 1 0
## 12 0 1
## 13 1 0
## 15 0 1
## 16 1 0
## 19 0 1
Ebenso steht die Funktion xtabs()
zur Verfügung.
# Kreuztabelle mit "xtabs()"
xtabs(~ Punktwert + Geschlecht)
## Geschlecht
## Punktwert maennlich weiblich
## 2 1 0
## 4 0 1
## 7 1 0
## 9 0 1
## 10 1 0
## 12 0 1
## 13 1 0
## 15 0 1
## 16 1 0
## 19 0 1
Siehe Abschnitt 36.1 für weitere Beispiele zur Kreuztabelle.
Die z-Transformation erfolgt mit der Funktion scale()
.
# Wertereihe
<- c(2 , 12 , 7 , 15 , 10 , 4 , 13 , 9 , 16 , 19)
Punktwerte
# z-Transformation
scale(Punktwerte)
## [,1]
## [1,] -1.6183421
## [2,] 0.2418212
## [3,] -0.6882604
## [4,] 0.7998702
## [5,] -0.1302114
## [6,] -1.2463094
## [7,] 0.4278376
## [8,] -0.3162278
## [9,] 0.9858866
## [10,] 1.5439356
## attr(,"scaled:center")
## [1] 10.7
## attr(,"scaled:scale")
## [1] 5.375872
Hierbei berechnet scale()
automatisch Mittelwert und Standardabweichung der übergebenen Werte. In der Ausgabe erkennen Sie diese unter attr(,"scaled:center")
(in unserem Fall 10.7) und attr(,"scaled:scale")
(in unserem Fall 5.375872).
Über die Parameter center
und scale
können Mittelwert und Standardabweichung aber auch beliebig spezifiziert werden.
scale(Punktwerte, center=15, scale=3)
## [,1]
## [1,] -4.3333333
## [2,] -1.0000000
## [3,] -2.6666667
## [4,] 0.0000000
## [5,] -1.6666667
## [6,] -3.6666667
## [7,] -0.6666667
## [8,] -2.0000000
## [9,] 0.3333333
## [10,] 1.3333333
## attr(,"scaled:center")
## [1] 15
## attr(,"scaled:scale")
## [1] 3
Das Ergebnis ist ein matrix
-Objekt. Wenn Sie nur den z-Wert als numerischen Wert ausgeben möchten, kann die as.numeric()
-Funktion verwendet werden.
# gebe nur die z-Werte aus
as.numeric(scale(Punktwerte))
## [1] -1.6183421 0.2418212 -0.6882604 0.7998702 -0.1302114 -1.2463094
## [7] 0.4278376 -0.3162278 0.9858866 1.5439356
Die allgemeine Funktion zur Berechnung von Korrelationen heisst cor()
. Die Korrelation nach Pearson berechnet sich mit der Funktion cor()
und deren Parameter method="pearson"
.
# erzeuge Daten
<- c(2 , 12 , 7 , 15 , 10 , 4 , 13 , 9 , 16 , 19)
Lesetest <- c(3 , 14 , 9 , 17 , 12 , 4 , 16 , 12 , 18 , 20)
Rechtschreibung
# Pearson Maßkorrelationskoeffizient
cor(Lesetest, Rechtschreibung, method="pearson")
## [1] 0.9884616
Mit der Funktion cor.test() kann direkt ein Siginifkanztest mitgefahren werden
# Pearson Maßkorrelationskoeffizient
# mit Signifikanztest
cor.test(Lesetest, Rechtschreibung, method="pearson")
##
## Pearson's product-moment correlation
##
## data: Lesetest and Rechtschreibung
## t = 18.458, df = 8, p-value = 7.648e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9502085 0.9973659
## sample estimates:
## cor
## 0.9884616
Sollten fehlende Wert (NA
) enthalten sein, gibt der Befehl nur ein NA
zurück.
# Pearson Maßkorrelationskoeffizient
# mit Datensatz "pf8", da sind NAs enthalten!!!
cor(pf8$Alter, pf8$Größe, method="pearson")
## [1] NA
Mit dem Parameter use="complete.obs"
(nutze nur vollständige Beobachtungen) können wir dies beheben.
# Pearson Maßkorrelationskoeffizient
# mit Datensatz "pf8", verwende nur "komplette" Daten (ohne NA)
cor(pf8$Alter, pf8$Größe, method="pearson", use="complete.obs")
## [1] -0.1067484
Für die Korrelationsberechnung nach Spearmen (Spearman’s \(\rho\)) wird der Parameter method
auf spearman
gesetzt.
# Spearman's Korrelationsberechnung
cor(Lesetest, Rechtschreibung, method="spearman")
## [1] 0.9969651
Auch hier müssen NA
s mit dem Parameter use="complete.obs"
unterdrückt werden.
# Spearman's Rho
# mit Datensatz "pf8", verwende nur "komplette" Daten (ohne NA)
cor(pf8$Alter, pf8$Größe, method="spearman", use="complete.obs")
## [1] -0.05920716
Auch für Spearman’s Rho kann ein Signifikanztest mitgefahren werden, indem cor.test()
aufgerufen wird.
# Spearman's Korrelationsberechnung
# mit Signifikanztest
cor.test(Lesetest, Rechtschreibung, method="spearman")
## Warning in cor.test.default(Lesetest, Rechtschreibung, method = "spearman"):
## Kann exakten p-Wert bei Bindungen nicht berechnen
##
## Spearman's rank correlation rho
##
## data: Lesetest and Rechtschreibung
## S = 0.50076, p-value = 3.698e-10
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.9969651
Die Warnmeldung kann ignoriert werden, der p-Wert wird in der Ausgabe angezeigt.
Da cor.test()
ein Objekt der Klasse Liste
zurückliefert, kann auf die einzelnen Komponenten des Tests zugegriffen werden.
# schreibe Testergebnis in Variable "test"
<- cor.test(Lesetest, Rechtschreibung, method="spearman")
test
# zeige nur p-Wert an
$p.value test
## [1] 3.698093e-10
# zeige nur Teststatistik an
$statistic test
## S
## 0.5007599
# zeige nur Spearmans's Rho an
$estimate test
## rho
## 0.9969651