Crashkurs Datenanalyse mit R (2024)

Nicht jeder liebt Datenanalyse und Statistik… in gleichem Maße. Das ist zumindest meine Erfahrung aus dem Unterricht Crashkurs Datenanalyse mit R (1) Crashkurs Datenanalyse mit R (2). Crashkurse zu R sind vergleichbar zu Crahskursen zu Französisch - kann man machen, aber es sollte die Maxime gelten “If everything else fails”.

Dieser Crashkurs ist für Studierende oder Anfänger der Datenanalyse gedacht, die in kurzer Zeit einen verzweifelten Versuch … äh … einen grundständigen Überblick über die Datenanalyse erwerben wollen.

Ok, also los geht’s im Schweingalopp durch die Datenanalyse Crashkurs Datenanalyse mit R (3) Crashkurs Datenanalyse mit R (4).

Bevor wir uns die Schritte näher anschauen, ein paar Worte zur Software.

Programme

Wir brauchen zwei Programme.

  • R
  • RStudio

Wenn R installiert ist, dann findet RStudio R auch direkt. Wenn alles läuft, sieht es etwa so aus:

Crashkurs Datenanalyse mit R (5)

Erweiterungen

Außerdem brauchen wir diese Pakete für R:

  • tidyverse
  • mosaic

Crashkurs Datenanalyse mit R (6) Um einen Befehl zu verwenden, der nicht im Standard-R, sondern in einer Erweiterung von R (“Paket”) wohnt, müssen sie dieses Paket erst starten (laden). Dazu können Sie den Befehl library verwenden. Oder Sie klicken den Namen des Pakets hier an:

Crashkurs Datenanalyse mit R (7)

Crashkurs Datenanalyse mit R (8) Um ein Paket zu laden, muss es installiert sein. Klicken Sie auf den Button “Install” unter dem Reiter “Packages” in RStudio:

Crashkurs Datenanalyse mit R (9)

Starten Sie jetzt die beiden Erweiterungen (per Klick oder mit folgenden Befehlen).

library(mosaic)library(tidyverse)

Crashkurs Datenanalyse mit R (10)

Lizenz: André D Conrad, CC BY SA 3.0 De, https://de.wikipedia.org/wiki/Peter_Maffay#/media/File:Peter_Maffay.jpg

Man kann (wenn man will) die Datenanalyse in sieben fünf Brücken oder Schritte einteilen, angelehnt dem Song von Peter Maffay “Über sieben Brücken musst du gehen”.

Crashkurs Datenanalyse mit R (11)

Der einfachste Weg, Daten einzulesen, ist über den Button “Import Dataset” in RStudio.

Crashkurs Datenanalyse mit R (12)

So lassen sich verschiedene Formate - wie XLS(X) oder CSV - importieren.

Crashkurs Datenanalyse mit R (13) Beim Importieren von CSV-Dateien ist zu beachten, dass R davon von us-amerikanisch formatierten CSV-Dateien ausgeht. Was heißt das? Das bedeutet, das Spaltentrennzeichen (delimiter) ist ein Kommma ,. Deutsch formatierte CSV-Dateien, wie sie ein deutsch-eingestellltes Excel ausgibt, nutzen aber ein Semikolon ; (Strichpunkt) als Spaltentrennzeichen.

Ggf. müssen Sie also in der Import-Maske von RStudio als delimiter ein semicolon auswählen.

Crashkurs Datenanalyse mit R (14)

Alternativ können Sie natürlich eine XLS- oder XLSX-Datei importieren.

Crashkurs Datenanalyse mit R (15) Am einfachsten ist es, XLSX-Dateien zu importieren.

tidy data - Tabellen in Normalform

Damit Sie in R vernünftig mit Ihren Daten arbeiten können, sollten die Daten “tidy” sein, d.h. in Normalform. Was ist Normalform? Betrachten Sie folgende Abbildung:

Crashkurs Datenanalyse mit R (16)

Die goldene Regel der Normalform einer Tabelle lautet also:

