GNU R: Deskriptive Statistik

Aus Wikibooks

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]