6 Tutorial 6: Deskriptive Statistik

In Tutorial 6 lernen Sie:

  • wie Sie sich die deskriptive Statistik für Daten ausgeben lassen können
  • wie Sie Daten zu einem höheren Level aggregieren können

Bitte arbeiten Sie dafür weiter mit dem fiktiven Datensatz aus Tutorial 5: Daten_Tutorial 5.csv. Laden Sie diesen bitte aus OLAT herunter (via: Materialien / Datensätze für R).

Der Name der Datei lautet: Daten_Tutorial 5. (Achtung, nicht den Datensatz zur Aufgabe 5 aus Versehen wählen, der dort auch hochgeladen ist!) Es geht um den Datensatz OHNE den Anhang “Aufgabe”.

Zur Erinnerung: Der Datensatz sah folgendermassen aus:

## 'data.frame':    1000 obs. of  6 variables:
##  $ Alter     : int  38 55 43 53 65 60 38 35 48 64 ...
##  $ Land      : Factor w/ 4 levels "Deutschland",..: 1 4 2 3 1 4 2 3 1 4 ...
##  $ Vertrauen : int  3 2 2 3 3 2 2 1 2 2 ...
##  $ Geschlecht: Factor w/ 2 levels "männlich","weiblich": 2 1 NA 1 2 1 1 2 1 1 ...
##  $ Medium    : Factor w/ 4 levels "Internet","Internet-Medien",..: 1 1 3 3 4 4 1 2 2 2 ...
##  $ X         : logi  NA NA NA NA NA NA ...

Bild: Datensatz für Tutorial 5

6.1 Deskriptive Statistik

Sie können sich in R sehr einfach die wichtigsten deskriptiven Werte zu Ihren Variablen ausgeben lassen. Folgende Befehle können Sie dafür nutzen.

6.1.1 Absolute Werte

Die absoluten Werte, d.h. wie oft eine individuelle Ausprägung vorkommt, können Sie sich über den Befehl table() ausgeben lassen. Das ist v.a. für nominale Variablen sinnvoll, wo Sie eher daran interessiert sind, wie oft eine Ausprägung vorkommt:

## 
## Deutschland  Frankreich     Italien     Schweiz 
##         250         250         250         250

Sie können sich auch für z.B. metrische Variablen wie das Alter das Vorkommen aller Ausprägungen dieser Variablen ausgeben lassen (auch wenn diese Information in vielen Fällen wenig nützlich sein wird):

## 
## 18 19 20 21 22 23 24 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 50 51 52 53 54 55 56 57 
## 17 23 22 16 16 22 13 20 26 20 18 18 18  9 25 26 12 19 19 14 24 25 21 18 19 30 20 22 29 24 16 24 29 29 14 17 20 21 26 25 
## 58 59 60 61 62 63 64 65 
## 26 19 19 20 25 19 20 26

6.1.2 Mittelwert, Standardabweichung, etc.

Für metrische Variablen ist der Mittelwert vermutlich interessanter:

## [1] 42.392

Vielleicht interessiert Sie aber auch der Medien:

## [1] 43

Sie können sich auch die Standardabweichung ausgeben lassen:

## [1] 13.73904

… oder die kleinsten (Minimum) oder grössten Werte (Maximum), die diese Variable in Ihrem Datensatz annimmt:

## [1] 18
## [1] 65

Eine schöne Zusammenfassung aller dieser und weiterer Werte bietet der Befehl summary():

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   31.00   43.00   42.39   54.00   65.00

Zuletzt wissen Sie ja bereits, wie Sie diese Werte auf beliebig viele Nachkommastellen runden - mit dem Befehl round():

## [1] 42.392
## [1] 42.39
## [1] 42.392

6.1.3 Fehlende Werte

Zuletzt wollen Sie ggf. wissen, wie viele fehlende Werte Sie in Ihren Daten haben. Ob Sie fehlende Werte haben, können Sie mit dem bereits bekannten Befehl is.na() herausfinden. Probieren wir den Befehl einmal für die Variable “Geschlecht”:

##    [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE
##   [20] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE
##   [39]  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
##   [58] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
##   [77] FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
##   [96]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
##  [115] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE
##  [134]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE
##  [153] FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
##  [172]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
##  [191] FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
##  [210] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
##  [229] FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
##  [248] FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE
##  [267] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
##  [286] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE
##  [305]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE
##  [324] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE
##  [343] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
##  [362]  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
##  [381] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE
##  [400] FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE
##  [419] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE
##  [438]  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
##  [457] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE
##  [476]  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE
##  [495] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE
##  [514]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE
##  [533]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE
##  [552]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE
##  [571]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE
##  [590] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [609]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
##  [628] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [647] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
##  [666] FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE
##  [685]  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [704] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [723]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE
##  [742] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
##  [761] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE
##  [780] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE
##  [799] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE
##  [818] FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE
##  [837] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
##  [856]  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE
##  [875] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
##  [894] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
##  [913]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
##  [932]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
##  [951]  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
##  [970]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE
##  [989] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE

Wir sehen also: Wir haben fehlende Werte. Aber so gross wie unser Datensatz ist, macht es keinen Sinn, die Summe der fehlenden Werte so auszuhälen. Die Summe an fehlenden Werten für diese Variable gibt uns R folgendermassen aus:

## [1] 341

Zuletzt können wir uns einen Datensatz data_subset herausgeben lassen, der uns nur die Fälle ausgibt, in denen wir in keiner der Variablen fehlende Werte haben. Das geht über den Befehl complete.cases():

## [1] 0

6.2 Daten zu einem höheren Level aggregieren