In jeder Zeile steht eine Beobachtung (z.B. Person). In jeder Spalte eine Variable (z.B. Geschlecht). In der ersten Zeile stehen die Spaltennamen, danach folgen die Werte. Sonst steht nichts in der Tabelle.

Crashkurs Datenanalyse mit R (17) Falls Ihre Daten nicht in Normalform sind, sollten Sie diese zunächst in Normalform bringen.

Crashkurs Datenanalyse mit R (18) Der einfachste Weg (von der Lernkurve her betrachtet, nicht vom Zeitaufwand), Daten in Normalform zu bringen, ist sie in Excel passend umzubauen.

Beispiel für Daten in Nicht-Normalform

Sie denken, dass Ihre Daten immer/auf jeden Fall in Normalform sind? Dann scheuen Sie sich mal dieses Bild an:

Crashkurs Datenanalyse mit R (19)

Textkodierung in UTF-8

Falls Sie RStudio oder ein beliebiger Texteditor irgendwann fragt, wie die Textdatei kodiert sein soll, wählen Sie immer “UTF-8”. Googeln Sie bei Interesse, was da bedeutet.

Der Schritt des Aufbereitens ist häufig der zeitintensivste Schritt. In diesem Schritt erledigen Sie alles, bevor Sie zu den “coolen” oder fortgeschrittenen Analysen kommen. Z.B.

  • prüfen auf Fehler beim Daten einlesen (und korrigieren)
  • Spaltennamen korrigieren
  • Daten umkodieren
  • Fehlende Werte verarzten
  • Komische Werte prüfen
  • Daten zusammenfassen
  • Zeilenmittelwerte bilden
  • Logische Variablen bilden

Auf Fehler prüfen

Crashkurs Datenanalyse mit R (20) Ein häufiger Fehler ist, dass die Daten nicht richtig eingelesen werden. Zum Beispiel werden die Spaltentrennzeichen nicht richtig erkannt. Das kann dann so aussehen.

Crashkurs Datenanalyse mit R (21)

Unter “delimiter” in der Maske können Sie das Trennzeichen anpassen.

Crashkurs Datenanalyse mit R (22) “Deutsche” CSV-Dateien verwenden als Dezimaltrennzeichen ein Komma; englisch-formatierte CSV-Dateien hingegen einen Punk. R geht per Default von englisch-formatierten CSV-Dateien aus. Importieren Sie eine deutsch-formatierte CSV-Datei, müssen Sie das Dezimaltrennzeichen von Hand ändern; es wird nicht automatisch erkannt.

Crashkurs Datenanalyse mit R (23) Unter “locale” können Sie das Dezimaltrennzeichen anpassen.

Spaltennamen korrigieren

