GNU R: Deskriptive Statistik
Dieses Kapitel gibt einen kurzen Überblick über gängige Verfahren der deskriptiven Statistik. Deskriptive Statistik versucht im wesentlichen die Eigenschaften einer großen Anzahl von Fällen in möglichst charakteristische Kennwerte zusammenzufassen.
Als Beispiel verwenden wir den Datensatz Bundesliga
im Paket wikibooks
:
library(wikibooks) data(Bundesliga)
Überblick über den Datensatz
[Bearbeiten]Wie class(Bundesliga)
zeigt, ist Bundesliga ein Objekt vom Typ data.frame. Ein Überblick über die enthaltenen Variablen liefert:
R> names(Bundesliga) [1] "Saison" "Spieltag" "Datum" [4] "Anpfiff" "Heim" "Gast" [7] "Tore.Heim" "Tore.Gast" "Tore.Heim.Halbzeit" [10] "Tore.Gast.Halbzeit"
Einen ersten Eindruck über den ganzen data.frame
liefert str(Bundesliga)
hinsichtlich der Variablentypen und summary(Bundesliga)
hinsichtlich deren typischen Ausprägungen.
Mittelwert, Extremwerte und Streuung
[Bearbeiten]Mittelwerte
[Bearbeiten]Angenommen uns interessieren zunächst die Tore pro Spiel (also der Tore der Heim- und Gast-Mannschaft zusammen):
R> tore <- Bundesliga$Tore.Heim + Bundesliga$Tore.Gast
Das arithmetische Mittel (durchschnittliche Anzahl an Toren pro Begegnung) errechnet sich dann als
R> mean(tore) [1] 3.0991
Den Zentralwert (Median) als ebenfalls gebräuchlicher Mittelwert kann auch für ordinale Daten berechnet werden und liefert den Wert, der die 50% kleineren von den 50% grösseren Variablenwerte trennt:
R> median(tore) [1] 3
Die Methode des Median lässt sich durch Quantile beliebig verallgemeinern:
R> quantile(tore,c(0,0.5,1)) 0% 50% 100% 0 3 12 R> quantile(tore,seq(0.1,by=0.1)) 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 1 2 2 2 3 3 4 5 6 12
Was war die geringste (Minimum) und höchste Zahl (Maximum) an Toren in einem Spiel?
R> cat( min(tore), max(tore) ) 0 12
Minimum und Maximum liefert auch die Funktion range
.
Wie im Kapitel Umgang mit Datensätzen beschrieben können wir uns die entsprechenden Fälle jederzeit anzeigen lassen:
Bundesliga[tore==max(tore),]
Streuung
[Bearbeiten]Die Spannweite zwischen höchstem und niedrigstem Wert erhält man durch:
diff ( range (tore ) )
Das gebräuchlichste Maß für die Streuung einer Variablen ist die Varianz:
In Bezug auf unser Beispiel errechnet sich die Varianz entsprechend als:
R> (sum( (tore-mean(tore) ) ^2) )/(length(tore) ) [1] 3.4091
Natürlich verfügt über diese Standardfunktion. Allerdings berechnet die Funktion var
die inferenzstatistische, davon abweichend definierte Variante der Varianz:
Somit ermitteln wir die deskriptive Varianz am einfachsten mit:
R> var(tore) * (length(tore)-1) / length(tore) [1] 3.4091
Das selbe Problem ergibt sich hinsichtlich der Standardabweichung, die als Quadratwurzel der eben berechneten Varianz definiert ist. Die Funktion sd
liefert nur die inferenzstatistische Variante.
Daher empfiehlt sich bei häufigem Gebrauch die Definition folgender Funktionen:
varianz <- function(x) {n=length(x) ; var(x) * (n-1) / n} stdabw <- function(x) {n=length(x) ; sqrt(var(x) * (n-1) / n)}
Damit kann die (deskriptive) Standardabweichung leichter berechnet werden:
stdabw(tore) [1] 1.8464
Häufigkeitstabellen und Prozenttabellen
[Bearbeiten]Die Funktion table
fasst verschiedene Kategorien zusammen und erstellt daraus eine Häufigkeitstabelle:
R> table(tore) tore 0 1 2 3 4 5 6 7 8 9 10 11 12 880 1627 3057 2670 2438 1319 828 358 146 44 24 10 5
Die entsprechende Prozentwert-Tabelle erhält man, wenn man die Absolutwerte durch die Gesamtzahl der Begegnungen (=Länge des Vektors Tore) teilt und mit 100 multipliziert. Der Übersichtlichkeit halber runden wir mit round noch auf 2 Nachkommastelle:
R> round( table(tore) / length(tore) *100 ,2) tore 0 1 2 3 4 5 6 7 8 9 10 11 12 6.56 12.14 22.80 19.92 18.19 9.84 6.18 2.67 1.09 0.33 0.18 0.07 0.04
Eine schöne Formatierungsalternative stellt auch die Funktion describe
zur verfügung, wenn das Paket Hmisc
installiert wurde:
R> describe(tore) tore n missing unique Mean .05 .10 .25 .50 .75 .90 .95 13406 0 13 3.099 0 1 2 3 4 6 6 0 1 2 3 4 5 6 7 8 9 10 11 12 Frequency 880 1627 3057 2670 2438 1319 828 358 146 44 24 10 5 % 7 12 23 20 18 10 6 3 1 0 0 0 0:
Mehrdimensionale Häufigkeitsverteilungen
[Bearbeiten]Die Funktion table(Zeilenvariable,Spaltenvariable,weitere Dimensionen) erstellt auch konditionale Häufigkeitstabellen. Damit lassen sich zum Beispiel die Tore in Abhängigkeit von der Saison darstellen. Eine andere Möglichkeit ist ftable
, die auch die Formelnotation
(abhängige Var. ~ 1. unabhäng. + 2. unabhäng. + ...
)
akzeptiert:
ftable(tore~Saison,data=Bundesliga) tore 0 1 2 3 4 5 6 7 8 9 10 11 12 Saison 1963/1964 13 19 45 46 49 30 20 10 4 1 1 1 1 1964/1965 12 26 46 56 42 29 18 4 3 3 1 0 0 1965/1966 21 39 65 59 43 41 19 12 1 3 2 1 0 [...]
Gruppenspezifische Auswertung von Variablen
[Bearbeiten]Angenommen uns interessiert die mittlere Anzahl geschossener Tore pro Saison. Mit der Funktion tapply(VARIABLE, GRUPPENVARIABLE, FUNKTION)
ist dies besonders einfach zu berechnen.
tapply(tore, Bundesliga$Saison, mean)
Dabei ist das erste Argument die betrachtete Variable (Anzahl der geschossenen Tore) und das zweite Argument die Variable nach der gruppiert werden soll (Saison). Als 3. Argument kann eine beliebige Funktion bestimmt werden. Das Ergebnis ist im Falle der Funktion mean
ein benannter Vector:
1963/1964 1964/1965 1965/1966 2.229167 1.945833 2.009804 [...]
Inhaltsverzeichnis[Bearbeiten]
|