In manchen Fällen kann es sein, dass wir Fälle auf einer höheren Ebene aggregieren, d.h. verdichten, wollen. Beispielsweise könnte es sein, dass wir uns das durchschnittliche Alter der Befragten nach Land ausgeben lassen wollen und diese Werte in einem neuen Objekt in R abspeichern wollen. Hierfür nutzen wir wieder dplyr:

  • Wir definieren das Objekt, den Dateframe data, mit dem wir arbeiten wollen: data
  • Wir übergeben dieses Objekt an unsere Pipeline: %>%
  • Wir aggregieren die Daten auf einer höheren Ebene, hier das Land, dem die individuellen Befragten angehören: group_by(Land)
  • Wir erstellen eine neue Variable, hier Alter, die den Mittelwert je Land angibt: summarise(Alter = mean(Alter)
  • Wir weisen das Ergebnis einem neuen Objekt data_Land zu: data_Land <-

In R sieht diese Befehlkette so aus:

Der erzeugte Datensatz gibt uns dann den Mittelwert des Alters der Befragten nach Land aus:

## # A tibble: 4 x 2
##   Land        Alter
##   <fct>       <dbl>
## 1 Deutschland  43.0
## 2 Frankreich   41.3
## 3 Italien      43.1
## 4 Schweiz      42.3

Wir überprüfen unser Ergebnis, indem wir uns den Mittelwert des Alters in unserem ursprünglichen Datensatz ausgeben lassen. Dabei berechnen wir den Mittelwert für die Variable Alter, aber jeweils nur für die Zeilen, die bei der Spalte Land das jeweilige Land vermerkt haben. Hier runden wir das Alter auf zwei Nachkommastellen, ähnlich wie in unserem Datensatz data_Land:

## [1] 43
## [1] 43
## [1] 41.3
## [1] 43.1
## [1] 42.3

6.3 Take Aways

  • Deskriptive Statistik: Befehle: table(), mean(), median(), sd(), summary(), is.na(), sum(is.na(x)), complete.cases(), round()
  • Objekte aggregieren: Befehle: group_by, summarize

6.5 Benotete Aufgabe in R I

Achtung: Bei der nachfolgenden Aufgabe handelt es sich um die erste benotete Aufgabe in R. D.h., die fristgerechte Abgabe dieser Aufgabe ist eine benotete Leistungsabgabe.

Bitte bearbeiten Sie die Aufgabe in Gruppen von mind. 2 und maximal 3 Personen. Die Gruppenaufteilung wird in der Seminarsitzung vom 03. November vorgenommen.

Bitte nutzten Sie für die Abgabe Ihrer Lösungen das vorgegebene R-Template (via OLAT: Materialien / Templates/ Benotete Aufgabe in R_1.R).

Laden Sie für die Bearbeitung der Aufgaben den folgenden Datensatz herunter: Daten_Tutorial 6_Aufgabe.csv (via OLAT: Materialien / Datensätze für R).

Es handelt sich hierbei um den Datensatz, den Sie schon aus der Aufgabe zu Tutorial 5 kennen. Der Datensatz ist eine fiktive Umfrage unter Bürger:innen, für die folgende Variablen erfasst wurden:

  • das Alter
  • das Geschlecht
  • das monatliche Einkommen
  • der Schulabschluss
  • das Land, in dem der/die Befragte lebt

6.5.1 Aufgabe 6.1

Lesen Sie den Datensatz ein. Lassen Sie sich folgende deskriptive Statistiken herausgeben:

  • wie oft welcher Schulabschluss im Datensatz vorkommt (absolute Anzahl)
  • den Mittelwert des Alters der Teilnehmer:innen (gerundet auf 1 Nachkommastelle)
  • die Standardabweichung des Alters der Teilnehmer:innen (gerundet auf 1 Nachkommastelle)

6.5.2 Aufgabe 6.2

Können Sie mit R berechnen, wie oft welcher Schulabschluss je Land vorkommt (in absoluten Werten)? Erstellen Sie einen neuen Dataframe mit dem Namen data2, in dem Sie die absolute Anzahl an Schulabschlüssen je Land abspeichern.

Tipp: Sie müssen sich die absolute Häufigkeit der Schulabschlüsse ausgeben lassen und diese als Dataframe abspeichern. Der Dataframe data2 soll drei Spalten (d.h., Variablen) beinhalten, die Spaltennamen “Land”, “Schulabschluss” und “absolut” tragen.

Achtung: Hier könnte googlen helfen, um herauszufinden, wie man Spaltennamen eines Dataframes setzt.

6.5.3 Aufgabe 6.3

Erstellen Sie einen neuen Dataframe mit dem Namen data3, der nur Teilnehmer:innen enthält, die weiblich sind und über 54, aber unter 68 Jahre alt. Lassen Sie sich dann die Anzahl Teilnehmer:innen ausgeben, indem Sie die Zeilen dieses Dataframes zählen.

Wichtig: Achten Sie darauf, dass Sie nur Teilnehmer:innen behalten, die sowohl Alter als auch Geschlecht angegeben haben, d.h. es sollten im Dataframe data3 keine fehlenden Werte bei diesen Variablen vorhanden sein.

6.5.4 Aufgabe 6.4

Bitte erstellen Sie einen neuen Dataframe data4, der nur für Befragte aus der Schweiz und Italien folgende Informationen enthält:

  • die absolute Anzahl an Schulabschlüssen (getrennt ausgewiesen für Schweizer und Italiener Befragte)
  • die relative Anzahl an Schulabschlüssen (getrennt ausgewiesen für Schweizer und Italiener Befragte)

Der endgültige Dataframe soll so aussehen:

Zu erstellender Datensatz in Aufgabe 6.5

Die Lösungen finden Sie bei Lösungen zu Tutorial 6.

Wir machen weiter: mit Tutorial 7: Funktionen & Bedingungen in R.