Spaltennamen müssen auch “tidy” sein. Das heißt in diesem Fall:

  • keine Leerzeichen
  • keine Sonderzeichen (#,ß,ä,…)
  • nicht zu lang, aber trotzdem informativ

Spaltennamen sollten nur Buchstaben (ohne Umlaute) und Ziffern enthalten.

Crashkurs Datenanalyse mit R (24) Für Textdaten in den Spalten sind diese Regeln auch sinnvoll.

Umkodieren

Gerade bei der Analyse von Fragebogendaten ist es immer wieder nötig, Daten umzukodieren. Klassisches Besispiel: Ein Item ist negativ kodiert. Zum Beispiel das Item “Ich bin ein Couch-Potato” in einem Fragebogen für Extraversion.

Nehmen wir an, das Item “i04” hat die Werte 1 (“stimme überhaupt nicht zu”) bis 4 (“stimme voll und ganz zu”). Kreuzt jemand das Couch-Potato-Item mit 4 an, so sollte er nicht die maximale Extraversion-Punktzahl (4), sondern die minimale Extraversion-Punktzahl (1) erhalten. Also

1 --> 42 --> 33 --> 24 --> 1

Am einfachsten ist dies zu bewerkstelligen mit folgendem R-Befehl:

meine_tabelle$i04_r <- 5 - meine_Tabelle$i04

Rechnet man 5-i04 so kommt der richtige, “neue” Wert heraus.

Zur Erinnerung:

  • $ ist das Trennzeichen zwischen Tabellennamen und Spaltenname.
  • <- ist der Zuweisungsbefehl. Wir definieren eine neue Spalte mit dem Namen i04_r. Das r soll stehen für “rekodiert”, damit wir wissen, dass in dieser Spalte die umkodierten Werte stehen.

Fehlende Werte

Der einfachste Umgang mit fehlenden Werten ist: nichts machen. Denken Sie nur daran, dass viele R-Befehle von Natur aus nervös sind - beim Anblick von fehlenden Werten werden sie panisch und machen nix mehr. Zum Beispiel der Befehl mean. Haben sie fehlende Werte in ihren Daten, so verwenden Sie den Parameter na.rm = TRUE. na steht für “not available”, also fehlende Werte. rm steht für “remove”. Also mean(meine_tabelle$i04_r, na.rm = TRUE).

Crashkurs Datenanalyse mit R (25) Der R-Befehl summary zeigt Ihnen an, ob es fehlende Werte gibt:

summary(meine_daten).

Komische Werte

Hat ein Spaßvogel beim Alter 999 oder -1 angegeben, kann das Ihre Daten ganz schön verhageln. Prüfen Sie die Daten auf komische Werte. Der einfachste Weg ist, sich die Daten in Excel anzuschauen. Cleverer ist noch, sich Zusammenfassungen auszugeben, wie der kleinste oder der größte Wert, oder der Mittelwert etc., und dann zu schauen, ob einem etwas spanisch vorkommt. Diagramme sind ebenfalls hilfreich.

Logische Variablen bilden

Sagen wir, uns interessiert welches Auto mehr als 200 PS hat; wir wollen Autos mit mehr als 200 PS vergleichen (“Spass”) mit schwach motorisierten Autos (“Kruecke”). Wie können wir das (einfach) in R erreichen? Logische Variablen sind ein einfacher Weg.

mtcars$Spass <- mtcars$hp > 200

Dieser Befehl hat eine Spalte (Variable) in der Tabelle mtcars erzeugt, in der TRUE steht, wenn das Auto der jeweiligen Spalte die Bedingung (hp > 200) erfüllt. Schauen Sie nach.

favstats(mtcars$Spass)
## Warning in fav_stats(x, ..., na.rm = na.rm): Auto-converting logical to## numeric.
## min Q1 median Q3 max mean sd n missing## 0 0 0 0 1 0.21875 0.4200134 32 0

Daten zusammenfassen: Deskriptivstatistik

Deskriptive Statistik ist letztlich nichts anderes, als Daten geschickt zusammenzufassen.

Praktisch sind es meistens Spalten, die zu einen Zahl zusammengefasst werden.

Crashkurs Datenanalyse mit R (26)

Schauen wir uns das mal mit echten Daten an. Der Datensatz “mtcars” ist schon in R eingebaut, so dass wir in nicht extra laden müssen. Ganz praktisch.

summary(mtcars)
## mpg cyl disp hp ## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0 ## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5 ## Median :19.20 Median :6.000 Median :196.3 Median :123.0 ## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7 ## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0 ## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0 ## drat wt qsec vs ## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000 ## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000 ## Median :3.695 Median :3.325 Median :17.71 Median :0.0000 ## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375 ## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000 ## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000 ## am gear carb Spass cyl_f ## Min. :0.0000 Min. :3.000 Min. :1.000 Mode :logical 4:11 ## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000 FALSE:25 6: 7 ## Median :0.0000 Median :4.000 Median :2.000 TRUE :7 8:14 ## Mean :0.4062 Mean :3.688 Mean :2.812 NA's :0 ## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000 ## Max. :1.0000 Max. :5.000 Max. :8.000

Hilfe zu diesem Datensatz bekommen Sie so:

help(mtcars)

Crashkurs Datenanalyse mit R (27) mit help(Befehl) bekommt man Hilfe zu einem Befehl oder einem sonstigen Objekt (z.B. Datensatz).

Numerische Variablen

Der einfachste Weg, um Deskriptivstatistik für eine numerische Variable auf einen Abwasch zu erledigen ist dieser Befehl:

favstats(mtcars$mpg)
## min Q1 median Q3 max mean sd n missing## 10.4 15.425 19.2 22.8 33.9 20.09062 6.026948 32 0

Der Befehl favstats lässt auch Subgruppenanalysen zu, z.B. um Männer und Frauen zu vergleichen:

favstats(mpg ~ cyl, data = mtcars)
## cyl min Q1 median Q3 max mean sd n missing## 1 4 21.4 22.80 26.0 30.40 33.9 26.66364 4.509828 11 0## 2 6 17.8 18.65 19.7 21.00 21.4 19.74286 1.453567 7 0## 3 8 10.4 14.40 15.2 16.25 19.2 15.10000 2.560048 14 0

Dabei ist mpg die Variable, die sie vergleichen wollen (Spritverbrauch); cyl die Gruppierungsvariable (Anzahl der Zylinder). Gruppierungsvariable bedeutet hier, dass den Spritverbrauch zwischen 4,6 und 8-Zylindern vergleichen wollen.

Nominale Variablen

Eine Häufigkeitstabelle für eine nicht-metrische Variable lässt über den Befehl table erstellen.

Aber zuerst wandeln wir eine unserer metrischen Variablen in eine nominale um:

my_cars <- mtcarsmy_cars$cyl_f <- factor(mtcars$cyl)my_cars$Spass <- my_cars$hp > 200

factor wandelt eine metrische (numerische) Variable in einen nominale Variable um; nominale Variablen nennt man in R auch “Faktor”. Um den “originalen” Datensatz nicht zu überschreiben, packen wir alles in eine Kopie mit dem Namen my_cars.

table(my_cars$cyl_f)
## ## 4 6 8 ## 11 7 14

Aha, 14 Autos in unserer Tabelle haben also 8 Zylinder.

Brechen wir jetzt die Auszählunng noch mal auf in “Spass” vs. “Krücke”.

table(my_cars$cyl_f, my_cars$Spass)
## ## FALSE TRUE## 4 11 0## 6 7 0## 8 7 7

Zeilenmittelwerte bilden

Bei Umfragen kommt es häufig vor, dass man Zeilenmittelwerte bildet. Wieso? Man möchte z.B. in einer Mitarbeiterbefragung den “Engagementwert” jedes Beschäftigten wissen (klingt einfach gut). Dazu addiert man die Werte jedes passenden Items auf. Diese Summe teilen Sie durch die Anzahl der Spalten

Crashkurs Datenanalyse mit R (28) Zeilenmittelwerte bilden Sie am einfachsten in Excel.

In R können Sie Zeilen einfach mit dem + Zeichen addieren:

meine_tabelle$zeilenmittelwert <- (meine_tabelle$item1 + meine Tabelle$item2) / 2

Ein Bild sagt bekanntlich mehr als 1000 Worte. Betrachten Sie dazu “Anscombes Quartett”:

Crashkurs Datenanalyse mit R (29)

Diese vier Datensätze sehen ganz unterschiedlich aus, nicht wahr? Aber ihre zentralen deskriptiven Statistiken sind praktisch gleich! Ohne Diagramm wäre uns diese Unterschiedlichkeit nicht (so leicht) aufgefallen!

Zur Visualisierung empfehle ich das R-Paket ggplot2. Es wird mit geladen, wenn Sie tidyverse laden.

Es gib einen recht einfachen Befehl in diesem Paket, qplot. Bei qplot geben Sie folgende Parameter an:

  • X-Achse (x): Welche Variable (Spalte in ihrer Tabelle) soll auf der X-Achse stehen?
  • Y-Achse (y): Welche Variable (Spalte in ihrer Tabelle) soll auf der Y-Achse stehen?
  • Daten (data): Wie heißt ihre Datentabelle?
  • Geom (geom): Welche Art von Bildchen wollen Sie malen (z.B. Punkte, Boxplots, Linien, Histogramm…)`

Darüber hinaus verkrafter der Befehl noch viele andere Schnörkel, die wir uns hier sparen. Interessierte können googeln… Es ist ein sehr mächtiger Befehl, der sehr ansprechende Diagramme erzeugen kann.

Probieren wir’s!

qplot(x = hp, y = mpg, geom = "point", data = mtcars)

Crashkurs Datenanalyse mit R (30)

Easy, oder?

Ein anderes Geom:

qplot(x = factor(cyl), y = mpg, data = mtcars, geom = "boxplot")

Crashkurs Datenanalyse mit R (31)

Beachten Sie, dass qplot nur dann mehrere Boxplots zeichnet, wenn auf der X-Achse eine nominal skalierte Variable steht.

Crashkurs Datenanalyse mit R (32) Eine metrische Variable wandeln Sie in eine nominal skalierte Variable um mit dem Befehl factor(meine_metrische_variable).

Oder mal nur eine Variable:

qplot(x = hp, data = mtcars, geom = "histogram")

Crashkurs Datenanalyse mit R (33)

Crashkurs Datenanalyse mit R (34) Geben wir keine Y-Variable an, nimmt qplot eigenständig die Häufigkeit pro X-Wert!

Crashkurs Datenanalyse mit R (35) Tauschen Sie mal “histogram” mit “density”!

Modellieren hört sich kompliziert an. Für uns hier heißt es vor allem ein inferenzstatistisches Verfahren anzuwenden.

Crashkurs Datenanalyse mit R (36) Das Schweizer Taschenmesser und den Modellierungsverfahren ist die Regressionsanalyse. Man kann sie für viele Zwecke einsetzen.

Wann welchen Test?

Es gibt in vielen Lehrbüchern Übersichten zur Frage, wann man welchen Test rechnen soll. Googeln hilft hier auch weiter. Eine Übersicht findet man hier: http://www.methodenberatung.uzh.ch/de/datenanalyse.html.

Wie heißt der jeweilige R-Befehl?

Wenn man diese Befehle nicht häufig verwendet, ist es schwierig, sie auswändig zu wissen. Googeln Sie. Eine gute Übersicht findet sich hier: http://r-statistics.co/Statistical-Tests-in-R.html.

Regression

Weil die Regression so praktisch ist, hier ein Beispiel.

lm(mpg ~ cyl, data = mtcars)
## ## Call:## lm(formula = mpg ~ cyl, data = mtcars)## ## Coefficients:## (Intercept) cyl ## 37.885 -2.876

lm heißt “lineares Modell” - weil man bei der (normalen) Regression eine Gerade in die Punktewolke der Daten legt, um den Trend zu abzuschätzen. Als nächstes gibt man die “Ziel-Variable” (Output) an, hier mpg. Dann kommt ein Kringel ~ gefolgt von einer (mehr) Input-Variablen (Prädiktoren, UVs). Schließnoch muss noch die Datentabelle erwähnt werden.

Das Ergbebnis sagt uns, dass pro Zylinder die Variable mpg um knapp 3 Punkte sinkt. Also: Hat die Karre einen Zylinder mehr, so kann man pro Galone Sprit 3 Meilen weniger fahren. Immer im Schnitt, versteht sich. (Und wenn die Voraussetzungen erfüllt sind, aber darum kümmern wir uns jetzt nicht.)

Allgemein:

lm(output ~ input, data = meine_daten)

Easy, oder?

Man kann auch mehrere Prädiktoren anführen:

lm(mpg ~ cyl + hp, data = mtcars)
## ## Call:## lm(formula = mpg ~ cyl + hp, data = mtcars)## ## Coefficients:## (Intercept) cyl hp ## 36.90833 -2.26469 -0.01912

Dazu werden die durch + getrennt. Die Ergebnisse zeigen uns, dass die PS-Zahl (´hp´) kaum Einfluss auf den Spritverbrauch haut. Genauer: Kaum zusätzlichen Einfluss auf den Spritverbrauch hat. Also Einfluss, der über den Einfluss hinausgeht, der schon durch die Anzahl der Zylinder erklärt werden würde. Es ist also praktisch wurscht, wie viel PS das Auto hat, wenn man den Verbrauch schätzen will - Hauptsache, man weiß die Anzahl der Zylinder.

Vorhersagen

Man kann die Regression nutzen, um Vorhersagen zu treffen. Sagen wir, unser neuer Lamborghini hat 400 PS und 12 Zylinder. Wie groß ist wohl der Spritverbrauch laut unserem Regressionsmodell?

Als Vorbereitung speichern wir unser Regressionsmodell in einer eigenen Variablen:

mein_lm <- lm(mpg ~ cyl + hp, data = mtcars)

Dazu nimmt man am besten den Befehl predict, weil wir wollen eine Vorhersage treffen:

predict(mein_lm, data.frame(cyl = 12, hp = 400))
## 1 ## 2.083329

Aha. Pro Gallone kämmen wir 2 Meilen. Schluckspecht.

Visualisierung des Modells

Schauen wir uns das Modell mal an, damit es nicht so theoretisch ist. Wie gesagt, ein Regressionsmodell ist nichts anderes als eine Trendgerade in einer Punktewolke.

Crashkurs Datenanalyse mit R (37) Gerade sind durch Achsenabschnitt (engl. “intercept”) f(x=0) und Steigung (englisch: “slope”) definiert. Der Steigungswert ist die Zahl, die der lm-Befehl für den Prädiktor ausspuckt

qplot(x = cyl, y = mpg, data = mtcars, geom = "point") + geom_abline(slope = -2.9, intercept = 38)

Crashkurs Datenanalyse mit R (38)

Kommunizieren soll sagen, dass Sie Ihre Ergebnisse anderen mitteilen - als Student heißt das häufig in Form einer Seminararbeit an den Dozenten.

Einige Hinweise:

  • Geben Sie nicht alle Ergebnisse heraus. Ihre Fehler müssen niemanden interessieren.
  • Die wesentlichen Ergebnisse kommen in den Hauptteil der Arbeit. Interessante Details in den Anhang.
  • Der Mensch ist ein Augentier. Ihr Gutachter auch. Achten Sie auf optisch ansprechende Darstellung; schöne Diagramme helfen.
  • Dozenten achten gerne auf formale Korrektheit. Das Gute ist, dass dies relativ einfach sicherzustellen ist, da auf starren Regeln basierend.

Tabellen und Diagramme

Daten kommunizieren heißt praktisch zumeist, Tabellen oder Diagramme zu erstellen. Meist gibt es dazu Richtlinien von Seiten irgendeiner (selbsterannten) Autorität wie Dozenten oder Fachgesellschaften. Zum Beispiel hat die APA ein umfangreiches Manual zum Thema Manuskripterstellung publiziert; die deutsche Fachgesellschaft der Psychologie entsprechend. Googeln Sie mal, wie in ihren Richtlinien Tabellen und Diagramme zu erstellen sind (oder fragen Sie Ihren Gutachter).

Für Fortgeschrittene: RMarkdown

Wäre das nicht cool: Jegliches Formatieren wird automatisch übernommen und sogar so, das ses schick aussieht? Außerdem wird Ihr R-Code und dessen Ergebnisse (Tabellen und Diagramme oder reine Zahlen) automatisch in Ihr Dokument übernommen. Keine Copy-Paste-Fehler mehr. Keine händisches Aktualisieren, weil Sie Daten oder die vorhergehende Analyse geändert haben. Hört sich gut an? Probieren Sie mal RMarkdown aus :one_up:.

Glück auf Crashkurs Datenanalyse mit R (39)

Hier finden Sie einen Überblick an einige “Lieblings-R-Befehle”.

Crashkurs Datenanalyse mit R (2024)
Top Articles
Latest Posts
Article information

Author: Moshe Kshlerin

Last Updated:

Views: 5979

Rating: 4.7 / 5 (57 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Moshe Kshlerin

Birthday: 1994-01-25

Address: Suite 609 315 Lupita Unions, Ronnieburgh, MI 62697

Phone: +2424755286529

Job: District Education Designer

Hobby: Yoga, Gunsmithing, Singing, 3D printing, Nordic skating, Soapmaking, Juggling

Introduction: My name is Moshe Kshlerin, I am a gleaming, attractive, outstanding, pleasant, delightful, outstanding, famous person who loves writing and wants to share my knowledge and understanding with you.